Interesting problem spaces around collaborative interfaces (with CRDTs)

These problems might be overlapping or non-existent in certain configurations. The starting point for these notes is an interface to A) edit individual documents B) maintain multiple documents in a graph, a collection of documents.

The graph is just another type of document that contains the relationships between and references to them. The graph document can be indexed.

This list is also specifically for working on interfaces that use CRDTs. A type of datastore which is based on storing operations which materialise in Eventual consistency. Rather than editing the data itself, we’re storing events, changes made or operations in a log.

For a nice, quick introduction to CRDTs see Notes from CRDTs and the Quest for Distributed Consistency.

I am using the word document to refer to any individual data structure that can be edited in the interface. It could be a text document, but it could just as easily be a todolist or a time tracker.

Relates to Designing collaborative interfaces on top of CRDTs

Sharing documents

  • Sharing with full history (complete log of operations)
  • Sharing only current state (no log previous to sharing)
    • Needs to be able to merge back into originating document which means the log that led to the state must be provable cryptographically
  • Sharing for live editing over the network (p2p)
  • Sharing for editing offline (via a file over email or other medium)
  • Sharing a document for view-only
  • Sharing a document for collaboration
  • Editing documents
  • Solo editing
    • How do you let someone know they’re ‘alone’
    • And that in ‘solo’ mode, there’s no chance of anyone appearing in your document whilst editing
  • Collaborative editing
    • Live
      • p2p
      • presence of others
        • cursors
        • focus
    • Async

Branching and merging

  • Are these words too difficult for a non-technical user?
  • Once a document is collaborative can it not be again?
  • Make private version (own branch) of a document
    • Based on date + current username
    • Named version
  • Diffing: showing a diff with another version
    • Merge in all operations (complete log)
    • Merge in compressed log, fewer updates?
  • Solo branch
  • Collaborative branch

Forking (advanced?)

  • What is the difference between a branch and a fork?
  • Make a copy of the document
    • Without ability to merge back?
    • With ability to merge back?
    • Without collaborators
    • Clean slate
    • With operation log (edit history)
    • Without operation log

Is the application state also a CRDT document? Is ‘the graph’ the application state?