Andrew Kelley - Why We Can't Have Nice Software (2024 Feb 04)

Why We Can't Have Nice Software

The problem with software is that it's too powerful. It creates so much wealth so fast that it's virtually impossible to not distribute it.

Think about it: sure, it takes a while to make useful software. But then you make it, and then it's done. It keeps working with no maintenance whatsoever, and just a trickle of electricity to run it.

Immediately, this poses a problem: how can a small number of people keep all that wealth for themselves, and not let it escape in the dirty, dirty fingers of the general populace?

This is a question that the music industry faced head-on, and they came up with EULAs, enforced via the state's monopoly on violence, and DRM, a way for software to act antagonistically against its own users. Software can do useful things like encode media into bits, and then copy those bits. That's dangerously useful, and it had to be stopped.

The True Cause of Bitrot

What about bitrot, you say? It takes ongoing maintenance to keep software working, doesn't it?

Let's think critically about bitrot for a moment because, as a reminder, bits don't actually rot - that's kinda the point of bits. In the best case scenario, bitrot happens due to progress - perhaps a dependency has made improvements but requires breaking API compatibility, or better hardware comes out and the software needs to be recompiled for that hardware. In this case, it's kind of a happy outcome. Some labor is needed to enhance the software in response, but then, once again, it's done; ripples disappearing from the surface of a lake hours after a stone is thrown into it.

The darker side of bitrot is due to businesses trying to make more profit than last year, and launching marketing initiatives. For example, Microsoft shipped a Windows Update that puts advertisements into the start menu, advertisements into the task bar, and changed the control panel's user interface to unify it with their business incentives - namely a superficial makeover to justify customers paying additional money for what is effectively worse software - it has new bugs and is now ridden with advertisements. This caused a bunch of churn in their own codebase, as well as other software trying to use native user interfaces on Windows.

It's all so incredibly wasteful. And that's the point, isn't it?

The programmers at Microsoft could have done less work, or worked on bug fixes instead. The UI designers could have done less work, or tweaked their existing design instead of making a new one. The managers could have done less work. Customers could have paid little to no additional money for a Windows Update. This all would have culminated in a more robust version of Windows that customers preferred, instead of one that is effectively boycotted like Vista and Windows 11.

It's actually a problem that software is too efficient and has this nasty tendency of being completed. Software offers us a glimpse into a post-scarcity society, but it is being actively sabotaged by those who seek to turn a profit.

Platform Waste

Consumers love standards. Standards allow multiple parties, perhaps even competitors, perhaps especially competitors, to have interchangeable components with each other, which gives consumers options, and negotiation power.

For-profit companies hate standards. They would rather have their own special cable, for example, that only works for their devices, and only they are allowed to manufacture them. To be more specific, underdog companies like standards because it lets them compete. The established players don't want to have to play fair.

You can see this playing out right now with the EU formally adopting a law requiring Apple to support USB-C chargers. At the time of writing there is no such law in the United States, but it is being discussed by politicians.

Standards allow software to be more efficient. By sticking with a standard for a period of time and then coordinating an upgrade to a newer one, software churn is minimized, resulting in a fixed amount of software development labor needed.

On the other hand, without a standard, for-profit companies are incentivized to fiddle with their product in a wasteful manner. For example, Apple has in the past made insignificant changes to their charging cable, making it not compatible with the one from the previous year. This resulted in more profit for Apple since consumers found their existing cables useless and had to buy new ones. Ultimately this resulted in more money being spent in the economy, increasing the country's GDP. Economists rejoice; the Earth weeps.

Think about how many messaging apps have come and go and how much programmer hours have been wasted on them. We almost had XMPP be mainstream, but then Google outgrew their "don't be evil" diaper and put on their "make profit" big boy pants. If your goal is to turn a profit, it's obviously the correct choice to invest into a platform that you own. So then we got a half-dozen buggy messaging apps from Google that didn't even work with each other, let alone Apple's platform or the other contemporary players.

The new hotness is Discord, which is already starting, predictably, to decay. I can't believe a human sat down and wasted hours of their life coding "super reactions". It's not something that really needed to happen.

Imagine if all these programmer hours spent on all these products actually centered around a proper standard, which evolved along with consumers' needs rather than these companies' ongoing need to fiddle with the knobs and sliders until profit comes out. The thing is, if this actually happened, then what would these employees spend their time on? At some point society would be pretty much done implementing messaging software. Messaging app updates would be rare, and bugs in messaging apps would be rare. We would reach peak messaging.

Peak Dishwasher

Decades ago, we already did it. We reached peak dishwasher. Dishwashers achieved perfection, and it was no longer possible to improve them. The mechanics were optimal, the user interface was ideal, and consumers had no desire for any changes.

One would, naively, think of this as an accomplishment. But how is a company supposed to make more profit than last year? By any means necessary, of course.

They invented these dishwasher detergent pods that are actually a downgrade - slightly more time consuming to use than powder, more expensive to manufacture and purchase, worse for the environment, and most offensive of all - actively sabotage the dishwasher's prewash feature making the product actually function worse than before!

And from a business perspective, it is a critical success. They found a way to make consumers spend more money on dishwashing. The line goes up, for one more year. But it's not enough. It has to go up every year. What else can we do?

I found myself in a position where I needed to buy a new dishwasher last month, and, already being aware of this problem, did my very best to buy one that worked well. I picked one that had 5/5 stars on Consumer Reports. Unfortunately, the dishwasher that I ended up with is my worst nightmare.

It takes 30 seconds to boot up, presumably because of the Bluetooth and WiFi driver in it. Many of the configuration options are hidden behind a proprietary app. The buttons are hidden and touch based instead of being visible and depressing with natural tactile feedback. I still haven't yet done the chore of going into my router and disabling it from accessing the Internet. I had to give it access to use the app to find out why it was broken. Until I do that chore, there's a chance it could auto update and have a firmware bug and stop working, or just waste my bandwidth. Who knows what it's up to?

Meanwhile, I had to call a repair technician to fix the door latch already, as well as the soap dispenser latch. Both things have since failed to work properly again and I still need to do the chore of calling the company to get a repair done a third time.

Before we moved, we had an older dishwasher that worked perfectly. No Internet, no Bluetooth, and the door latches worked flawlessly through thousands of runs.

The problem with the requirement for each year to be more profitable than the last is that once you reach the peak, once it's not possible to actually improve your product any more, you still have to change something. Since you can't change it to make it better, you therefore will change it to make it worse.

What Blockchains and LLMs Have in Common

Plenty of people roll their eyes at blockchain being the new buzzword, or about how tech is overobsessed with AI (LLMs) right now. It's easy to chock it up to it being a silly, harmless fad perpetuated by uneducated or misguided people, but in reality it's a lot more intentional than that.

Most tech workers work 40 hours per week at some company. That's a lot of collective hours spent on something. What factors go into deciding, as a whole, what that effort is spent on? Employees have some choices in the matter, but in the end those choices are limited to job offers. Job offers are created by the owners of companies who decide what they want to invest their money into.

In other words, venture capitalists decide what is the current hotness precisely by directing large amounts of labor towards whatever they want. Empirically, VCs are primarily motivated by seeking a return on investment. The goal is to turn a big sum of money into an even bigger sum of money. In theory, this is because with an even bigger sum of money, you can then start to spend that money on directing an even larger amount of labor towards whatever you want, bypassing democracy to influence the future of humanity, but in practice, most VCs get fixated on that return on investment until they die.

If you were to criticize blockchain technology from a purely technical perspective, you might point out the flaw that proof of work requires an exponentially increasing amount of computational power, and thus electricity, in order to keep the blockchain database alive over time. You might point out how inefficient of a database it is. But you would be missing the point. Blockchain technology excites investors precisely because of how wasteful it is. Even if we had fusion (!!) it would eat up all that energy and more. It's difficult to express the magnitude of how wasteful this is, and the fact that it's built into the system intentionally is sinister.

Blockchain technology is a kind of software that doesn't get completed or perfected. Rather it's the opposite; the longer it is in existence the more work it creates for everyone to do. The waste is a feature; it's how the line goes up.

Reminds me of this scene in The Fifth Element where Zorg says:

Life, which you so nobly serve, comes from destruction, disorder, and chaos. Now take this empty glass. Here it is: peaceful, serene, boring. But if it is destroyed... look at all these little things! So busy now. Notice how each one of them is useful. What a lovely ballet ensues, so full of form and color. Now, think about all those people that created them. Technicians, engineers, hundreds of people who will be able to feed their children tonight so those children can grow up big and strong and have little teeny children of their own and so on and so forth. Thus adding to the great chain of life.

You can find this scene on YouTube but I won't link it for fear of accidentally causing someone to view an advertisement.

LLMs offer an even more ideal kind of software to the investor. First of all they require an enormous amount of capital to train, and specialized hardware to run, making them suitable to offer as a service, where the amount of profit can be made to go up in a controlled manner. What a delicious idea.

More to my point, they offer a host of subjective, ill-defined tasks that are immune to being completed. They've managed to take something well-defined, well-scoped, and completable, and turn it into an untameable monster that will be sure to offer software churn for decades to come.

Have a peek at this blog post that is going around lately: The pain points of building a copilot

These people are brimming with excitement about all the new problems that LLMs are bringing to the table. Some choice quotes:

Prompt engineering is time consuming and requires considerable trial and error...As one developer said, "it's more of an art than a science".
Testing is fundamental to software development but arduous when LLMs are involved. Every test is a flaky test.
The field is moving fast, and it requires developers to "throw away everything that they've learned and rethink it."
Developers are having to learn and compare many new tools rather than focusing on the customer problem. They then have to glue these tools together.
It is still the wild, wild west ... It will be interesting to see how software engineering will evolve, either through new processes or tools, over the next several years.

LLMs are a way to make software take orders of magnitude more computational power, electricity, and human labor, while delivering a product whose extremely volatile quality is impossible to assure. The work will never be completed; it will only create the need for ever more labor.

For investors, all this churn is attractive. It's disruptive.

It's why we can't have nice software.


Technology, and in particular, software, offers a glimpse of magic; a perpetual motion machine; wealth created from nothing. It offers us a chance to work together on something beautiful; to achieve perfection by ratcheting improvements over time.

In the end, this opportunity is squandered in a doomed quest for endless growth.

Thanks for reading my blog post.

Home Page | RSS feed | Sponsor the Zig Software Foundation