I appreciate the technical achievement of "multiplayer," and it does work impressively well.<p>However, no one one my design team likes it. I certainly don't. It's akin to having someone breathing over your shoulder as you're trying to work. And with design, especially, I tend to create a bunch of nonsense and "bad" designs before getting anywhere near a level worthy of sharing or even a team critique. Even if I don't care what others think of me or my skills, it's very disruptive to the creative process to know that someone is watching you.<p>In my experience, at least, there do not seem to be very many use cases for "multiplayer." I mean, even using Google Docs at the same time as someone else is jarring and disruptive in most cases.<p>Perhaps the only use case where we've actually liked having it is for a critique (especially when a teammate is remote) or a demo.<p>Personal preference aside, I think Figma is great. I still miss some things from Sketch, but overall Figma is a great tool. My team recently transitioned/is still transitioning from Sketch to Figma, and I can imagine that many other design teams will be making the same move too.
Sounds weird to use "multiplayer" when there are no players involved, but users. On the other hand, I guess "multiuser" doesn't convey the real-time-ness they want to convey.<p>FWIW, here's how it's done for actual multiplayer games, especially the ones where latency is critical: <a href="https://gabrielgambetta.com/client-server-game-architecture.html" rel="nofollow">https://gabrielgambetta.com/client-server-game-architecture....</a> Arguably, their software is more similar to a turn-based game, and formal correctness of the results is more desirable than "a smooth experience", as is the case for multiplayer games.
I think “real-time collaboration” or “multi-user” would have been better choices than “multiplayer”. I was hesitant to criticize the term at first because it is so ill-fitting that I was unsure I understood what feature they were talking about.<p>It’s interesting to see this on HN at the same time as the GNU article about “Service as as Software Substitute”. I would have much more piece of mind that my personal or proprietary information is secure if I didn’t have to trust Figma. A peer-to-peer collaboration platform that I can run locally would be innovative and exciting.
I was trying recently to prototype a multiplayer experience, and got pretty stalled when it came around to the networking side. My goal wasn't to make it fast/scalable, but rather just to be able to have 4 people sit at my kitchen table and answer "is this game idea interesting/fun". But the resolution of movements, timing things, client/server stuff was actually a pretty steep cliff for someone who had never done it before. There's also a lot of interesting decisions to make upfront then about rendering, real-timeness, how you'll split up movement collisions, etc.<p>Regardless of if this is for a "Game" or not, I find reading more about these things quite interesting.
Great write-up! Thanks for taking the time to do this.<p>This is incredibly similar to the way we did multi-user simultaneous editing in <a href="https://Clara.io" rel="nofollow">https://Clara.io</a> back in 2013/2014. It was also a tree-based OT-like system, but there was a few differences.<p>I also wonder if you guys studied how we did it...
I think the approach of mutating each property independently is an excellent approach and I'm glad to see it working at scale. It's just like regular CRUD except that instead of mutating the whole resource, you just mutate one property at a time - And if two users edit the same atomic property at the exact same time, it doesn't really matter who's edit arrives last because there is no absolute right answer so long as both users can observe the same outcome.<p>I also did some work in that area several years ago which I refined over time into a sample app and a set of libraries: <a href="https://github.com/SocketCluster/ag-crud-sample#ag-crud-sample" rel="nofollow">https://github.com/SocketCluster/ag-crud-sample#ag-crud-samp...</a>
> When we first started building multiplayer functionality in Figma four years ago, we decided to develop our own solution. No other design tool offered this feature,<p>I could've sworn I've seen people on HN say there were tools that did real-time collaborative design before figma.
> As a startup we value the ability to ship features quickly, and OTs were unnecessarily complex for our problem space. So we built a custom multiplayer system that's simpler and easier to implement.<p>That sounds like a bad reason to implement you own mechanism. There are many valid reasons to design your own system (your requirements being different is the most common one), but “the state of the art is too complex” sounds like a good way to reinvent all the solutions to the technical problems the state of the art faced and end up with an equally complex solution in the end.<p>This isn't to dismiss the work exposed here, and the really pleasant write-up, though.
Unrelated, but repl.it wants to do the same thing for code. It's an on line IDE, something like Cloud9, that lets you click, write a program in almost any language and run it on their servers. You can collaborate with others, where you all see the same terminal etc. This seems amazing for learning and small remote groups who want to code together. Repl.it is already becoming a place where bright kids learn to code and produce some pretty impressive things.
I do not know how usable Multiplayer is. I sometimes had that if i had one browser window open and opened another that i had two sessions in Figma, which was slightly annoying. But for me the dealbreaker with Figma as a tool is it sometimes has issues with exporting content to png. Meaning I had to import it in GIMP before re-exporting it. The idea is really neat, but it needs some work before I can really recommend it over more traditional tools.
Is there anything currently being researched around Multiplayer tech with better efficiency than CRDTs or OT? It seems like almost all of such implementations currently just implement CRDTs or OT.
CRDTs are absolutely critical, if you don't know about them, read this article & then research them!<p>If you're wanting to use CRDT tools, I recommend two:<p>- <a href="https://github.com/automerge/automerge" rel="nofollow">https://github.com/automerge/automerge</a> (immutable)<p>- <a href="https://github.com/amark/gun" rel="nofollow">https://github.com/amark/gun</a> (mutable)
The article starts without introducing what figma is. I read for a while before discovering this is something like Google docs... Multiplayer work-sim maybe?