I don’t know how to do this. This is all too overwhelming. Why did I want to do this? Everybody else knows what they are doing. They will soon discover how out of my league I am here.
Sound familiar? Maybe not. Not everyone suffers from Impostor Syndrome. But it is quite common in our field of work. I’ve had those thoughts myself, and many times have also seen others go through moments like this. It’s not typically a permanent condition, but join me for a bit and let’s talk about it.
Why do we feel like impostors?
Creating quality software in 2021 is hard. There are so many facets to consider in addition to just writing the code. Things like the choice of programming languages, frameworks, and databases are just the start. On-prem or cloud-native or hybrid? What and how to automate? What tools to pick for IaC? What’s the frontend framework of the month? Have you taken proper care of security? How about privacy? Did you think about accessibility? And finally, how is the project going? Communication working? Doing the right things in the right order?
Neglecting any of these, in a professionally done project, can doom it, or at least make it very difficult. So to be able to do your work properly, there’s an endless stream of things you need to be aware of, and you need to make the right choices. The more you know the more you know what you don’t know.
Furthermore, in the world of software development, things move rapidly. While you can use your knowledge from decades back, in our line of work we typically need to be constantly learning, keeping skills up to date, replacing old tools with new, better ones. While once you might have been able to say you know everything there is about programming, now number of topics you have to master have exploded exponentially. If anyone tells you they know all there is to know about software delivery, they are lying.
So, that’s the scene. That’s the setup. Things might be a bit calmer if you’re working on the same product/service for years, but I can tell you that especially in consulting business, you have to push yourself to new areas constantly, and quickly master them. Many people actually enjoy that, on a good day it’s a rush to be able to grow and learn new things.
But then there’s that moment of self-doubt and exhaustion. Did I over-reach? Did I promise too much?
What’s a generalist specialization?
In our line of work, some amount of specialization is a must, it’s also a natural thing. Without specializing, without spending a bit of time with some technology or method, it’s hard to master it. Mastering gives a satisfying feeling, whether it be programming languages like Java, Clojure, TypeScript, Kotlin, or cloud platforms like AWS.
The thing is, especially in the software consulting line of business, doubling down on just one thing won’t get you very far. It might not even carry you through the first job interview unless you are applying for very entry-level work with some training coming up immediately. That’s because we don’t know what skills will be needed for the next project. If you are only a master of one skill, it might be more difficult to find yourself a good project to work with, since others in the team would need to carry all other areas and aspects of the project, until you have learned them. It gives a much better base for consulting work to be good with many parts of the software craft (as opposed to being a master of one).
So, while specialization is still rather a valid thing to do, you should also invest in learning a wide array of skills for software crafting, as listed above. These days you definitely need to understand automated testing, delivery, security, and cloud platforms, in addition to Frontend, Backend, and databases. But you can still specialize, you can double down on one or two things that bring you pleasure. You can actively practice them, learn more about them, and be the go-to-person for said techniques.
But there’s also another route. I’m a Java coder. That’s been my forte. I started it in the 1990s, then I did a long period of teaching it for money, which meant I needed to first master it myself, and keep up to date. I would say Java is something I can code in my sleep, and sometimes do, so that’s definitely my specialization and strength. But would you believe it if I said I have barely used any Java for several years now? I’ve been relying on my 25 years of experience on all things, and my ability to rapidly pick up new things based on that. If I drew my skills profile right now it would be crazy. I can do many things. Some might argue even any things. My recent years have been filled for example by Splunk and Excel coding, a lot of Python, Scala, some Kotlin, Gitlab pipelines, and lots and lots of cloud acronyms. Did you know that AWS has hundreds of services and thousands of acronyms? And each one is a specialization in itself.
So I would call myself a generalist. That’s been my specialization. Meaning that I actively pursue that and keep my generalization up to date. I know few things really in-depth, but I know a hundred things on a level that I can rapidly refresh up to today’s requirements if there’s a need. A few years back someone asked me about XSLT templates, so I whipped up from my ancient technologies archive a nice recursion template that lets you do crazy stuff with minimal code. That gives me much flexibility to jump in many places. Unfortunately, that comes with a downside too. A constant visitor.
How can you deal with the Impostor Syndrome?
There are two bad ways to try to deal with this. One is to never put yourself in a position of change or challenge. Just play it very safe. You learned Java 1.0 in 1996, so keep on using it for everything, and only look for jobs where that is all that is required. This approach would let the Impostor Syndrome rule and limit you. Another is to wait, it will pass. But that’s not going to help you deal with it any better next time, so while it may be a victory, it’s a lame one.
A better approach is just to acknowledge that it is a thing, and recognize it. Understand that if you feel like that, it does not mean you actually are an impostor. But most of us have studied hard, have practiced hard, have worked hard, more or less. So the background is there, the skills are there. That feeling is not a real reflection of things.
It’s also not a mental disorder, nor a permanent state of mind. It’s a reaction to stimuli, especially when you are high-performing and reaching far. It could be compared to driving a sports car at high speeds, and suddenly starting to doubt whether you can actually control it. It’s a temporary moment of self-doubt that often happens when you have achieved (or are about to achieve) an important milestone. New job, new project, a new position, or just praise and adoration for the work you have done. Ironically, this can also be triggered by positive feedback and compliments.
Also, note that typically this moment of self-doubt also means that at your worst moment you’re trying to compare yourself to other people at their best moment. Or even worse, trying to compare yourself to an ideal image of yourself. It’s an unfair advantage, and one you will always lose. There is always someone who knows more about something.
According to some studies made on the subject, the main medication is just to try to reframe/rephrase that self-doubt with a bit more bright way of looking at things. For example, if your thought is: “I’m out of my league, I don’t know how to do this!” - then you could try to reframe it like “This seems difficult, but I have time to educate myself, and everybody understands I’m not a master of everything. I am allowed to fail.”
This line of thinking actually goes nicely with agile methodologies, too, because a failure IS an option - you just try to fail fast, take your learnings, and build on top of that. Transparency also helps - the feeling of being a fraud often comes if you hide your internal worries deep, and try to set up a facade. As with any self-doubt, it might do marvels if you just have a chat with your peers, or project lead, or life coach, and are honest about your worries.
So if you feel unsure, stop for a bit, take a deep breath, and try to see things from another angle. Try this question:
“What would I need to change to be able to succeed?”
Impostor syndrome as a positive thing?
The analytical part of my brain understands all this clearly. But unfortunately, feelings are not something that can be dismissed by logical thought and willpower alone. One way of course to avoid those feelings would be to stop pushing yourself into those situations anymore. If you know one thing well, stick to that one thing? Well, while you certainly could do that, I would not recommend it.
See, growth comes from the combination of applying what you know but also being exposed to things you don’t know - yet. At least for me, that might raise the appetite to know more, to understand more, to learn more. And that is half of why I love the software developer life (The other half is instant gratification from solving concrete problems). As I recognize that feeling for what it is, I can avoid letting it overwhelm me or bring stress on me.
So for me, a visit from impostor syndrome is actually a signal that I’ve once again managed to push myself to a new uncomfortable zone where I don’t already know everything. So I’ve managed to create a learning and growth opportunity for this year, too. And that’s exactly why I mean it when I say:
Hello, old friend, nice to see you again, Impostor Syndrome.