Status update - October 2021
In my free time this month I built a couch. Building something physical with my hands feels really good. It’s easy to get lost in code, and the layers of abstraction. Wood working is a good cure for that.
I usually design by hand with a pen and paper, but I decided to do this one with Figma. It’s easier to get the angles right, and virtual wood working is the cheapest kind. It pays to make mistakes early, and with vectors, instead of a hundred dollars worth of maple 1x6s. Since I’m designing something that’s basically symmetrical, and at right angles along one plane, Figma is easier than a tool like AutoCAD, or Blender. Here’s a bit of the design evolution.
I’ll write a full post about this later. I’ve got a lot of fun design SVGs and build photos.
CRDTs & OTs
Over the past year I’ve been working with CRDTs and OT libraries. More so in the past month. My take-away is that a lot of frameworks and libraries out there are headed in the right direction, but each domain and use case is so different that it’s hard to build a single generalizable solution.
Seems like CRDTs are popular because they’re easier to reason about compared to OTs. I’m all for solutions that are easier to reason about, avoid complexity and “magic”, but it seems like CRDTs and OTs have different focuses. OTs are for linear data structures - usually text, but sometimes something as complex as JSON, while CRDTs are a grab-bag of collaboration structures and algorithms.
They’re also not mutually exclusive solutions. If you have a document that you need to edit collaboratively, probably use CRDTs, maybe even a DIY LWW-register. If part of the document is a big blob of text, OTs might be the way to go.
In any case, I’m highly skeptical of anyone talking about their perfect CRDT library, or system, without any details about what their document looks like. You can reduce basically any data structure to a map of LWW entries, and replicate that. Without details around the data model, transport model, latency, bandwidth, interaction patterns, language, and domain it’s hard to get a clear picture around why you’d use OTs, or CRDTs, and if CRDTs, what structures and algorithms.
For what it’s worth, I think Figma is the most honest and straight forward about how and why they’re using CRDTs. You can read about it here: https://www.figma.com/blog/how-figmas-multiplayer-technology-works/ , and they even include some nice visualizations of their problems.