I stumbled upon something I’ve never heard before, that is “The 8 Laws of Software Evolution“. I haven’t quite digested its meaning however for reference I’m reproducing it here.
- Continuing Change – A system must be continually adapted else they become progressively less satisfactory in use.
- Increasing Complexity – As a system is evolved its complexity increases unless work is done to maintain or reduce it.
- Self Regulation – Global system evolution processes are self regulating.
- Conservation of Organizational Stability – Unless feedback mechanisms are appropriately adjusted, average effective global activity rate in an evolving system tends to remain constant over product lifetime.
- Conservation of Familiarity – In general, the incremental growth and long term growth of systems tend to decline.
- Continuing Growth – The functional capability of systems must be continually increased to maintain user satisfaction over the system lifetime.
- Declining Quality – Unless rigorously adapted to take into account for changes in the operational environment, the quality of a system will appear to be declining.
- Feedback System – Evolution processes are mult-level, multi-loop, multi-agent feedback systems.
The laws seems to come from feedback control systems, the interesting take away though is that these laws have been empirically validated! I however am curious how they relate to my early speculation on “Laws of Software Complexity“. It’s a bit dense however, the 1st, 2nd, 5th, 6th and 7th Laws seem to coincide with the Complexity Laws. However, I still have to grasp the significance of the 3rd, 4th and 8th laws. Incidentally, the Agile Development folks seem, for some strange reason, to love this stuff!