Alan Donohoe

June 19, 2025

Building Partially Autonomous LLM Apps

There is so much good stuff in Andrey Kapathy's YC talk, "Software Is Changing (Again)"

Including!

"Partial Autonomy UX"...
A way of thinking about human interaction / UX when building LLM-based apps...

The "Autonomy Slider"...
How to, gradually, make your products more autonomous, while including the human-in-the-loop checks where needed... Similar to the progress of self-driving cars.

"GUIs utilise the GPU in your brain"...
The superiority of in-context GUI interfaces (ie: Cursor) vs text (ie: ChatBots/ conversational UI) in LLM based apps (in your face infra engineers who insist on working on the CLI 😂)

But what really made me think, was the change in how we build software that the title of the talk refers to.

When I first started coding, using BASIC, it felt like a real programming language, that is, you felt close to the computer (yes it's not assembly language but still). 
With each line of code, prefixed with a number, all in caps, with statements like:
 10 PRINT("HELLO WORLD") 
 20 GOTO 10 # (literally execute line "10"). 

Quite clunky and inhuman... that is, a real computer programming language.

Then I learned C... bit more refined... Still procedural...

Then C++. Which was amazing to me, because it promoted C's purely procedural code into Object Orientated Design and Programming. And we began to model the real world in our code!

A Car object has properties and actions, it has relationships with other types of objects... It felt like such a step towards working with real humans' mental model of the world (as software engineers aren't real humans).

Then Java... same OOD/OOP as C++, but even more user friendly.

Then Ruby, which was, as DHH has pointed out, like writing pseudocode. When you read idiomatic Ruby it's almost like reading English. 

def needs_another_tea_pot_made? 
  @tea_pots_made * @servings_per_pot < @guests
end

With a language like Ruby (or Python) and with the principal of "Ubiquitous Language" from Domain Driven Design, writing code that a non-technical domain expert can read and understand is achievable. And is something us engineers should strive for. The code continues to get closer and closer to working with real human's mental models of the the world and in a language that they can understand (English rather than C).

But now, due to generalist nature of LLMs, vs the specificity of previous neural nets ("Software 2.0" as Andrej Kapathy calls it)... 

...we can just "code" in English.  No BASIC, C, C++, Ruby, Python... Just English, instructing the LLM.

It's odd to go from decades of doing traditional software engineering (Software 1.0)... 
And (pre-LLM) data science (Software 2.0)... 
To work now as an "AI Engineer" (working on Software 1.0, 2.0 AND NOW 3.0) as so much of the complexity is delegated to the LLM. 

My IDE has become as much a text editor as it is a code editor.