Gall's law

expression

programmingops culture

A complex system that works is invariably found to have evolved from a simple system that worked.

John Gall wrote it in Systemantics (1975), with the sharper converse: a complex system designed from scratch never works and cannot be patched into working; you must restart from a working simple system. It is the theoretical backbone of iterative delivery, MVPs, and the strangler-fig pattern for rewrites. Big-bang redesigns fail on schedule; Gall explained why in advance.

A complex system that works is invariably found to have evolved from a simple system that worked. John Gall's corollary is the sharper half: a complex system designed from scratch never works and cannot be patched into working, so you must start over with a working simple system.

The claim is stronger than most design advice and holds up remarkably well. The internet grew from ARPANET, the web from a document-sharing tool, Unix from a small system for a spare machine. The grand unified rewrites that were correct from the start are mostly remembered as expensive cautionary tales, because a system nobody has run cannot have discovered what it actually needs to handle.

The practical reading is not to avoid ambition but to sequence it. Build something small that genuinely works end to end, put it in front of real conditions, and grow it in response to what you learn. That is also the argument against the big-bang rewrite, since replacing a complex working system with a complex new one skips the stage where all the necessary complications were discovered, and rediscovering them in production is how the replacement fails.

All glossary entries