Skip to content

đźš« YAGNI Principle (You Aren't Gonna Need It)

YAGNI means: don’t build features, abstractions, or flexibility until you actually need them. It’s a guardrail against speculative design.


âś… What YAGNI Prevents

Common “future-proofing” traps:

  • Building a plugin system for a script with one use case
  • Adding configuration options nobody asked for
  • Writing generalized frameworks instead of finishing the task

âś… Why YAGNI Matters

  • Less code: Fewer bugs and less maintenance.
  • Faster delivery: Ship working value sooner.
  • Better designs: Real requirements create better abstractions than guesses.

⚠️ YAGNI Doesn’t Mean “No Planning”

You can still design with:

  • Clear boundaries
  • Good naming
  • Modest, reversible choices

YAGNI only says: don’t pay the cost of complexity before the value exists.


âś… Example: Avoid Premature Generalization

Before (generalized too soon):

class StorageBackend:
    def save(self, key, value):
        raise NotImplementedError

If you only need a dictionary today, start simple:

def save(store, key, value):
    store[key] = value

When requirements change (e.g., DB storage), then introduce an interface.


🔍 Key Takeaways

  • Build for current requirements, not imagined ones.
  • Prefer small, reversible steps.
  • Let abstractions emerge from real repetition and constraints.

Back: KISS Principle | Next: Separation of Concerns