If you are interested in reading this article in Spanish, check out my blog:
The Developer's Dungeon
When I first started my career as a software developer over 6 years ago, I was scared, scared about making a mistake, deleting something that I was not supposed to, making dumb code, or missing some important stuff while developing a feature.
If you were expecting a story where I would tell how none of these things happened and everything was fine and you should not worry, this is not that type of story, there is not gonna be any happy unreal endings here.
I took my second job as a developer when I had less than a year of experience. On my first week, I successfully broke the production database as a consultant which caused that some employees of the client, and myself, had to stay during the weekend checking the reach of the damage I caused. I spent an entire Saturday fixing broken entries in other systems and restoring database backups. What was I exactly doing with production access on my first week, to this day I still don't know.
For years I have written code that fails to do the job, produced bugs, and delivered the wrong things. Failing builds, broken environments, blocked other people's work, and delayed releases.
In my third job (less than 2 years experience) I failed to release to production one feature we have been working on for months, when I finally got it to production it was riddled with bugs, some parts of the workflow were not usable at all.
In my fourth job (around 3 years experience) I took on the assignment of building a microservice for a feature that our company needed to survive the following years. Although I was in charge of building it I was scared to fail so I left many decisions to someone more technically capable than me, someone with years and years of experience.
Those decisions guided us through an insanely complicated implementation phase with tons of features that we didn't actually need and did nothing more than complicating the code and the deployment. Before I left that company I took care of "Refactoring" that service and heavily simplifying the number of things that it needed to do, the deployment went great and we were very happy with the implementation.
All these mistakes I made gave me some experiences that I will never forget, and I sure learned from those mistakes. I learned to check 20 times before deploying, I learned how to write unit tests and integration tests, how to smoke test on staging environments, how to make my code resilient so that failures in one feature don't bring the entire system down.
I learned how to interact with the QA, I got some insights on how they test the product so I can do extra verifications before passing the problem to another person.
I learned to take responsibility for the code I work on, take ownership for the mistakes and go the extra mile to fix them.
I learned to question features and not just blindingly build a specification that has been drop to my feet, ask questions and try to solve problems instead of just being a coding monkey.
It has also taught me what type of senior developer I want to be, do you want to be the guy who screams at the jr developer for making a mistake? (yes, this, unfortunately, does happen) or do you prefer to be the one that understands him and makes him grow? do you see a problem caused by a team member as his/her fault or as a problem caused by a process that WE as a team need to fix?
Thanks to those mistakes, and the people that have helped me along the way I learned the type of developer I want to be:
Someone who takes pride in their craft, someone who loves helping others and sees mistakes not as failures but as new opportunities to learn, someone who takes the deliberate care to make sure features are delivered in time with the appropriate quality.
I would love to say that mistakes stop happening when you become a senior, unfortunately, that is not the case, they will never stop happening, the sword of Damocles will always be there hanging on top of your head.
Even today I almost had a heart attack when for a moment I thought one of my local db scripts was running on the staging database instead of my local docker instance, all just on my second week in a new job.
Nothing happened, I knew I had the proper configuration file pointing to my local instance, I was checking the database while the script run and took the appropriate measures to revert it if anything would have been wrong, but when I saw error logs on the staging channel let's say I doubted myself a little 😂. In the end, it was just that analytics for development and staging were thrown in the same channel, that is all.
My point with this blog post is not to scare you, is to let you know that everyone makes mistakes, what differentiates developers is how they take those mistakes and what they do with the lessons learned.
If you liked this blog post please share it and let me know below in the comments. What mistakes have you made in your career? I would love to hear them so we can laugh together.