Wikipedia defines impostor syndrome as

a psychological pattern in which an individual doubts their skills, talents or accomplishments and has a persistent internalized fear of being exposed as a “fraud”.

I’m occasionally insecure about my skills as a software developer, but haven’t had a problem with impostor syndrome specifically. Why not? Perhaps my answers as well as a few other thoughts will help others who experience that anxiety.

I Am What I Am, We Are What We Are

I try to assess myself realistically and never, ever represent myself as having skills or experience I don’t or knowing more than I do. This is reflected on my resumes, where I divide my skills into three categories:

  • Primary - this is what I really know well.
  • Secondary - I’m not an expert, but if I have to work with this I’m not starting from zero.
  • Other - I’ve worked with this. I might have forgotten everything, but I’m sure I could do it again.

(An upside is that I can list lots of varied tools and technologies under “Other” that would seem out-of-place
in a non-categorized list of skills.)

Perhaps Angular is on my list of secondary skills. If someone sees that along with the rest of my resume, talks to me, and concludes that I can work on their Angular project, what do I have to worry about? I’ve set the right expectation. That’s two-way trust. They trust me because I’m honest. I trust that they know how to evaluate me, and I trust that
they’ll be okay if I’m not an instant Angular expert. That trust is invaluable.

This also takes all the stress out of interviews. I don’t study trivia questions before interviews. Ask me what you want to ask and I’ll try to answer. Ask me weird algorithm questions and I’ll tell you I don’t know the answers. If I ever need to know them I’ll look them up. If that’s good enough, great. If not, them I’m not the right person and you shouldn’t hire me. Ask me increasingly difficult questions about what I do know, and you’ll find where my knowledge ends.

Wit that mindset the dichotomy of skilled developer vs. impostor disappears. I’m just a person who knows some things and doesn’t know others. Hopefully what I have learned demonstrates what I can learn. (The list of things I don’t know even though they’re commonplace is massive, and I might get stressed if I thought about it, so I don’t.)

I’m sure this is harder for developers finding their first jobs. I moved into development internally within a company so I’ve never had that experience. I hear it’s awful, and I’m sorry. The industry needs you, and people know that we need you. We’re just really bad at cultivating your skills. I think everyone figures someone else will do it, and then they can hire you away after you get some experience. My advice: Play that game. Take any first job you can get however you can get it. If it’s great, stick around. If it’s an awful place to work, use them to get some experience and then move on. It gets so much better.

Replace Unhealthy, Negative Thoughts

We may have a tendency to put ourselves down. Maybe we acquired it early in life, even in childhood. We think that demeaning ourselves proves that we don’t have a big ego, and in turn no one else will have
cause to burst our bubble.

Or we might fear the Dunning-Kruger effect, which says that skilled people think they are unskilled and vice versa. (It doesn’t actually say that, but that’s the version we may have learned.) We worry that if we start to think of ourselves as skilled and experienced them the ghosts of Dunning and Kruger will curse us, poking us with pitchforks and putting defects in our code to humiliate us. (I don’t believe in ghosts and last I checked both Dunning and Kruger are alive, but it’s a fun mental picture.)

Either way, this goes back to the false dichotomy of expert vs. impostor. We don’t benefit by judging ourselves as good or bad. It means that unless we think very highly of ourselves (which might itself be a problem) we’ll see ourselves as deficient.

That’s not a healthy way to think about our skills or really anything. If we think bad thoughts about things we can’t control, we’re unhappy. If we think, “I’m a bad software developer,” or, “I’m an impostor and I’m going to get fired,” we’re not framing our concerns in terms of things we can control. What is a bad software developer and how do we go from being a bad one to a good one? I don’t know. Is a software developer really either good or bad? How do we evaluate that? We’re putting a label on ourselves with no way to take it off.

Let’s take a negative thought and reframe it, and see how something negative we can’t control becomes something neither negative nor positive, and likely something we do control.

Instead of

I’m a bad developer! I don’t know how to do anything.

Think

I don’t know how to do any front-end development. A good developer would know that.

That’s still wrong, but now that we’re putting our thoughts into more specific words we can evaluate them rationally. Is it actually true that we don’t know how to do any front-end development? Probably
not. We’re still judging what’s “good” and “bad” and we’re still describing something with no apparent way to control it.

So let’s try it one more time, more specific, less judgmental:

I don’t know how to use any front-end JavaScript frameworks. I wish I knew how to use at least one.

What just happened? First, the negativity is gone. We’re making a statement which we can rationally evaluate as true or false. Second, we can ask, is this something I control? If the answer is no then what’s the point in worrying about it? But in this case we can change it. We can decide to learn Angular or React or whatever. So now instead of a negative thought we’ve got something that we can choose to do or not do.

Changing our thoughts take practice. We probably won’t say this but we might think it:

Learning Angular will be hard and I won’t be able to do it.

Let’s evaluate that. Why would it be true? Have you ever learned anything, ever? If so, what is different about this? Are there only one or two geniuses in the world who understand Angular? No, thousands upon thousands of people have learned it. It might take some effort, but what evidence supports the idea that all those people can do something and you can’t? None. It’s not rational.

One more:

Okay, I’ll learn it, but I won’t be good enough at it.

Again, let’s evaluate it and see if it’s true. What happened the last time you learned Angular? Were you good at it? There was no last time. So what evidence do you have that you won’t be good at it? What is “good enough?” Thinking that we won’t be good at it is a choice. We’re not required to think that, are we? So if it’s up to us, why not think this instead:

Okay, I’ll learn it, and I’m going to be good at it!

Are you excited now? I am! Seriously, I am. That’s what positive thought does.

Something else changes when we replace good-or-bad judgements with factual thoughts. If we decide that we’re a bad developer or impostor, how do the skills we do have and the things we do know fit into that? They don’t. That all-or-nothing judgment allows only good or bad. It becomes confirmation bias, causing us to disregard evidence which doesn’t support our negative thoughts. It’s impossible to think

I’m a good developer. I’ve got some experience with C# and SQL. I’m a bad developer. I don’t know any front-end JavaScript frameworks and they’re too hard for me to learn.

How can we think both at the same time? We can’t. They’re contradictory. But this is easy:

I’ve got some experience with C# and SQL. I don’t know any front-end JavaScript frameworks. I’ll learn one.

What has changed? Absolutely nothing except our thoughts. We’re not brainwashing ourselves or telling ourselves lies. We’re thinking more rationally with less judgment and making a deliberate choice to think more about things we control.

Developing this habit is like physical exercise. We start out-of-shape and improve with practice. We might let it slide for a while, notice it, and start working at it again. It’s not all-or-nothing. We don’t get all the results right away, but we get some.

Don’t Internalize Other Peoples’ Unhealthy, Negative Thoughts

I suspect that a lot of Impostor Syndrome comes from internalized abuse, typically from managers. Sometimes they’re negative or outright hostile, and because they have the power to act as though what they think is true, we internalize it. We believe them, and their thoughts become our thoughts.

Rather than internalizing what they say, it’s up to us to think it through rationally and decide what makes sense, what doesn’t, what we can control, and what we can’t. This allows us to absorb constructive feedback, reject irrational negativity, and sometimes find a middle ground.

Let’s analyze some things a manager might say and consider how we might respond either to them or internally to ourselves. You’ll notice that the way we analyze what they say to us resembles the way we analyze what we say to ourselves:

Your latest pull request introduced a defect. Let me show you how to write a unit test that would have prevented it.

Our response (internal and external) is:

I don’t like that I introduced a defect. Fortunately I’m about to learn something that will help me in the future. Awesome!

What if your manager says,

Your code never works, and I’ve had enough of it. Get better or else!

Is it true that your code never works? Probably not. If you’re having this conversation, apparently something didn’t work, and that’s nothing to be happy about. Should we learn to deflect this and not care whether our code works or not? Of course we shouldn’t!

We might think:

Oh, no! This has happened before and it happened again! I try so hard to be careful but it’s never enough. I’m going to be fired!

If we think that we’re telling ourselves that we have no control over anything, so we’re just going to wait and see what happens to us, and it’s going to be bad. That sucks. There’s nowhere to go from there. How about this instead:

I write code with defects more than I want to. I want to write code with fewer defects, despite trying to be careful I still create defects. I want to change this but I don’t know how.

That’s accurate and honest. Why not ask your manager, “It’s really important to me to learn how to write code with less defects.” Shouldn’t they be able to help you with that?

Or ask another developer. Ask a question on Quora. Ask people on Twitter. You’re not the first person to have this problem. Trust me, you’ll find excellent help.

The Hard Truth About Abusive Managers

Here’s the hard truth about those abusive managers. I hope I don’t harp too hard on this but it’s important.

If your manager is berating and threatening you because of defects or missed deadlines but isn’t helping you to improve, it’s a clear indication that they have no idea what you could do differently. What other explanation is there? They know but they don’t want to tell you?

Let me repeat for emphasis: If they’re yelling at your or threatening your job, they don’t know how to help you. Of they did they help you instead of yelling. It’s that simple. That means even if you ask them how to improve and they tell you, chances are that whatever they tell you is useless. Listen for platitudes like “Be more careful,” or “Spend more time making sure it works”. In other words, listen for exactly what you would say if you had no idea what you were talking about.

Some managers don’t get visibly upset. They just calmly threaten to put you on a “performance improvement plan.” The same principle applies. They have a limited skillset which includes threats and paperwork. They’re hoping that one or the other will get them a different result. And if that doesn’t work they hope the employee they can’t help will leave and they’ll have better luck with the next one.

If you’re a new developer and your manager yells, threatens, or calmly tells you that you’re going on a so-called “performance improvement plan,” all without giving you meaningful help to improve, they are not withholding that help. They just don’t have it to give. Their skillset consists of abuse and paperwork.

Please understand that this is not a rare phenomenon. Some people become software development managers without knowing much about it. They may be former software developers who had managers much like they are now, which means that they survived but learned little because no one taught them. As far as they know the best you can hope for is to survive for a while and become like them.

If you work in a place where this goes on, there are almost certainly huge issues in the development process and the code itself that make it difficult for anyone to work in. Even a more experienced developer would have a hard time. The difference is that the more experienced developer knows why it’s so difficult. If you’re less experienced you might believe someone who tells you it’s all your fault.

What should you do with that information? I don’t know. This article is more about what to think and what not to think. Your first job is probably the hardest one to get. Set aside the question of whether your manager is unpleasant. Are they helping you? Do you feel like you’re growing and learning? If not, don’t wait forever for it to change. Make decisions that align with your goals. Personally I recommend looking into companies that specialize in software development or consulting. Nothing is perfect, but it’s almost certainly a step up. (Even if they don’t hire you they can provide some insight into how you can grow your skills.)

Again, the point is not to stop caring or point the finger at anyone who tells you something you don’t like. I’m not trying to tell you how not to listen to anyone. Listen if they’re telling you how to improve. But if they’re just telling you negative things about yourself, understand that it’s them, not you.

Does this make anxiety regarding your job go away? No. But if you understand which things you control - learning, asking the right people for help, maybe getting another job - then you can focus more on that. Try your best to tune out the rest.

Conclusion

I may not suffer from Impostor Syndrome, but I have dealt with crippling anxiety regarding work and my ability to succeed as a developer and provide for my family. (Maybe that explains my logo.) This article isn’t some random musing after reading a self-help book. This is what got me through it, which is why I’m sharing it.

When I’m worried about whether I can learn something or succeed in my next role, here’s what I tell myself:

Other people know this. Other people do this. I refuse to believe that the world is full of people who can all do something I can’t. If they can, I can.

I still doubt myself all the time, but this affirmation proves true over and over. It’s reasonable and supported by evidence.

The same applies to you (and I don’t say things I don’t mean to be nice.) Software developers are just people who learn how to do a job. Some are more determined to learn it well, and I hope you and I are among them, but the bar isn’t so high that only rocket scientists can get work.

You will hit some bumps. You’ll deal with some unpleasant people. Sometimes it will be so difficult that you’ll question yourself. But you can succeed. Don’t listen to anyone who tells you otherwise, especially not yourself.