The eight factors of happiness for developers
I recently came across this sketchnote by Tanmay Vora, and it really resonated with me. As a developer it got me thinking about how this might translate into the life of a developer and our happiness. Based on this sketchnote here are the eight factors of happiness applied to developer life.
1. Resentment
Harboring resentment or anger toward another team member can be a significant source of unhappiness. In a previous position as a web developer, I worked with a senior engineer that I REALLY disliked. This team member would almost never let a pull request or design decision go unchallenged. Each interaction like this would lead to hours of what I call verbal judo in slack. This would bleed over into my life outside of work; I could never reconcile the fact that I let this other person get under my skin. My best defence was meditation and allowing this person to be a mentor of sorts. He allowed me to find my own flaws by what he brought out in me.
Another issue developers face is what I call “industry hate.” There is an undercurrent of resentment in the software development industry around hiring and the interview process that bemoans the fact that we truly are a skills first culture. This is a double-edged sword. On the one hand, you don’t have to have a CS degree or formal training to work as a developer and make great money doing it.
On the other hand, the interview process can feel biased toward pure engineering and that soft skills don’t matter. As much as the industry talks about empathy and mentoring, it seems like the only thing that truly matters is how quickly you can build and implement a B-tree search algorithm. For new developers, all you can do is focus on being as well rounded as possible and prepare as best you can for interviews. For more senior developers, as we become responsible for hiring, we can factor more soft skills and characteristics into our hiring practices.
Nursing a grudge against a colleague or project will only lead to unhappiness and unproductive hours. Finding processes or techniques to turn that negative energy into positive experiences will make you a better developer and a better you!
2. Not living in the past
Don’t dwell on that job that you didn’t get or that project that went bad. If we live in the past, we are doomed to repeat it. As developers, we need short memories and one of the best ways we learn is through failure.
I went through an interview process for a software engineer position a few years ago. This was a really good company with great benefits and a solid remote culture, which was important to me. After a couple of interviews and a coding challenge at home, the final step was an onsite coding day. Of course, this is a lot to take in. You have to take a day off work, fly to a new city and spend the night.
On the big day, after receiving the requirements and meeting with the team to game plan for the app, I proceeded to begin coding. The first few hours went well, but after getting stuck on a particular feature, I went down a rabbit hole that only led to wasted time and half-baked code. The day was not a disaster, but it also was not my best work. These words from the rejection email still haunt me:
Unfortunately, the hiring team has decided to move forward with other candidates. The team loved the energy and enthusiasm you brought to your code day—they really liked pairing with you and collaborating with you. However, for this role, we are looking to see a high level of fluency and deep understanding of the chosen tech stack. We’ve had a lot of interest in this spot, and with limited openings, we were only able to continue with a small number of folks who have been able to demonstrate that a bit more clearly.
High level of fluency and deep understanding!? Gah! As painful as that experience was, it taught me to be judicious with my time when working on time-sensitive projects. Sometimes it’s better to implement a minimum viable product to ensure its functionality first, then more sophisticated features if time allows.
Living in the past is stressful, unproductive and depressing. We all have setbacks, but turning your setbacks into lessons learned will allow you to mentor and be empathetic to others with similar experience as well as help you not repeat those same mistakes in the future.
3. Cooperate with life
The Serenity Prayer asks us to accept the things we cannot change, change the things we can, but also have the wisdom to know the difference. The whole “wisdom to know the difference” thing is the most challenging part of that axiom. Sometimes we have to know when to push back, but other times we should welcome change and see where it takes us.
A few years ago I was asked by my CEO to manage a Zoom Webinar initiative our organization was starting. Zoom Webinars? “But I’m a Web Developer,” I thought to myself. I seriously considered leaving this position. After much deliberation, I decided to approach this challenge with beginner’s mind and see where it would take me.
As it turned out, there were interesting programming challenges in this initiative. Clients needed to submit applications for webinars, so I incorporated Google Forms into the workflow. Rather than use the Zoom interface, I wrote our own internal web app using Zoom’s own API. After that, I used Google App Scripts to interface with the Google Form and the Zoom Web app so when users submitted a webinar request, it was automatically imported into our app for processing.
We never know what opportunities might be hiding behind a career change and being open to these changes can lead to new skills and growth. I’m so glad that I didn’t quit over this. By accepting this change, it gave me experience with technologies that I otherwise would not have had.
4. Stay engaged with the real world
As developers, it’s easy to withdraw into our own world. It’s often a reclusive profession, and without even trying, we can have very little interaction with others. But humans are social creatures. We get married and have kids, we go to church, the community center, or the gym. We do these things because when we interact with others, it makes our world better, and it makes us better.
I have been working remotely for about five years. When I first began, I worked from my home office 100% of the time. After about six months, I found myself in a rut and dreading the start of each day. I have a great space to work in, but it was getting stale and I needed a change. I am an adjunct community college instructor, and the college provides space for us to work and meet with students. I started going out to the college to work a couple of days a week.
Not only does it allow me to get out of the house, but I found the interaction with students and other instructors really energized me and replaced the “water cooler” time I had been missing since I started working remotely. Sure, there are more interruptions than at home, but the change of surroundings allows me to recharge my batteries and consequently, I have found that my time at home is way more productive. You can have this experience with a co-working space if you are remote or your local programming meetup. Even meeting with others once a month will get you thinking outside your world and widen your personal network.
This interaction with others can be especially helpful during times of stress. When we are stressed, we tend to withdraw and become more reclusive, so that is exactly when we need others around us. Don’t wait until we are at these low points to find interaction. Social networks and connections should be nurtured and made a part of our everyday lives so when the challenges do come, we have others to lean on and encourage us.
Meaningful involvement in activities outside your day job will keep your life interesting and give you new perspectives. These engagements will pay dividends in both your professional and personal life.
5. Love yourself (and others)
OK, as developers, talking about loving ourselves is way too sugary and it’s just not how we talk. Programming is hard and don’t let anyone tell you it’s not. The problem is coding is a technical skill and there are rock stars and ninjas, and there is the rest of us (I’m in this camp). We must have empathy for ourselves and others as we move around in this profession.
I was recently mentoring a student and we had a tough problem we couldn’t solve. I told the student “Well, if it were me, I would post a Stack Overflow question, so let’s do that.” The student looked mortified. He was terrified that someone would mock him or say that his question was dumb. I promised him that would not be the case and sat with him while he authored the question. Of course, he got multiple responses (none mocking him), one of which helped him solve the issue he was having.
Code reviews can also be a great opportunity to apply this practice. Strive for better code reviews and those that consider all factors around a pull request like the technical level of the submitter (Jr vs. Sr). We often consider our code as an extension of ourselves so it’s easy to take offense to a negative code review. The more compassionate and empathetic we can be with feedback, the better it will be received.
Interacting with our peers with empathy and love will make you and those around you more productive by raising your level of work satisfaction as well as helping others become more effective programmers.
6. Be virtuous
As engineers, we live in a highly technical environment so we think that gives us a pass on virtues like love, compassion, and empathy. No such luck! We are humans, not computers, and just because we program them doesn’t mean we should think like them. Look for opportunities in your work to cultivate old fashioned values like love, compassion, humor, and loyalty.
A few years ago, my organization had an all hands meeting. We broke out into small groups of four or five people and were asked to share something about us that motivates and informs our work everyday. Now you know how this goes when we hear something like this, we immediately think “Oh god…I how can I get out of this? I’ll fake a stomach ache and run to the bathroom!”
But this was truly a transformative experience for my group. The first person who shared talked about their family’s struggle with mental illness and how that impacts their work. That led to others in the group being open and honest about all kinds of things that we never get to talk about in a virtual environment.
Our team had this experience years ago, but it has really had a lasting positive effect on how we work together. Small insights into people’s pasts and their experiences impacts how we interact with one another and leads to greater trust and understanding of how and why people work the way they do.
7. Lower your expectations of yourself
Shoot for the moon, if you miss, at least you will be among the stars. We’ve all heard this a million times, but, as I said earlier, coding is hard, so I am going to propose that we cut ourselves some slack and don’t expect so much. Just by virtue of our chosen profession, we are overachievers and we make things doubly hard when we expect to progress too fast.
I am teaching a C++ class this semester, and it is a requirement for engineering students. It is the first and only programming class these students need to graduate. We just finished a chapter on loops, and I met with one student who was frustrated at what he perceived as his lack of understanding of nested loops. I shared with him that nested loops are not a trivial topic and many experienced programmers struggle with debugging them. This student’s expectation for himself was way higher than it needed to be for someone with no background in programming.
I see this a lot with new developers. It’s great to set the bar high for yourself, but the danger with this mindset is twofold. First, you run the risk of burning yourself out and driving yourself out of the profession and second, even if you stay in the field, you will be miserable! Who wants to work in a job that they think they suck at?
Being good at your job is a noble pursuit that we should all strive to achieve. But thinking we can all be Alan Turing, Steve Jobs, or <programming_hero> is a target that you will likely never hit. Rather, strive to be the best version of yourself everyday, and you may end up being a hero to someone else.
8. Serve something bigger than yourself
Self-centered and narcissistic people are the least happy people on the planet. The happiest people have found some balance between serving and caring for themselves and serving their family, their co-workers, and those in their community. I once heard someone describe the three pillars of human happiness as fulfilling the need for meaningful work, the need for lifelong connections, and the need to serve something bigger than yourself.
Serving something bigger than yourself can manifest itself in a number of ways. You might be able to fulfill this at your job. If you work for a non-profit, it might be at the core of your work. But even if at a for-profit company, there is plenty of meaningful work to go around. Healthcare, social media, and productivity software can all have a mission to aid society. If the bug you fix saves someone five minutes they can spend with their family, then that is truly meaningful work.
Outside of work, look for an opportunity to use your technical skills to help others. I have been maintaining my church’s website for almost a decade now. Doing content management is not my favorite kind of work, but it is satisfying to be able to help my church and my community.
In 2018 and 2019, I served as Director of Mentors for VetsWhoCode. There are a number of volunteer organizations like Code for America and Social Coder that have opportunities to use your technical skills to serve others. Another option is to get involved with your local coders meetup. Meetups love it when someone volunteers to give a talk, help organize the location, or bring in an outside speaker.
Serving a purpose or finding a mission bigger than yourself will allow you to be better at your craft, but it will also take you outside your comfort zone in ways you might not find at your day job. It widens your personal and professional contacts allowing you to mentor and be mentored by others. Finally, it makes the world a better place by giving organizations access to highly skilled talent that they otherwise might not.
That’s all for now. I hope this has given you some pointers on how to be a happy coder and to share that joy with others. I would love it if someone might create a sketchnote on these factors. If so tweet me at @marklocklear.
Happy Coding!
34 Comments
Love the post! – for someone like me who did get over most of the subjects mentioned here, by overcome those problems, happiness is possible.
The Best Comments
Feeling better that heard some
feeling returned back.
Sometimes on working almost nobody know about on their
response.
Great post, but on #5 (spouse caught this one) “way to sugary” should be “way too sugary”
Thanks for the catch, Kevin’s spouse.
Wow, lovely piece,
Have bn a victim in this, as a developer i think this is the best article everyone should read
When you open your personal page (https://stackoverflow.blog/author/mark-locklear/) the tab’s title says “Ryan Donovan, Stack Overflow Blog” instead of “Mark Locklear, …”. I guess some copy/paste was involved in the making…
Hi David,
Thanks for pointing this out. We recently implemented a Guest Author feature for our outside contributors to improve our security. I guess there’s still a couple kinks to work out.
Thanks, David, I will let the editor know.
Thanks !
Nice post!
Found a typo here: Don’t dwell on that job that you didn’t* get
Looks to be fixed now. Thanks!
I’m a scientist who learn to code on the fly (2 week crash course and a postdoc position based on data wrangling and analysis). Fast forward 13 years and I’m still learning and analyzing. I found all of these suggestions very applicable.
I especially like the emphasis on the beginner’s mind. One of the best coders I know prefaces his answers with “I’m just a hacker”. I find that keeping the “hacker” mindset helps me to find more solutions, since if something isn’t perfect, but done, it can be improved, but something that is perfect but mainly exists in your mind is much harder to improve.
Thanks for the comment Kathie! Yes, I think Beginners Mind is an often overlooked method for overthinking life. Sometimes vast experience can cause us to make things more complicated than they should be. Cheers!
This is a great post. I started out working remotely the moment I graduated. I enjoyed the freedom to work wherever and whenever I want. After three years, I was burned out and I dread writing another line of code. So I decided to apply for a position as a junior full-stack developer. It was a complete change of lifestyle. But It was something that I needed and it was worth it!
Nice thought Bahiyah! Yes, we should always be open to new opportunities. Sometimes even change just for the sake of change can be a good thing. Thanks!
So good to read this. Many points resonated with me, and to anyone reading this: you are not alone.
And above all, keep those compilation times short.
The post links to the artist’s twitter, but is missing a link to the source of the sketchnote?
Tanmay Vora’s sketchnote post: http://qaspire.com/2019/04/22/8-factors-of-happiness/
Tanmay Vora’s tweet about it: https://twitter.com/tnvora/status/1227111463652753409
Question: what the heck does this have to do with being a “developer”? This is more of “8 factors of happiness for {Insert Whatever Here}”
I’m looking for stuff like “No Matter What He or She Does, Don’t Shoot Your Boss (a nasty email)”
Unca Alby, I agree! I think these principals really are universal. I just gave examples from my experiences as a developer, but I could have also written the same article from the perspective of my four years in the military, or as a mechanic…ect. It would be awesome if there were a dozen articles out there like this; each written by someone from a different profession.
I was thinking more about this over the weekend and how the more “stuff” you do in life, the more its all about the same things. I wrote this article on the experience I had painting my own car and what that has to do with software development:https://medium.com/@marklocklear/5-things-i-learned-painting-my-own-car-386ec4934cfb.
The biggest source of unhappiness that I have heard (and realized) is the non-impactful nature of the work developers do. If you think about it, unless you are working in the health industry or something similar, your work doesn’t really matter. We are making consumers lazier and lazier, and contributing negatively to the humankind.
In 20 years when we look back we realize that we don’t matter at all, because in our peak years we just sat there and wrote code (and made good money) thinking we were successful. We may have occasionally donated to charities or volunteered in our community, but the bulk of our energy was spent on something that exploited the human nature, and made them unsocial, in order to make money. In the end, we made no meaningful connections and left very few (if any) positive impressions on others (and almost certainly caused harm to people).
In 20 years when money fades as a core life motivator we begin to resent our life choices. At that time in order to suppress our regrets we begin to occupy ourselves with gardening, loud motorbikes, and red sports cars. And, of course, with religion and charity.
The writing is on the wall 🙂
Mossi, you are too funny! Your post made me chuckle out loud, because we have all shared the “what is the point of doing this?” feeling at one time or another, on one project or another, or dealing with a particular person/group/job whatever. Most times its simply getting over this overwhelming sense of futility that keeps us moving forward.
I totally get where you’re coming from… motorbikes, sports cars… these are the fruits of our labors. Most of us could not afford them when we started our professions, but the money we made allowed us to have them. For some, they were the goal of why we work as long and as hard as we do.
In the end, we are BLESSED to do what we do, we get paid for what we have a PASSION to do, and maybe what we do individually does not seem important, but we are all contributing to the GREATER GOOD, with every line of code we write. Or not… sometimes we just like to hack just for the pure black comfort in it!
Keep the faith Mossi, enjoy the golden years your code hath wrought for you!
Mossi, this is crazy-talk.
As developers we can help people improve in their profession, find new professions, improve in their hobby, find new hobbies, encourage them to develop good habits like regularly exercising or saving money every month, find new real-world communities, discover new books, music, films.
We can help businesses be more efficient and more effective.
We can help children (and adults) learn.
We can help societies connect and flourish.
We are in positions where we can contribute more to helping more people and more groups of people self-actualize than almost any other professional.
None of this is low impact. We are the lucky recipients of a genuinely wonderful gift.
Completely agree, thanks for the article.
I love your post . Thank you for sharing your thoughts:)
Thanks Cristina! 🙏
I love programmers more than programs, and am ultimately in the business for people in general. But however idealistic my mind may be, my heart regularly betrays me and I end up finding all eight of these categories relevant. Thanks for the article.
I agree Matt! Relationships (personal and professional) are orders of magnitude greater than any code we write. Cheers!
really nice ! Wisdom is so much cheaper and quicker than having to learn via experience.
Thanks so much for the great post.
Truth be told, I get fairly cynical, when I see stuff like this (For example, all the people on LinkedIn that repost inspirational quotes, but then act in a manner that belies their adherence to said inspiration), but something tells me that it should not applied to this post, and I appreciate it.
I have some life experience that doesn’t actually have much to do with tech that gives me a rather different perspective than you’d find in your average geek.
This experience requires me to live life by a very strict code of personal ethics and behavior. It mostly helps me to be a lot happier, but I do expect a great deal of myself. I set a high bar, and strive to meet that bar. I have learned not to beat myself up, if I don’t meet the bar (I often do meet it, however -I’ve learned to set an achievable high bar).
The trick is not to cast that bar on others. If I can accept others for who they are, and where they are in their life journey, it helps me to be a lot happier (and more popular).
I believe that our personal relationships are the most important artifacts of our lives.
And quick note: I am quite aware of what it is to be part of something bigger than I am, and have done a fair bit to help make the world a better place. It has been a real pleasure to find a way to combine my life experience with technology.
Thanks for sharing your thoughts on this Chris. This profession (tech in general) needs people with all sorts of backgrounds and I am glad you are a part of it. I agree we can only set the bar for ourselves and have to resist trying to hold others to our own standard. I hope my article did not come across as preachy. I did not mean it that way. Cheers! 🍻
‘Do not love the post, but I get it. Cyber space is not a “service business.” No one alive today is at fault for the inflexibility of Cyber space. It is man made. The nature of the of the ingredients do not allow my endless desires for customization. I shall turn off what I can in order to curtail time hogging “conveniences.” If the whole business were to disappear, I would be inconvenienced & probably never adjust. Maybe. The relief from no internet might give me new time to fix the clothing & linens I need to customize. I finally learned there are no vacuums that suck up what I need removed from carpets. I am unburdened without carpets! Wet & dry mops are faster & easier to use.
the last is the best … ill try to implement it.