Working Together Should Be Easier
Collaboratively constructed work products – stuff people put together with other people – e.g. presentations, documents, schedules, source code, etc.
Pavel would argue that we support this kind of activity very poorly.
Collaboration via email – everybody writes their own section, sends their section to one owner/victim, who pulls it together, unifying styles, sends it out to everybody, and everybody makes an edit. Victim coordinates and goes quiethly insane.
Collab via shared files – put draft out on a file server, each author editing on a single copy – but can’t author at the same time or when disconnected, so they make a copy…etc.
What do we really want? Never prevented from editing, can edit while disconnected, owner needs to review edits and selectively undo them, and to control who can edit what when.
Better collab vie email – send first draft as attachment, each user edits, application aggregates edits and sends back to everyone..
Really we just need to send the edits, not the whole documents – “delete N characters ad position P”
How do we make this work? Goal is that everybody sees the same story, including the order in which things happened – the order that “God” saw the edits, including disconnected edits. Involves some mucking about with the incoming edits coming by email. What makes a good order? Everybody can compute locally without talking to the server – given two edits which one comes earlier? Everybody gets the same story everywhere. Respect causality.
How to implement order – label every edit with its potential “causes” – what other edits were received before this edit? If edit A knew about strictly more edits than B, A comes later in the story. If neither edit knows more, use arbitrary rule to order.
Transform edits – can’t just take your edit and apply locally as if nothing else had happened, because I’ve been working on the doc. Must transform edits with knowledge of what’s changed. If i know what you knew when you made your edit, I can do that. It gets a little bit complicated, but it’s doable. Need two kinds of tools – transform before, and transform after. Then all becomes possible.
Current status – About sixteen years ago some guys in Texas defined the problem. People have been coming up with algorithms but not the transformations themselves. Pavel solved this problem – putting together an advanced team at Microsoft and building an app-indepndent toolkit. Resolving intellectual property issues within Microsoft.
Tantek asks whether Pavel’s used SubEthaEdit – Pavel is familiar with it, but hasn’t looked at it in depth. Solves some of these problems in a restricted domain.
Pavel – Collaboration is not a product, but it should be part of nearly every product. He’s looking forward to openly publishing this whole set of technologies, but there are other people at Microsoft who may have other opinions.