Are All Software Engineers Imposters?
Why imposter syndrome affects so many in the software industry, and how to get over it
My first job as a software developer was eye-opening. Having not gone through a co-op program, I arrived in the workforce with zero real-world experience, fresh out of school, and pretty confident. I graduated from a great school with a Masters's degree in Computer Science and was ready to take on the world. Little did I know at the time, however, that my schooling didn’t at all prepare me for what was to come.
I was lucky enough to land a job at a great company and began immediately working on some of their hardest problems. As a result, my first few months felt like I was driving at highway speed into a brick wall. The problems we had to solve were unlike anything I’d seen in school. For example, during my first week at the company, my boss told me that the project I was assigned to might not even have a viable solution, as none of our competitors had successfully solved the problem yet, and the research community had only come up with “toy” solutions. As if the prospect of an unsolvable problem wasn’t enough, any solution we came up with would have to be surgically woven into a codebase that was over 10 million lines of C code. Gone were the days when a few hours of coding, or maybe an all-nighter, could knock out a solution. This was the real world.
To put my mind at ease, my boss gave me a pep talk:
“The work we do here is complex. There’s a lot to learn, not only about the problem you’re solving, but also about the underlying system. Nobody is expecting you to be productive in the near future. In fact, when I joined around 10 years ago, I wasn’t truly productive for 2 years! Every day of those two years, I was expecting my boss to walk into my office and tell me that I was fired. But that never happened.”
Clearly, this talk was meant to set my mind at ease, and it did for a while, but then after a few weeks of thinking about it I had an epiphany: “If my boss, one of the most successful people in the organization, thought that he’d get fired every day, I don’t stand a chance here!” Doubt had crept its way into my mind.
For the next several years I lived every day in fear, discounting all of my accomplishments and dwelling on all of the failures (of which there were many). To give you a sense of how bad it was, at one point my manager called me to his office, and as I walked there, I was convinced I was going to be fired (there had been some layoffs recently, and it seemed natural that I’d be part of one). You can imagine my absolute shock when he said that I was getting a pay increase as a reward for the great work I’d been doing!
How was that disconnect even possible? How could it be that my perception of myself (and my accomplishments) was so far removed from the perception that the company had of me? Clearly, I’d fooled them, but how? When I thought, would they finally uncover the fraud?
My imposter syndrome peaked with two events, which occurred in close succession after I had been with the company for a number of years. The first event was when I was promoted to Senior Engineer. When my boss congratulated me on the promotion, a promotion I was obviously not expecting, I tried to talk him out of it. I plainly asked if it was something I could turn down, which caught him off guard. After some time, he eventually convinced me that (a) if I turned down the promotion, I’d regret it, and (b) that I was ready (maybe even over-prepared) for the next level of my career.
The second event occurred when speaking with my mentor, a fellow employee whom I respected tremendously. In the midst of one of our many conversations about her current projects she mentioned that “things might be going well, but it’s hard for me to tell as I think everything I work on is going to fail due to my Imposter Syndrome.” Imposter Syndrome? What was that? This was my introduction to “Imposter Syndrome”, and finally I could put a name to something that had been afflicting me for the last decade.
Imposter Syndrome 101
Since that fateful conversation, I’ve done a bunch of reading into Imposter Syndrome, its causes, and prevalence. While there’s no unifying definition, Imposter Syndrome can be broadly summarized as a condition that prevents you from internalizing successes. The end result is that you feel like a constant failure, and a fraud. In terms of prevalence, research suggests that about 70% of people have felt like impostors for at least some part of their careers.
While 70% is certainly a big number, in talking with fellow software engineers, my anecdotal evidence suggests that among us, the rate may be much higher. While I haven’t opened up to that many people about my imposter syndrome, when I have with fellow software engineers, I’ve been uniformly told that they suffer from it as well. This led me to conduct some research of my own.
I recently polled a group of software engineers in my network and asked them the following question “Do you struggle with Imposter Syndrome?”. Here are the results:
I was floored when I obtained these results. Almost every single person in my network who responded (a full 96%) thinks of themself as an imposter. Now it’s certainly possible that this result is not representative of our industry as a whole. However, since this survey included engineers at various stages of their careers, I tend to believe that much more than 70% of software engineers deal with imposter syndrome.
The following week, I polled the same group of people and asked about the propensity of their imposter feelings.
I was hoping after I received the first result, that the imposter feelings in my network were infrequent, but that’s not the case — 85% of them feel like imposters at least once a month! This second result shocked me just as much as the first.
Why do Software Engineers feel like Imposters?
Software engineering is a perfect breeding ground for Imposter Syndrome for a number of reasons:
- The work we do is hard — Building complex software systems is very difficult. While you may be able to learn to code over a weekend, being able to write correct, performant, and maintainable code can take years of practice, long after you’ve mastered the basics of Computer Science theory in a 4-year undergraduate degree. Additionally, the problems we’re asked to solve can vary dramatically from day-to-day. One day you may be optimizing the performance of some code by removing serialization points, the next day you may have to debug some failing CI test case, or you’re fighting to figure out why some cloud VM is an order of magnitude slower than all the others. Each of these problems is difficult to solve on their own. Having to know how to solve all of them is what makes the life of a software engineer so mentally taxing.
- There’s a tendency to suffer in silence — In my experience engineers are rarely forthcoming with their struggles, in part because they don’t want to be perceived as struggling in the first place. On the outside it may look like all of your colleagues are churning out problem-free PRs one after another, but I can promise you that under the covers there is toil. Whether it’s some pesky test case that they can’t seem to get right, having to refactor code over and over again to get it to an ideal state, or spending way more time than anticipated understanding some part of the system that’s new to them, your fellow engineers are struggling too, they’re just not talking about it.
- We’re constantly being judged — Prolific software engineers will push out a PR several times a week. Some very prolific ones will get one (or more) out every day. With each of these PRs however, comes overt judging in the form of a code review. There’s a natural tendency, in the presence of such judging to question your competency.
Overcoming Imposter Syndrome
While I was riddled with Imposter Syndrome for the first decade of my professional career, over the last number of years I’ve learned to deal with it using some simple techniques. I still have episodes from time to time, but when they occur, I can shut them down fairly quickly using one of the following approaches:
- Talk about your struggles — Nobody wants to listen to a constant complainer so I’m not suggesting that you open every standup with a list of all of the things you can’t get right, or aren’t going your way. That being said, when you’ve solved a particularly grueling problem, talk about why it was so difficult with your colleagues. Explain to them the wrong turns that you took, and try and solicit feedback. You’re likely to find that in many cases, they’ve hit the same pitfalls as well, and just knowing that others are struggling in similar ways can make you feel less alone.
- Recognize when you’re most susceptible to Imposter episodes — For some people it’s Mondays. For others, it’s late at night, when they’re tired and there’s nobody around to help. Or when you’re in an area of the code you don’t know well. Or most certainly, when you’re starting an entirely new job. Start to take notes on when you’re feeling most like an Imposter and try to determine if there are any obvious patterns. Once you recognize the triggers, you may be better able to deal with the feelings as they arise, instead of leaving them to fester and build over time.
- Track your successes — One of the best ways I’ve found to deal with Imposter episodes is by reminding myself of my past successes. If you’re a professional software engineer you’ve likely solved a bunch of really difficult problems. You may have made it through a 4-year university program, and likely grueling interview processes. Once you landed your first job you continued to solve problem after problem as they came your way. But then, when you struggle with today’s problem, there’s a tendency to think “this one’s different. I don’t think I’ll be able to solve it this time.” What’s helped me in the past is documenting my successes so that when I’m in a particularly bad state, I am able to reflect on some of my past triumphs. To that end, I keep a “praise” email folder. Any time anyone sends me some form of validation or proof that I’ve done something well, I’ll add it to the pile and keep it for a rainy day. When I’m then presented with one of those “this time is different” problems, and I feel myself getting down, I will look over my past successes to build up my confidence. Sure, it may seem a bit gimmicky, but trust me, it works.
- Be lavish with your praise of others — Just as I use my “praise” folder to pick me up from time to time, others crave praise as well. I try to be as lavish with praise as possible (without being disingenuous), so that people feel appreciated when they’ve done something well (which of course, can help others fill their own “praise” folders). Especially as you become more senior in your role, where your words matter all the more, simply saying “Great job on this PR”, or “I’m very impressed with how you’ve grown over the last 6 months” can really make the difference between someone falling deeper down the Imposter hole, or beginning to climb out of it.
There’s no doubt that as engineers, we live in an industry riddled with Imposters. As you grow throughout your career, however, there are simple techniques you can adopt to help deal with these negative feelings and quash them relatively quickly as they crop up.
You should also realize that your feelings of being an imposter may never fully go away. I’ve had a good deal of success throughout my career, and still, there are times where I doubt myself. I’ve recently come to grips with the fact that those feelings of doubt will be around forever because as engineers, the work we do is hard, and when doing hard work, it’s human nature to feel like an Imposter from time to time. After significant reflection, I’ve actually come to take comfort in the fact that so many in our profession feel like Imposters. After all, if we’re all Imposters, then by definition none of us are.