Fail Fast Instead of Spinning Forever
Systems & Architecture · errors, loading, status
Updated 2026-08-04
- Show a failure the moment it is known rather than waiting for a timeout to expire. When a circuit breaker has already marked a dependency as down, a spinner is a lie that costs the user thirty seconds.
- Give every request a deadline the user can feel. If a screen has no answer within a few seconds, it needs to say something other than the same spinner.
- Let the page render without the parts that failed. A recommendations panel that is down should not take the product page with it, and a checkout that still works is worth more than a complete page.
- Mark the missing section instead of hiding it silently. A small Unavailable right now in the slot preserves the layout and tells the user nothing is wrong with their action.
- Separate the essential from the optional before the outage, not during it. The list of modules a screen can survive without is a design decision, and if nobody makes it, everything is essential by default.
- Recover automatically and visibly. When the dependency returns, fill the section in rather than waiting for the user to reload a page they have already given up on.
- Never let a slow dependency hold the whole response. One service taking ten seconds should degrade one panel, not delay first paint for everything.
- Write the copy for a system that is down, not for a user who made a mistake. We cannot load reviews right now is accurate, and Something went wrong implies they did something.
A fast, honest failure keeps a product usable, and an endless spinner turns one broken dependency into a broken product.
Related guides