Software and engineering
Gall's law
A complex system that works grew from a simple system that worked; one designed complex from the start rarely works and cannot be patched into working.
John Gall, Systemantics (1975; reissued by Quadrangle in 1977), a satirical book on how systems fail, written by a paediatrician.
Gall's rule has three parts: 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; so you have to start over from a working simple system. The mechanism is feedback. A simple system that runs is a test of your understanding, and each piece you add is tested against something that already works. A system designed whole gets no feedback until integration, by which time every untested assumption is interacting with every other one, and the fixes fight each other.
The FBI's Virtual Case File is the textbook case. It was to replace paper files and an obsolete case system in a single 'flash cutover', from an 800-page requirements document, with no fallback. The Department of Justice Inspector General found that after three years and $170 million the FBI had no usable system, and IEEE Spectrum's post-mortem counted 700,000 lines of code and $105 million of unusable work. The rule in practice is the walking skeleton: push one request through every layer in production before any layer is finished, then grow the system where real use pushes it, keeping it working at every step.
Gall wrote satire, and 'invariably' is a joke as much as a claim. Some systems cannot be grown into existence: a bridge, a cryptographic protocol, a database engine's storage format, a compiler for a new language all need a design before anything runs, and they are built from simple working parts rather than from a simple working whole. The law is also misused as a reason never to design. Evolved systems accumulate scar tissue, and sometimes the right move is a deliberate redesign, done as a sequence of working systems rather than one leap. The usable content is about feedback: get something working early, and keep it working as it grows.
Example
The FBI's Virtual Case File, part of the Trilogy programme, was meant to replace paper files and the obsolete Automated Case Support system in one 'flash cutover'. The contractor SAIC delivered the first version in December 2003, after an 800-page requirements document and around 400 change requests in a year; the FBI did not accept it. The Department of Justice Inspector General reported in February 2005 that after more than three years and $170 million, nearly $51 million over the initial estimate, the FBI had no usable system and no timetable for one. IEEE Spectrum's post-mortem that September counted 700,000 lines of code, $105 million of it unusable, and the project was killed in April 2005 while agents went back to paper and the old system.
Where it applies
Ship the thin version first: one path through every layer, in production, with real users, then thicken it. For an agent system, start with one tool and one loop, measure it, and add the planner, the memory and the critic only when a measured failure demands them.
Think about it
What is the smallest version of the thing you are building that would work end to end, and why have you not built it yet?
Applied it to something real? Log it.
Test yourselfA team plans to replace a working legacy system with a complete rewrite switched on in one day. What does Gall's law predict, and what does it suggest instead?
The big-bang system will not work and cannot be patched into working. Start from a simple system that works and grow it, so every addition is tested against something that already runs.
Related models
- YAGNI (you aren't gonna need it)Build a capability when you actually need it, not when you foresee needing it; the forecast is usually wrong and carrying the code is not free.
- EmergenceSimple local rules among many parts produce patterns at the level of the whole that no part contains or intends.
- Feedback loopsA system's output feeds back into its input: balancing loops hold a level steady, reinforcing loops make change grow on itself.
- Evolution by natural selectionWhen traits vary, are inherited and change how many offspring survive, a population shifts towards the traits that reproduce best, with nobody steering.
Sources and further reading
- John Gall, Systemantics: How Systems Work and Especially How They Fail (Quadrangle, 1977), Internet Archive record
- US Department of Justice, Office of the Inspector General, The FBI's Management of the Trilogy Information Technology Modernization Project, Audit Report 05-07 (February 2005)
- Harry Goldstein, Who Killed the Virtual Case File?, IEEE Spectrum (1 September 2005)