Gall’s Law

Gall’s Law isn’t really a law. It’s an observation, or a heuristic, from the early days of modern Systems Thinking. In John Gall’s 1975 book, “Systemantics: How Systems Really Work and How They Fail”, he wrote:

“A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.”

This is a great rule of thumb for helping us to create or design complex systems. 


When we write software, some people think that it is better to evolve code as you go, writing code, then changing it, then changing it again. 


Others think that this is wasteful, and that it is better to invest in in upfront design, or detailed estimation and planning, to avoid all this rework. 


How can we decide which approach is better? 


If we follow Gall’s Law, then we might have an answer. If we’re trying to create something truly complex, then we should definitely start with something simple that works, and evolve it. 


The discussion then becomes whether we’re trying to create something complex or not. This is a step forwards from arguing over which practice is best. 


In my experience, every piece of commercial software that I’ve worked on has been Complex. Such software has often been worked on by tens of people, every day for years. It can be vast, arcane, bewildering, deeply complex and almost always with too many interactions for one person to understand. 


So if our software truly is complex, then we really should give up on notions of upfront design, and instead embrace practices such as evolutionary design, continuous refactoring, and the small steps of Test Driven Development. This way, we can evolve our systems carefully into ever more complex, more useful, more valuable, software. 


Never try and design complexity. Always take something simpler and evolve it. 

Comments

Popular posts from this blog

We always start from where we are

Mobodoro

Instant Legacy Code