Offline writes need visible conflict states, not silent last-write wins

Users forgive delayed sync. They rarely forgive disappearing edits. Surface merge decisions in the product, not only in logs.

Last-write-wins is easy to code and expensive to explain in support tickets. When two devices edit the same record offline, someone must see the fork.

We prefer conflict records with user-facing choices for high-value entities, and automatic merges only where fields are truly commutative. The backend should emit enough context for the client to render a decision screen.

Retry budgets matter as much as merge rules. Endless queues fill disks and confuse users who thought their draft already landed. Cap retries, expose status, and clear dead letters with operator tools.

Advisory sessions often spend more time on product language than on CRDT theory. Naming the states — pending, conflicted, settled — prevents engineering from inventing opaque codes.

Back to notes