Wash Your Hands

I have been in software for 15 years and given the current insanity, who knows how much longer it will be before we are all forced into the phone factories. So, here is a bit of a software engineering retrospective as an open letter to developers, leadership, executives, and board members.

The field of software engineering is filthy

A little over a hundred years ago we discovered germs. Scientists found microscopic life living everywhere and shortly those small life forms began to get connected to macroscopic effects. Some doctors and nurses began to take notice of the new theory and began advocating for the washing of hands prior to dealing with patients. Those enterprising doctors and nurses were treated with scorn by older doctors well after science proved the effects of that microscopic life. As the morbid saying goes “Science advances one funeral at a time”, and only as the old guard passed the torch did hand washing gain widespread acceptance as a necessity.

Software does not wash its hands

The cause and effect between a surgery and a patient dying of dysentary was just far enough apart that the link could be denied. Only through emperical study could a light be shone. Likewise, a software project dies slowly enough that people will deny cause and effect. Software engineers serve as disease vectors, spreading the contagion project to project, never staying anywhere long enough to see their failures. An army of Typhoid Marys.

An open wound

Bad patterns appear and reproduce. Bugs proliferate. Broken domain models force broken designs. There is no silver bullet to the problems, so we are compelled to ignore them by others. We normalize the problem. We watch bugfixes go from taking a few minutes to taking a few days to taking weeks, but many of us assume that that is inevitable. Most engineers have never worked on software that isn’t thoroughly compromised by problems. Like doctors of old, we start to believe disease and death and are a normal part of our work.

A culture of slow failure

Rewards and recognition are given to teams whose projects are breaking weekly. Long hours of firefighting gets commendations when they should get condemnations. Everyone is compelled to cut corners and to throw best practices under the bus in the name of pragmatism. Discussions are halted on the first half baked idea that comes up. Those brought up in “don’t wash your hands” culture seek to re-implement that culture at new jobs.

An ounce of prevention is worth a pound of cure

A doctor washing their hands prevents the diseases living on their hands from spreading. A software developer must practice mental hygene. A software developer must practice code hygene. Understand what patterns are easier to change. Consistently refactor to good patterns as early as possible. Fix domain model issues before they spread chaos.

We can make a better software. We can stop so much pain and suffering. Learn how to write testable code patterns. Learn how to write cheap and effective test suites.