Are you usually very self-confident and convinced you can do everything and you are very good at what you do or are you mostly full of doubts and feel you are not very good and you don´t deserve what you have, and what you achieved is just for some sort of luck?
The web is full of posts and videos telling us about Imposter Syndrome and its less known counterpart the Dunning Krueger Effect ( I also talked about the latter in this post).
Most of the time these are posts that try to open our eyes and reassure us that:
The world is full of people that are feeling like an imposter. Don´t worry, even the most experienced senior engineer, has sometimes doubts and tries to kick out of his brain that voice telling him that "No, he won't fix that bug or implement that feature because he is not so good as he thinks, as everybody think. That his career is a fraud and he does not deserve that title."
Well.. what I want to tell you here, is the opposite instead!
If you feel that you are not good enough.. well, it might be true!
If there is a voice inside your head whispering that you were lucky to find this job or to get that promotion, well...
Listen to that voice, nurture it. It can become your best friend.
Developers are a weird bunch.
We can jump from feeling geniuses to self-pity in a matter of seconds: when we first run our program and it seems to work, and then we discover and get stuck for hours with a bug.
In my career, the best developers that I met, were not those arrogant smartasses who always thought they were right, rather those humble guys who questioned themselves and worked (and learned) hard.
Why? because they were aware of their limits, their flaws, or simply they had enough experience to see projects fail, great designs become monsters, and codebases transform from snippets of code poetry into balls of mud.
- Do you really think you don't need tests?
- Do you really think your code design is the best?
- Do you really think anyone reviewing you is just a nitpicking asshole with nothing better to do?
- Do you really think you are able to implement a feature better and faster and in a more stable and secure way than something that was developed and released by a collective of professionals and that is used (and reviewed) daily by thousands of people?
I don't. Not anymore at least.
I would not refactor anything if I don't have a unit or integration test.
I would not waste time reinventing the wheel, and I would just pick an existing library.
I would read the docs over and over again of any tool and framework we adopt.
and I would ask for help anytime I am not sure of something.
Something that I noticed in many developers, especially if they just left the "junior" title behind, is that they become a bit overly confident. (while I already wrote here about being a pessimist!)
They think that if the feature they implemented doesn't work it is because there must be a bug in the 3rd party lib, or the external API is flaky, or they come up with something super complex when there is already something native doing the same ( and taking care of all edge cases they haven't thought of) and so on.
They like to write lots of code, very complicated code, to prove themselves and their team they are very good.
The truth is, you don't have to write hundreds of lines of complicated code to show that you work a lot, nor that you are smart. ( sometimes I can spend 2 days on a bug and the fix is one line of code or I can refactor for a week and throw away hundreds of lines and tens of files...)
As I said above, the best developers I have ever met were probably those affected by the Imposter Syndrom, while the worst were those affected by the Dunning Krueger...
Feeling insecure, being convinced that you are not good enough can be a good thing.
Listening to that voice telling that you suck, can really help you in your personal and professional growth.
If you think you can, you can.
If you think you can't, you are right!
while I was writing this post I googled some quotes and I found this one, and made me laugh hard. ( i don't mention the author because I am not sure, there were plenty, all of them somehow improbable...)
I am a firm believer in strong will, discipline, and hard work.
In sport, work, or life in general, we always must have this positive feeling we are able to achieve what we have in mind. On the other end, I cannot deny that I can't do many things, that when I feel incapable of achieving something, it is, well, true!
I can not do 100 pullups.
I can not play piano.
I can not write complex algorithms.
I can not... now! but, (if I'd really want it and work hard for it), I might be able to do that in the future.
Of course, listening to that voice does not mean that you have to beat yourself up, feel shameful, be paralyzed in self-pity. The opposite indeed. You must fight back with all your strength and self-confidence.
Fight back the Imposter Syndrome, not by kicking that thought away, rather using it to your advantage.
Question yourself, and prove yourself, all the time.
- Do you think you remember by heart that API? ( open the docs, you might be wrong, or you might find out that over time it changed anyway)
- Are you really sure that that famous package does not have that feature? are you so sure that that feature is so special and no one in the world ever needed something like that and you are the first one implementing it? Read more documentation, google more and better.
- Are you sure your design is flawless? Ask for a review, be eager for feedbacks, demand different perspectives.
Question yourself, and prove yourself, all the time.
Find ways to be proven wrong.
Get out of the comfort zone, try stuff you have never done.
Don't be the smartest person in the room: Change jobs, teams, companies, the moment you stop feeling like an imposter it probably means that it is time to look for new challenges.
your struggle is your strength. If you can resist becoming negative bitter and hopeless, your struggles will give you everything. Bryant Mc Gill
You will become better, you will learn, you will deserve every piece of your achievements.