Hi, I'm Tomer Aberbach

I have only been working on Google Docs for a short time so feel free to take what I say with a grain of salt! I’m not an expert in OT by any means.

I believe you are right that there must be a central server that resolves the conflicts between editors. The editors cannot communicate with each other in a decentralized manner.

However, I don’t think it is true that the central server must receive all changes in a “timely manner”. If users A, B, and C each go offline and make lots of changes, then one of them must come back online first (or at least, their request to sync is received by the server first). Suppose this is user A. There have been no new changes sent to the server since user A went offline so user A’s changes can be persisted by the server without doing anything fancy. Suppose user B comes online next. User B sends their changes to the server and each change (a single “change” being as granular as was decided when the collaborative editor was built) is transformed against each of user A’s changes before being persisted by the server. I would consider it an implementation detail to decide how to update users A and B with the new state of the document (e.g. send the whole document down to each user because there were lots of changes to resolve or send down user A’s changes to user B and user B’s changes to user A to be transformed against the local changes). The same idea applies for when user C comes online.

I think this can actually be tested on Google Docs right now. Going offline in the web editor “locks” the document so that you cannot edit it, but you can still edit the document when you go offline on the Android app (not sure about the iOS app).

One last consideration: just because it technically works doesn’t mean it’s a good idea! How well this works depends on how granular the changes being transformed are and on if the transforms between changes were designed well. If you are building a collaborative editor and anticipate that users A, B, and C will do extensive offline work on the same document content (not on different document pages or presentation slides), then automatically resolving their changes would probably not yield any user’s expected results. I think providing some kind of merge conflict resolution UI would yield a much better user experience for that situation.