You could copy that URL, paste it to somebody else. Pasted it into somebody else, and that other person would be in the same document with you collaborating. And then probably a decade later, Figma started working on their product. They were creating this design tool, made it browser-based and what they did with Figma is that they revolutionized the design industry so that people could work directly in the browser. And now not only designers could actually design files or have access to those design files, they made the design process available to a lot more than designers.
Now you have developers coming into Figma to inspect the elements in order to help them build those UIs that designers put together. You have stakeholders, founders, you know, C-level people that can go into files, review and experiment with design. And you even have, like, product people or pretty much anybody that wish to do so can just go into a file and play around with some of the components that are pre-built by the design team and start actually designing some of that stuff themselves. Figma has been really, really successful. And I think what they showed with their product is you can actually make a high quality, performant tool that typically was only desktop based. You can actually put that in the browser and make it collaborative. And all of the sudden you get so many benefits organization to seamlessly collaborate together in one space. And there are obviously more companies nowadays, you know, that have those type of multiplayer kind of collaborative experiences by default.
Canva is one of them, Mural, obviously for whiteboarding, Notion, Mirror, Linear has been really great at that for the ticket management software and obviously Pitch to do presentations like this one. And to enable multiplayer collaboration, you need to think about conflict resolution. And what is conflict resolution? Essentially, when you are in this world where multiple people can manipulate the same document state, you need to be able to resolve. Conflicting actions from different people that are being processed at the same time. And so if you have somebody requesting to make that rectangle red and somebody requesting to make it a circle, like what do you do at that point, you know, do you make it just red or do you combine them make it red and make it a circle. You need to think about those things when you're in the multiplayer world.
And to do that, there are two main algorithms really to enable this. So operational transforms, which modify the operations is typically used by Google Docs to use OTs. And then you have CRDTs, which stands for, I never remember, Conflict Free Replicated Data Type, and those modify the state of the document. OK, well, that's pretty confusing and I'm very much confused, too, it's a lot of acronyms and it's pretty hard to use. And so there are some CRDT frameworks out there that do this really, really well. Yjs is one of them, and they essentially provide you with different data types like right array, right map, right text and more to kind of take care of that complexity and make sure that if you interact with those data types, you don't have to worry about conflict management. Yjs will kind of handle that for you. Auto merge also is a one that's great, comes with different data types, counters, lists, text values, and they basically handle all that stuff for you as well. And they're pretty easy to use, right? Like, this is just an example of why just if you want to do an array, you just do a new wide array, push the content to it and shift the content, and you can also delete an index. So it's very similar to how you would interact with a standard JavaScript array, except that they make sure that everybody always going to be seeing the same data, even if there are multiple people manipulating that array at the same time. The thing, though, is that CRDTs can be hard to use and scale in production.
Comments