I happened to bump into an old friend whilst out in my conference and office tours yesterday. We chatted for a long time about software, and he had some truly unique perspectives on things, as is his way.
One thing he said was, “All good software is dead.” It was a loaded phrase, and he’s taken it as his motto of late. I’m going to try and parse through his Socratic parlance to get at, I hope, his meaning.
Essentially, the phrase is meant to place emphasis upon the glory of unevolving software. “Good code,” by his definition, is code that will never, ever change. Updates are confusing. When an API is changed, it breaks everything attached to it. When a language is changed, developers have to relearn, and that takes time. In a sense, when in the programming groove, physical memory is as important as mental memory: A developer’s fingers are trained to build the same types of commands over and over.
Change how one of those commands is worded just slightly, and it’s like changing the fingering on a saxophone for a specific note. The automatic mental blend of mind and body achieved when hammering out code during a really intense session is interrupted by the speed bumps of change.
It’s something I myself often forget as I rush to cover the newest, coolest thing in software development. Thanks to the Internet, it’s quite easy for new things to catch on and spread like fads and memes. But in software development, the cool new thing of today isn’t truly useful until it has stopped being updated and stayed the same for long enough that developers can have it memorized.
Good code is dead code. It’s the reason so many legacy systems remain in enterprises. You don’t add to that legacy environment, or modify it: You build on top of it because it is a solid foundation, and it’s been sitting there, plugging away for 15 years without so much as a segfault.
While it’s tempting to run to the cloud, rip and replace, and throw away entire architectures at a time, just remember that developers hate change. Just look at what Apple’s done to its iOS developers recently.
With the coming of spring, Apple changed its iOS developer portal website. The changes weren’t dramatic, but they did move around some links and URLs. As a result, everyone building documentation or applications that needed to pull info from that portal were left with broken scripts.
It’s this sort of day-to-day change that can’t be managed. All of the coordination, agility and planning you have can’t stop change from the outside. Sometimes it’s better to eschew the new for the old, if for no other reason than everyone can at least agree on what the old thing is, and understand it.