A case study
Fieldnote 2024
A field app that assumes there is no network, because usually there isn't.
- In one line
- Offline-first inspection app for civil crews
- My role
- Mobile & sync lead — offline architecture, CRDT merge layer
- Timeline
- 10 months · 2023–2024
- Team
- 3 engineers, 1 designer, field-testing with 2 inspection crews
- Built with
- TypeScript, React Native, SQLite, CRDTs
Fieldnote is an inspection app for civil crews who work under bridges, in tunnels, and on rural roads — places where connectivity is the exception. It treats the local device as the source of truth and the server as an eventual mirror, so an inspector never waits on a network that isn't there.
Where it started
The situation
Inspectors recorded structural findings on paper because their phones had no signal at the work site, then re-keyed everything back at the office. Transcription introduced errors, and reports genuinely went missing in the gap between the field and the filing cabinet.
The constraint
Two inspectors can examine the same structure on the same day and both edit its record before either reconnects. The system had to merge concurrent edits without a server referee and without silently dropping anyone's work.
How it was built
Local-first storage
Every inspection lives in an on-device SQLite database. The app is fully functional with the radio off — capture photos, fill forms, sign off — and treats sync as a background convenience rather than a precondition for work.
CRDTs for conflict-free merge
Records are modeled as conflict-free replicated data types, so two offline edits to the same inspection converge to the same result on every device without a central arbiter. No 'their version / your version' dialog ever reaches an inspector.
A sync engine that survives bad networks
Sync runs in resumable chunks with backoff, so a truck rolling through intermittent coverage makes steady progress instead of restarting a failed upload from zero. Large photo attachments are content-addressed and deduplicated across reports.
Designed with the crews
The form flow was shaped in the field with two inspection crews — gloves-on tap targets, a one-handed capture mode, and a review screen that mirrors the paper form they already trusted, which made the migration feel like an upgrade rather than a mandate.
What it changed
- Inspectors migrated
- 1,200
- Data-entry time
- −50%
- Lost reports since launch
- 0
- Core features usable offline
- 100%
Looking back
Choosing CRDTs up front looked like over-engineering until the first week of real concurrent edits, at which point it quietly did its job and no one noticed — which is exactly what you want from a merge layer. The lesson I carry forward: build the offline story first and bolt on sync, never the reverse; a design that assumes the network and degrades to offline is a much harder thing to retrofit.