22 rules to follow to become professional developer
Tags: beginners, career, ethics, craftsmanship
Published: 2020-11-16 22:00:15

Inspired by _The Clean Coder_ of Robert C. Martin.

***1. Being professional means being responsible.***

  Non-professionals leave responsibility for the job they do to their managers. Professionals take responsibility, if they did a mess - they will clean it up.

***2. Professionals don't create bugs.***

Professionals take responsibility for their imperfection. *"The fact that bugs will certainly occur in your code does not mean you aren't responsible for them".* Professionals error rate should decrease over time and get closer and closer to zero, even if zero is virtually impossible to achieve.

***3. Professionals don't release code to QA if they are not sure it works.***

Releasing code to QA if we don't know whether it works is *"desperately expensive behavior"* and *"ruins schedules and undermines the confidence of the enterprise in the development team"*.

***4. Professionals test their code.***

That's the only way to be sure that their code works. **The only proper way.** 100% test coverage is their goal.

***5. Professionals know The Boy Scout Rule and use it every day.***

*"Leave the campground cleaner than you found it".* Leave source code you found, a little bit better, each time.

***6. Professionals read, learn and practice after working hours.***

It is not an employer responsibility to train developers, give them time to learn and make them marketable. Some of them do that, but that is a favor, not responsibility. *"True professionals work hard to keep their skills sharp and ready. It is not enough to simply do your daily job and call that practice"*.

***7. Professionals have the courage to say no to their managers.***

Good managers expect that from them.

***8. Professionals don't promise to try.***

Trying usually means putting extra effort. But if you don't have reserve of energy, don't have a new plan and original estimates are still reasonable, then dishonest is promising to try.

***9. Professionals don't hope.***

Hope destroys projects and their plans. If something needs 10 man days, it won't take 8 man days. Professionals make sure their stakeholders are aware of the situation, they don't let anyone else have hope.

***10. Professionals deliver what really needs to be delivered.***

It is common that provided requirements are not the actual needs of the customers. Usually, clients don't know what they want or need, before they see it. They don't know how to describe and precise their expectations. Professional developers know that and proactively confirm the requirements they got with the real needs of the clients.

***11. Professionals do not code when they are tired or distracted.***

They know that otherwise created code will be incorrect and have to be redone.

***12. Professionals know that development is a marathon, not a sprint.***

They conserve and care about their energy and creativity. They know how easy is to miss elegant solution just because of being tired.

***13. Professionals know long-term consequences of overtime work.***

They agree to work overtime only if it is not a common long-term situation and their managers have fall-back plan in case overtime work won't help.

***14. Professionals know how to estimate based on low precision requirements.***

Business needs to authorize projects based upon estimates. Professionals know that they are not sure exactly what they are supposed to deliver, so they make sure that their stakeholders understand the uncertainty by including error bars to their estimates.

***15. Professionals have a single definition of done - done is done.***

Done does not mean something is waiting for code review, or waiting for QA review, or is in any other status than actually DONE.

***16. Professionals have the courage to leave boring meetings.***

But they remember that there's no need to be rude and say "This is boring!".

***17. Professionals are not passive-aggressive.***

They do not agree just to end a conversation and then sabotage a result by refusing to engage in a solution. They never think or say things like "you've got what you wanted, that's your problem".

***18. Professionals know priorities.***

*"Professionals evaluate the priority of each task, disregarding their personal fears and desires, and execute those tasks in priority order"*. By doing this, they avoid *priority inversion*.

***19. Professionals don't tolerate mess.***

*"Professionals do not succumb to the temptation to create a mess in order to move quickly. Professionals realize that "quick and dirty" is an oxymoron. Dirty always means slow! We know that messes will slow us down, causing us to miss dates and break commitments."* 

***20. Professionals manage their stress.***

By trusting their disciplines. Hard time is not the reason to abandon them, quite the opposite - that's the time to pay special attention to them. The only way to go through the pressure is to rely on what we already know works, so e.g. if you usually follow TDD, don't stop it. Professional developers don't rush - that's the easiest way to go into a deeper hole and create a bigger mess. Remember point 19th?

***21. Professionals pair.***

That's the most efficient way to solve most problems. That's also the best way to share knowledge with each other. Professionals teach young developers discipline and skill of being a craftsman, they guide next batch of software engineers to maturity.

***22. Professionals are team players.***

They keep an eye out for teammates and help them when they are in need.