I’m not sure who should get credit for the aphorism “Software is never done … it is abandoned,” but it seems a corollary to Lehman’s laws of software evolution. Meir “Manny” Lehman worked at IBM’s research division from 1964 to 1972. Lehman’s studies of software development lifecycle provided a foundation for his early recognition of the software evolution phenomenon. After IBM, he became Professor and Head of the Computing Department at Imperial College London and then Professor at Middlesex University. I’ll discuss three of his eight laws that resonate the most with me, and their implications.
Functional content must grow
The functional content of a software system must be continually increased to maintain user satisfaction over its lifetime
This is a good thing! People like using your software! They will find ways to use it that you hadn’t thought of. They will have wonderful ideas on how it can be more efficient and more comprehensive. But if you don’t keep releasing new features and enhancements to keep up with their requests, they may become dissatisfied and move on to something else.
Complexity must be managed
As a software system evolves, its complexity increases unless work is done to maintain or reduce it
This is in reference to increasing software entropy. As new functionality is added, the software will eventually become more complex and more disorganized as it departs from its original design. At some point, it may well be time for a redesign. That in no way means that the original design was a failure, just that the system has evolved, which is a good thing! This concept of software entropy is orthogonal to technical debt. Taking on technical debt may lower complexity when easier short-term solutions are selected over better longer-term solutions with higher complexity and longer implementation times.
Quality may appear to be declining
The quality of a software system will appear to be declining unless it is rigorously maintained and adapted to operational environment changes
The environment that our software operates in is likely to be ever-changing. There will be new platforms, new operating systems, new devices, new frameworks, new protocols, new databases, new APIs, and new resource constraints and unconstraints. “Adapt or perish, now as ever, is nature’s inexorable imperative.” – H.G. Wells
Software evolution is not the enemy; it is the consequence of a successful system.