The first duty of architecture is clarity
2026-04-01T08:30:00.000Z
Over the years I’ve noticed a recurring pattern in software teams. Faced with a problem, we often default to designing for every conceivable eventuality.
The result of this approach is architectures that are theoretically complete — but practically confusing.
While handling every possible scenario is technically achievable, I would argue that 95% of the value comes from handling the common path well. Time-to-market matters. Teams are small and resources are limited. Focusing on rare edge cases from the outset slows the delivery of a viable product because it:
- Inflates the architecture
- Reduces clarity
- Increases maintenance costs
- Hides the actual business goal
- Increases cognitive load
- Slows iterative development
- Reduces the team’s confidence
- Leaves fewer people who truly understand the system
- Increases on-boarding time for new developers
All of this effort adds comparatively little business value.
Instead, I advocate starting with a design that is good enough. Handle the common case cleanly. Allow the system to fail gracefully for rare edge conditions. Then evolve the design if and when reality demands it.
Graceful failure is underrated. There’s a big difference between designing for every edge case and designing for clarity with controlled degradation. In many complex systems degradation is the most pragmatic solution. We can:
- Log it
- Retry
- Reset safely
- Enter a safe state
Not everything needs a five-layer abstraction to prevent a once-per-decade scenario. I’m advocating for:
- Proportional design
- Economic thinking in architecture.
- Cognitive simplicity.
- Evolutionary development.
- Respect for the working engineer’s bandwidth.
I have seen teams become visibly lost — not because the technical problem was hard, but because they were being asked to design for scenarios that were unlikely to ever occur in practice. The result is cognitive overload, which damages quality and undermines the real objective: building a product that the market will buy and trust.
When engineers are told: “We must consider every impossible scenario.” “We must design for everything upfront.” What they actually hear is noise. They drown in a sea of special cases and unnecessary detail.
So to summarise: Engineering decisions should be proportional to real-world probability and impact.
I’m not saying: “Ignore edge cases.” “Be lazy.” “Ship rubbish.”
I am saying: If a scenario is impossible in practice, treat it as such. If a scenario is rare and can be handled through graceful failure, don’t architect around it.
This is risk management, not simplification.
