Skip to content
← All posts
1 min read

What "offline-first" actually takes: lessons from shipping Android apps

"Works offline" is easy to promise and easy to get wrong. Cashly, my expense tracker, keeps transactions, budgets and recurring bills available with no connection: local persistence first, CSV export, recurring schedules that fire without a server, and analytics charts rendered from local data fast enough for low-end devices.

Zenify, my habit tracker, takes the same approach for streaks and goals: everything readable and writable locally, sync never required to use the app.

The lessons that transfer

None of this is exotic. It is an ordering decision: local first, network second, and no silent dependency on a connection the user may not have.

  • Design the local schema before the UI. Screens come and go; the data model is what offline mode lives or dies on.
  • Treat every screen as readable offline by default, not as a special case you bolt on later.
  • Optimize chart and list rendering for low-end hardware, because that is where local data volume shows up first.
  • Test the airplane-mode path as a first-class flow, not an edge case.