I am a perfectionist.
I was and still am obsessed with doing things right.
More precisely, I am obsessed with doing the right things right (as I want to be effective AND efficient).
I always disliked phrases like:
But I must admit that over time, I learned and had to admit the truth behind them and started to embrace them.
Too many times we are so focused on making everything perfect, on taking the best decision possible, that we miss the opportunity, we don´t manage to meet the deadline, that we never publish what we have been working on ( be it your own library/pet project, a book or a blog post).
You want to buy a new Computer, or a new MTB and you start comparing prices, offers, models, to really make the best deal, until you realise the best discounted offer is long gone.
You just implemented a new feature but before giving it to QA, you want to refactor it to make code cleaner, reusable and scalable, adding design patterns and 100% coverage. But then while doing that you realise you broke something and you start over. Before you are done fixing your own refactoring, you realise you are well over the estimated time.
Or maybe it is perfect, because you started with TDD, you designed everything properly, figured out all the edge cases in advance, but you proceeded too slowly, and you are not done in time.
If it´s perfect but it´s not complete, it cannot go to production, so you did not accomplish your task.
you might be 80% perfect, but you surely 100% failed!
As long as this does not become an excuse for doing things carelessly and with sloppiness, I believe this is the secret for improvement and really moving forward.
There is also another reason to avoid perfectionism and instead move with small iterations - the feedback loop!
We need to gather feedback, we need to realise if we are going in the right direction, if we are doing the right things and if we are doing things right. And the only way to do that is expose our work to external judgement, bring it to the public (be it a real audience, or just your colleagues or boss).
If you check your direction constantly, you can correct it on time.
This is somehow the idea behind Learning In Public ( especially if you are learning, you want to immediately know if you are wrong. Therefore, don´t wait to become an expert, don't wait until your presentation or article is perfect, just publish it. If it´s wrong, someone will correct you, and you will learn from it
- Shorten the feedback loop.
- Do more. More frequently.
..even if this means making more mistakes
- Fail fast.
There is nothing wrong with making mistakes or taking wrong decisions.
Some mistakes are important for your learning process.
Some mistakes are just, well, mistakes and we should not care about them.
No need to go mad about it. Look forward.
It's over. Get over it.
In Italy we have a saying :
"Non piangere sul latte versato
Don't cry over the milk you spilled
In Germany there is a similar one:
Es ist Schnee von Gestern
it's snow from yesterday
We cant change the past, but we can act on the present or the future. Take immediate action to recover the outcome of the mistake and pay attention to the details and behaviour that brought to it.
Get up, dust off, reload, recalibrate, re-engage
Too many people are stuck when they have to make decisions.
So big is their fear of messing up, that they stop doing.
So terrible is their fear of making the wrong choice, that they refuse taking action and pick one ( or try to shift this responsibility to others, the partner, the colleague, the boss).
The more you make, the more you make mistakes. It's natural. and it's ok.
Only those who don't even try won't make mistakes.
Again, I am not saying we should be careless, and just pick the first choice without much thinking.
We should do our best to make the best choice, but in most cases we can't be sure we will be 100% right, so many are the unknowns and the external variables. We can just (and must) have educated choices.
And remember, most of our choices are not so "life relevant", so critical as we might think.
And even when they are... like quitting your safe job to go working at a startup or taking a sabbatical, moving abroad and switch career.. remember that you can never know what would have happened.
You decided to leave a big enterprise to step up from Developer to Senior Engineer and the startup failed and closed after 1 year? Yeah, maybe the big company you were working on had to cut down staff anyway due to recession. Or you would have spent the last year doing the same boring tasks in your regular position and learn nothing because with so many employees you are just a cog in the machine, while in the startup the job and responsibilities are way more fluid and you were exposed to lots of new challenges.
Whatever the outcome, you never know what it is bringing.
The goal should not be, not failing at all, rather keeping the number/value of achievements higher than that of mistakes.
Do more, make more mistakes, make more right decisions than mistakes.
I think this video from GaryVee explain it perfectly.
Here in Germany I often here about Fehelerkultur, which translates literally to Mistakes Culture and with that is meant that an organisation ( or individual ) should always handle errors positively - in english I think is is referred to as No Blame approach / blameless culture.
- Mistakes are allowed and everyone is allowed to make them. This knowledge protects against resentment within a company, as well as expensive consequences.
- The goal is finding the cause of the error, learn from it and avoid it in the future
- Promote ownership and accountability, but support who bears the consequences.
- Admission of error should be rewarded.
Create a blameless culture, so that there is no blame for a single person.
If you are delivering software and there were some error or failure in production, there are high chances that there was a problem of a process and not a single person.
So it means that you should change your process, fix the process to not do the same mistake in the future and learn from their mistakes.
https://techleadjournal.dev/episodes/60/. Tomasz Lelek
The ability of speak openly about a mistakes is paramount, therefore you need to guarantee Psychological Safety in your company and teams.
Employees should be able to talk about their mistakes without fear of sanctions or resentments. Having the courage of taking ownership could even be rewarded. Simply because if you don't allow that... you know what is going to happen?
What happens if you , raising your voice and eyes red from rage, ask a small kid: "Did you break that lamp playing with the ball in the living room?"
Well, you are simply teaching a kid to lie.
So, What happens if an employee made a mistake and are afraid of the consequences?
Well, they will try to hide the mistake, to deny their responsibility, to blame others.
Maybe they were immediately aware of the problem, but instead of raising the attention and solving the issue, they were more concerned of covering their ass making things worse.
Last year here in Germany a nurse in charge of injecting Covid vaccines, accidentally drop a package containing a bunch of doses, damaging them (probably worth some thousand euros). She was so afraid to be fired or to be asked to pay them back, that instead of reporting the fact, she had the awesome idea of replacing the content with saline solution. Harmless because saline solution is something physiological in the human body, but criminal because, well, then you think you are vaccinated, while you are not...
And what happens if employees are simply too afraid of making mistakes? If they are worried that their work, their behaviour could result in a mistake that could be heavily sanctioned?
They end up working less, experimenting less, they are less creative, less innovative, less proactive, they stick to the bare minimum and "work by the rule" which is highly stupid and unproductive in most of the cases.
This is detrimental to motivation and growth.
Remember: Only those who don't even try won't make mistakes., so the only way to grow, to improve, is to do more and try more, and allow room for mistakes to happen.
Be prepared, have safety nets, have tests, have rollback plans, have patience, have mercy, and do not over-judge yourself ( and others )
Sometimes, yes. Just by asking questions.
Working in an blameless environment where mistakes are allowed, goes together with feeling free and safe to ask questions.
Often we are not sure to be doing the right thing, but we are too afraid to ask. So we go on, and then we make a mistake. Since we are afraid to be blamed, we then try to cover it up. How bad is that?
Asking for help, of simply ask someone to double check or proof your ideas/assumptions, would have in the first place, avoided the mess.
Ask questions. Don't be afraid to ask.
- don't be afraid to look stupid
- don't be afraid to be call out as a fraud (oh.. he claims himself as a senior engineer or a technical lead but he doesn't know how to use node streams / css flex boxes / invert a binary tree / exit VIM... puah!).
- don't be afraid to be always the devils advocate, the questioning nagging kid, or the pessimist always bringing up what if? s.
Asking questions is the only way to really frame the context of a problem, raise issues before is too late, double check your are working on the right stuff ( too often we realise only during code review, that the dev got the story wrong and implemented the feature in a different/wrong way).
Most of the time it is the only way to avoid wasting time and making mistakes.
You might argue that spending time and banging your head on a problem and also making mistakes is the only way to learn, isn't this in the end the point of the Fehlerkultur - learn from the mistakes?
Yeah, not really. The point is not making mistakes to learn from them, rather accepting the mistakes if they happen as a part of the learning process.
It is true, that often you learn by doing and by breaking things, and making mistakes, but this should not be the default way of doing business ( or your job ).
If you are working on something and you are stuck, you are not really supposed to break production to learn how to do that next time, you can ask, you should ask for help.
Here often, the point how we are asking for help and what kind of help we are expecting.
Too many times I see junior (and less junior) devs not just seeking for help, but asking for the solution, and they are disappointed if I ask more questions than I give answers and often in the end I point them to github issues or documentation pages (which contains the solution or could help find one) :-). (More about asking better questions and seeking for help in this post
Another reason why Psychological Safety is important has do to with admitting your own shortcomings. We all have Imposter Syndrome to some degree, and we are all afraid of showing our weakness or tell others we don't know something. But we can't - and we are not supposed to - know everything.
- Be honest and humble when it's you admitting you don't know.
- Be supportive and helpful and not mean, when it's others asking for help.
It is OK to ask questions.
It is OK to make mistakes.
This does not mean that you should constantly nag your coworkers nor work carelessly and when a mistake happen just shrug your shoulders and take it lightheartedly.
Just do not obsess and fall into the trap of perfectionism, or be paralysed by the fear of failure.
And when you make a mistake, just take ownership, be accountable for it, but don't beat yourself up.
Learn from it.
don't be afraid to start over again. this time you're not starting from scratch, you're starting from experience.