Why Offline-First Matters
In places with unreliable internet, “Loading…” is not just annoying — it kills adoption. For TallyPocket and other field apps, offline-first was a hard requirement, not a nice-to-have.
Core Principles
1. Local is the source of truth while offline
All critical data lives locally first, then syncs.
2. Background sync, not blocking UI
Users should never wait for a spinner to record a transaction.
3. Conflict strategy decided in advance
Last-write-wins? Field-level merge? Ask the user?
Tech Choices
- React Native
- MMKV / AsyncStorage for local state
- Firestore or custom backend for sync
- A simple “sync status” per record (pending, synced, failed)
UX Details That Matter
- Show sync state somewhere in the UI (tiny, but visible)
- Allow manual “sync now” for power users
- Never silently drop data
Offline-first is mostly about respect: respect for the user’s time and context.
