The other day I read about this Italian philosopher from like 1700 who coined a phrase: verum esse ipsum factum. What is true is what is made, or: we only really understand what we created.
Verum Factum: we only really know what we made.
This resonates immediately as a software developer.
When I wrote a program, or when I’ve changed it enough, I feel like I know it, like it’s under my fingers. It’s a particular feeling of knowing. It means I have confidence that I can predict the software, that I can change it, that I can pinpoint problems as an expert. I love that feeling. It’s a verum-factum feeling.
That’s what I lose when AI writes the code. 😭
There’s a loss of intimacy with my own programs. I don’t know them inside and out, I didn’t shape their every structure and dataflow.
There are ways of working with the agent to keep this verum-factum knowledge, to feel like this program is mine. I seek these. Here are some I’ve found so far:
- I establish clear domain terms, some up front and others as the need for them emerges.
- I notice bounded contexts and ask the agent to break them into modules.
- I get it to write down design principles and conventions for this app.
- Behavior tests that the agent can’t change without permission: “I’ve set its boundaries” [1]
- Traces show me what’s happening: I work them into a shape that gives me confidence.
- Own the loop. It is mine to define how the agent and I know whether the software works.
When I’m the domain expert, the architect, the product owner, and the design lead–then yeah, that program can feel mine just as when I was mostly the coder.
Verum-factum still works when I work at the levels of behavior and verification. Even if I miss the satisfaction of carving each clever abstraction.
[1] This is a kuote from Steve Kuo.