Skip to content
Book a call

Field ops · Field inspection

AZ Data Collector

Inspection checklists that finish where there is no signal, and reconcile when there is.

Role
Mobile lead
Duration
11 months
Team
2 from our side
Sector
Field inspection
az — checklist run
az — offline queue
az — sync conflict review

The situation

Inspectors work sites with no reliable connectivity — basements, rural infrastructure, buildings mid-construction. The job is a long structured checklist with photographs attached.

Treating offline as an error state was not an option. Offline is the normal condition of this application.

The problem

A queue that replays writes on reconnect is straightforward until two inspectors edit the same record from two devices, both offline, and both come back.

Last-write-wins is unacceptable when the thing being overwritten is an inspection finding with legal weight attached.

What we built

  1. 01

    Local-first storage with Realm

    The device is the source of truth during a run. The full checklist, its validation, and its photographs work with the network switched off entirely.

  2. 02

    A custom conflict-resolution layer

    Field-level merge rather than record-level, with genuine conflicts surfaced to a human instead of silently resolved. Nothing is discarded without someone deciding.

  3. 03

    A sync queue that survives interruption

    Idempotent, resumable, and safe against being killed mid-upload — because a phone in a truck will be killed mid-upload.

  4. 04

    Photograph handling built for bad networks

    Compressed and chunked on the device, uploaded independently of the record, so a large attachment cannot block a completed checklist from arriving.

React NativeRealmCustom syncNodeAWS S3PostgreSQL

The outcome

Inspectors complete full checklists with no connectivity; queued records sync on reconnect with zero data loss.

The connectivity question left the inspector's job. Records queue locally and reconcile when signal returns, with real conflicts escalated rather than resolved behind someone's back.