Gall's Law

Complex systems that work evolved from simple systems that worked.

John Gall's 1975 observation, from Systemantics: you can't design a complex system from scratch and have it work. The complex ones are descendants of simple ones that were shipped and used. Skip the simple ancestor and the descendant never breathes.

"A complex system that works is invariably found to have evolved from a simple system that worked."
The Law · Gall, 1975

Big systems are grown, not designed. Start with the smallest thing that works end-to-end, ship it, learn from it, then grow it. The grand design built from scratch — the one no simple version ever shipped — rarely survives contact with the real world.

Coined by
John Gall (1975)
From
Systemantics
Echoes
MVP · iterative design
Start small

Ship the Walking Skeleton

The first version should do the smallest possible thing end-to-end. Sign in, post one thing, see it. The walking skeleton proves the path exists; the muscles get built on top of a working spine.

End-to-end · just barely CLIENT · SERVER · STORAGE · BACK
Test
Does it work end-to-end?
Skip
Polish · scale · edge cases
Then
Grow from working code
Anti-pattern

The Big Bang Rewrite

The classic Gall violation. Two years on a "from scratch" replacement, no working version in sight, deadline keeps slipping. By the time it ships, the requirements have changed and the people who knew them have left. The system never finds the version where it actually worked.

The rewrite that never lands 2 YEARS · NO WORKING VERSION
Pattern
Designed up-front · in full
Fails when
Reality differs from spec
Costs
Time · trust · people
Examples

The Web Grew · It Wasn't Designed

HTTP started as one page-fetching protocol. The web today — apps, video, payments, AI — is the same protocol with thirty years of layers welded on. Every working complex system reads like that: TCP, Linux, the iPhone OS, Notion, your codebase. None of them were built right; they were built first.

Working v1 → complex v200 1989 today
Examples
Web · Linux · iOS
In common
Shipped early · grew under load
Read this as
A design constraint
Methodology

Pairs with the MVP

Lean, Agile, Eric Ries — all of them are Gall in different vocabulary. Ship the smallest thing that proves the idea, learn from real users, iterate. The MVP isn't a marketing concept; it's the only way most working complex systems come into existence.

Ship · measure · learn · grow EACH RING IS A WORKING VERSION
Echoes
MVP · Lean · Agile
Rule
Always have a shippable version
Bonus
You can pivot from any ring
Design

Design Systems Grow Too

Material, HIG, your own design system — none of them were specced from the top. They started as a button, a font scale, a color. They grew because the simple version was used. The "let's design the whole system first" approach has produced a graveyard of unused tokens and dead components.

Token · component · system token component system
Build first
The button that ships
Then
The pattern you see twice
Avoid
Tokens for unbuilt screens
The trap

"It Worked at Small Scale"

Gall's other warning: a system that worked at a small scale won't necessarily work at a larger one — and you discover the breaks only by growing into them. Don't extrapolate; observe. The simple version proves this case worked, not every future case.

What grows · what breaks 10 USERS 10M USERS · WILL BREAK SOMEWHERE
Truth
Each scale reveals new breaks
Don't
Extrapolate · prepare
Do
Build · observe · grow
Counter-case

When Up-Front Design Wins

Gall isn't universal. Bridges, planes, payment systems, surgery robots — anything where iterating in production is catastrophic — need formal specs up front. The rule applies where iteration is cheap and recoverable, which is most of software, most of the time.

When iteration is forbidden ITERATE FREELY most software SPEC UP FRONT flight · medical · finance
Iterate
When mistakes are cheap
Spec
When mistakes kill
Most software
Is the first kind
Daily

Resist the Grand Plan

When a teammate proposes the perfect architecture three quarters out, the Gall response is: what's the smallest version of this we can ship next sprint? Force the working ancestor. The grand plan can survive that question; if it can't, it wasn't grand, it was just big.

Two questions before any build What's the smallest version that ships next sprint? Did the simple ancestor work?
Ask
"Smallest shippable?"
Ask
"Did the ancestor work?"
Then
Build

Gall's Law in the Age of AI

AI lets you generate a "complete" system in a day — and then ship something that has no working ancestor to grow from.

✦ AI Era

AI Generates Skipping the Ancestor

"Build me an entire app" produces output that looks like a system. But it has no ancestor — no simple version that anyone ran in anger, no scars from real use. The code may compile, but the design hasn't earned the right to be complex. Use AI to ship a simple thing fast, not a complex thing untested.

Generated ≠ evolved ✦ FULL SYSTEM · ONE DAY no ancestor · no scars · no learning SHIP IT SMALL · EVOLVE IT REAL
Risk
Complexity without learning
Use AI for
Faster simple v1
Not for
Skipping evolution
✦ AI Era

Iterate Faster, Iterate the Same

The upside is real. AI shortens the cycle between "working version 1" and "working version 2" — code, copy, design, all generated faster. Gall's law isn't repealed; it's accelerated. You still need a working ancestor at every step. You just get to make many more of them.

Same loop · faster orbit EACH IS A SHIPPABLE VERSION
Speedup
More iterations / week
Rule unchanged
Each ring must work
Watch for
Skipping a working ring
Further Reading