YAGNI (You Aren’t Gonna Need It)

Details
Full Name

You Aren’t Gonna Need It

Core Concepts:

Don’t build for hypothetical futures

Only implement functionality when it is actually needed, not when you foresee it might be needed

Speculative generality

Anti-pattern of building abstractions for imagined future requirements that may never materialize

Incremental design

Let design emerge through actual needs; evolve architecture as requirements become concrete

Cost of carry

Unused code adds maintenance burden, increases complexity, and creates cognitive load for the entire team

Delete dead code

Aggressively remove code that no longer serves a current purpose

Extreme Programming origin

Core XP practice alongside TDD, refactoring, and continuous integration

Reversibility

Prefer simple, changeable decisions over premature commitments to complex solutions

Key Proponents

Ron Jeffries (coined the phrase), Kent Beck ("Extreme Programming Explained", 1999)

When to Use:

  • Fighting over-engineering and premature abstraction

  • Agile projects with iterative delivery and evolving requirements

  • Refactoring legacy systems burdened with unused features

  • When tempted to add "just in case" functionality or configurability

  • DRY - Eliminates duplication of existing knowledge (complementary but distinct)

  • SPOT - Single Point of Truth, related simplicity principle

  • TDD, Chicago School - YAGNI is a core principle of classicist TDD

  • KISS Principle - Keep systems as simple as possible (complementary simplicity principle)