Mobile Design Rounds

A mobile app fails in ways that a web page does not. The system ends the app. The signal drops in the middle of a request. Old versions stay on phones for months.

Each full case has a failure table near the end. I put the failures in one list here, so you can ask a simple question: where did I handle a lost reply? Each entry has one plain sentence and the sections that handle it. Open a section to see what the user sees and what the fix is. The words at the end of each entry link to the glossary.

Requests and replies

Lost acknowledgement

The server did the work, but the reply was lost, so the app does not know what happened.

Words: acknowledgement, idempotent, idempotency key, outbox.

Duplicate send and duplicate delivery

The same message, event or request happens twice, after a retry or a double tap. Only one copy may count.

Words: dedupe, unique index, upsert, request coalescing.

Permanent rejection

The server says no for good, so a retry can never work. The app must stop and tell the user.

Words: exponential backoff, jitter, outbox.

Out-of-order delivery

Updates arrive in a different order than the server sent them. The app must not show an old value as a new one.

Words: sequence number, snapshot.

The phone and the system

Process death

The system ends the app while work is half done. Anything kept only in memory is lost.

Words: process death, cold start, WorkManager, outbox.

Background work that runs late

The system delays or stops background work, so a send or a sync runs late.

Words: Doze, WorkManager, foreground service, BGProcessingTask.

Late or lost push

A push can arrive late, arrive twice or never arrive. Treat it as a hint, not as the data.

Words: silent push, FCM, APNs.

Dead connection that looks alive

A connection stays open but delivers nothing, or the phone joins a network that has no internet.

Words: heartbeat, captive portal, WebSocket, stale data.

Low memory or storage

The device runs low on memory or space, so the app must free data without breaking the screen.

Words: downsampling, bitmap.

Time and stale data

Clock and time zone errors

A phone clock is wrong, the user changes the date, or one time means different moments in different places.

Words: monotonic clock, sequence number, last-writer-wins.

Stale cache

The app shows saved data that may be old. The user should see its age, or fresh data should replace it safely.

Words: stale data, snapshot, cache key, source of truth.

Long offline gap and expired cursor

The phone was away for days or weeks. The server may no longer accept its saved place.

Words: cursor, snapshot, tombstone, outbox.

Conflicting edits

Two people, or two copies of the data, change the same thing. The app must decide which change wins.

Words: last-writer-wins, CRDT, tombstone, optimistic write.

Transfers, access and versions

Partial upload or download

A large transfer stops halfway. Starting again from zero would waste time and data.

Words: resumable upload, hash, WorkManager.

A token or a signed address stops working while the user is still using it.

Words: TTL, cache key.

Logout and shared phones

Another person signs in on the same phone while old data or old work is still there.

Words: outbox, push address.

Old app versions and bad releases

People keep old versions for months, so the server sees old requests. A store can pause a rollout but cannot take a build back.

Words: kill switch, remote flag, staged rollout, rollback.

Where to go next

The other side of this page is Compare. It sets the design choices side by side, such as polling against push, and offset against cursor. If you are new, begin at Start here. Did you find a failure that is missing, or a wrong link? Open an issue.

Written by Manuel Lorenzo. The site is drafted with AI assistance and edited and reviewed by him.

Get the free one-page cheat sheet

One page: the five steps, a 45-minute time plan and two checklists. Print it or keep it on your phone.

We email you the cheat sheet after you confirm your address. You can also open it now from the Start here page. You get a short note when a new case is published. Unsubscribe any time. Privacy.