Bidirectional sync: conflict resolution strategies that hold up in audit
Published 5 May 2026Updated 19 August 202610 min read
The three strategies that survive production are field-level ownership (each attribute has one authoritative system), version-vector convergence (deterministic merge for genuinely concurrent edits), and scheduled reconciliation (drift detection as a metric). Last-write-wins is not a strategy; it is deferred data loss.
Why last-write-wins keeps getting chosen anyway
It is the default because it requires no decisions. The cost arrives later: a record that oscillates between two values, a support team that cannot explain the current state, and an audit question nobody can answer. Once volumes rise, the corrections themselves generate conflicts.
Strategy 1 — field-level ownership
Declare authority per attribute rather than per record. This resolves the majority of real conflicts because most disagreements are structural, not concurrent: sales owns pipeline stage, finance owns invoice state, the product owns usage. Store the map as data so a new field is a configuration change.
Strategy 2 — version vectors for genuine concurrency
When both sides legitimately author the same field — collaborative notes, field-operations data captured offline — carry a version vector per record and merge deterministically. The important property is not cleverness but reproducibility: the same inputs must converge to the same output on every device and every replay.
Strategy 3 — reconciliation as a metric
- Re-compare both stores on a schedule and report drift per field.
- Alert on sustained non-zero drift, not on a single mismatch.
- Keep a replay path for one record, one segment, or the whole estate.
Make conflicts visible to humans
Every resolved conflict should be logged with both candidate values, the rule applied, and the outcome. When someone asks why a value changed, the answer should take seconds to produce. That log is also the fastest way to discover that an ownership rule was wrong.
Frequently asked questions
What is the best conflict resolution strategy for two-way sync?
Field-level ownership for structural disagreements, version-vector convergence for genuinely concurrent edits on the same field, and a scheduled reconciliation sweep as the safety net. Combine all three rather than choosing one.
Is last-write-wins ever acceptable?
Only for fields where a wrong value is cheap and self-correcting, such as a cached display label. It is never acceptable for financial state, entitlement, or anything appearing in a report.
How often should a reconciliation sweep run?
Hourly for high-value state, nightly for the full estate is a common baseline. The right frequency is whatever detects drift before a human or a report does.
Freshworks CRM integration: architecture patterns that hold up in production
A practical engineering guide to integrating Freshworks CRM with databases, products, billing, and warehouses: API surfaces, auth, rate limits, sync direction, conflict resolution, and audit.
How to build webhook consumers that survive retries, duplicates, and outages
A production checklist for webhook receivers: signature verification, idempotency keys, ordering, replay, dead-letter handling, and the observability that makes failures visible.
CRM to data warehouse: getting numbers your board will trust
Extraction patterns, slowly changing dimensions, metric ownership, freshness monitoring, and lineage when moving CRM data into Snowflake, BigQuery, or Postgres.