Litany against (infinite) scalability

Posted 2024-03-19 #unfortunately, computers

Back in June, I wrote "The software I want doesn't exist", lamenting the gap in open-source desktop software revealed by Notion. Well, I'm making it myself, and in doing so I've thought a lot harder about why I find platforms like Notion so frustrating. It goes deeper than UX, interoperability, and any conviction about "local vs. cloud" or similar debates. The problem lies within the very incentive structures that fund software into existence.

But first, another anecdote

Once every year or two I consider, but do not commit to, learning this thing called "Kubernetes". It's an orchestration system for applications that was originally developed by Google; people use the phrase "infrastructure as code" when explaining its value proposition, and that sounds cool to me. I figure it might be easier to manage over the long-term than my current, sort of patched-together system for all the websites and apps I maintain. My VPS provider even has their own built-in Kubernetes engine with a fancy administration UI! Ignoring all other variables, this seems like the perfect solution for me.

So, I poke around the onboarding page for a bit, and then I remember the same problem I always face: VMs are expensive! Their documentation recommends a bare minimum of 3 VMs for the simplest possible setup, which would triple my costs right out of the gate. Sure, there are real benefits to using industry-standard tooling, but are those benefits worth paying an extra $25-50 per month? Does my vision for, say, include zero-downtime upgrades and as many 9's of availability as money can buy? These are problems that Google had to solve for, but that's only because they're fucking Google. I need infrastructure for a hobbyist's digital workshop, not a small country.

So, I step back and re-assess what problem I'm trying to solve. I can forego the fancy UI; what I really need is some assurance in the longevity of the systems I'm building. Like, I understand my silly patchwork system today, but what about in 5 years? What if my VPS provider closes down, forcing me to rebuild everything in an unfamiliar environment? This is where the "infrastructure as code" proposition starts to sound mighty attractive, especially for a project as widely recognized (and thus supported) as Kubernetes. But the cost is more than just the compute resources - it's baked into the abstractions that delineate the software's environment. Alternative engines like microk8s and k3s can smooth over the need for numerous VMs, but they can't simplify the core concepts without no longer being an implementation of Kubernetes. Reading the documentation for the Kubernetes API gives me flashbacks to Java EE development. I can't possibly need more than 5% of its functionality for what I'm doing!

Two symptoms of the same disease

The key principle that Kubernetes and Notion have in common is scalability. Both are designed as massively distributed systems, built to serve a fraction of the world's population that could be visualized on a pie chart. Every edit to a Notion table goes into an eventually-consistent pipeline that coughs & wheezes if you start editing cells at a rate exceeding one per second. The simplest possible Kubernetes system still consists of clusters of nodes of pods of containers because that's how many layers you need when you're Google. These are hard problems to solve, and I can respect the ingenuity involved in tackling them, but they're not my problems. The more I try to use & learn these tools, the greater I resent their propensity to push the burden onto me.

In addition to the points made in the earlier post, the software I want would ideally hold these two qualities:

  • Truly personal: it's designed for me, a person, not a team or a business.
  • Instant feedback: I want to feel the ceiling of Moore's law in my fingertips.

The tech giants & investors that fund software development don't see eye-to-eye with me here. Businesses make for much more lucrative customers than individuals, and they're not afraid to leave you behind if the money says so. And as for speed, they'd much rather amortize the benefits of gigahertz CPUs over a theoretically unbounded number of computers. Growth is the only metric that matters in their world; more and more, never faster, and certainly never better.

And you intend to solve this yourself?

Of course I can't compete with Notion Labs Inc.; they have thousands of employees on their payroll, plus funding that allows them to iterate without even turning a profit. My goal is not to upend the productivity software industry with some magical tool that outperforms business-class tooling. But really, that's the whole conceit of this project - it's the software that I want, not the start of a revolution. If other people want it too, that's great! But the kind of tech-savvy nerd who would be interested in this project tends to be highly opinionated (ask me how I know), and I find it unlikely that my specific implementation will appeal to most of them.

The project is codenamed tree-editor. I'll share a working prototype and a devlog of sorts in an upcoming post. I hope you look forward to it!