Knowledge Gaps

13 minutes, 1 link


Updated August 7, 2023

As programmers, we’re expected to know a wide array of things in order to do our jobs. On top of fundamental 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 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 humble and aware that they don’t know everything, and they use that knowledge to learn and grow.

exampleSituations that might bring on impostor 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 you built six months ago works, 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. 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 doing our jobs. There are planning, analysis, design, implementation, testing and integration, and maintenance phases in a modern software development life cycle, 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 normal to feel like an impostor 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.

Let’s look at what you can do to minimize those impostor 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. Accepting your limitations allows you to put your ego aside and open your mind to new ideas and opportunities to grow.

Unlock expert knowledge.
Learn in depth. Get instant, lifetime access to the entire book. Plus online resources and future updates.
Now Available

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 you know more than you do can have a negative effect on your ability to learn, and in some cases, it can stagnate your career growth. It can also make it 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 may be an expert in that topic and can help you, or they may be able to point you to someone who can.

  • Knowing what you don’t know helps 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.

important 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—you don’t need to share it with anyone. And these don’t necessarily have to be technical topics either. They can be related to business in general, some unique aspect of your company, or something industry-specific. 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.

  • 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 and why do they want our product?

  • I don’t understand React hooks. When would I even use 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.

  • 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. 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 to learn about. Whenever you have some time to spare, you can use this list as a starting point for things to research.

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 you’re really interested in or something 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 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.

exampleThrough 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 to focus on growing ARR.” But don’t stop there—try to dig further and understand why focusing 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’s 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 you’d like to learn more.

confusion 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’ll cover that topic in greater detail in How to Ask Better Questions.

Identifying and closing your knowledge gaps is just one thing you can do in order to counteract negative thoughts when you’re feeling like an impostor. 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 impostor, try writing down things you don’t know or want to learn, and start chipping away at them to learn something new.


Dealing with Criticism

We’ve all been criticized at some point in our careers, and it’s safe to say that it’s never a great feeling. It can be difficult to receive criticism, even if it’s intended to be constructive. Criticism can be a hit to your ego and sometimes leave you feeling lost and confused, especially when you feel so confident in your work.

Whether you like it or not, criticism is sometimes necessary in order to foster a healthy engineering organization and to maintain an organized codebase that can grow and evolve over time. As a developer, you’ll receive feedback throughout your career in many different areas, such as:

  • Code reviews. Other engineers may find issues with the syntax, logic, or readability of the code you submit for review.

  • You’re reading a preview of an online book. Buy it now for lifetime access to expert knowledge, including future updates.
If you found this post worthwhile, please share!