This is an excerpt from Junior to Senior, my upcoming book about building the soft-skills needed for a promotion to a senior software engineering role. If you’d like to be notified when the book is available, you can join the waitlist.
__
Have you ever sat in a room and felt like you weren’t smart enough to be there? Maybe the conversation moved too quickly for you to follow, or perhaps your coworkers debated a topic you weren’t familiar with. It’s an uncomfortable feeling that every programmer goes through at some point in their career. When you start to doubt your own abilities and feel insufficient at your job, you’re experiencing imposter feelings.
🔰Feeling like an imposter can come on suddenly in a number of different situations:
- If you’ve ever questioned your ability to complete a task that you’re stuck on.
- If you feel like you don’t belong on a team or at a company because you’re not capable enough to follow along during discussions.
- If you’ve ever felt completely overwhelmed, especially when starting a new role, a new project, or learning a new codebase.
- If you’ve ever had trouble articulating how something works on a technical level, or when someone asks you why you made a certain decision.
- If you’ve ever found yourself in one of these situations, it’s hard not to feel like a phony.
The good news is that it’s probably not as bad as you think, and it’s way more common than you realize, because all programmers experience these feelings throughout their careers. Unfortunately, part of the problem is due to the stigma surrounding imposter feelings, which often discourages people from discussing their feelings openly and seeking advice from others. It’s especially hard during the first few years of your career because you’re learning so many different things all at once.
You’re focused on learning things such as:
- Your team’s codebase and the technologies they use.
- Your team’s development processes and methodologies.
- Your company’s business logic and business model.
- Your manager’s management style.
- How to work well with your team members.
- How to work with stakeholders, product managers, designers, and executives.
It’s common for software developers to feel overwhelmed with the pace of things during the first few years of their career. Things move incredibly fast when you’re still getting up to speed, and decisions happen quickly. Try not to get discouraged if you’re having trouble keeping up with your coworkers as you’re still learning. Some of your coworkers have been with your company for years, so naturally they will have more domain knowledge that they’ve built up over time, and a deeper understanding of the problems that need to be solved. They’ve probably written large portions of your codebase so they will know the system better.
🔹The key thing to remember is that you shouldn’t be intimidated by coworkers who know more than you. In fact, you should view it as an opportunity to learn from them and ask them questions. Leverage their knowledge so that you can learn faster from their experience.
It’s a Feeling, not a Syndrome
Chances are that you’ve heard people talk about feeling like an imposter, although they probably referred to it as having “imposter syndrome.” While this phrase is commonly used, it’s misleading because it tends to oversimplify the issue. Unfortunately, the phrase “imposter syndrome” is a well known phrase that helps you easily communicate the feelings you’re experiencing. It also does a good job of recognizing a feeling of being overwhelmed or inadequate that you may be struggling with. While this may seem like a good thing, there are some negative consequences that come from using the term.
The solution is not to label yourself as having a medical syndrome that needs to be treated; it’s to recognize your feelings so that you can work towards improving yourself and building confidence. Slapping a label on something you’re feeling doesn’t make it go away, but recognizing it is the first step towards self-improvement.
Additionally, the term “imposter syndrome” tends to imply several things for different people:
- You either have it or you don’t.
- It’s abnormal.
- You likely won’t get better without treatment, as with many medical syndromes.
None of these points are true, at least for most people. Think of it more as a natural feeling you have, like stage fright or feeling uncomfortable. It may come on suddenly and with varying intensity, but it’s a temporary feeling that will pass eventually. It’s good to remember this when you’re having these feelings so that you can manage them and try to reduce the negative thoughts that come with them.
In essence, imposter feelings can happen to anyone and can come on at any point in one’s career. Rather than trying to fight it, it’s more effective to embrace it and use it to motivate you to improve. Let’s dig deeper into what you can do when you suddenly start to feel like an imposter.
Knowledge Gaps
As programmers, we’re expected to know a wide array of things in order to do our jobs. On top of necessary skills like writing code that compiles without errors, we also need to know how to design our programs to be future proof, how to write automated tests so we can be sure the code works as expected, and how to deliver results consistently and efficiently.
It’s easy to feel overwhelmed with the amount of knowledge required in order to complete our day-to-day tasks, in addition to answering questions from project stakeholders, defending our technical decisions during code reviews, and planning ahead for the future.
There will be plenty of times throughout your career where you won’t know the answer to a question, or won’t know what someone else on your team is talking about. It happens to software engineers of all levels, not just junior engineers. The thing that makes good engineers stand out from the rest is that they are humbled and reminded that they don’t know everything, and they use those situations to learn and grow.
🔰Examples of situations that might bring on imposter feelings include:
- Your boss might ask you a question in front of your team that you don’t know the answer to.
- A senior engineer might ask if you considered an obvious edge case when fixing a bug.
- A senior product manager might ask you to estimate how long it would take to build a new feature in a part of the codebase you’re not familiar with.
- Your boss might ask you to clarify how something works that you built six months ago, and you might not remember all the details about it.
It’s okay to admit that you don’t know something, or that you hadn’t considered some obvious edge case. In fact, admitting that you don’t know something is a sign of maturity. If you want to be successful in your career, you need to put your ego aside and accept the fact that you won’t know everything. In fact, it’s nearly impossible to know everything there is about programming. It’s such a broad industry that is still evolving each and every day, and it’s simply not possible to be an expert on every topic.
Additionally, there’s even more to learn about the process of delivering software, because writing code is only one part of the equation when it comes to delivering value for customers. There’s planning, analysis, design, implementation, testing and integration, and maintenance phases in a modern software development lifecycle, and each phase comes with its own nuances and best practices. While you may not be great at all of those phases, a senior engineer must understand the entire process. It’s natural to feel like an imposter if you don’t have a lot of knowledge in one or more of these areas, but that doesn’t mean you’re not a good engineer; it just means you have more to learn.
Let’s look at what you can do to minimize those imposter feelings and leverage them to become a better software engineer.
Identify the Gaps
You have gaps in your knowledge. We all do. It’s natural, so don’t worry about it too much. What’s more important is that you seek out and acknowledge these shortcomings so that you can take steps to close the gaps. When you accept your limitations, it allows you to put your ego aside and open your mind to new ideas and opportunities to grow.
Too often we fall into the misconception that we know more than we really do, which leads us to be stubborn and closed-minded when we’re presented with new information. Believing that you know more than you think you do can have a negative effect on your ability to learn, and in some cases it can stagnate your career growth. If you believe you know more than you do, it’s easy to get defensive when your ideas are challenged. How you react in those situations can lead to conflicts with your coworkers or hinder your ability to make impartial decisions, which is why it’s important to be honest with yourself about the limitations of your knowledge and your skills.
When you accept that you don’t know what you don’t know, it opens the door to opportunities to improve the situation:
When you’re honest with yourself about what you don’t know, you naturally identify areas where you need to seek more information and learn more.
When you accept you don’t know something about a topic, it takes the pressure off when you need to ask for help. It gives you confidence to reach out to someone else who can help you who may be an expert in that topic, or they may be able to point you to someone who is.
Knowing what you don’t know helps to prevent you from making an uninformed or biased decision.
So how do you identify what you don’t know? A good first step is to write down in your notes things you already know that you don’t know. This could be things like topics, phrases, or acronyms that you’ve heard before, but don’t know what they are. Write down as many things as you can think of.
🔹Use your favorite note taking app or even a physical notebook. Something that you’ll be able to access at any time and be able to reference later on.
It’s important to be honest with yourself during this step. Don’t be embarrassed if the list is long or you think it’s full of basic topics. And they don’t necessarily have to be technical topics either–they can be related to general business topics, some unique aspect of your company, or something unique about your industry. And finally, while it’s important to write down things you don’t know or understand, it’s also important to write down what you don’t understand about it too. This will give you some indication on what you should focus on when it’s time to learn.
🔰Let’s look at some examples:
- I don’t understand how containers are different from VMs. It sounds like they do the same thing.
- I don’t understand dependency injection or why I would need it.
- I don’t understand our company’s sales process. Where do our customers come from?
- I don’t understand react hooks. Why do I even need them?
- I don’t fully understand the difference between an abstract class and an interface, and when to use one over the other.
- I don’t understand the difference between stack vs heap memory.
- I don’t understand the economics of our industry. How do we determine the price point to sell our product competitively?
The next step is to observe. Take note of any new terms, phrases, acronyms, or concepts that pop up during conversations, video calls, chats, or comments from your coworkers or things you come across online. Anytime you come across an idea that you’re not familiar with, add it to your list. And every time you hear someone mention a topic that’s already on your list, add a checkmark or a +1 next to it.
🔰Here are a few more examples:
- What is ARR? And why is the leadership team interested in tracking that metric?
- My boss keeps mentioning the need for static code analysis. What is it and why is it so important?
- I keep seeing people mention Kubernetes online. I know it has to do with containers but why is it so popular?
Before you know it, you’ll have a long list of topics of things for you to learn and improve your knowledge about. Whenever you have some time to spare, you can use this list as a starting point for things to research and learn about.
Close the Gaps
Once you’ve compiled a list of topics that you know you don’t know, you can begin to work towards learning and closing those knowledge gaps. At this point you’ve essentially compiled a roadmap for expanding your knowledge. Now you can begin to chip away at this list and start to close those gaps in your knowledge.
You can start with any topic, whether it’s something that you’re really interested in, or something that you think will help you during your career. Another option is to rank the topics by what you think is the most important or what will have the highest impact in your day-to-day work.
An important thing to remember during this step is that you shouldn’t try to learn everything at once. Your list may be long, but that’s okay! Focus on learning one topic at a time so that you can give it your full attention. Try to learn as much about it as possible before moving on to the next topic. If you try to learn too many things at once, you won’t be able to give each topic the attention it deserves, and you may not remember each thing you’re trying to learn.
You may be able to learn about some topics in a day, while others may take days or weeks to fully comprehend. Feel free to dive as deep into a topic as you see fit, but always try to learn more than just surface level details about something.
Let’s look at the ARR acronym from the previous example.
Through your research you learn that “ARR” stands for Annual Recurring Revenue. Great! Now you’ll know what the executive team means whenever they “say we need focus on growing ARR.” But don’t stop there–try to dig further and understand why focused on growing ARR is so important.
Why is ARR an important metric for a SaaS company? How is ARR calculated? (knowing this will help you understand how to increase it) What does it mean if ARR is growing? What about declining? How does my work fit into the company goal of growing ARR?
Spending time to do your own research and teaching yourself a topic is invaluable. Try to learn the foundational concepts behind each topic, and what makes them important. Once you start to learn about a topic beyond just the basics, you may come up with more questions and want to dig deeper. Use this as a good opportunity to reach out to others and ask some questions. Try to identify coworkers or people in your network that are familiar with the topic and let them know that you’d like to learn more.
☝️Sometimes the hardest part is in determining exactly what you should ask, who you should ask, or how you should frame your questions. Asking questions is harder than it sounds, so we cover that topic in greater detail in Chapter 6 of my book: How to Ask Better Questions. If you’d like to be notified when the book is available, you can join the waitlist.
Identifying and closing your knowledge gaps is just one thing you can do in order to counteract the negative thoughts when you’re feeling like an imposter. It’s a great way to build confidence, expand your knowledge, and learn new skills and ideas that could help you throughout your career. Next time you’re feeling like an imposter, try writing down things you don’t know or want to learn, and start chipping away and learn something new.
Hopefully you now understand that feeling like a phony or a fraud is common among all software developers, and that you shouldn’t get too hard on yourself when you’re going through a period of feeling like an imposter. The most important part is to try to identify why you’re experiencing those feelings, and accept that nobody is perfect. Once you understand the root cause of why you’re feeling a certain way, you can begin to take action to improve yourself and your skill.
With a little persistence and determination to get better, you’ll be able to build up the confidence to take on any situation, no matter how daunting.
__
If you enjoyed this excerpt from Junior to Senior, join the waitlist to be notified when the book is available.
Top comments (0)