Programming is one of the best and worst things I do. It can leave me satisfied and energized one day, then drained and demoralized the next. It can be difficult to regulate my emotions when every day can start carefree in the morning and devolve into chaos by the afternoon. I can become so emotionally disoriented at the end of a session that it feels like I could have been taking mind-altering substances! None of this is a good recipe for a contented mind, so I have put effort into shifting my perspective on work to make it as emotionally effortless as possible.
I spent the better part of a year in Afghanistan a lifetime ago, searching for IEDs and occasionally being shot at. Of course, deploying to a conflict zone was full of excitement and stress, but it was different. I was scared at times, even grim, but at no time did I ever doubt my sanity in the way I have when I am troubleshooting multiple overlapping issues in a production environment.
Collaborating with a team can also be challenging. It involves giving and accepting criticism and learning to compromise. Even if there are no interpersonal issues, communicating with other humans and reaching a consensus takes effort. Many programmers did not enter the profession due to a burning desire to work with people, so I think it is ironic that the human element is so present and difficult when developing software. I want to express a few things I have learned so far, and I hope I will learn many more as time goes on. I write this blog to my past self as much as anyone else.
It’s OK if you are wrong
“Argue like you’re right and listen like you’re wrong.”
– Adam Grant
Asserting something and then being corrected can be scary and humiliating if you take the correction that way. But, on the other hand, it can also be a magnificent learning opportunity and a chance to build trust with the person who corrected you. Anyone who knows something you don’t has something that they can teach you, and I don’t think that it is controversial to say that just about everyone knows something that you do not.
Take the criticism, hold it, look at it, and consider it. Then thank the person for taking the time to give you that feedback. Know that it is not a personal failure but a chance to grow as a developer and a person.
Because the other option is being wrong, not knowing, and never learning from the experience.
Listen to Adam Grant’s WorkLife podcast episode on criticism
It’s OK if you don’t know the answer
There is so much to know about software development and so much more emerging daily that I think it would be fair to describe it as a Cambrian explosion. Your job is not to know everything but to figure the next thing out. Say that you don’t know, and say it with confidence. You are not an imposter; you are a human with all the limitations that come with it. Nevertheless, you know that you can learn it.
The written word makes us sound like jerks
Text communication on remote teams is problematic because it strips out all the body language and subtle gestures we rely on to determine the intent of the person we are talking to. When conversing in person, our subconscious works hard to interpret what the other person is feeling, and it has almost nothing to work with when that person is in a Slack thread or email message. So all we are left with is cold, emotionless words that are easy to take the wrong way.
When receiving words that offend, give the other party the benefit of the doubt and ask for clarification. Either you will find out that your perception did not align with their intention, or you will force them to sit in their negativity a wee bit longer. Don’t forget that communicating is a skill; they might be on the learning path too.
For our part, make sure to overcommunicate emotion a little, and use emoticons when appropriate. Criticize code and compliment the author. Thank people and appreciate them publically when they make your life easier. Building up a bank of positivity will pay dividends next time you accidentally misstep at the keyboard.
Your code is not precious, and perfection is not the goal
“Murder your darlings”
– Attributed to just about everyone everywhere
For the sake of your team, be willing to compromise on your code. Finding places to move forward and improve the codebase is more important than ideals. As soon as there is more than one person on a team, it is no longer possible for one person to be able to define what perfect is.
Make things better one step at a time. The standard is not perfection but instead improving what we touch daily. Forget about the end goal and instead immerse yourself in the process. Enjoy the feeling of day-to-day craftsmanship and discard your dreams of the perfect codebase.
Ego Is the Enemy is a great read
Demonstrating beats dictating
“Be the change you want to see in the world.”
– Arleen Lorrance
It’s worth considering giving up on trying to convince people. Instead, show them. Don’t use logic or arguments. Instead, demonstrate the benefits and see if they emulate it. I have, on multiple occasions, just started doing the right thing instead of wasting time and breath telling people they should be doing it. Nothing much happened for months, but the change was subtle and powerful. I gradually changed reality by doing it myself, and after many moons, it was no longer a new or outrageous idea. I had successfully normalized the idea, and others were willing to accept or try it themselves. Some people even told me they came up with the idea a few months later!
A previous team lead phrased it as “be the change you wish to see in the world.”
And after all, if it is a good idea, it is still worth doing if only you are doing it.
Attempting to change people is frustrating and pointless. Most of the time, you fail, and even if you manage to force your opinion on someone else, it can often leave them resentful and likely to drop it at the next opportunity.
Be kind and thank people
It’s easy to forget that people on their journeys surround us. Take the time to thank people when they do something good. It builds goodwill and encourages good behaviour. It costs nothing and just generally feels good. It’s a great way to practice gratitude, which is enormous for preventing negative thinking. I think it might benefit the giver even more than the receiver.
Finally, enjoy the journey
Working as a software developer can be an excellent way to drive personal growth. It forces us to be both cerebral while interacting with computers and empathetic when working with others. The above is by no means a complete list, but it has helped me thrive in situations that would have otherwise left me miserable. With the right mindset, we can build character as we collect a paycheque.