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.
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.