Software development is a craft. We tend to call it “engineering”, but most of the time, it feels more like plumbing or carpentry. Most of the time, completing a task does not require any inventiveness. Sometimes we fool ourselves into thinking that we are more than a craftsmen, engineers even, and in order to verify our bias, we try to be clever where no inventiveness is required. This only complicates things, both in the moment and the future.
Because software development is a craft, it is perhaps fair to deduce that principles which apply to crafts also apply to computer programming. An efficient workshop is, invariably, a tidy workshop, where every tool has its place. Consistency is the key to completing tasks at a constant pace. When nothing is amiss and there are no surprises, it is easy to make plans and execute them. To keep a tidy workshop, you must always be knolling.
An efficient team is, invariably, a team that keeps the code tidy and all external aspects of it up to date. Always be knolling. This does not directly contribute to the solution or success of the current task, but the current task is not your entire job responsibility. In the long run, your job is to complete tasks consistently and in accordance to specifications. If you’re held up by ancillary tasks such as upgrading dependencies or unwinding an abstraction that was meant to solve duplication that turned out to be incidental, then you have failed to keep a tidy system.
Keeping a tidy system is not only useful to you as a programmer, it is also useful for team leaders because it helps them to accurately report progress and estimates to management. Another important aspect is the psychological well-being of the team. A tidy system is a joy to work on. You do not dread a task because you know that you are going to have to work on poorly maintained part of the system or because you’ll have to edit code that offends your sensibilities. Instead, what you get is the dopamine boost that comes with closing the task in the issue tracker after you’ve completed it and verified that it works.
A software project is never complete. It can always be extended and changed to take on new roles and fulfill new design criteria. This is perhaps also true of physical items such a furniture, but software has more possibilities. Notably, this is where software development differs from other crafts: it is more dynamic. This is a an extremely powerful attribute of software. Just imagine having the possibility of morphing a regular kitchen chair into a wheelchair or a rocking-chair just by carving an incantation into its seat.
In order to exploit this powerful aspect of software that sets it apart from all other things, it must be possible to actually make changes to the software. An untidy system resists change and stands in the way of progress. By constantly clearing away detritus, we can take advantage of software’s full potential.
Consistency enables change.