Posted April 27, 2022

Distributed systems are hard to build. Really hard. It’s one of the few aspects of computer science that you can’t hide with a thin layer of software. However, as applications scale, distribution becomes a necessity. It is needed as data and compute requirements grow. And it’s needed to move workloads closer to the users as applications go global. The most sophisticated companies have traditionally hired distributed systems experts to tackle these problems. And even then it takes a tremendous amount of time, resources, and often downtime to get it right.

While there are a wide range of challenges to scaling and distributing an application perhaps the trickiest is managing shared global state. While only the most sophisticated backend teams adequately support global state in front end applications, global state itself is a trivially simple concept. It’s just state used by a program — for example a counter that counts the total number of visitors to a website — that’s updated and maintained correctly despite being read and modified by front-end programs wherever they are running. Shared global state is required to build anything but the most basic, static applications.

Big architectural shifts in the industry have made the problem even more acute. We’re seeing a broad “delamination” of the application stack. Traditionally applications have been relatively monolithic — built largely as tight clusters running in the cloud — but trends such as the JAMstack and serverless are pushing application logic to the edge. This puts power in the hands of front end developers to build rich applications, and it offers a more performant user experience. However, along with this shift comes the need for more and more global state!

Thus, if you’re a developer building a website using say Netlify or Vercel, and you don’t just happen to have a seasoned backend team who has spent years constructing the services, you really don’t have many (any?) good options for managing global distributed state. Most commonly front-end devs resort to using a database: a super clunky solution that is slow, complex and is far better suited for queries over large amounts of data than handling state tied directly to a program’s logic.

This is exactly the problem Convex is focused on solving. The founders are the team who built out the backend for Dropbox and are now taking that experience and making it so that any front end or server-less developer can manage global distributed state in JavaScript as part of their front end code.

I’ll be honest, when the founders first approached me with the idea, I didn’t believe it was possible. However, I had previously interacted with James Cowling, one of the founders, when we were both PhD students. At the time he was at MIT studying distributed systems under Barbara Liskov. And I knew the other two founders, Jamie Turner and Sujay Jayakar, by reputation as some of the smartest and most experienced backend developers in the industry. So if there was ever a team who could crack this problem, they were it.

And they have. Put simply, Convex allows any front end dev to declare and manage global state trivially within their applications using Javascript/Typescript. Even if you only dabble with front end code, the experience is magical. All the hard work of distributing global state and keeping it consistent is handled transparently under the covers.

It really is such a pleasure to announce that we are leading the Convex series A and I will be joining the board. With application development moving quickly to the edge, we as an industry need better methods to enable front end devs to manage their global state. And we believe Convex is the best solution for just that.

***