Back to compare picker

Offline mobile retry vs Offline state vs Retry vs Sync state vs Pull to refresh vs Fallback path

Choose offline state when the primary job is explaining what remains usable while disconnected, such as cached content, read-only mode, local drafts, unavailable online actions, stale data, or reconnect checks.

Learn the decision

Match the interaction to the person's task

Choose offline state when the primary job is explaining what remains usable while disconnected, such as cached content, read-only mode, local drafts, unavailable online actions, stale data, or reconnect checks.

Offline mobile retry

Use it when: A mobile user action can be saved locally and retried after network or app lifecycle conditions improve.

Make this state clear: Online successful action state.

Observe the result: A user submits a field report in a basement, sees it queued locally with photos and an idempotency reference, closes the app, and later sees background retry complete after reconnect.

Study the full pattern →

Offline state

Use it when: Connection loss or server reachability changes the user's current task.

Make this state clear: Offline banner or local status that names affected scope.

Observe the result: A user loses connection while editing an inspection note, sees it saved on this device, attaches photos to a queue, and later watches the queue sync after reconnect.

Study the full pattern →

Retry

Use it when: A load, save, submit, upload, export, sync, payment, or background request failed for a transient or uncertain reason.

Make this state clear: Retryable failed state with affected operation, object, and preserved request context.

Observe the result: A second failure increases the wait before the next attempt and then offers cached export, background notification, or support reference after attempts are exhausted.

Study the full pattern →

Sync state

Use it when: Local changes, files, messages, uploads, or records need to reconcile with a remote service or another device.

Make this state clear: Queued state for work waiting for a sync attempt.

Observe the result: A user reconnects after editing offline and sees the queue move from local saved to syncing, then to one failed photo with retry while the accepted notes remain synced.

Study the full pattern →

Pull to refresh

Use it when: A top-of-list gesture is a platform-expected shortcut for checking freshness on a scrollable data surface.

Make this state clear: Idle state with current content visible and last updated timestamp when freshness matters.

Observe the result: A user reaches the top of a notifications list, drags down, sees the pull distance cross threshold, releases, and the list updates while older items stay in place.

Study the full pattern →

Fallback path

Use it when: A primary lookup, verification, upload, payment, search, device feature, online-only step, or channel can fail while the user still needs to finish.

Make this state clear: Primary path available state.

Observe the result: The person reaches a clear outcome.

Study the full pattern →

Practice the judgment: Imagine this situation: A mobile form says Sent while offline and later creates duplicate records when users tap Submit again. Write the person's goal, choose one of these patterns, and show the state that helps the person continue. Use the decision rules and source trail below to explain your choice.

Review the underlying principle →

Decision dimensions

Dimension Offline mobile retryOffline stateRetrySync statePull to refreshFallback path
UI or UX UI + UX - Mobile queued-action retry and background replay recoveryUI + UX - Connectivity-mode and local-work continuity stateUI + UX - Scoped failed-operation retry controlUI + UX - Local-and-remote reconciliation statusUI + UX - Top-of-scroll vertical drag gesture that refreshes the current data setUI + UX - User-directed alternate route when the primary path cannot complete
UI guidance Render a mobile retry surface that names the queued action, local storage location, last attempt, next retry trigger, manual retry control, background retry eligibility, and duplicate-submit guard instead of using only a global offline banner.Show offline status where it changes the current task, naming what remains available such as cached reports, local draft editing, queued saves, or read-only history.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.Show sync state close to the object or queue it describes, using labels such as Local saved, Queued, Syncing, Synced, Partially synced, Failed, Paused, and Conflict needs review.Show pull-to-refresh only at the beginning of scrollable content, with a clear pull distance, threshold, release-to-refresh state, refreshing indicator, and completion status tied to the current data set.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.
UX guidance Use offline mobile retry when users need confidence that a mobile save, send, upload, submit, check-in, or payment attempt is preserved locally and will retry safely when connection and policy conditions allow.Use offline state to preserve trust and task continuity when connection loss changes what users can read, edit, submit, sync, refresh, or share.Help the person reach a clear task outcome.Use sync state to keep users confident while local changes, remote copies, attachments, messages, or records reconcile across devices, services, or background workers.Help the person reach a clear task outcome.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.
Good UI A mobile inspection form says Saved on this device, 2 photos queued, last attempt 10:42, next retry on Wi-Fi, Retry now, and request ID MOB-1842.A field report says Offline: 3 edits saved on this device, cached customer history shown from 10:42, Submit disabled until connection returns, and Retry connection.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.A field report queue shows 5 local changes: notes synced, two photos uploading, meter reading queued, signature failed with Retry, and supervisor comment needs review.A mobile inbox at the top of the message list shows Pull to refresh, Release to refresh, Refreshing, Last updated 10:42, and a Refresh menu item that runs the same request.A service dependency outage panel says Identity check unavailable, shows saved application answers, and offers Upload documents for manual review with expected review time.
Bad UI Queued mobile work disappears after the app is backgrounded or restarted.A blank page says You are offline even though the app has cached drafts and help content.Retry creates duplicate records, payments, invitations, exports, or queued jobs.A single green Saved badge appears while several attachments are still queued.A feed refreshes from any scroll position, causing accidental network calls while users read older content.The only visible action repeats the failing lookup or request.
Good UX A user submits a field report in a basement, sees it queued locally with photos and an idempotency reference, closes the app, and later sees background retry complete after reconnect.A user loses connection while editing an inspection note, sees it saved on this device, attaches photos to a queue, and later watches the queue sync after reconnect.A second failure increases the wait before the next attempt and then offers cached export, background notification, or support reference after attempts are exhausted.A user reconnects after editing offline and sees the queue move from local saved to syncing, then to one failed photo with retry while the accepted notes remain synced.A user reaches the top of a notifications list, drags down, sees the pull distance cross threshold, releases, and the list updates while older items stay in place.The person reaches the intended result with clear feedback.
Bad UX The user repeatedly taps Submit because the app hides the offline queue and creates duplicate reports after reconnect.A submitted offline form disappears from the screen even though it was neither queued nor accepted by the server.The app retries aggressively every second during an outage and makes the service harder to recover.The offline banner disappears after reconnect, but hidden queued changes keep failing in the background.A user tries to scroll up inside a nested comments panel and accidentally refreshes the whole page.A user tries the same failed lookup five times because the manual route is hidden until after repeated failure.
Best fit A mobile user action can be saved locally and retried after network or app lifecycle conditions improve.Connection loss or server reachability changes the user's current task.A load, save, submit, upload, export, sync, payment, or background request failed for a transient or uncertain reason.Local changes, files, messages, uploads, or records need to reconcile with a remote service or another device.A top-of-list gesture is a platform-expected shortcut for checking freshness on a scrollable data surface.A primary lookup, verification, upload, payment, search, device feature, online-only step, or channel can fail while the user still needs to finish.
Avoid when The failure is a validation, permission, policy, or conflict issue that needs correction before retry.A single request failed while the rest of the app is reachable and an error state is clearer.The error is caused by invalid user input and correction is required.A confirmed failure blocks the whole view and needs a full error recovery surface.Data freshness must be automatic, real-time, scheduled, or explicit through a visible command rather than hidden behind a gesture.The only honest next step is retrying the same operation after a transient failure.
Required state Online successful action state.Offline banner or local status that names affected scope.Retryable failed state with affected operation, object, and preserved request context.Queued state for work waiting for a sync attempt.Idle state with current content visible and last updated timestamp when freshness matters.Primary path available state.
Accessibility burden Expose queue state changes through polite status messages when they affect the current task.Announce significant connectivity changes with status messaging when they affect the current task.Expose pending, failed again, cooldown, succeeded, exhausted, and non-retryable outcomes through status text or live regions.Expose sync summaries through polite status updates when state changes matter to the current task.Keep refresh controls reachable by keyboard, switch, screen reader, external keyboard, and assistive pointer devices.Use specific link and button names that describe the alternate method and outcome.
Common misuse Showing a success toast for an offline submission that is only queued.Showing only a browser-style offline page when useful cached or local content exists.Offering Retry for every error regardless of whether the user or system state can change.Calling local persistence Synced before remote acceptance.Making pull-to-refresh the only way to update the data.Hiding manual entry or support until users repeatedly fail.

Offline mobile retry

UI or UX
UI + UX - Mobile queued-action retry and background replay recovery
UI guidance
Render a mobile retry surface that names the queued action, local storage location, last attempt, next retry trigger, manual retry control, background retry eligibility, and duplicate-submit guard instead of using only a global offline banner.
UX guidance
Use offline mobile retry when users need confidence that a mobile save, send, upload, submit, check-in, or payment attempt is preserved locally and will retry safely when connection and policy conditions allow.
Good UI
A mobile inspection form says Saved on this device, 2 photos queued, last attempt 10:42, next retry on Wi-Fi, Retry now, and request ID MOB-1842.
Bad UI
Queued mobile work disappears after the app is backgrounded or restarted.
Good UX
A user submits a field report in a basement, sees it queued locally with photos and an idempotency reference, closes the app, and later sees background retry complete after reconnect.
Bad UX
The user repeatedly taps Submit because the app hides the offline queue and creates duplicate reports after reconnect.
Best fit
A mobile user action can be saved locally and retried after network or app lifecycle conditions improve.
Avoid when
The failure is a validation, permission, policy, or conflict issue that needs correction before retry.
Required state
Online successful action state.
Accessibility burden
Expose queue state changes through polite status messages when they affect the current task.
Common misuse
Showing a success toast for an offline submission that is only queued.

Offline state

UI or UX
UI + UX - Connectivity-mode and local-work continuity state
UI guidance
Show offline status where it changes the current task, naming what remains available such as cached reports, local draft editing, queued saves, or read-only history.
UX guidance
Use offline state to preserve trust and task continuity when connection loss changes what users can read, edit, submit, sync, refresh, or share.
Good UI
A field report says Offline: 3 edits saved on this device, cached customer history shown from 10:42, Submit disabled until connection returns, and Retry connection.
Bad UI
A blank page says You are offline even though the app has cached drafts and help content.
Good UX
A user loses connection while editing an inspection note, sees it saved on this device, attaches photos to a queue, and later watches the queue sync after reconnect.
Bad UX
A submitted offline form disappears from the screen even though it was neither queued nor accepted by the server.
Best fit
Connection loss or server reachability changes the user's current task.
Avoid when
A single request failed while the rest of the app is reachable and an error state is clearer.
Required state
Offline banner or local status that names affected scope.
Accessibility burden
Announce significant connectivity changes with status messaging when they affect the current task.
Common misuse
Showing only a browser-style offline page when useful cached or local content exists.

Retry

UI or UX
UI + UX - Scoped failed-operation retry control
UI guidance
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.
UX guidance
Help the person reach a clear task outcome.
Good UI
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.
Bad UI
Retry creates duplicate records, payments, invitations, exports, or queued jobs.
Good UX
A second failure increases the wait before the next attempt and then offers cached export, background notification, or support reference after attempts are exhausted.
Bad UX
The app retries aggressively every second during an outage and makes the service harder to recover.
Best fit
A load, save, submit, upload, export, sync, payment, or background request failed for a transient or uncertain reason.
Avoid when
The error is caused by invalid user input and correction is required.
Required state
Retryable failed state with affected operation, object, and preserved request context.
Accessibility burden
Expose pending, failed again, cooldown, succeeded, exhausted, and non-retryable outcomes through status text or live regions.
Common misuse
Offering Retry for every error regardless of whether the user or system state can change.

Sync state

UI or UX
UI + UX - Local-and-remote reconciliation status
UI guidance
Show sync state close to the object or queue it describes, using labels such as Local saved, Queued, Syncing, Synced, Partially synced, Failed, Paused, and Conflict needs review.
UX guidance
Use sync state to keep users confident while local changes, remote copies, attachments, messages, or records reconcile across devices, services, or background workers.
Good UI
A field report queue shows 5 local changes: notes synced, two photos uploading, meter reading queued, signature failed with Retry, and supervisor comment needs review.
Bad UI
A single green Saved badge appears while several attachments are still queued.
Good UX
A user reconnects after editing offline and sees the queue move from local saved to syncing, then to one failed photo with retry while the accepted notes remain synced.
Bad UX
The offline banner disappears after reconnect, but hidden queued changes keep failing in the background.
Best fit
Local changes, files, messages, uploads, or records need to reconcile with a remote service or another device.
Avoid when
A confirmed failure blocks the whole view and needs a full error recovery surface.
Required state
Queued state for work waiting for a sync attempt.
Accessibility burden
Expose sync summaries through polite status updates when state changes matter to the current task.
Common misuse
Calling local persistence Synced before remote acceptance.

Pull to refresh

UI or UX
UI + UX - Top-of-scroll vertical drag gesture that refreshes the current data set
UI guidance
Show pull-to-refresh only at the beginning of scrollable content, with a clear pull distance, threshold, release-to-refresh state, refreshing indicator, and completion status tied to the current data set.
UX guidance
Help the person reach a clear task outcome.
Good UI
A mobile inbox at the top of the message list shows Pull to refresh, Release to refresh, Refreshing, Last updated 10:42, and a Refresh menu item that runs the same request.
Bad UI
A feed refreshes from any scroll position, causing accidental network calls while users read older content.
Good UX
A user reaches the top of a notifications list, drags down, sees the pull distance cross threshold, releases, and the list updates while older items stay in place.
Bad UX
A user tries to scroll up inside a nested comments panel and accidentally refreshes the whole page.
Best fit
A top-of-list gesture is a platform-expected shortcut for checking freshness on a scrollable data surface.
Avoid when
Data freshness must be automatic, real-time, scheduled, or explicit through a visible command rather than hidden behind a gesture.
Required state
Idle state with current content visible and last updated timestamp when freshness matters.
Accessibility burden
Keep refresh controls reachable by keyboard, switch, screen reader, external keyboard, and assistive pointer devices.
Common misuse
Making pull-to-refresh the only way to update the data.

Fallback path

UI or UX
UI + UX - User-directed alternate route when the primary path cannot complete
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.
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.
Good UI
A service dependency outage panel says Identity check unavailable, shows saved application answers, and offers Upload documents for manual review with expected review time.
Bad UI
The only visible action repeats the failing lookup or request.
Good UX
The person reaches the intended result with clear feedback.
Bad UX
A user tries the same failed lookup five times because the manual route is hidden until after repeated failure.
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.
Avoid when
The only honest next step is retrying the same operation after a transient failure.
Required state
Primary path available state.
Accessibility burden
Use specific link and button names that describe the alternate method and outcome.
Common misuse
Hiding manual entry or support until users repeatedly fail.
Decision rules
  • Choose offline mobile retry when a mobile user taps Save, Send, Upload, Submit, Check in, or Pay during no connection, flaky connection, app backgrounding, battery saver, metered data, captive portal, or OS-managed background limits and the app can queue or retry that same action safely.
  • Choose offline state when the primary job is explaining what remains usable while disconnected, such as cached content, read-only mode, local drafts, unavailable online actions, stale data, or reconnect checks.
  • Choose retry when a single scoped operation has already failed and the same request can be attempted again under preserved context, independent of broader mobile offline constraints.
  • Choose sync state when local and remote copies are reconciling across a queue, peer, or cloud service and users need accepted, partial, failed, paused, or conflict status after connectivity returns.
  • Choose pull to refresh when users deliberately request newer content in a scrollable mobile surface; do not use pull to refresh as the only recovery for queued saves, uploads, messages, or submissions.
  • Choose fallback path when retry is exhausted, the request is non-retryable, credentials expired, data is too sensitive for background retry, or the user needs export, call support, manual entry, or later return instead of another attempt.
  • An offline mobile retry must show where work is stored, what is queued, last attempt time, next retry trigger, foreground/manual retry control, background retry eligibility, duplicate-submit guard, and whether the queued action is safe on metered data or low battery.
  • Do not claim server success while offline, hide queued actions in a transient toast, retry destructive or payment operations without idempotency, or continue automatic retries when account, validation, permission, captive portal, or policy state makes the request non-retryable.
  • When the app returns from background, loses connectivity mid-upload, or regains network, keep the queued item visible until it succeeds, fails, is cancelled, conflicts, expires, or moves to a fallback path.
  • For side-effecting mobile actions, preserve stable request IDs, attachment hashes, timestamps, idempotency keys, and user-visible references so manual retry, background replay, and support can distinguish retry from duplicate submission.
Inspect live examples
Failure modes
  • A mobile form says Sent while offline and later creates duplicate records when users tap Submit again.
  • The app shows a global offline banner but hides the queued photo upload that actually needs retry.
  • Background retry keeps running on metered data or low battery without giving users pause, send now, or Wi-Fi-only choices.
  • The user returns to the app after OS background suspension and the retry queue has vanished.
  • A captive portal is treated as online, so retry loops fail without explaining sign-in to network.
  • Payment, invite, or destructive actions retry without idempotency and create duplicate side effects.
  • A generic pull-to-refresh gesture refreshes the feed but does not retry the failed message or upload.

Saved items