Matt Quail has blogged about a first law of software complexity. It’s an analogy of the First Law of Thermodynamics, also known as the Law of Energy Conservation. The analogy Matt is that without radical changes in abstractions, a complex system will remain complex. That is complexity is conserved.
I replied in his blog about The Second Law of Thermodynamics, in that closed systems tend to maximum entropy. Entropy means maximum disorder and if you can make the inference that disorder implies complexity. Then a evolving software system without significant external contributions tends towards entropy. In otherwords, to avoid entropy you’ve got to be constantly adding energy, and in information terms this means organized knowledge. So you have to keep on refactoring, reducing disorganization into organization.
Keep in mind for both laws, when we talk about a closed system, we don’t mean static and unchanging. There’s a Zeroth Law of Thermodynamics, namely thermal equilibrium. Well I’ve got a Zeroth Law too for complexity. Software systems tend towards equilibrium with their environment. In otherwords, in a real world environment where change is unavoidable then a system is under constant pressure to require change.
So in summary, the Laws of Sofware Complexity are:
Laws of Software Complexity
- Zeroth Law. Change Equilibrium – Change is Unavoidable
- First Law. Complexity will be Conserved – Incrementally changes do not change inherent complexity
- Second Law. Software Complexity tends to Maximum Entropy – Aggressive refactoring tends to slow down that tendency.