Prefer to listen? This article is also available as episode 4 of my podcast.
It's a few months ago. I'm enjoying my job and trying to bring value to my team. A high-visibility project comes up. Despite being unfamiliar with the framework we plan to use, I'm excited to work on this project. I set out to "learn by doing", implementing a chunk of the project with this framework. After reading some code, writing some new code by trial and error, and asking a lot of questions, I'm able to get this chunk finished. More exciting than that, my implementation serves as a model for much of the rest of the project. Being that I know the framework well at this point, I'm teaching the rest of the team how to use it. I love knowing that I'm bringing so much value to the team!
Then, I submit a piece of code for review. One of my team members notices a flaw in it. Immediately, my thoughts rush to how I can justify the flaw. Underlying this reaction is the belief that this flaw reveals my own incompetence. I start to type a response. But as I write, I realize that my coworker is right. I thought I knew everything there was to know about this framework, but clearly I don't. I delete my response and fix the problem instead.
Since then, I've found a healthier way to think of my work. Let's examine the origins of and problems with my initial belief so that we can find a healthier alternative.
The core belief I identify as an issue in the above story is a lack of separation between my work and my self. Creating software can be a deeply personal enterprise. When I'm in the zone, it can feel like the code I'm writing somehow emanates from my being rather than that I am actively writing it. Given this understanding, criticism of my work is also criticism of myself, my character, and my abilities.
This belief (though not one I consciously chose) is harmful. If criticism is painful, human nature says to avoid it. Unfortunately, avoiding criticism means avoiding learning because the best learning can come from making mistakes and fixing them.
We can choose a healthier relationship to our work. Specifically, I find it helpful to mentally separate my code from my sense of self. In other words, I avoid tying my ego up in my work outputs.
This mental model is more true to the realities of software development. On a daily basis, I am faced with countless constraints. Perhaps I must complete a task within a given timeframe. Maybe I have to use a specific tool. These constraints mean that the work I produce cannot be considered to be solely a reflection of my character or abilities. In some way, the work also embodies the constraints I was under while creating it. Given an infinite amount of time and resources, I'm sure all of us would create impeccable and beautiful software. However, in a world of constraints, our work is less likely to be perfect.
How can we rein in our ego? I've noticed that as soon as I am aware that my ego is flaring up, it's easy to see how silly I'm being. To this end, I've found two activities helpful: journaling and meditation. Journaling consists of sitting down in the evening a few times per week and writing about what has happened in the preceding few days1. By intentionally recalling and reviewing my actions, I'm able to be more objective in my view of myself.
Meditation also helps foster the lense of an unbiased observer. When I meditate, I get deliberate, intense practice at noticing my feelings. Bringing this awareness to the rest of my day becomes easier as I continue this practice. And this awareness allows me to notice when my ego acts up so that I can respond accordingly2.
When I'm able to separate my work from my self, I can respond more productively to criticism of my work. I can see that the criticism isn't aimed at me. Instead, something I produced was found to be lacking in some way. Previously, I might waste energy either beating myself up or trying to justify a mistake. But now I can focus on making the necessary improvement.
I still love bringing value to my team. But I've realized how crucial it is to stay humble and how valuable it is to understand that my work is separate from my self. Making a mistake reveals not that I am incompetent, but that I'm human. And really, aren't we all?
1: If you're interested in journaling, I highly recommend Timothy Wilson's Redirect, which explores a bunch of interesting research in self narrative.
2: I'm sure there are other ways of increasing this kind of self-awareness. Let me know if you have any tips of what has worked for you in the past.