My Impostor Syndrome: How I make peace with my self-doubts as a developer
A conversion between two engineers:
A: So tell me what happened. Are you okay ?
B: Well, my day went horribly. The first thing I saw when I opened my laptop was a couple of comments on my pull requests, so I got that to fix. I have endless meetings that I had no time to actually revise these pull requests, let alone some time uninterrupted. When I see senior engineers work, they work so effortlessly that I feel like I am just incompetent for this job. They said these jargons that I don’t even know man . I know I am qualified for this job, but today is just one of those days where I feel like I am not enough. I feel so unqualified.
I started wandering through my phone and found myself browsing LinkedIn. I saw a couple of my friends posting on how they just got certifications on some programming languages that I have been planning to learn but never had the time to actually do it, as I am already struggling with work. Others got certifications that I think cements their position. I went to Jobs section; just to see what’s out there, and I even got my anxiety running high. There are so many openings that requires so many programming languages or platform that I did not even know, or even heard of. I am so miserable right now that I do not know whether being a software engineer benefits me at all. I hate this feeling. I feel like I do not deserve where I am right now.
Have you heard this type of conversation before ? Or does it hit too close to home ?
For me, it definitely does. As a software engineer, we often find myself already overwhelmed by workload, but at the same time we need to expand your skills, and often we need to do it outside your working hours. As a result, we barely have time to rest and take care for yourself. But when you look around and you see people seem to be improving every day, you start doubting yourself. “Am I over exaggerating my skills?” is a sentence I sometimes say to myself, along with the lines of “Am I worthy of my job?”, or “When do people take time to learn? I barely had enough rest!”
My experience took a downward spiral. I could not sleep due to the anxiety, then I started sacrificing sleep to take time and learn. Often, I got lost in conversation between engineers because honestly I had no idea what they were talking about. In the meantime, the next upcoming hot-stuff was being released, and I was falling behind further and further.
I looked at my resume and I was pretty sure I was a fraud.
But I knew myself, and I knew I would not give up, to anyone, or even to myself. I kept telling myself there is no way I would succumb to the situation.
This is a story of how I manage my inner-self-doubt (The word manage here is important, which I will explain later), over the course of my career. I had been wanting to write on this topic for so long, but I guess it took me some time to contemplate and actually start writing it. Hopefully this article offer some advices to fellow engineers who feel the same way throughout their career.
Why do we feel so inadequate ?
An Impostor is a person who pretends to be someone else.
An Impostor Syndrome is a persistent feeling of doubt that you are incapable, incompetent, and does not deserve the success you have achieved. Basically, you feel like what you do is a lie, and you have been deceiving people unintentionally.
Impostor Syndrome is often found among software engineers; and many of them would not admit or concede. I would argue that the reasons why impostor syndrome easily “infect” software engineers comes down to:
Endless streams of platform or programming languages you need to learn.
I could go on and on, but you get the idea. The industry is much more evolving in the 21st century that it is impossible you to learn all of them. I am pretty sure that few people possess the skills to learn all of the above, but I am also sure that the majority do not possess most of them.
And that’s the reason why we’re so insecure of ourselves. We are drowning in the stream of languages, platforms, and many other new technologies that subconsciously we think we must learn all of them in order to survive.
Popular culture and pressure to deliver on time, every time.
I believe that software engineering has become the most popular industry in 21st century. Shows like The Social Network, or Silicon Valley praise (or mock?) the idea of being a software engineers, and that being a software engineer is “cool” and “can solve all problems”. Every company now relies on IT department to solve all their issues, and putting us under pressure. The constant deadline pressure really puts weight on our mental health. Some deadlines are just measurably unfeasible, but we must do it anyway. This deteriorates mental health, and you start doubting yourself whether you’re good enough.
Why I Kept Failing
I am honestly embarrassed to write why I failed, but I think it would be a great reminder for myself and readers to not fall in the same trap.
What I did is a knee-jerk reaction to my feelings; I learned everything every day. On the surface, this was a good solution. If you feel you need to learn X, then go do it. If you need to learn two things, then just do it. “It’s not new to you, you have learned many subjects in one semester in colleges, how is this any different?” I said to myself.
But now looking back, that was perhaps the worst solutionI could ever think of. In college, I had all the time for myself; not commitments to jobs, family, and my lovely daughter and wife. I could just learn till 2AM and no one cared. If I had classes tomorrow I would simply skip them. It is different now. I have families to take care of, I need to rest and take care of myself better. I realize now that I am not what I used to be; and that I have evolved. Learning all these things at once is a suicide mission, I would never going to make it.
The second reason why I failed is that there is no purpose on why I would learn these languages or platforms. For example, I struggled learning Golang because I had no idea why I would acquire the skills in the first place. Programming languages are useless to possess if you do not implement them to tackle real-world problems. I was motivated to learn because “it was the newest, coolest language”, not because I actually want to tackle any solutions. Moreover, the reason is I kept failing is because I think by learning these languages and platforms, I would become a better developer. Although that sentence is partially true (I learn more languages), but without the real-world problems that I want to solve, what I learned has become meaningless.
How I manage my self-doubt
The following tips has helped me a lot in navigating through my journey.
1. Realize that impostor syndrome will never completely go away, and managing your expectations is vital
We are humans after all, and having insecurities is completely normal. We possess skills that some people do not have, and vice versa. To find an end-all solution to make this uncomforting feeling completely go away is a losing battle. What we can do, just like other insecurities, that we accept the fact the we have weaknesses, embrace ourselves including what we are and what do and how we have progressed, and we have more to learn. You will never be an expert in all technologies in the world; that is just impossible. This thought has liberated me in many ways, that I realize I am just a human, but at the same time I am always learning. It is okay not to know everything.
Managing your self-doubt by acknowledging the uncomforting feeling but at the same time not letting it control you is the essence here.
2. Learn and interact with others by using the T approach
You can be an expert in one topic but at the same have “surface knowledge” on other technologies. This is often called the T learning approach, where you are an expert in one field (hence the vertical part of the letter T) but at the same somewhat educated in other fields (The horizontal part of the letter T), although not as deep enough compared to the field you are expert on. This approach helps me lot in a sense that it reiterates my realization above (self-doubt will never go away), but liberates me to learn on what I am good at.
For me, I went to seminars to know what’s going on out there, but at the same time, keep reminding myself that the speakers obviously know more on the subjects than I do; but I do not need to know the details if I am not deeply and completely interested. The surface knowledge is enough. Have a meet-up with other developers, preferably outside the company you work for, as a safe space to utter your uncomforting feelings and acknowledge others’ insecurities as well.
3. Acknowledge your accomplishments
I have kept a list in my Notion on my achievements. It includes every contribution that I have into every project, whether it is technical or just a sound advice, throughout my career. I kept it to remind myself that I deserve to be where I am right now, and I can excel more at what I can do. This helps me a lot, by slightly raising my awareness to my own accomplishments, I am motivated to learn more to become an aspiring software craftsman.
4. Find your WHYs in tackling real-world problems
This is perhaps the most impactful action that I have done so far. Without a real-life problem to solve, the skills you acquire is pretty much meaningless. If you have a real-life problem to solve, but not passionate at it, you will be dreadful while doing it. I realized this two years ago and I tried to find an industry where I feel like I can contribute the most, and most importantly, get me up in the morning.
Finally, I found my passion in payment industry. The industry itself is ever evolving, and never run of innovative ideas to perform payments in many unique ways. For example, when I develop a technology that allows people to pay with QR code, it makes me genuinely happy and I know find my WHY, that I work and develop technologies so that my contribution actually impacts lives around me. I realized it was not the money or the benefits, but it was the feeling of contributing to the society that has pushed me towards becoming a better engineer.
5. Plan your learning one-by-one
Remember the stories on why I failed because I tried to learn everything at once ? Yeah, that was a bad idea. But the idea of learning is actually great if (a) I have real-world problems to tackle, and (b) I try to learn them one by one, on my best abilities.
The point here is to not rush things when learning, and always take it one at a time.
And finally, it all comes down to you.
The tips and stories above revolved around me managing my self-doubt. On this article, I offer some advices that definitely works for me, and hopefully works for you too! However, I am also not trying to tell you the way I do is right; or there is no other ways to do it. I just want to share my journey on convincing my inner-self that I am worthy, and I can one day become an aspiring software engineer, It comes with a lot of pain, and many sleepless night doubting myself, until I find a way that works me. The process is iterative, and I must warn you that you will fail, but eventually you will find what works for you.
I talked to developers who feel the same way and they have their own methods which are tailored to them. Take many advices from different people as many as you can, and try to implements some of them into and integrate them into your daily life. If it does not work, it is okay. Try other methods that may work for you. The ways or HOWs to manage your self-doubt is important, but they are not the main goal. The main goal is to manage your self-doubt and find happiness in what you do.
And always remember, you’re a completely a normal human being. It’s normal and perfectly fine to have flaws. Just remember the process crafting our skills to becoming a better developer is a long and winding road. It may be painful, but at the same time you will remember the hardship you’ve made, cherish the friends and colleagues you have made along the way, and the small little things and flaws here and there that makes us human.
See you on the next one.