▲ | josephg 5 days ago | ||||||||||||||||||||||||||||||||||
Yeah; this has been a known thing for at least the 15 years I’ve been working in the collaborative editing space. Strong eventual consistency isn’t enough for a system to be any good. We also need systems to “preserve user intent” - whatever that means. One simple answer to this problem that works almost all the time is to just have a “conflict” state. If two peers concurrently overwrite the same field with the same value, they can converge by marking the field as having two conflicting values. The next time a read event happens, that’s what the application gets. And the user can decide how the conflict should be resolved. In live, realtime collaborative editing situations, I think the system just picking something is often fine. The users will see it and fix it if need be. It’s really just when merging long running branches that you can get in hot water. But again, I think a lot of the time, punting to the user is a fine fallback for most applications. | |||||||||||||||||||||||||||||||||||
▲ | LAC-Tech 5 days ago | parent | next [-] | ||||||||||||||||||||||||||||||||||
So the entire point of the (short) article I wrote was to get people to think outside of the the little box people put CRDTs in: javascript libraries and collaborative editing. Yet here we are, circling back to collaborative editing... At this point I think the term "CRDT" has too much baggage and I should probably stop using it, or at least not put it in blog post titles. | |||||||||||||||||||||||||||||||||||
▲ | joshcaughtfire 5 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||
good point. the reality is conflicts should often be handled in the business logic, not in the consensus logic, but not universally. For the former, having the conflict state be the consensus state is ideal, but you do risk polluting your upstream application with a bunch of unnecessary conflict handling for trivial state diffs. With CRDT, you have local consistency and strong convergence, but no guarantee of semantic convergence (i.e. user intent). I would still hire OP, but I would definitely keep him in the backend and away from UX | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
▲ | evelant 5 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||
I've prototyped something attempting to solve this problem of preserving user intent and maintaining application semantics. See comment here https://news.ycombinator.com/item?id=45180325 | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
▲ | ljlolel 5 days ago | parent | prev [-] | ||||||||||||||||||||||||||||||||||
LLMs might be able to use context to auto resolve them often with correct user intent automatically | |||||||||||||||||||||||||||||||||||
|