Software is recursive and AI is the base case


Pardon the terrible analogy, but here is how I envision every modern software being built.

Say you are sad, because you don’t have $tool to auomate $task. You have an idea of how to build $tool, but at the moment no such tool is being had, so you set out to build it.

Without any tool, you can go tell Claude 17 xhigh pro max to just do the task, and it will get there, of course with the usual slowness and non-determinism. So you prototype $tool (with Claude of course), and it will work on some inputs, but not on all inputs, and some edge cases will break it.

But hey, this is a “working prototype” that will be shipped to production next week. As you go live, exceptions will be flying around as real data comes in, and then you meat proxy Claude to fix the issues. And you solve more and more edge cases over time until the software is “stable”.

People usually call this “iterating” but maybe recursion is a more accurate metaphor.

I mean. What is software really? Any software is just a function over a set of problems, and like in chess, we can enumerate the entire space of problems, at least in theory, and create a decision tree that always yields the correct solution for any given problem.

The job of a programmer is precisely to build that decision tree.

And every real-world problem is mostly trivially solveable, which is why Claude can cook up a prototype in 20 minutes. But you know the saying from the 80s: “The first 90% of the code needs 90% of the time, and the remaining 10% of the code needs the other 90% of the time.”

Am I right, fellow sprinters?

Now, if every program nowadays is if trivial return result; else claude(), then what happens is that claude is kind of recursively building out the program’s decision tree as the unhandled cases come in. And as more and more edge cases move from unsolved to trivial, it is like you are zooming into the decision tree to solve subproblems in more and more detail in this fractal fashion until either the problem domain is solved, your software is deprecated, or you get acquired by Meta.

In essence, every software is claude until you look at it. Maybe we should call software “Schrödinger’s claude” actually.


I’ve been noticing this in my own projects in another way. Claude Opus can do stuff if I just ask it to, Sonnet needs a CLI I built for it, and Haiku needs a CLI and heavy guardrails and clever incentivizing to do the same thing. And of course, a program requires code.

There is some weird gradient from idea to code that AI bridges the gap between that I can’t quite put into words. Going from Opus to Sonnet to Haiku to Code yields better and faster and cheaper results at each step, at the cost of human effort — so maybe software is fundamentally about managing this gradient?