Conflicts must be visible and choosable
Aliases: three-way merge · keep mine or theirs · merge conflict
What it is
When two people change the same place and the system cannot compose the edits, there is a conflict. Visible means both sides can be seen, not only “sync failed.” Choosable means keep left, keep right, or hand-merge, and that decision happens at the collision, not later in a pile of versions. This is the clash that already happened. Presence cursors are there to collide less; silently covering one write with another is refusing to show a conflict at all. Browsing history along a timeline is not the adjudication UI for this collision.
Why it happens
Auto-merge holds when edits do not overlap. The same sentence, cell, or counter has no single correct composition. If the product folds that case into an error code or “please refresh,” refresh shows only the surviving side; the other leaves the workspace. A visible conflict treats both candidates as objects: people pick with task knowledge, not with a timestamp bet. The choice has to happen in context—surrounding sentences, who wrote which—or isolated snippets get the wrong pick. Whole-document accept of one side also wounds paragraphs that never collided. If the conflict UI looks like a crash, people close and reopen, which hands the choice back to a silent policy.
Studying it
Build two legitimate rewrites of one sentence (both reasonable, neither a subset). The later-to-sync party hits the conflict. Compare: refresh leaves one side, an error with no content, side-by-side with per-hunk choice.
Independent variables: whether both texts are shown, choice grain (whole document / each hunk), whether authors are named. Dependent variables: loss of the still-needed side, rejection of unconflicted paragraphs, time from noticing to a keep decision.
Do not use programmer conflict markers as the only material—non-technical people may accept the markers as body text. Asymmetric knowledge (one person knows the due date changed) tests whether seeing both sides is necessary. This is not a test of whether the version list is findable.
Where it stops holding
Character-level live editing that almost always composes will rarely show this UI, but “two replacements of the same span” still needs a path; do not assume zero collisions. A structural rewrite of a chapter against a few typo fixes makes per-sentence choice unusable; offer chapter-level choice and warn about the loss. A long offline period may produce hundreds of hunks; provide “take all mine / all theirs” then allow per-hunk edits, or people will abandon sync. A read-only party must not be asked to choose; the conflict goes to someone who can still write.
Applying it
- When composition fails, open both texts in place, with author and time, and offer keep this / keep that / keep both and I will edit.
- Default grain is this hunk, not the whole document. “Apply the same rule to the rest” is an explicit bulk act.
- While conflicts are open, do not pretend save succeeded; the state is “n decisions waiting.”
- Verify: plant two reasonable rewrites of one sentence for the later arriver. They must be able to name both wordings and keep one, not refresh into a single survivor. Spot-check an unconflicted paragraph to confirm a whole-document “take theirs” did not wound it.