As I’ve progressed through my career, I’ve experienced increasing imposter syndrome. It’s never gone away.
I understand this is a common feeling, particularly in software engineering. It’s called Imposter Syndrome because you feel like you are not qualified to do your job — like you’re pretending but no one has figured it out.
It didn’t start in my first or even second job.
However, even though I only had basic skills, and even though my company had to make careful plans for me to do any work, I thought I knew a lot. I completed my work quickly and with high-quality code. I also made a lot of side projects (they worked, too!).
Looking back, I realize I was at the peak of “Mount Stupid” in the Dunning-Kruger Effect. I was getting stuff done, so I thought I knew a lot. I had no idea how much I didn’t know yet.
After the “Mount Stupid” peak comes the “Valley of Despair.” This is where one goes after realizing ignorance. Accepting this was particularly painful for me, having spent quite a long time thinking I knew a lot. You see, my arrival to the valley was delayed for several years because I kept job-hopping before I could witness the consequences of my decisions.
I spent several years learning, working, delivering features, then hopping to a new job before I had to maintain or iterate on them. I worked for several years before I needed to significantly update a feature I built or before I needed to maintain a system and iterate on it over time. I just kept working on new projects — thinking I was doing a great job — but never seeing the consequences of my work.
Because I only saw the output, but never the long-term results, I built up high confidence in my ability to write software.
That all changed when I finally decided to stay at a job for more than a year.
The first year, like all the others, was excellent. I wrote a lot of code, designed features, and systems, and just generally got a lot done. I made significant improvements, fixed other people’s mistakes, and shipped great software. To be clear, I grew a big head and became quite proud of myself.
Sometime during my second year at that job, things started to change. We began revisiting some of the original projects I worked on. When we needed to update features, we often found it painful. Sometimes the code was hard to read; the systems were difficult to change without breaking; the database could not deal with the increasing number of users.
Now, some experienced engineers may, at this point, think, “this sounds like normal growing pains. Code doesn’t always scale or change as easily as one expects. That’s part of the job.” I’m inclined to agree (I did write that sentence, after all). However, I convinced myself otherwise. I believed I wrote code that would be easy to change and scale to any number of users. I built up a false picture of skill in my head.
So, where am I now? I’ll give myself some credit and say that I’m crawling out of the Valley of Despair, at least in some areas. However, I’m sure that I’ve only just entered the peak of Mount Stupid in others, and I’m confident I’m squarely at the bottom of the valley in others.
Overcoming vs. Embracing
But I also wonder how much it matters. Should I try to “overcome” my Imposter Syndrome? Or should I learn to embrace it instead?
To embrace Imposter Syndrome, I would accept that I am not, and perhaps will never be, fully competent at what I do. I would acknowledge that the depth of my knowledge is doomed to be superficial, at least for quite a long time.
If I did that, what would the consequences be?
First, I immediately need to give up any certainty that my intuition or experience will lead me to the “correct” decision.
Further, when debating decisions, I’ll need to suspect the validity of my “rational” or “logical” arguments, particularly if they rely on my experience or intuition.
I’d also need to prepare for the areas where my knowledge may fail me. More than that, I’ll become certain that my knowledge will fail me.
Giving Up Certainty
How many times have I said, “If they do X, then Y will happen” without any statistical evidence? Even if I had statistical evidence, would I phrase it in terms of probability, or would I still make an absolute claim? How often have I called a solution “wrong” without mathematical or logical proof?
Plenty of times, because I rely on my intuition and experience to guide my decisions.
I’ll be the first to admit that it sounds impractical and tiring to make every decision based on mathematical, statistical, logical proofs. I can’t imagine how I’d get through my daily tasks without allowing my intuition and experience to guide me.
Imagine every time at work — before writing down each line of code — conducting a complete logical or mathematical analysis. It would be impractical. Instead, I can fly through the procedure of Test Driven Development, cranking out tests and code in quick succession. Does this mean that I’m not thinking carefully about my decisions? No. It means I’m allowing the part of my brain that thinks quickly and relies on past experiences to guide me.
Here’s where I think things need to change.
When I stop writing that code, when I finish typing that architecture design, instead of thinking, “I’m done, I’ve got everything covered.” I can choose to think, “Based on my experiences and connections that came quickly to mind, I’ve covered a potentially small, but possibly sufficient set of scenarios.”
Why is this important? Because it could lead to two outcomes.
First, I immediately doubt the legitimacy of my work. This may kick in the slow part of my brain, the part that thinks critically to disprove what I perceive as reality.
Next, when that comment comes in on the Google Doc or Github PR, pointing out the obvious flaw in my logic, I’m no longer devastated or even annoyed. I think, “Of course, I missed this! I probably missed far more.” Suddenly, I’m grateful for the feedback, rather than defensive, because I never held the idea that my work was perfect.
How Logical Am I?
I’ve always felt pride in how logical I am. People tell me that I’m not fun to debate because I’m “too logical.” (That’s a compliment, right?)
So, what happens when I begin suspecting the validity of my logical arguments? Do I lose a core part of who I am?
In some senses — mostly my feelings — I do. But in another, I wonder if it was there to begin with.
Daniel Kahneman’s (now almost ten years old!) book, Thinking, Fast and Slow, explains how our brains are constantly manipulated in ways we don’t expect. For example, he cites a study showing that we may be less generous when we unconsciously notice a money symbol floating on a nearby computer screen. He cites another study showing that judges give harsher punishments based on how close or far they are from their lunch break. He also spends a significant chunk of the book showing how we misunderstand risk and probability in grand ways.
It may be questionable how precise his examples were, but if the conclusions hold up, even on some small scale, there’s reason to be suspicious of the “logic” I use daily.
When I think back to the most challenging moments of my career, it involved realizing the architecture I advocated for wasn’t scaling. I think of when my team revisited a feature, only to find out that no one was using it — the features I suggested were of no use to our customers. These moments challenged how I thought of my abilities.
Of course, I wouldn’t have made these decisions if I thought they were wrong. Knowing that I might be wrong, that my logic isn’t as sound as I thought it was, won’t necessarily change my decisions. Instead, it prepares me for the inevitable failures.
They’re no longer surprises. They’re expected and embraced.
Recognizing Lack of Depth
Previously, to combat my Imposter Syndrome, I spent time and energy convincing myself that I knew my stuff. When I felt discouraged, I’d remind myself of my accomplishments.
Now, I try to focus on recognizing the areas of knowledge that I use and understanding where I lack depth. Here are some examples.
I’m married, but I have very little knowledge of the psychology of anger and conflict management. Instead, I only know of some strategies taught to me by others and from experience.
In parenting, I have very little knowledge of child development, both for health and learning. Instead, I only know of the food I see in grocery stores and activities that I can find from google, youtube, or my wife (who has a degree in this and a better depth of knowledge here).
When I was an audio engineer, mixing for live bands, I had very little knowledge of the physics of audio waves or the technology that allowed me to manipulate them. Instead, I only knew how to use my ear to find what sounds good, and I only knew how to do what the soundboard manual (ok, let’s be honest, Youtube videos) told me.
As a software engineer, I have little depth of knowledge about how computer memory, networking, or processing works. Worse, I have little depth of knowledge of the abstractions that hide those details from me. Instead, I only know how to use the abstractions and how they are supposed to work.
Understanding the areas where I lack depth is crucial because it reduces the surprise when my knowledge fails me. When my kids aren’t reacting to my parenting strategies the way I hoped or aren’t picking up a skill as fast as I’d like, I no longer jump to questioning my ability as a parent. Instead, I understand where and how my knowledge is limited.
When I put on my Software Engineer hat, and my system design doesn’t work as well as I thought it would, I no longer have to question my career choice. Instead, I can remind myself that my knowledge is limited in that area and push myself to learn more.
Lately, I’ve been pushing myself to create and launch a product. I want to move beyond “side projects” into “side business.” I decided to pursue building Purchase Plan as a real app and business.
I’ve been working for tech companies (big and small, new and old) for a few years now. That might tempt me to think that I have a great deal of expertise about them. But as I wade into this space, it’s worth noting the areas where I don’t know much.
I know hardly anything about the legal implications of privacy and usage policies.
I know very little about marketing and advertising (even though I’ve been building marketing tools for years!)
I know very little about user acquisition and user research.
Even though I have a lot of design opinions, I know very little about UX and visual design.
I could keep this list going for quite a while, but you get the point. When things get tough, I won’t need to doubt my abilities as an entrepreneur because I am already sure my skills are lacking. Instead, I can prepare for the areas where my knowledge will fail me. When things get tough, I’ll know where to seek help or spend time learning new skills.
A Parenting Example
I’m embarrassed to admit it, but I was hyper-judgmental of parents before I became one. I can’t tell you how many times I said to my wife, “All they have to do is ____.” I wasn’t even a parent yet, and I was already at the peak of mount stupid. I knew next to nothing about parenting.
What happened when I had kids? Well, let me tell you, all those things that I thought you “just have to do, it’s so simple” either don’t work or aren’t as easy as they seem.
When my kids weren’t behaving the way I expected, do you know what I did? I doubted my ability to be a parent. I sometimes doubted my choice to become a parent. I compared myself to other parents with “good” kids. I developed parenting imposter syndrome.
I wouldn’t say I’m a great parent yet, but acknowledging my lack of knowledge has led me to pick up books like How to Talk When Kids Won’t Listen, which have (so far) proved to be helpful and effective. If I hadn’t acknowledged my deficiency, who knows how hard things would be right now.
Too much negativity?
One question I’m left with is, how much negativity can a person handle? Can I truly walk around convinced that I know next-to-nothing (but perhaps still enough to get stuff done)? Will this cripple me in other — different — ways than imposter syndrome?
I think one potential issue is confidence. Acknowledging your faults can be helpful for humility but not for getting promotions. A counterbalance is to recognize the limited knowledge of others.
Recognizing the relative knowledge of others reminds me of how I’ve come to think about interviews.
I used to look for the “perfect” or “ideal” candidate. Now, I try to calibrate based on the quality of candidates currently in the hiring pipeline, then recommend hiring the best person I can find once I understand the range of skills available.
Notice the shift from binary, “smart” and “not smart” or “qualified” and “not qualified” to comparing relative merits.
So, I don’t need to think I’m a perfect or even the best engineer to ask for a promotion. I need to understand my skills and knowledge relative to those around me. In other words, I judge myself relatively, with an understanding that there are unseen (or purposely hidden) areas of ignorance in everyone I encounter (myself included).
The real question here is: where should confidence come from? Should it come from a, perhaps fake, sense of expertise, accomplishment, infallibility?
I think there’s another option. I can be confident in my ability to learn, be flexible, change paths in the face of obstacles, and be curious.
So, if you’re out there struggling with imposter syndrome, remember that you’re not alone. We’re all impostors in our way. Maybe acknowledging ignorance will bring freedom from the pressure to compete, be the best, and be better than everyone else.
“OK, based on my experiences and connections that came quickly to mind, I’ve covered a potentially small, but possibly sufficient set of scenarios. Hopefully it’s enough to help someone experiencing imposter syndrome, but I’m probably forgetting some important implications of all this. Acknowledging this, I’ll be ready for critical feedback.”