Anti-capitalist human scale software (and why it matters)

Twitter launches features no one wants. Parse shuts down. Websites track us to an astonishing degree. Corporations close down open systems. They turn over our data to the government.

Software and services that are supposed to make life better are becoming unreliable and untrustworthy. It is increasingly clear that our interests, as software-using humans, are diverging from the interests of software companies.

I am coming to the conclusion that we simply can’t rely on corporations to produce and maintain great, reliable, human-centered software. The systems and incentives are in direct conflict.

In my mind, one of the core problems is a lack of agency. If Twitter or Facebook push out a feature that is destructive to the way we use their services, or they refuse to create tools that are plainly necessary, we can do little but complain. As individual, non-paying users, we have virtually no leverage.

There’s also a lack of agency on the building side of the things. With open systems, we have the opportunity to create and run our own variants of systems that better suit our purposes. When APIs and app stores are tightly controlled, even our ability to usefully augment the system is curtailed.

So, short of overthrowing capitalism, what can we do?

Amidst the pessimism, I do think we still have a chance to build a different path. The only way to meaningfully diverge from the existing trends is to consciously embrace new values and different constraints. To that end, here are a new set of principles:

The community should have final say.

We need to reintroduce agency. Each particular community (not necessarily the entire user base — more on this later) should be able to decide if they want to accept the latest update of a given service or not. If a community cannot shape systems to reflect their values, those systems are flawed.

Scale is a trap.

So much of the complexity of web engineering comes from questions of scale. But why do we need scale? If we are trying to build humane software, there are significant benefits to keeping things smaller and simpler. If you want to run something for hundreds of people–or even thousands–that is entirely sustainable on a single cheap shared server.

Hubs, not monoliths.

A critical piece of this is creating systems that are somewhere in between the giant, corporate systems and the completely distributed everyone-run-their-own-peer, everyone-needs-to-be-a-hacker approach. I am inspired by projects like Artisanal Integers, which I initially thought was a throwaway joke, but is actually a fascinating model to work ourselves out of these centralized systems.

These hubs can be operated by an individual or a small group on behalf of a community. As long as there is sufficient agreement between the hub operators about rules of interoperability, each hub can maintain a level of autonomy. The community of people using it can control its direction. And, ultimately, if one community chooses to break from the larger system, that is an option that is available to them.

Allow the community to create.

Just deciding which software to accept is not enough to shape a system–its participants must be able to add the things they need. This may take the shape of alternate user interfaces, api-driven auxiliary services, or changing existing features.

This implies open source, but that’s not sufficient. These changes also need to be easy to develop, test, and deploy. Even more importantly, it must be learnable and approachable.

Many of my peers learned about computers, programming, and the internet in the era of BBSes, when individuals or small groups of people set up systems for their peers to interact. Those people could choose what software they wanted to run, which add-ons they wanted, and could write their own if they wanted to. The early days of the web had a similar feel, and the transparency of View Source made it possible to work from examples.


It’s worth saying that I do believe commercial software has its place. I use commercial software and services constantly, and the level of investment necessary for many projects requires some kind of money-driven structure. I’m ok with that. But I also believe that it can’t be the only option, especially when it comes to social tools, and platforms that have rapidly become a core part of how we communicate, learn, and self organize.

I have some ideas for how to approach this, but I’ve written this down not because I want to sell you on my ideas, but because I want us all to think about what this might look like, what we value, and how we might get there.