01 — Foundation

Retry turns failure into recovery

When something fails, users need a clear next step — not a dead end.

Retry patterns help users recover from transient errors — network blips, timeouts, server overload. Good retry UI explains what failed, whether retry is safe, and what will happen when they try again.

02 — When

When retry makes sense

Not every error should offer the same button.

  • offer retry for transient failures — connection, timeout, 503
  • do not offer blind retry for validation errors — fix the input instead
  • destructive or payment failures need specific guidance — see Error States
  • idempotent retries on the server prevent duplicate charges or records

03 — UI

Retry in the interface

Place retry where the failure happened — inline beats a vanishing toast.

  • labelled button — “Try again” — near the error message
  • show in-flight state while retrying — see Async Actions
  • limit automatic retries; exponential backoff belongs in code, not invisible loops
<p role="alert">
    Upload failed. Check your connection.
</p>
<button type="button">Try again</button>

04 — Offline

Retry after offline or timeout

Flaky networks need patience, not blame.

  • combine with offline messaging — see Offline States
  • preserve user input so retry does not wipe the form
  • explain if retry will resume a partial upload or start over

05 — Review

Before you approve

A short checklist for retry patterns in code review.

  • retry is offered only when it can help
  • messaging is specific; retry state is visible
  • server handling prevents duplicate side effects