| UI or UX | UI + UX - User-directed alternate route when the primary path cannot complete | UI + UX - Scoped failed-operation retry control | UI + UX - Recoverable failure surface | UI + UX - Whole-service unavailable page |
| UI guidance | Place the alternate route beside the blocked primary path with a label that names what changes, such as Enter address manually, Use cached report, Call support with reference, or Continue with paper evidence. | Place Retry next to the failed operation, object, or request summary, and name the exact action being retried such as Retry export or Retry payment authorization. | Render a persistent error region near the affected content with a specific failure heading, plain-language cause, preserved context, and recovery actions. | Render a full page with the service name, unavailable scope, status, return time or update promise, saved-work status, alternate route, support contact, and request or incident reference when available. |
| UX guidance | Use a fallback path when the primary route is unavailable, unsuitable, unsupported, or repeatedly failing, and users still need a credible way to complete the task. | Use retry when a specific operation likely failed for a transient reason and the same operation can be attempted again without losing user context or duplicating side effects. | Help users recover when expected loading, saving, validation, sync, permission, or computation fails without losing their work. | Use a service unavailable page when the service, transaction, or route is intentionally closed, under maintenance, overloaded, permanently closed, or unable to handle requests at the entry point. |
| Good UI | An address lookup says We could not find this address, keeps postcode SW1A 1AA visible, and offers Enter address manually, Try another postcode, and Get help with reference APP-2048. | A report export card says Export CSV failed, keeps the saved filters visible, shows Attempt 1 of 3, and offers Retry export with request EXP-2048. | Reports could not load appears in the report section with the saved filter, Retry, Use cached data, and Contact support actions. | A benefits application page says the service is unavailable from 22:00 to 01:00, names the affected transaction, says saved drafts remain for 30 days, and links to urgent phone support. |
| Bad UI | A lookup returns No matches and only shows Search again, even though manual address entry is supported. | A generic Try again button appears after every error, including validation and permission failures users cannot fix by repeating the request. | Tiny transient toast for a blocking failure. | A blank white page with only 503 in the browser title. |
| Good UX | A user whose address is missing from the lookup switches to manual entry with the postcode and application reference retained, completes the same application, and can return to lookup without losing typed fields. | A user retries the same export after a network timeout, sees the attempt change to sending, and then returns to the recovered download state without re-entering filters. | User input and filter context are preserved after failure, and retry returns to recovered content or a clear still-failed state. | A user returns during planned maintenance, sees a precise reopening time, learns their draft is saved, and uses an alternate phone channel for an urgent deadline. |
| Bad UX | A user tries the same failed lookup five times because the manual route is hidden until after repeated failure. | The app retries aggressively every second during an outage and makes the service harder to recover. | Clearing work after save failure. | Users repeatedly refresh because the page gives no recovery window or status update path. |
| Best fit | A primary lookup, verification, upload, payment, search, device feature, online-only step, or channel can fail while the user still needs to finish. | A load, save, submit, upload, export, sync, payment, or background request failed for a transient or uncertain reason. | A system or task failure blocks expected content or action. | A whole service, transaction entry point, or route is closed or not ready to handle requests. |
| Avoid when | The only honest next step is retrying the same operation after a transient failure. | The error is caused by invalid user input and correction is required. | Nothing exists yet and the state is expected. | Only one local section or action failed and users can recover inside the current page. |
| Required state | Primary path available state. | Retryable failed state with affected operation, object, and preserved request context. | Normal expected state before failure. | Planned maintenance page with start or return time. |
| Accessibility burden | Make the fallback option visible near the blocked control or step, not only in help text or after mouse hover. | Use an action label that names the operation, not only an icon or generic phrase. | Use appropriate alert or status semantics for newly appearing critical errors. | Use a unique page title and H1 that state the service is unavailable, not just a code. |
| Common misuse | Hiding manual entry or support until users repeatedly fail. | Offering Retry for every error regardless of whether the user or system state can change. | Using a transient toast for critical errors. | Using a full-page spinner for a closed service. |