Skip to content
D
Journal
Architecture · 17 August 2026 · 13 min read

Mobile connection loss: the 3 possible strategies

Block, save locally, or confirm immediately — the 3 mobile strategies when the network drops, with WhatsApp, Google Docs and Uber as case studies.

Open WhatsApp inside a subway tunnel and send a message. A small grey clock appears next to the text. The message stays in the interface. The queue takes over. When you exit the tunnel, the clock becomes a single ✓, then ✓✓ when the recipient’s device receives it.

Across more than 3 billion monthly users in 2025 (Backlinko — WhatsApp Users 2026, source Meta Q1 2025), this detail is probably the most-seen mobile product decision in the world. It condenses one answer — among three possible ones — to the question every mobile team eventually asks: what should the application do when the network drops while the user is saving an action?

Three strategies exist. Each modifies the user experience, the technical complexity, and the nature of the trust contract with the user. The senior mobile developer’s mark is not knowing how to implement all three — it is knowing how to arbitrate between them, action by action.

3 B+
monthly WhatsApp users in 2025
100 ms
instantaneous perception threshold (Miller 1968)
3
strategies, never fewer

Why mobile forces this choice

An intra-datacenter backend experiences rare network partitions. A mobile app connected to that same backend is always in a potential partition regime: tunnel, elevator, cell handover, saturation, roaming. Network loss is not an edge case on mobile — it is a regular state.

The CAP theorem, posed by Eric Brewer in the PODC 2000 keynote then formalized by Seth Gilbert and Nancy Lynch at MIT in 2002 (Gilbert & Lynch, ACM SIGACT News 2002), states that a distributed system cannot simultaneously guarantee Consistency, Availability, and Partition tolerance. In practice, P is non-negotiable; the real choice is therefore between C or A during a partition.

Translated to mobile:

  • Choose C → if the network drops, refuse the action or wait. That is strategy 01 (Block).
  • Choose A → if the network drops, accept the action locally, reconcile later. That is the basis of strategies 02 and 03.

CAP does not say you must choose C or A once and for all for the entire app. It says that at each operation in a partition regime, a choice is made — implicitly or explicitly. The senior mobile developer’s role is to make that choice explicit and documented.

Strategy 01 — Block

The application refuses to accept the action until server confirmation arrives. The UI stays in its pre-action state, with a spinner, until the server responds or a timeout fires.

Technical cost
Low — this is the simplest strategy. Synchronous HTTP request, spinner, success/error/timeout handling. No local storage, no retry, no conflicts.
UX cost
High and underestimated. The user loses their action on failure. On mobile, where micro-outages are frequent, this strategy generates frustration and re-entry.

Notion’s early onboarding refused offline edits — this was a recurring criticism for years, until native offline shipped in August 2025 (version 2.53) (XDA Developers, August 2025). That absence was a documented commercial hurdle versus Apple Notes and Obsidian. Notion did not use strategy 01 on principle — the team acknowledged the limit but treated it as lower priority than other work.

The message is clear: defaulting to blocking is not a neutral choice. On any non-critical action, it is debt paid in churn.

Strategy 02 — Local queue + sync (outbox pattern)

The application saves the action immediately in a local database (SQLite, Isar, Drift, Hive, Realm) within the same transaction as an entry in an outbox table. The UI reflects the local state. An asynchronous worker consumes the outbox and syncs with the server, with retry and exponential back-off.

1. tap Save

2. atomic transaction

2. atomic transaction

3. read by

4. POST + retry

5. 200 OK

6. mark synced
+ delete outbox

Mobile screen

Repository

SQLite
business state

Outbox
pending event

Sync Worker

Server API

The transactional outbox pattern was formalized by Chris Richardson for microservices architecture (microservices.io — Transactional Outbox (Chris Richardson)) to solve the dual-write problem: guaranteeing that an event published in a broker stays consistent with the state written to the database. The mobile problem is structurally identical — guaranteeing that a deferred API call stays consistent with the local state the user sees on screen.

Case study: WhatsApp

WhatsApp is probably the most visible implementation of this strategy in the world. When the network drops:

  1. The message is written immediately to local SQLite with a client_id UUID
  2. The grey clock icon indicates “waiting to send to server”
  3. A worker retries periodically — as soon as the network returns, sending succeeds

The transition to the following icons (✓ = server received, ✓✓ = delivered to recipient device, ✓✓ blue = read) delivers the 4 mandatory UX states in a single visual cell (LINK Mobility — What do WhatsApp check marks mean?). This icon system probably contributed to WhatsApp’s success on markets with irregular connectivity — India, Brazil and Indonesia are the top three WhatsApp markets by user count.

Case study: Google Docs

Since the HTML5 Chrome App introduced in August 2011 (TechCrunch, August 31, 2011), Google Docs applies a mobile variant of strategy 02: modifications are written locally (IndexedDB on web, local structures on mobile), and a worker syncs as soon as the network returns. For multi-user collaboration, the merge uses a variant of reconciliation algorithm (historically Operational Transformation, algorithms closer to CRDT today — see Shapiro et al., SSS 2011 (Shapiro et al., SSS 2011 (LIP6))).

Strategy 03 — Optimistic UI

The application immediately reflects the presumed result of the action in the UI — as if the server had answered OK — then fires the actual call in the background. On success, no visible change. On failure, silent or explicit rollback of the UI.

Sequence of optimistic UI (the like):

APIAppFingerAPIAppFinger❤️ instantcounter +1no visible change(success ~99.9%)on 5xx → rollback ♡counter -1tap ♡1POST /like (async)2200 OK3

The Instagram like is the most cited case study in UX pedagogy (DEV Community — Optimistic UI Updates Explained): the tap on the heart triggers the animation before the API call. This strategy brings perceived feedback under 100 ms — the instantaneous perception threshold established by Robert Miller in 1968 and reprised by Jakob Nielsen in Usability Engineering (1993) (Nielsen Norman Group — Response Times: The 3 Important Limits) — regardless of network state.

Where it is forbidden
Payment, money transfer, creation of a server-identified entity (order, appointment), content publication (post, message, comment), critical configuration change.
Where it is perfect
Like, favorite, emoji reaction, save post, list reorder, read/unread badge, add-to-cart (with validation at payment step).

Difference with strategy 02: the data is not necessarily persisted locally. On failure, it disappears without trace — that’s the assumed risk. Both strategies can be combined: optimistic UI for immediate rendering + outbox for persistence and retry. That’s exactly what Instagram does on comments, WhatsApp on messages, and Slack on reactions.

The decision grid

Strategy choice is not a doctrine — it is a 2×2 matrix to re-read at every new product action:

Reversible (like, favorite, editable doc)Irreversible (sent message, wire transfer)
Low criticalityOptimistic UI (03) — negligible rollback cost, huge UX gainLocal queue (02) — persist action, user must see “it’s gone”
High criticalityLocal queue (02) — action exists client-side, async reconciliationBlock (01) — no ambiguity acceptable

A single app typically occupies all four quadrants. Take a banking app:

  • Like on a marketing push notification → Optimistic
  • Editing an account nickname → Local queue
  • Sending a message to the advisor → Local queue
  • SEPA wire transfer → Block

Conflating plans (“we do offline everywhere” or “we do everything optimistic”) produces technical debt that becomes structural.

The 4 mandatory UX states

Any strategy that is not “Block” imposes explicitly communicating to the user the state of their data. Four states are necessary and sufficient, with well-defined transitions:

tap Save

queued

server success

retries exhausted

user retries

abandon

Local

Pending

Synced

Failed

Local
Saved on the device, not yet queued. Often invisible to the user (transient).
Pending
In queue, attempts in progress. Clock icon or discrete spinner.
Synced
Server confirmed reception. Single or double check.
Failed
Retries exhausted. Alert icon + MANDATORY recovery action (retry, edit, delete).

Five anti-patterns to watch

Anti-pattern
1. Naive dual-write (SQLite then API separately, without a transaction linking both) 2. Infinite spinner without timeout or fallback 3. Retry in a tight loop without exponential back-off 4. Optimistic UI on an irreversible action ("payment confirmed" before server response) 5. Invisible sync — no display of the 4 states
Correct
1. Outbox pattern with atomic local transaction 2. Systematic timeout (8-12 s) + explicit retry button 3. Exponential back-off with jitter (RFC 5731 style) 4. Forbid strategy 03 on the explicit list § "where it is forbidden" 5. Dedicated icon per state, proactive notification on "failed" state

What to do this week

Take the last five features shipped by the team. For each, write in one sentence the strategy used: “block”, “local queue”, “optimistic”. Then check two things:

  1. Is the choice explicit? Documented somewhere, or implicit in the code with no one able to name it?
  2. Does it match the matrix’s expected cell? A wire transfer in optimistic is an incident waiting to happen. A like in blocking mode means three users uninstall every week.

If no one knows, it’s probably block-by-default — and it shows in the NPS.


Primary sources

Did this article resonate?

Delano Toungsi

Delano Toungsi

Freelance mobile CTO · Missions, fractional & co-founder · Yaoundé full-remote

Propose a mission →

A mobile need that sounds like yours?