Skip to main content
The Hard Parts.dev
FM-03 technical FM Failure Modes
Severity medium Freq common

Abstraction Addiction

The system grows more layers, indirection, and generic structure than current reality actually demands.

Severity
medium
Frequency
common
Lifecycle
build
Recovery
medium
Confidence
high
At a glanceFM-03
Also known as

over-engineeringyak shaving at scalepremature generalizationframework feverarchitecture astronautics

First noticed by

staff engineernew joinerarchitect

Mistaken for
future-proofing
Often mistaken as
good architecture

Why it looks healthy

Concrete external tells that make the pattern read as responsible behavior.

  • The team cites SOLID, DDD, hexagonal, or similar vocabularies fluently
  • Architecture diagrams look cleaner than the actual code experience
  • Pull requests come with thoughtful rationale about future flexibility
  • Senior engineers endorse the direction as forward-looking

Definition

What it is

Blast radius code team delivery

A codebase accumulates abstractions to solve anticipated future problems rather than repeated present ones.

How it unfolds

The arc of the pattern

  1. Starts

    A team wants flexibility, consistency, and elegance.

  2. Feels reasonable because

    Generalization sounds cheaper than revisiting design later, and abstraction often signals sophistication.

  3. Escalates

    Interfaces multiply, wrappers appear, patterns spread, and the code becomes harder to reason about than the original problem.

  4. Ends

    Simple changes take too long, onboarding slows, and engineers stop trusting the architecture.

Recognition

Warning signs by stage

Observable signals as the pattern progresses.

EARLY

Early

  • We might need this pattern later.
  • A simple feature requires several layers from day one.
  • Names become increasingly generic.

MID

Mid

  • Simple changes touch too many files.
  • The abstraction has more exceptions than the concrete implementation it replaced.
  • Developers ask why the code is so indirect.

LATE

Late

  • Nobody can explain which layer owns the real behavior.
  • Refactors are feared because the architecture feels ceremonial.
  • Reuse is promised more often than observed.

Root causes

Why it happens

  • Teams optimize for elegance over clarity
  • Architecture is used to manage uncertainty symbolically
  • Past pain makes teams overcompensate
  • Patterns spread socially faster than evidence accumulates

Response

What to do

Immediate triage first, then structural fixes.

First move

Pick one simple feature, trace it end to end, and count every layer that does not change outcomes if removed.

Hard trade-off

Accept local duplication and a less elegant codebase so that the cost of change drops where it matters.

Recovery trap

Building a new grand abstraction to unify the existing abstractions.

Immediate actions

  • Identify layers that do not carry distinct business or operational value
  • Trace one simple feature end to end and count unnecessary hops
  • Demand concrete use cases for proposed abstractions

Structural fixes

  • Prefer duplication over premature indirection
  • Require repeated evidence before generalizing
  • Run architecture reviews focused on clarity, not cleverness

What not to do

  • Do not declare war on abstraction itself
  • Do not replace one grand framework with another grand framework

AI impact

How AI distorts this pattern

Where AI-assisted workflows accelerate, hide, or help with this failure mode.

AI can help with

  • AI can help identify duplication patterns worth abstracting and map dead or redundant layers for simplification.

AI can make worse by

  • AI can mass-produce interfaces, helper layers, patterns, and generic architecture that look polished but add no real leverage.

Relationships

Connected patterns

Causal flows inside Failure Modes, and related entries across the site.

Easy to confuse with

Nearby patterns and how this one differs.

  • Platform-before-product builds infrastructure ahead of demand. Abstraction addiction adds structure inside a product that already has users.

  • Adjacent concept Legitimate future-proofing

    Future-proofing responds to a concrete, likely next change. Abstraction addiction responds to generalized anxiety about unknown future changes.

  • A friendly rewrite replaces the system. Abstraction addiction keeps the system but multiplies its internal layers.

Heard in the wild

What it sounds like

The phrase that signals the pattern is about to start, and who tends to say it.

Heard in the wild

We'll need this flexibility later.

Said byarchitect or staff engineer

Notes from practice

What experienced people notice

Annotations from engineers who have worked this pattern before.

Best momentWhen intervention actually changes the trajectory.
When the abstraction is proposed, not after it spreads
Counter moveThe specific action that breaks the pattern.
Make the simple path simple again.
False positiveWhen this pattern is actually the correct call.
Some abstractions are essential. The failure mode begins when abstraction outruns evidence.