Complexity Is the Root Cause
- Categories
- Complexity
Complexity, especially the accidental complexity we introduce ourselves, is the dominant source of difficulty in software, so the highest-leverage work is relentlessly reducing it. The enemy is not lines of code or scale but the loss of understandability as a system grows.
Reinforced By
- Complexity — anything that makes a system hard to understand and change; the primary force that slows development over a system's life.
- Essential vs Accidental Complexity — much of the difficulty we suffer is accidental, introduced by us, and therefore attackable.
- Mutable State — the single largest source of accidental complexity.
Why it Matters
The Mythical Man-Month (No Silver Bullet) frames complexity as an essential property of software that no single tool will dissolve. A Philosophy of Software Design names complexity the root of nearly all problems and reorients design around minimizing it. Out of the Tar Pit goes furthest, arguing complexity is the single biggest difficulty in building large systems and that mutable state is its largest source. Across four decades the diagnosis is the same: when software is hard to change, complexity is why, so cutting accidental complexity is the work that pays off most.
Tension
Some complexity is essential and cannot be removed, only relocated, so the goal is to eliminate the accidental, not all of it. This worldview is the diagnosis, complexity is the enemy; it pairs with but is distinct from the technique of hiding complexity behind deep modules (see Complexity Should Be Hidden). Reducing complexity also competes with short-term delivery pressure.