Software is often treated as a purely technical discipline: engineering, automation, optimization. But software is also a form of expression.

Every system encodes a worldview. It decides which details matter, which behaviors are encouraged, and which assumptions become invisible infrastructure. Writing software is ultimately an act of modeling reality. A programmer choosing abstractions is not so different from a writer choosing themes or an architect choosing materials. In each case, the work reflects a way of seeing the world.

These choices matter because software is no longer confined to “the tech industry.” Politics increasingly operates through platforms, algorithms, and digital institutions. Scientific research depends on computational models and simulations. Even religion and culture are shaped by online spaces that determine how communities form, communicate, and sustain themselves over time.

Software doesn’t merely support society anymore; it actively structures it.

That’s part of why I’ve been building what I call a software printing press. For now it’s a simple containerized agent system: a workspace, local models running through Ollama, OpenCode as the execution layer, queues, observability, and runners that can accept and execute jobs. Over time it’ll expand into a broader multi-agent system with planners, executors, QA agents, architectural guidance, and so on. I hope that it’ll grow into a system that makes software creation more accessible.

The Gutenberg printing press mattered because it expanded who could participate in the creation and distribution of ideas. It lowered the cost of expression. Entire political, scientific, and religious movements emerged from that shift. I think generative software systems may represent something similar. As the cost of producing software falls, software itself becomes a more accessible medium for expressing models of the world.

The challenge is making these systems usable enough that people can actually think through them rather than merely consume them. In that sense, this idea overlaps with the ambitions of low-code tools, but it points in a somewhat different direction. I don’t think people ultimately want less control over software; I think they want the ability to engage with it at the level of ideas rather than syntax.

That approach still requires hands-on interaction. Taste, iteration, experimentation, and judgment don’t disappear. But the interface between human intention and executable systems may become dramatically thinner.

I think the challenge will be, how do we guide these tools toward the outcomes we want? Right now we’re thinking about observability, context, the cost of inference, and that’s of course quite necessary. We also need to think about how to drive towards the societal outcomes we want - not just more software, but software that is humane, accessible, and dignifying.

Image courtesy of Annie Spratt