Design Stamina Hypothesis
Good internal design slows you briefly; past the payoff line it is what keeps you fast.
To an executive
Cutting corners on quality speeds up the first weeks, then slows every release after. For anything lasting more than a short while, good design is the cheaper route.
To an engineer
Keep design quality up unless the work will end soon. Watch whether delivery speed rises or falls release by release, and push back on shortcuts that will slow you.
The idea
Fowler sketched two curves of cumulative functionality over time. Without attention to design, a team starts fast but slows as complexity piles up. With good design, progress starts slightly slower but stays steady. The lines cross at the design payoff line.
The corollary is the useful part: if the work will be finished before the payoff line, trading design for speed can make sense. If it will run past the line, the trade is an illusion, because neglecting design makes you later, not earlier.
He calls it a hypothesis because productivity and design quality cannot be measured objectively, so it cannot be proved. But it explains why good design is an economic concern rather than an aesthetic one. Fowler's judgement is that the payoff line usually arrives in weeks, not months.
Why it works
Complexity compounds. Each shortcut makes the next change a little harder. The cost is small per change but grows with every feature built on top.
Good design keeps change cheap. Clear structure, tests and refactoring keep each new feature close to the cost of the first, which is what sustains speed over time.
It reframes design as speed, not polish. Stakeholders who see refactoring as gold-plating often accept it once it is framed as the thing that keeps delivery fast.
Where it applies
- Conversations with stakeholders who want to drop tests or refactoring to hit a date.
- Planning MVPs and pilots, to decide honestly whether the code will outlive the payoff line.
- Teams whose velocity is falling while headcount stays the same.
How to apply
- Estimate the system's life: will it still be changing in a few weeks' time? Most systems will.
- Track delivery speed over time, for example lead time per feature, to see which curve you are on.
- Keep design work continuous: small refactorings, tests and clean boundaries as part of every change.
- Make shortcuts explicit when you do take them, with a date to repay or discard.
Example scenario
A team skipped tests and refactoring to ship an MVP fast. By month four, each new feature took about three times as long as the early ones, and most of that time went on working out what existing code did and fixing regressions.
A sibling team on a similar product had kept its codebase clean and was slightly slower at first, but overtook them by month two. The first team reframed its plan around the payoff line, set aside time in each sprint for refactoring and tests, and its lead time began to fall again.
Questions to ask
- Will this system still be changing after the next few weeks?
- Is our delivery speed rising, steady or falling release on release?
- Are we trading internal quality for speed we will not actually get?
When not to use it
- Genuine throwaway work: a spike, a demo or a one-off script that will be discarded before the payoff line.
- When the bottleneck is elsewhere, such as unclear requirements or slow approvals, where better code design will not change delivery speed.
How it misleads you
Over-engineering throwaway experiments. Below the payoff line, quick and dirty really is faster. The opposite error is assuming every prototype will be thrown away: many become production systems, so be honest about which kind you are building.
Further reading
Last reviewed · Suggest an improvement