Jeffrey Zalischi

← Back to all work

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.