Tackling Imposter Syndrome in Software Engineering

Imposter syndrome — the concept that you’re faking it and once you remove your facade, everyone around you will find out just how incompetent or inferior you are.

Imposter syndrome affects many populations but particularly impacts minority groups in areas that lack representation.

In this article, I will focus on imposter syndrome in STEM/technology/software engineering fields, but these tips can be applied broadly. Information in this article is based on my own experiences; if you have other tips please do chime in in the comment section!

Let’s get down to it! What concrete steps can you take to build confidence and fight off Imposter syndrome?

1. Acknowledge your Feelings.

This may be the first time you are experiencing feelings of self-doubt or it may be the 100th time. Either way, it is important to reflect on your pattern of thoughts and consider whether you may be experiencing imposter syndrome. You may consider taking an Imposter Syndrome Test online or speaking with a professional.

Having a label for what you are experiencing can be comforting in itself and can help you form a plan. Admitting to feelings of self-doubt is by no means an admission of fault or weakness nor is reaching out for help.

2. Recognize your Strengths.

The knowledge space of “Software Engineering” is so broad and yet can go so deep into each category. Front-end, back-end, app development, security, DevOps, machine learning, data analytics, and more. Add on top of that all the programming languages and tooling… there is a lot of information to take in and “master.”

Aristotle famously wrote, “The more you know, the more you realize you don’t know.” This saying should ring true to every developer and is one of the reasons why people who love learning gravitate towards programming.

Where your thought process becomes problematic is when you focus solely on the areas you do not know well and disregard the areas you excel in.

So you may not be the world’s best Python developer, but you almost definitely have knowledge in a handful of tools and may even have some inherent strengths. If you have great communication skills you can leverage them to inspire your team, collaborate cross-functionally, and help manage projects.

Take 5 minutes (right now!) to write down your top strengths. Write down a minimum of 5 strengths and include at least 1 non-technical and 1 technical strength.

Example Strengths:
1. Task estimation.

2. JavaScript/front-end development

3. Documentation

4. Database manipulation and design

5. Growth mindset & willingness to learn

If you are having trouble coming up with your 5 strengths, I highly encourage you to take an online quiz such as StrengthsFinder (cost money) or High5 (free).

Date and backup this list (or prominently display it somewhere!) so that you can reference it in the future.

Back to the Software World…It is impossible to be the best at everything (although this may be hard to accept for competitive folks like myself.) Tech Leads, Software Architects, and Software Engineering Managers have areas of weakness. What makes an engineer successful, regardless of their title, is the ability to collaborate with & learn from folks on your team who shine in areas that you do not.

Now that you have recognized your strengths, you must pinpoint the areas you want to improve in. Take some time (right now!) to list 3 areas of weakness.

Example Weaknesses:

1. Large-scale Systems Design.
2. Prioritizing tasks.
3. Performance optimization.

Now, transform these areas of weakness into goals based on work you have coming down the pipeline. If you do not have work that will help you strengthen in these areas, work with your manager to see if there is anything you can pick up. If there is not, consider taking an online course to gain a theoretical understanding.

Be as explicit in these goals as you can. A useful goal forming framework is SMART goals:

Specific (simple, sensible, significant).

Measurable (meaningful, motivating).

Achievable (agreed, attainable).

Relevant (reasonable, realistic and resourced, results-based).

Time bound (time-based, time limited, time/cost limited, timely, time-sensitive).

Create a schedule to check-in on these goals. This can be weekly in your 1:1 with your manager, in a monthly meeting with your mentor, or at a specific time that you set on your own calendar for self-reflection.

Example goal to gain experience in Systems Design:

In Quarter 1 2021 I will contribute to the Technical Specification for Product 1. By January 20th, the team will have consensus on the technical stack, milestones & timelines, and be ready to begin development at the beginning of Quarter 2 2021.

3. Continue your Education.

Your education should not end when you graduate from university. In fact, if you are not open to continuous learning, your programming skills will eventually be deemed “legacy.” (And most people do not want to work on boring, legacy systems.)

Gaining knowledge (and not necessarily programming related) will prove to yourself that you are a capable person whose growth has not stagnated. The more capable you view yourself as the more confidence you will have to tackle harder engineering problems.

Areas of study that are not programming related:

Psychology / Philosophy, Foreign Language, Creative Writing, Music / Instruments, Graphic Design, Finances / Investing, Culinary Arts

Areas of study that are programming related:
Functional programming, NoSQL, Animation, Machine Learning, Statistics

There are TONS of free learning platforms, but I recommend Udacity, EdX, Coursera, and PluralSight.

4. Be Honest.

Imagine you’re placed on a new project working alongside a team of great senior engineers and someone brings up something that you do not understand. Speak up! It is always more valuable to you and the team to ask for clarification rather than nodding your head, pretending to follow along.

The more questions you ask, the more engaged you will become with the project and in turn will get to building quicker.

Now that you have your tasks divvied up, it may be tempting to retreat into your own personal “coding cave” and bang your head against your keyboard until you have completed your tasks. This period of recluse can span anywhere from a couple of hours to days. Unless you are making meaningful progress AVOID ISOLATION AT ALL COSTS! Give yourself a set time limit (2 hours) to make substantial progress on a task. If you are still stuck, communicate to your team and ask for assistance. The longer you dwell on a task, the more likely you are to lose momentum and beat yourself up about it.

Overcommunication is always better than under communication (especially in these fully remote times of the pandemic.)

If you are working in an area that is completely new to you, I highly encourage you to do some pair programming. On top of gaining familiarity with the technology, this gives you a chance to learn from another engineer’s thought process and workflow.

5. Find a Community.

In particularly challenging times it is crucial to have a support system where you can verbalize your thoughts and gain feedback. Whether it be your partner, family, mentor, therapist, or strangers on Facebook or Reddit, translating your self-defeating thoughts into words can help you tackle your problems or even put them into perspective.

Here are some resources for finding a supportive community. I did my best to curate these based on communities that provide mentorship programs and whose websites are actively maintained. Please share any I missed in the comments!

Aim to interact with your community at least once a week! This could mean attending a webinar, chatting with your mentor, or posting on Slack/Discord.

6. Recognize that your Career is a Marathon, Not a Sprint.

When you graduate from university and enter the tech sphere you may feel internal or external pressures to move up the career ladder as quickly as possible.

Remember that the average American works for 30+ years before retirement!

In these decades of employment, you will likely pivot positions, fields, get promoted, move into management, move back into an individual contributor role, take time off, and more. A slowdown of your trajectory will look like a minor detail of your story.

No matter your level of corporate success, remind yourself that YOU ARE NOT YOUR JOB TITLE, YOU ARE NOT YOUR LEVEL, and YOU ARE NOT YOUR SALARY BAND. You are a multi-faceted being not solely defined by your career.

Your career is one component of your life story and if you keep running at a “sprint” pace you are likely to burn out, so keep your work-life balance in mind.

Lastly, there is a fine line between taking inspiration from others around you and direct comparison. If you find yourself directly comparing yourself to others (LinkedIn stalking folks…) recognize that your path will be different from those that you admire.

7. Have patience.

It is very likely that your confidence (or feelings of Imposter syndrome) will fluctuate as you progress in your career. As you gain experience, your baseline level of confidence in yourself will grow, making you less likely to doubt your abilities.

Image for post
Image for post
Your confidence in yourself can take a hit depending on many factors and that is completely normal.

Being kind to yourself is critical for self-growth in your career and in life.

To re-iterate, your plan for *Total Imposter Syndrome Domination* is as follows:

  1. Acknowledge your Feelings
  2. Recognize your Strengths (and Weaknesses)
  3. Continue your Education
  4. Be Honest
  5. Find a Community
  6. Recognize that your Career is a Marathon
  7. Be Patient

Do you have tips not mentioned here? Leave them in the comments!

Best & Take care of yourself,


Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store