Reality has bad Wi-Fi
Field apps, travel apps, retail apps — any real user is one elevator away from losing your server.
Design as if the network doesn’t exist
Queues, local-first data, optimistic UI. Sync is a feature, not a bug.
Conflict resolution is a product decision
Don’t delegate it to the framework. Your users don’t care about CRDTs; they care about not losing their work.
Offline is a UX, not a flag
Show users exactly what’s synced, what’s pending, and what failed. Trust is the whole game.