Fieldnote
An offline-first data-collection app for survey teams working without reliable signal.
- Role
- Full-stack engineer
- Stack
- React Native · TypeScript · SQLite · Node.js
- Year
- 2024
- Result
- 12,400 weekly active collectors
Chose last-write-wins per field, not per record, with a visible conflict log. CRDTs were on the table; per-field merges covered every real conflict we saw in two months of pilot data, at a tenth of the code.
Context
Survey teams collected data in places with no signal for days at a time. The old paper process lost roughly one form in twenty between the field and the office.
What I did
A React Native app stores every form in SQLite first and syncs when a connection appears. Conflicts merge per field with last-write-wins, and every merge is written to a visible conflict log so coordinators can review it. I tested sync on a throttled, flapping network before every release.
Result
12,400 weekly active collectors, and no lost forms reported since launch. Next time I would build the conflict log screen first — it became the feature coordinators trusted most.