The full picture
| Strategy | Converges? | Loses data? | Cost |
|---|---|---|---|
| Last-write-wins | yes | yes, silently | trivial; needs a trustworthy clock |
| Siblings / multi-value | yes, deferred | no | every reader must merge |
| CRDT | yes, provably | no (by construction) | metadata growth; limited operations |
| App-specific merge | if the rule is associative/commutative | depends | domain design work |
| Reject & escalate | n/a | no | needs coordination — you left AP |
- Detect concurrency before resolving it: version vectors (per-replica counters) tell you whether two versions are causally ordered (one supersedes) or genuinely concurrent (a real conflict). Without them you can't distinguish 'stale' from 'conflicting', and LWW will happily overwrite a newer value with an older one that has a skewed timestamp.
- Why LWW is more dangerous than it looks: it doesn't just lose the concurrent write — it loses it without an error, a log line, or a metric. There's no way to audit what was dropped after the fact. If you adopt LWW, at minimum log conflict events so you can measure whether the assumption 'concurrent edits are rare' is actually true.
- CRDTs shine for specific shapes and are awkward outside them: counters, sets, flags, maps of those, and sequences for collaborative text (Yjs/Automerge power the Figma/Notion class of product). Tombstones and version metadata grow, so garbage collection is the operational reality nobody mentions in the papers.
- Field-level granularity dramatically reduces conflicts: two users editing different fields of the same profile is only a conflict if your unit of replication is the whole document. Splitting the record — or using a map CRDT with per-field registers — turns most 'conflicts' into non-events. This is often the highest-value, lowest-effort fix.
- Or avoid conflicts entirely by routing: pin each entity to a home region/partition so concurrent writes to the same key hit the same leader. Conflict resolution is a tax you pay for multi-leader; sharded single-writer ownership is how most large systems opt out of it.