The word Entropy has its origins in the 3rd law of thermodynamics in which fluids and gases tend towards a higher state of disorder.
Sofware Entropy – The Beginning
Human beings are born to believe that they know what they want and they understand the needs of others in and around their area of specialty. They also believe that they can accurately specify all the requirements of a software system “up-front”.
- I know what is needed
- I can tell you exactly what is needed
- And yes, we can build what is needed
All three of the above statements turn out to be false. And even today, software developers complain that the requirements were changed and added to. Analysts are shocked that the developers didn’t use their common sense.
The outcome is a 1.0 system that is leaning towards chaos – (a high state of disorder).
Sofware Entropy – The Middle
Successful software is always evolved in order to add new features and fix current ones. Invariably these evolutionary changes to the software are done under a climate of “don’t break anything”.
This climate promotes the CACA pattern (copy a close approximation).
“Don’t break anything” is translated to “Don’t change anything” which results in the duplication of a (often large) code block with one traffic waving (diversionary) conditional placed in the path of a use case. This diversion acts to limit unwanted side effects around scenarios that the change does not pertain to.
Along with duplication it is common that
- unnecessary dependencies are created (causing cascading changes)
- overuse of loops and conditionals adds to cyclomatic complexity
- a lack of unit tests discourages developers from refactoring
Sofware Entropy – The End
Software entropy (a higher and higher state of disorder) slow chokes of agility. Software entropy acts to make each subsequent change more expensive, more unpleasant and riskier than the last.
When small and trivial changes changes to the software evoke an expensive train of activities, the end is being approached. Soon new software systems will spring up to soak up functionality that just cannot be reasonably done in the original system.
They software will be marked as legacy and will live out its days either in the corner or in the distance once it gets replaced by the “next in line”. And then it all happens again.