Oct 1, 2021

Software Version Anti-Patterns

Software versions are an important software interface and are subject to the same dysfunctional influences as the rest of the software world.

Keeping Up With the Joneses

Competitive version numbers as marketing. Bigger is better, after all, and if our competitors are on version 7 then we should be too!The Firefox release history is an interesting one. Firefox released 4 major versions from 2005 to 2010, at an approximate annual rate of 1. Then, apparently feeling the heat from Chrome's version-happy release schedule and perhaps feeling left behind IE 9.0, decided to release 3 major versions — 5.0, 6.0 and 7.0 — between June and September 2011, yielding an insane annual rate of 9. This confused everyone, to the point of becoming a source of amusement.

When I Feel Like It

Projects run by a Benevolent Dictator for Life are particularly subject to this, after all, they are the creator and releases aren't just code, they're a form of creative personal expression. Besides, the BDFL's favorite number is 8 and with Mercury in retrograde it just doesn't seem like a good decade to change minor versions.

The Linux kernel release history, on a minor version odd/even unstable/stable cycle for years, got stuck breaking interfaces and developing major features within 2.6.x point releases for 7 years before inexplicably jumping from 2.6.39 to 3.0 to 3.1 in a period of weeks with little explanation. Indications of arbitrariness at high levels of an organization suggest dysfunctionality elsewhere.

Version? What Version?

Firefox has announced plans for a Zen-like lack of version numbers, and they are making a huge mistake.

Version numbers are actionable data which provides users with a choice. The magnitude of change between the current and new version communicates approximate risk/reward. I know that if I install a new major version that it could potentially break stuff, but it's my decision to make and since I am involved in the change I can schedule it to minimize risk to myself and my customers and I know to be on the lookout for problems.

Removing this option means my software might break at any time and I can do nothing to stop it. Furthermore, if something does go wrong, what can I do about it? I won't even know whether the problem was actually caused by an update or not since I won't know if an update has happened at all. And if an update does cause a problem, what can I say or do about it? "Today Firefox started acting strangely." I don't know what version it's on or how to get updates so I can't roll back and I can't schedule upgrades to minimize risk, so my browser might crash or freeze in the middle of a product demo for all I know.

Painted Into a Corner

A victim of our own success! We never gave developers a proper feature-detection API, so they relied on hardcoded version numbers and arcane side-effect-measurements and huge swaths of applications break if we update the version number(!)

This tends to happen whenever a system supports that supports a lot of external code such as hardware and operating systems, but can bite libraries and plugin-supporting applications as well. Just such a problem has bitten Intel's x86 chip and Microsoft Windows NT, resulting, eventually in the x86's CPUID instruction.


Ryan Flynn is a programmer and problem solver.