Skip to content

The Three Ways Offline Data Goes Wrong: Sync, Duplicates and Version Conflicts

Offline collection fails in three specific, predictable ways. None of them are about connectivity — they are about what happens at the moment data reaches the server.

Author

Sibasi M&E Team

Category

Field Data

Read Time

05 Mins read

Published Date

08 Jul, 2026

The Three Ways Offline Data Goes Wrong: Sync, Duplicates and Version Conflicts

Every offline data collection tool markets the same promise: collect without a connection, sync when you have one. The promise is real and largely solved. What is not solved, and what actually costs programmes their data quality, is what happens in the seconds after the device reconnects.

Three failure modes account for most of it. They are worth understanding as an M&E manager even if you never touch the technical settings, because the mitigations are partly procedural and those are yours to own.

Failure one: the sync that never completes

The naive design uploads submissions when the app is open and connectivity is present. In the field this fails for reasons that have nothing to do with signal: the enumerator closes the app, the device sleeps, the operating system kills the background process to save battery, the connection appears for forty seconds in a matatu and disappears.

What a robust design does instead:

  • Queue locally and treat the device as authoritative. A submission is saved to local storage the moment it is completed and is never held in memory waiting for a network.
  • Sync in a background worker, not only when the app is in the foreground, so the OS can run it opportunistically.
  • Retry with exponential backoff. A failed upload retried immediately, repeatedly, drains the battery and hammers a server that is probably already struggling. Backing off — waiting progressively longer between attempts — is what makes retries survivable on both ends.
  • Cap the retries and surface the failure. After a bounded number of attempts the submission should be flagged for human attention rather than retried forever in silence. A queue that retries invisibly for three weeks is worse than one that fails loudly on day one.

The procedural half, which is yours. Sync at a scheduled point each day when enumerators are somewhere with reliable connectivity, rather than relying on opportunistic sync in the field. And monitor the pending queue by enumerator, by day — a queue that is growing for one person is the single earliest signal you will get that something is wrong, and it usually appears days before the data gap does.

Failure two: duplicates

Duplicates are more damaging than missing data, because missing data announces itself and duplicates do not. A household counted twice inflates every indicator built on it, and reconciliation after the fact is slow, manual and never quite complete.

They arise from ordinary field behaviour: the enumerator taps submit twice because the first tap gave no feedback; the app is reopened and a sync fires again for records it already sent; a device is restored from backup and re-uploads its queue.

The only reliable defence is a client-generated identifier. The device assigns each submission a unique ID at the moment of creation, before any network is involved. The server enforces uniqueness on that ID, so a submission arriving twice is recognised as the same record rather than accepted as two.

Two details separate a correct implementation from a superficial one:

The uniqueness constraint must be enforced at the database level, not in application code. A check-then-insert in application logic has a race condition: two sync requests carrying the same ID can both pass the check before either writes. Under a flaky connection — exactly when re-sends happen — this is not a theoretical concern. The right behaviour is a database uniqueness constraint plus explicit handling of the collision, so that the request which loses the race returns the record that won rather than an error.

The constraint must be scoped to the organisation. Client IDs are generated on devices, and a system serving many organisations must not let one organisation’s identifier collide with another’s. Getting this wrong is not a duplicate problem; it is a data isolation problem, and a much more serious one.

Media attachments need the same treatment. A photo uploaded twice for the same question on the same submission should be recognised as one file, which means deduplicating on the pairing of submission identifier and field.

Failure three: version conflicts

The one that is least discussed and most often discovered at analysis.

Forms change during a round. A question is reworded after the pilot, a choice option is added, a section is dropped. Meanwhile there are twelve devices in the field carrying whichever version they last downloaded, and their queued submissions may have been collected on a version that no longer exists in the current form.

If submissions do not record which version they were collected against, you end up with one dataset containing answers to two different questions in the same column — and nothing marking where one ends and the other begins. That is not correctable after the fact.

The mitigation is straightforward: stamp every submission with the form version it was collected on. With the version recorded, you can segment your analysis by version, identify exactly which submissions predate a change, and make an informed decision about whether they are comparable.

What that does not do is decide for you. A stamp is a fact, not a judgement. Whether pre-change and post-change submissions can be pooled is an analytical call that depends on what changed, and no system should make it silently.

The useful middle ground is a system that detects the conflict and then stops, rather than resolving it on your behalf. When a device submits against a form version older than the one currently published, that submission should be marked as conflicted and routed to a person — who accepts it, rejects it, or records why the two versions are comparable. The decision stays human; what the system contributes is that the decision gets made at all, on the record, instead of the discrepancy passing through unnoticed.

The procedural mitigations matter more here than the technical one. Freeze the form before the round starts. If a change is genuinely unavoidable mid-round, make it deliberately: document what changed and when, push it to all devices at once rather than letting them update ad hoc, and note in the analysis plan how the two versions will be handled. A mid-round change made informally, device by device, produces a dataset whose version boundaries nobody can reconstruct.

The metadata that makes all three tractable

Whichever tool you use, check that a submission carries:

  • Its client-generated identifier.
  • The form version it was collected on.
  • Timestamps for both collection and receipt — they differ under offline sync, and the difference is diagnostic.
  • The enumerator identity.
  • GPS, where the protocol calls for it.
  • Its sync source, so mobile, web and offline-queued submissions are distinguishable.

Together these turn all three failure modes from mysteries into queries. Without them, an anomaly in the dataset is something you argue about.

The one-page checklist

  1. Local queue, device authoritative, background sync worker.
  2. Exponential backoff with a retry cap and a visible failure state.
  3. Client-generated IDs, unique at the database level, scoped to the organisation.
  4. Media attachments deduplicated by submission and field.
  5. Form version stamped on every submission.
  6. Form frozen before the round; mid-round changes documented and pushed at once.
  7. Pending queue monitored per enumerator, per day.
  8. Scheduled daily sync point, not opportunistic sync.

Items one to five are the tool’s job. Items six to eight are yours, and they are the ones that most often go undone.


Monival’s mobile app queues locally with a background sync worker, exponential backoff and a bounded retry count. Client IDs are enforced unique at the database level, scoped per organisation, with the race condition handled explicitly rather than surfacing as an error; media attachments deduplicate on submission and field. Every submission is stamped with its form version — and when that version is older than the one currently published, the submission is marked as conflicted and held in a review queue, where a reviewer accepts or rejects it with a note and the resolution is recorded against the submission. For form design and sync strategy, see the complete guide to offline data collection.

Related Blogs

The Complete Guide to Offline Data Collection for NGOs

Field data collection is hard. Add unreliable connectivity to the mix and it becomes a logistical challenge that derails even well-funded programmes. This guide covers what actually works. Why offline-first matters Most data collection tools treat offline as an edge case — a fallback when the connection drops. The result: enumerators wait for signal, skip GPS captures, or lose submissions entirely. An offline-first approach flips this. The device is the source of truth. Everything is stored locally and synced when connectivity returns. Enumerators never wait, never lose data, and never need to worry about bars on their phone. Designing forms for the field Before your enumerators leave the office, get the form right:Keep it short. Every extra question increases collection time and dropout risk. If a question isn't in your analysis plan, cut it. Use skip logic. Don't show irrelevant questions. A well-configured skip tree can halve the time on a long form. Add GPS capture early. Put the GPS field at the start so the device acquires a fix while the enumerator fills other questions. Pilot on the actual device. A form that looks clean on a laptop can be unusable on a budget Android with a cracked screen.The sync window problem Offline sync creates a data integrity challenge: what happens when two enumerators submit answers to the same household using different form versions? Monival handles this with version-conflict detection. Every submission carries the form version it was collected on. If that version is older than the current published version, the submission is flagged for review rather than silently accepted or rejected. This lets your M&E team make a judgment call on each conflict rather than losing data. Geofencing: keeping data spatially valid One of the most common data quality issues in field surveys is submissions collected at the wrong location — either because the enumerator was at the office entering data they collected earlier, or because they simply went to the wrong community. A geofence draws a boundary around your project area. Enumerators outside it see a warning before submitting. You can configure it as:Soft warning — they can proceed after confirming Hard block — submissions outside the boundary are rejectedFor most programmes, a soft warning is the right call. You want to catch mistakes, not prevent legitimate edge cases. Practical sync strategySync at the end of each day — schedule a time when enumerators are near WiFi or a strong signal. Don't rely on opportunistic sync in the field. Use client IDs — assign each submission a unique ID on the device before it reaches the server. This prevents duplicates if an enumerator taps "submit" twice or a sync fires twice. Monitor the pending queue — your dashboard should show how many submissions are waiting to sync per enumerator, per day. A growing queue is an early warning sign.Getting data out Once submissions are in, the work of analysis begins. Export to XLSX for the team, connect Power BI via the OData feed for donor dashboards, or push to your own pipeline via webhooks. The best programmes build their output pipeline before the survey starts — not after 10,000 submissions have landed.Ready to run your next field survey on Monival? Get started free — no credit card required.

Monival Team

Monival Team

Monival Editorial

15 Jun, 2026