Google Wave
A few quick notes on Google Wave, which already seems an interesting system. For some details, watch the developer preview presentation and related whitepapers, linked below.
A wave can be seen as a conversation which lives on a server (like forums, rather than emails). It is modeled as a tree of messages, where a reply can be inserted between any two paragraphs. The editor offers rich formatting and spell checking (based on statistical language model). Parts of the conversation can be restricted to a sub-set of participants (private replies).
Changes are distributed real-time to other connected participants, as you type. The system keeps track of the history and the read/unread state for each change for each participant. If you join an ongoing conversation, you can replay the history of replies, one step at a time.
In addition to the conversation model, the editor supports the document metaphor (like a wiki), where others can edit your messages (rather than replying to them). Such granular changes are also tracked in the wave history and read/unread state. The editor displays the current carret position of all participants as they edit, with highlights for new changes.
Later on, the document experience could be enriched by allowing changes to be reverted or waves to be branched (and integrate changes across branches). Also, the editor could be extended to support new objects in the document, such as spreadsheets, diagrams, drawings, etc.
Just like for maps, a javascript API lets you embed a live wave in any web page, with some points of integration between the host page and the control.
Functionality can also be added in a few different ways: editor extensions and bots.
The editor can be extended thru gadgets. They act as richer content in messages. This could include an embedded, interactive and collaborative map, video or form editing controls.
Bots are services which participate in the wave. For example, Spelly monitors the text you type, applies spell check and highlights mistakes with suggestions. Twitty acts as a bi-directional bridge between a wave and twitter. More bots are demonstrated to assist in various tasks, such as linkifying text, making polls, or bridging waves with a bug tracking system.
Finally, Wave servers can be federated together, allowing different companies to host their own system, but also share/sync waves.
Overall, I am curious to try this product, especially for collaborative document editing such as functional specifications.
On the technical side, some aspects are noteworthy: the unified design for supporting the broad continuum of conversation and collaboration models, the design supporting the concurrent editing and the protocol for server federation. The collaborative editing feature relies on operational transformation, which involves distributed version tracking, and change merging. Here is Google's paper on the use and simplifications of operational transformation in Wave. Incidentally, the same design can also support undo, disconnected operation (offline mode) or even a general P2P architecture (no dedicated server).
