Blog

An Introduction

Phase One 26 Jun 2026

I have been writing software commercially for more than thirty years, long enough to watch languages, frameworks and fashions come and go. Things have improved in that time, but for a while now we seem stuck in a loop: rehashing old ideas, rearranging the furniture, and calling it progress.

In the history of programming, only a handful of innovations genuinely changed how we work, each one by letting the programmer worry about less, and write far less code to reach the same end:

Even with all four, the current crop of languages and frameworks still leaves a great deal for a team to solve, and reinvent, on every single project. Three things in particular:

I think there is room to take the next step, and I have been circling these ideas for a long time, slowly solidifying fuzzy hunches into something concrete and implementable. This has come from sheer practical experience, building many large applications, with whole teams, and watching how decisions actually play out years later, after hundreds of interacting features. Pure research can build a small example and stop at the interesting fork in the road; I have had to travel those forks and live with what is at the end of them. The most useful thing I have learned is that some of the best decisions are deeply counter-intuitive, and not the well-trodden path.

A couple of pleasant properties fell out of the way it is built, almost for free: a program and its state are simple enough to sandbox and snapshot - to lift a running program and continue it elsewhere - and the format is simple enough to be drawn and edited as diagrams.

What I am making is a high-level language for building real applications, not a systems language for wringing control out of bits and bytes. Over this series I want to build it up from first principles, so let's start at the beginning.

← Back to the blog