>[!abstract]
>Gall's Law, attributed to John Gall in _Systemantics_ (1975), states that a complex system that works is invariably found to have evolved from a simple system that worked, while complex systems designed from scratch almost never function effectively. The principle highlights the importance of incremental evolution, learning, and adaptation in system design, whether in engineering, organizations, or software. It cautions against over-engineering and emphasizes that reliability emerges through iterative refinement rather than grand, top-down planning, making small, functional prototypes the foundation for successful complexity.
>[!note]
>As an amateur coder, I have experienced this multiple times. Introducing abstraction into the code too early leads to bugs that are difficult to troubleshoot. I have to go through small steps of iteratively refactoring the code with increasing abstraction to reach the end state. This reminds me of Wolfram's notion of [[Computational irreducibility|computational irreducibility]], which also prohibits shortcuts into the end state.
>[!related]
>- **North** (upstream): [[Systems theory]]
>- **West** (similar): [[Computational irreducibility]], [[Conway's law]], [[Minimum viable product]]
>- **East** (different): [[Big design up front]]
>- **South** (downstream): [[Evolutionary design]]