If you are interested in reading this article in Spanish 🇪🇸, check out my blog:
The Developer's Dungeon
For many years I believed that the only thing that constituted being a professional was being paid for doing something. I practiced Muay Thai for many years, so being a pro fighter meant being paid for fighting (apart from the fact that you use fewer protections during fights and sometimes rounds are longer).
In a previous life, in a previous career, one professor told me that a professional would not speak about the things he has no knowledge about, he would not lie. I thought that was a very cool idea so I added it to my definition, curiously the other day a friend told me that I don't speak a lot, but when I do I always say something smart, so that professor might have influenced me more than I have realized at the time.
Until a few years back I thought I was a professional developer, it wasn't until I read The Clean Coder by Robert C. Martin AKA "Uncle Bob" that I started analyzing my processes, my actions, mistakes and realized that maybe I wasn't holding myself to the correct standards.
In this article, I am gonna point out my past mistakes and how I think a real professional should behave.
For the first 2 years as a "professional" software developer, I worked at multiple consultancy companies, everything had to be done fast, sometimes there was no QA team, sometimes no designers, everything was in a hurry and the situation was pure stress, but those are not excuses. Out of my own lack of self-confidence, I have been pushed around to produce sub-par work, but it was me who let it happened.
- Out of laziness, I did knowingly delivered faulty software.
- I didn't write a single unit test in 2 years.
- I didn't produce the best code I could, I went for the fast easy solution multiple times, bringing future bugs and problems.
- I have accepted to 'try' to deliver on certain deadlines even when I knew it was impossible to get it done in that timeframe, even working full weekends multiple times.
- I have been coerced to accept certain solutions from people that were not technically capable enough to understand the real implications.
- Out of my own behavior, I have seen code rotten to the point were application development becomes incredibly slow.
- I have wasted time during working hours.
- I thought that it was the obligation of my employer to teach me the right tools and practices for my job.
During those years I thought this was what working as a developer was like, I mean everyone around me was doing the same thing, the projects had no tests, management called all the shots on how things should be implemented and when. My word as a developer was not respected one bit and now I finally understand why.
I am pretty sure that I am not the only one in the community that has done this, I have talked to many developers throughout the years to know this is not strange.
Unfortunately, I am starting to think we don't have a profession. We don't have a set of rules, a set of common practices, ethics that every developer should follow in order to be considered a professional developer. We also don't have a common organization that will take the necessary actions when a developer behaves against our common set of standards.
I don't agree with everything "Uncle Bob" says but I do agree that until this happens we should at least start behaving like professionals. Here are a few rules that he has pointed out:
- The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate.
- I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.
- I will make frequent, small releases so that I do not impede the progress of others.
- I will fearlessly and relentlessly improve my creations at every opportunity. I will never degrade them.
- I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity.
- I will continuously ensure that others can cover for me and that I can cover for them.
- I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty.
- I will never stop learning and improving my craft.
Since those problems became clear for me I have been behaving against a higher set of standards, I have fallen into the 'Software Craftsmanship' community.
Every piece of code I produce has a set of tests attached to it. Since the project didn't have tests, I started doing tests on my own and improving the code, eventually, the team joined and know we have quite good code coverage.
When I write a bugfix I don't go for the easy fix, I first come up with the best implementation, sometimes it does happen that the best implementation is not viable because of external constraints, but that decision is made by conscious analysis, not out of laziness.
If someone that doesn't belong to the development team tries to impose a deadline on me I analyze if that deadline is feasible, if it is not I hold my ground and say that under those requirements that deadline is simply not possible, then I try to find a compromise that can work for both parties.
During my office hours, I always work. It is my job to do it, I am being paid to do it. Nothing to argue.
Although there are certain situations where your employer is responsible for paying you to improve yourself (if for instance, you need to learn certain tech so you can implement it in the company), I don't leave my general improvement to my employer, I am in control of my career.
When I go home I read books, I listen to podcasts, I code on other paradigms and languages, it is my responsibility, and also is super fun 😄
I have to say that so far my career has improved a lot since I changed my mindset, I have been recognized by my peers and coworkers, I have taken responsibility for my triumphs but also for my mistakes. Being a professional is not easy, it is far easier to not have any type of standards for yourself, but there is also no reward in doing it the wrong way.
I hope you liked the article, please let me know in the comments if you have seen others or even yourself behave like this before, do you think I am missing something? also, let me know in the comments.
If you like this post please share it 😄