Building anything new feels chaotic, especially when the idea is still forming. I spent years trying to anticipate every edge case before shipping. It slowed me down and delivered little value. The approach that actually works is a simple staircase: start with the smallest useful version, then layer depth with purpose.

The Four Steps I Use

  • Surface: Create a crisp answer to "what problem are we solving?" Capture the job-to-be-done, not every feature on the wish list.
  • Generic: Ship the baseline version that works for most paths. This unlocks feedback from real people instead of assumptions from a whiteboard.
  • Deep: Instrument, observe, and improve the flows that matter most. This is where the product earns trust.
  • Specialized: Only once the fundamentals feel boring do I tailor experiences for specific personas or edge cases.

Designing for Real People

Average users rarely exist. I model for three modes: the novice trying to get unstuck, the practitioner who wants speed, and the expert who needs control. When a new feature proposal arrives, I map it to the people it actually helps. If no persona lights up, we cut it.

Pragmatic Tooling

I codify each step inside a short "runbook" that lists the signals for graduation. The rule of thumb is: graduation happens when real usage consistently breaks the current level. Anything else is a distraction.

Momentum beats perfect planning. Design the next useful layer, ship it, and earn the right to add complexity by watching what people do.