November 18, 2015

Good programmers are irreplaceable, bad are indispensable

This article walks through an important aspect of code maintenance; responsibility. Who is responsible for the code quality, the programmer, the supervisor? Is coding a creative process, can we call it an art form?

The statement above may give away a little, as a programmer, I write this to other programmers and the people giving leadership to coders. When we agree that programming can be an art form to some coders, e.g. security researchers (i.e. hackers), we can see people can take pride in the work they deliver. An example can be seen in the easter egg concept, adding a fun piece of software to the whole, which usually creates extra value (not to the customer, but to the fulfillment the coder gets, and other like minded who enjoy the added feature).

When browsing to the most popular social media for coder; Github, we see a lot of projects that are badly documented and commented. For coders, documentation includes diagrams and READMEs that give us an overview of what is in front of us. The comments refer to pieces of text, included in the code, that gives future readers an insight in the choices made by the author. People involved in coding know that you usually depend on all kinds of libraries (bundles of code), which usually are maintained on Github. Besides documentation, coders should do re-factor sessions from time to time, to structure the code, dividing them in libraries. This sometimes makes the code a bit less efficient, but way more readable and usable (keeping in mind that a coding hour is more expensive than server power). See it as pasta, we can serve it to you as spaghetti, macaroni or lasagna, while you cannot get a grip on what’s going on in the spaghetti, the macaroni is at least split into parts, but the lasagna makes sense!

This brings me to my point, responsibility. Should the coder be responsible for the code layout, the re-factor time planned and taking the time to properly document and comments his code? If we agree that coding (creating something new, not creating the same type of website over and over) can be seen as art, we can agree that we give them the freedom to spend time on those things. Just as we know that an occasional visit to a funny picture website can stimulate the creativity of our designers, we should provide the freedom to coders to do their re-factoring.

But stop, you are telling me we should let our coders make the code pretty so it becomes more THEIR code, while I pay them? Let me show it from a business perspective. We all know that good programmers are hard to find, if they are good, the can work for any company these days. As a programmer, I’ve read enough badly structured and documented code that I have sworn to never accept to participate in it!

This brings me to the header of this article; irreplaceable vs. indispensable. When a coder agrees on focusing on the end product and not on the quality of his code, he becomes indispensable. When he leaves the company, the code he worked on alone can be seen as a black box. You can still use it, but if something happens inside, finding a solution can be more expensive than starting from scratch. On the other hand, when a coder takes his responsibility and creates a decent product and good quality code, he is irreplaceable. The other coders learn from his strive for clean code, and while that takes the product in the starting phase more time to develop, it will pay back itself. And if he leaves, you’ll miss him, your next coder will not start on the knowledge level he was, but he is able to understand the work that he gets handed over.

Blog by