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
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.