Sync Conflict Resolution
The policy applied when the same record was changed on two devices while they were disconnected, and both changes now arrive.
Conflicts are not an edge case in offline systems; they are the defining case, and the policy chosen is a product decision that architects too often make silently.
Last write wins is the default in most sync frameworks and is the one that quietly destroys user data. Its ordering depends on device clocks, which are wrong, so "last" is unreliable, and the losing edit vanishes with no notification. It is acceptable only where a field is genuinely a single current value, such as a status flag.
Field-level merge takes non-conflicting field changes from both sides and only conflicts where the same field was edited, which resolves the large majority of real cases invisibly and is usually the right default for record-based data.
Automatic convergence via CRDTs suits collaborative content where any convergent result is acceptable. Manual resolution surfaces the conflict to the user, which is correct for high-value irreplaceable content and unusable if it happens often.
The engineering prerequisite for anything beyond last write wins is causality tracking — vector clocks or version vectors — because without it the system cannot distinguish a genuine concurrent edit from a device sending an update it already had. Wall-clock timestamps cannot make that distinction, which is the root of most sync bugs.