← Blog

Why most mobile teams get offline-first backwards.

June 25, 2026 · 6 min read

The usual sequence goes like this: build the app against the API, launch, receive complaints from users with poor connectivity, then add caching. It feels pragmatic. It is also the most expensive order in which to do the work.

01

The cache trap

A cache answers "can I show something while I wait?". Offline-first answers "can the user do their job without the server?". Those are different products. A cache keeps the server as the source of truth and makes reads faster; it does nothing for writes, which is where users actually lose work.

Retrofitting writes is where the cost appears. Every screen that assumed a response now needs to cope with a pending state. Every server-generated ID becomes a problem. Every endpoint that is not idempotent becomes a source of duplicates.

02

Decide the source of truth first

The first architectural decision is not the framework or the database. It is where the truth lives.

If the device owns the data the user works with, you design repositories, client IDs and an outbox from the start. That costs more in the first month and much less in the second year. If the server owns everything, be honest about it and invest in good loading and error states instead of a half-built offline mode.

03

What it means for planning

Offline-first changes estimates, test plans and backend contracts. It needs to be a product requirement with an owner, not a technical preference raised in a code review. The teams that get it right tend to write down, early, which entities must work offline, what "saved" means, and who decides conflict rules.

I build and lead teams around systems where reliability matters. If you're designing an offline workflow, evaluating an architecture, or untangling a queue that has become part of your product, I'm happy to compare notes.