The central problem.
WHY COMPLEXITY IS THE CORE ISSUE
Every system becomes harder to change as it grows, and eventually change becomes impractical.
WHAT ESSENTIAL COMPLEXITY IS
Complexity inherent in the problem.
WHAT ACCIDENTAL COMPLEXITY IS
Complexity introduced by how it was built.
WHAT THAT DISTINCTION MEANS
Only the second can be reduced.
WHAT INTRODUCES ACCIDENTAL COMPLEXITY
Abstraction that was not needed Configuration for cases nobody has Generality added in anticipation Patterns applied without a problem to solve Dependencies added casually
WHAT REDUCES COMPLEXITY
Deleting code Clear boundaries between parts Naming things accurately Doing one thing per unit Removing features nobody uses
WHAT DELETING ACHIEVES
Code that does not exist has no defects, requires no tests and needs no maintenance.
WHAT TO RESIST
Building for requirements that do not exist yet.
WHY
Anticipated requirements are usually wrong, and the flexibility built for them makes the actual requirement harder.
WHAT TO PREFER
The simplest thing that solves the current problem, clearly.