A thank you to Ethan Urie for his thoughtful article on how to push through your programmer imposter syndrome. Ethan is a developer with 15 years of experience under his belt and currently works for Team Treehouse.
Think you’re unqualified for the work you do? It’s called imposter syndrome and here’s how to handle it.
Do you beat yourself up for making simple mistakes? Or maybe you get completely lost in a meeting about a new project because you don’t know half the technologies the other devs are talking about. And to make matters worse, you constantly feel like you’re falling farther and farther behind the next, hot framework or language.
Welcome to software development! Enjoy your stay!
Kidding aside, these negative emotions are very common (you’re not alone!). It’s called imposter syndrome: the constant feeling of not being good enough or knowing enough to do your job well. Everyone has experienced these emotions at some point in their life, whether personal or professional—and not just within software development. It’s human nature. The most successful and productive people are often very effective at minimizing the occurrences of imposter syndrome in their lives.
From my personal experience as a software developer and the advice of mentors I’ve worked with, in this blog post I’ll be breaking down the common root causes of these emotions and actionable steps towards overcoming imposter syndrome.
Why you feel like a fraud
- Software development never stops evolving. It’s a large field and it’s only getting bigger. Not only are there more people entering as new developers, but the use of software is expanding, which means the demand for devs is going up. This encourages the frequent creation of new languages, frameworks, and tools. This means there’s more to learn and it’s only going to get more complex as the industry matures. With this mind, you may feel overwhelmed at times as a developer.
- Furthermore, the media creates unrealistic perceptions around the tech industry. Software specifically, gets a lot of attention and glory in the media. Given how often new tech startups get covered in the media and how their founders are portrayed as brilliant and uniquely creative, it’s no wonder that so many people feel that they can never make it as a top-tier developer. Software development also has a mythos that’s grown up around it that says only the super-smart people are able to grasp it. While that may have been true once, programming languages and tools have come a long way and made programming a lot easier and more approachable.
In total, this misconception of brilliance being a prerequisite for developers, and the pressure to stay current on the latest trends—a product of the industry’s rapid growth—can lead you to focus on what you don’t know, and fuels the feeling of inadequacy. Soon enough you’re a victim of imposter syndrome. You’ll be feeling like a fraud and start to work harder and longer, obsess over small details, and downplay your future achievements. You may even find yourself crediting luck or coincidence for your successes, instead of your skill and knowledge as a developer.
Does this sound like you? Let’s go over the various ways to combat this.
How to take charge of programmer imposter syndrome
Here are a few tips to combat the imposter syndrome that lives in every developer…
1. Get comfortable with being uncomfortable
You need to realize and accept that imposter syndrome never truly goes away. The crux of imposter syndrome is that you’re comparing what you know to what you think other people know. You don’t see other people struggling and you don’t know what they don’t know. It’s like perusing Facebook or Instagram: you see everyone else’s vacations, new cars, new homes, new phones, new significant others, etc. But you’ll sparingly see their doubts and low points on a frequent basis. You’re comparing an ideal view of Facebook life to your whole life, both the good and bad parts.
This is the essence of imposter syndrome. You see everyone else’s success and intelligence, and then you fear that you don’t have that or know that concept or technology. The focus on your own weaknesses is understandable and natural. None of us want to be the worst developer in a company. Most developers love to learn and there’s so much to learn in development. So it’s natural to look at what you still have yet to learn, compare yourself to people who already know all of it, and feel inferior and that you’ll never be an expert.
To be honest, you never really will be an expert in software development. There will always be more to learn. There will always be new languages, or processes, or technologies to learn. There will always be someone who knows something you don’t. There will always be someone who knows more than you do. There will always be someone who’s a better developer.
That thought may be depressing right now, but I feel it’s actually liberating. You can focus on getting better and growing. Focus on what you can control: your skills and your knowledge. Accept that there will never be a point where you’ll feel completely knowledgeable and completely comfortable.
In short, as one developer I talked with said: get comfortable with being uncomfortable. Embrace your ignorance and use that to fuel your growth, not your self-doubt.
2. Adopt the growth mindset
I grew up mostly believing that intelligence was fixed and that fixed intelligence determined my success. I did well in school and learned and understood many concepts easily. But in the past few years, I realized that I had unconsciously avoided really difficult concepts and challenges. If I hadn’t completely avoided them, I had, at least, considered myself too stupid to handle them when I didn’t understand them quickly. I then read Carol Dweck’s book Mindset: The New Psychology of Success and realized I had what she called the “fixed mindset”.
People with the fixed mindset have a constant need to prove their competence and intelligence. They have a deep need to be perfect at everything and to be perfect immediately. Because these people view their intelligence as fixed, failures are a reflection of their lack of intelligence and so they seek to blame circumstances or other people for their failures.
In her book though, Dweck shows that intelligence is not fixed, and in fact, it is directly tied to effort and challenge. The mindset of viewing obstacles as opportunities to learn, to help you improve instead of assaults on your intelligence is Dweck’s “growth mindset”.
Prior to reading the book, I knew that to get stronger or run faster, or farther, I would have to exercise and push myself to expand my physical abilities. But like most people with the fixed mindset, I didn’t realize that I had to do that with learning too. I thought the smarter you were, the easier you understood things and that was that. No way to improve. If you didn’t get it, it was because you weren’t smart enough. But Dweck shows us that a lot of things are just inherently difficult to learn and the process of learning is what makes you smarter. Let alone the fact that you’ll know more stuff afterward.
Interestingly, I’ve since seen this theme repeated. In Ryan Holiday’s The Obstacle is the Way, he summarizes Stoic philosophy and its views on difficulties. Essentially, the philosophy focuses on personal growth and improvement and believes that only by working through difficult situations can one really get better and grow. Just like lifting heavier weights or running an extra mile, working through difficult intellectual problems will teach you how to handle even more difficult situations in the future.
Similarly, Paul Arden echoes this philosophy in his book It’s not how good you are, it’s how good you want to be. Arden is well known in the advertising world, but even if you don’t know him, his book is a great short dive into how effort breeds success. His book encourages you to see challenges and difficult situations as the only way to get better and improve, instead of viewing them as proof that you’re not good enough.
Essentially, your feeling of inadequacy is a signal that you’re being challenged. To really become a great developer, you need to embrace that challenge and actually seek it out. View it as an opportunity to learn, to become better, and to grow.
3. Keep track of your accomplishments
Regularly reflecting on your successes can help remind you of how far you’ve come and how good you really are. This will help balance the scales of positive vs negative self-talk that is at the heart of imposter syndrome.
One good way to do that is to make a recurring calendar appointment for the end of every month to add all accomplishments from that month to a “portfolio” of accomplishments. Even if something eventually failed, if you attempted something outside your comfort zone, write it down. It was a growth experience.
In addition to capturing your monthly accomplishments, you should also take a few minutes to reflect on past accomplishments and add any to previous months that you forgot. Also, don’t just write them down and read them. You need to truly reflect on what went into that accomplishment and how you felt about it.
This practice comes with a bonus too. You can take that portfolio to boost your résumé or LinkedIn profile to help you get future jobs. Nice!
4. Find out how your manager thinks you’re doing
Imposter syndrome thrives when all you do is think. One of the things you need to do is get out of your own head to combat imposter syndrome. Your manager is the person who has control over your job and getting their input on how you’re doing is essential for getting a realistic view of your skills and effectiveness.
Ideally, you’ll be meeting with your manager in one-on-ones on a regular basis anyway, but if not, talk to them about setting it up. In these meetings I suggest that you discuss the following:
- What do they feel you’re doing well? Make sure you keep doing this.
- Is there anything specific they feel you need to work on in the short-term? If so, what measurable goals can you both set to determine success?
- What longer-term (3-6 months), measurable goals can you both set that will indicate success to your manager? This is useful when you’re just starting with a new company or on a new team to calibrate your progress expectations to theirs’.
Once you have some goals, discuss your progress with your manager at your regular meetings. Things change and so should goals, so don’t be afraid to refine or change goals as circumstances change.
5. Figure out how you learn the best
While there is now data showing that learning styles aren’t really a thing, everyone has ways that they prefer to learn. Using your preferred learning style can help instill confidence and push you further away from your imposter syndrome. Think back on what you’ve tried to learn in the past and what worked best. Think about which resources (books, videos, courses) seemed to make things clearer or what seemed to help you get to that “Ah ha!” moment.
For me, I’ve found that I learn languages and frameworks best when I read a book (or another detailed overview) about it first, then start trying to use it while referencing tutorials. Videos sometimes work to give me an overview but usually, I have specific questions in mind that videos rarely cover. What hasn’t worked for me is to learn while I go. I miss the big concepts that books and courses generally cover early on and that slows down my progress.
I know a lot of developers, and aspiring developers, that learn best by doing. I’m the same way. Only by seeing how it works in practice can I fully understand it. This learning method means using projects in books, courses, or that you make up, to drive your learning. If you can create a project that you’re personally very interested in, that desire can help you to power through the roadblocks and challenges you’ll run into.
Use this self-knowledge and experiment with alternatives to improve your learning going forward. As you refine your process you’ll speed up your learning and decrease the amount of that time you feel stuck and incompetent.
6. Plan your career goals to reduce doubt
A lot of self-induced impostor syndrome can be due to the unknown when looking ahead. To combat this, you should set goals and plan your career path. This will provide you confidence when making career decisions and deciding what skills to learn and focus on.
Instead of looking at how you learn, you need to look at what you want to do eventually — what industry, technology, language, company you want to work in or for. Then, using that information you find out what you need to learn.
You can find the required skills by viewing job requirements for the job you want to have. You can also find out what skills are necessary by finding developers who have your desired job on LinkedIn or via Meetups. Contact them and meet them for coffee, or lunch and talk to them about their job and what skills they use regularly.
For example, assume I’m interested in getting a job as an iOS developer. First, I’d see if I personally knew anyone who had experience as an iOS dev. If not, I would see if anyone I knew was an iOS dev. I would try to meet or talk to them about their job. I would ask them what languages, tools, and frameworks they use regularly or would recommend I learn. I would then ask them what they would teach me if they had 1-2 months to get me ready to be a junior iOS developer at their company. This should also include what resources they’d use to get me there.
Take note of the relative difference between the languages you find. Furthermore, take note of what other requirements are listed. Do they want Core Data or Realm experience? How about experience with networking and working with REST or GraphQL APIs?
You can stop looking at new job postings when you’re not seeing anything new.
Using this new-found data, develop a plan to bolster your knowledge and skills. Find what books, tutorials, videos, and courses are most recommended and use them.
Having this plan also helps you to say no to learning the things that won’t get you where you want to go. Personally, I still keep a list of all the things that I do say no to but would still learn in an ideal world. I do this to offload it from my head but also for reference in case my priorities or future direction changes, or I’m looking for a new side project.
It never ends: handling imposter syndrome as you progress
One unfortunate aspect of imposter syndrome is that you never really get away from it. Even though I’ve been professionally developing software for almost 15 years, I still have it. I know other good, experienced developers who fight it constantly too. Starting to control it early in your career and taking steps to weaken its hold on you is one of the best ways to reduce it’s impact on you in the future.
In my case, understanding and accepting imposter syndrome and changing my mindset has had the biggest impact. Whenever I start to feel like I’m not productive enough, or not moving forward fast enough, I reflect on why I feel that way. I think about all the possible reasons I might not be as productive as I think I should, and evaluate whether I think they’re valid. Most of the time they are.
I also reflect on my situation to see if I’m doing the best job of learning. Am I optimizing for learning or just trying to look busy and productive? If I’m not optimizing for learning, I change my mindset and slow down. If I’m working in a new codebase, I find that I have to constantly adjust my mindset to view the task as an opportunity to grow and get better
I’ve found that focusing on improving my mindset, coupled with regular meetings with my manager, has reduced the anxiety and panic that imposter syndrome created in the past. I feel that I enjoy my job more and I’m a far better developer because of it.
Connect with Ethan on Linkedin.
If you found this article helpful, I have a lot more advice to help you become a successful software developer at my site. I’ve also created a special guide for readers of Coding Dojo’s blog that details the non-technical skills that new developers should learn to up their game. You can get your copy here: learntobeadeveloper.com.