Writing1 min read

Product Notes

Offline-First on Bad Networks

The user tapped save. The network dropped before the response.

The user tapped save. The network dropped before the response.

The form cleared on submit. The API never answered. The user assumed the record was gone.

The feature was simple on paper. Offline support exposed every weak assumption.


Field work on mobile only

We shipped a field workflow in a market where connectivity drops mid-action. Mobile was the only channel.


Save vanished on a drop

The UI pretended the network was reliable. Pending work was invisible. Retries could duplicate writes without a queue.


Protect intent first

Protect user intent first. Queue writes locally. Show pending, failed, and synced states honestly.

Design the sync model before the animation budget.


Optimistic write queue

Sync path
Queued write
await localQueue.enqueue({
  id: crypto.randomUUID(),
  payload: formValues,
  status: 'pending',
});

Show pending state honestly

Offline-first is about honest state, not full parity on day one. Users forgive slow. They do not forgive silent loss.


References