Some of you may have heard that Adobe bought Figma or $20B.. Figma brought a "multiplayer" experience to design tools like Sketch much the same way Google Docs brought a multiplayer experience to Microsoft Word. This online, collaborative experience seems to be catching on.
Whenever there is a big acquisition in Silicon Valley, people start to think its a trend. Here's Aaron Levie's take, CEO of Box, and generally good Twitter follow.
Before it was cool, we've been saying DoltHub is the Figma of databases. Taylor even made what I consider our best video about it.
What did we mean by this? What would a multiplayer database look like? What are your multiplayer database options? This blog attempts to answer those questions.
What does multiplayer even mean?
Multiplayer means collaborative.
The term originates in video games. When you play a game by yourself, it is called single player. When you play a video game with another person or group, it's referred to as multiplayer. Pong, the first game on the Atari console, was the original multiplayer experience.
This concept was extended to software. Popular 1990s software like Microsoft Word and Excel were single player. Collaborative online versions like Google Docs and Google Sheets were multiplayer, allowing Google's products to take some of Microsoft's market share. Microsoft's dominance in this category was presumed unassailable so Google's ability to compete was surprising. Multiplayer experiences became marketing speak for software trying to differentiate from single player competitors. Figma is the most recent successful example.
Wait. Aren't databases already multiplayer?
Some might argue that Oracle was the original multiplayer software product. Oracle made SQL databases network connected, massively expanding database capabilities. Most notably, SQL databases became the backbone of almost every online software application.
Cool blog Tim. Databases are multiplayer.
Hold up. Hold up. Don't leave. Hear me out.
Characteristics of multiplayer software?
Multiplayer in the software context generally involves the combination of some or all of the following features:
1. Familiar interface
Multiplayer products look like their single player counterparts.
2. In the browser
Multiplayer products rely on interactive web elements (ie. Web 2.0) to provide desktop-like experiences in the browser.
3. Accessible via standard urls/links
You can link to the artifacts created by these multiplayer products, making them easy to share.
Only users you intend to see or edit can do so.
5. Multiple simultaneous editors
Multiple people can edit at the same time. There are visual affordances for presence and multiple cursors.
To further encourage collaboration, comments can be added as a second layer of collaboration beyond the content being edited.
Lastly, you can download multiplayer artifacts in their corresponding common single player formats. For example, you can download an Excel spreadsheet created using a Google Sheet.
As you can see, databases don't fit the "multiplayer" definition very well.
How could databases be more multiplayer?
In the context of databases, what if you wanted you local development environment and those of your team, your staging environment, your production environment, and maybe even your analytics environment to be multiplayer? You wanted a modern web interface to manage collaboration between all these instances, complete with all the features above?
In order to do this, you would first need to rethink the database. A database that supported these features would first need to be decentralized. How else would all these nodes be able to be edited independently? The most familiar interface in the decentralized software development world is Git. Git combines decentralized collaboration with version control semantics to drive most multiplayer software development in the world today. It's no surprise that most of the "multiplayer" databases I discuss in this article rely heavily on Git metaphors, like branches and merges.
Then, you would need to figure out a way to manage a database via a web interface. I'm imagining the combination of a SQL Workbench like Tableplus or DBeaver and GitHub, complete with pull requests.
If a product existed with the above interface, I think it would truly be a "multiplayer database".
Why would you want a multiplayer database?
Now that I've made the case for what I think a multiplayer database should look like, why would you want such a thing?
Improve developer productivity
A multiplayer database would improve developer productivity. Bug in production? Clone production to your laptop to debug. Schema change? Make a branch of production and test it. Pull request with peer review to get it merged. There's a reason the software world runs on Git. The workflows make you very productive. We should bring those same workflows to databases.
A multiplayer database would minimize downtime caused by database changes because of database versioning. Database versioning allows you to roll back bad changes quickly. After rolling back, database diffs allow for developers to root cause the issue and build preventative measures to ensure the outage does not repeat. A good example of where database versioning would have been useful is this recent month long Atlassian JIRA outage. With a multiplayer database, that outage would be measured in minutes, not weeks.
Reduce software cost
As an industry, we've built a ton of software to coordinate our databases. We have a whole class of database migration tools to change schema in dev and prod. We have a tools like Fivetran or Stitchdata to take data out of production and put it in a data warehouse. And these are just the off-the-shelf tools. We've written a ton of custom software just because databases aren't multiplayer. Imagine the time and money you could save by deprecating all this mess for a multiplayer database.
There are a few companies working on the multiplayer database vision. We'll go through all of them here.
- The database for developers
- Initial Release
- March 2016
Planetscale is run by the good folks who wrote Vitess. Vitess is an open source "database clustering system for horizontal scaling of MySQL". Dolt is a heavy user of Vitess' MySQL dialect parsing code. We wouldn't be here without them.
Planetscale definitely has the multiplayer vision for databases. Planetscale adds branch/merge of schema and a great web and command-line user interface to a world-class horizontally scalable database. Planetscale is well-funded and ships a lot. They are definitely innovating on the multiplayer experience. For instance, they recently shipped a feature called insights which allows users to more quickly diagnose database errors through Planetscale's web UI.
Note, for the release date, I went with the first release of Planetscale's fork of Vitess. I'm not exactly sure when Planetscale in its current form launched and my cursory research didn't turn it up.
- Making Data Collaboration Easy
- Initial Release
- October 2019
TerminusDB adds full schema and data versioning capability to a graph database in an attempt to build a multiplayer graph database. TerminusX is their answer to a web user interface.
TerminusDB is new but we like what we see. The company is very responsive, has an active Discord, and is well funded. If you think your multiplayer database makes more sense in graph or document form, check them out.
- It's Git for Data
- Initial Release
- August 2019
Dolt is the first and only version controlled SQL database. Dolt adds Git-style versioning to the SQL database. It's like Git and MySQL had a baby.
DoltHub is Dolt's GitHub, a web interface, complete with pull requests, to facilitate collaboration between Dolt instances. Before it was cool, we've been saying DoltHub is the Figma of databases.
You probably figured it out by now but this blog outlines our vision for the future of databases. Databases should be multiplayer, decentralized and versioned. We should have world class user interfaces to manage them. We're biased but we think Dolt and DoltHub are the answer in the multiplayer database category.
Curious to learn more, come by our Discord or just go check out the multiplayer experience yourself on DoltHub using one of our many open databases.