Here's the last in a fascinating series of guest posts by Patrick Nadeau. It's worth saying, at this stage, that this series reflects Patrick's own experience with AI, and is not necessarily representative of the views of his or my employer. We're all on a journey together, and voices like Patrick's are important to make sure we ask the right questions as we travel.
This is the final installment in a blog series about agentic coding.
After being encouraged to try agentic coding at work, I used it to build a retro game emulator in 36 hours. The whole vertiginous journey is outlined in Part 1.
In Part 2, I described what I will now call a generative harness: a way to constrain how the LLM generated code.
In Part 3, I discussed the interpretive harness: a way to constrain how it reads code, by turning it into an experimenter.
In this final installment, I'll introduce a third kind of harness I came up with, an elicitative harness, to help the LLM ask the right questions. Only later did I realise that the machine had also been eliciting something from me.
⁂
Looking back, what I discovered was that working with LLMs is a game of constraints. In my exploration, I came up with three types of constraints, which I would now classify as:
- Generative: constrains the code the LLM writes.
- Interpretive: constrains how the LLM interprets existing code.
- Elicitative: constrains how the LLM gathers information from people.
Generative harnesses have been widely discussed, interpretive ones less so. But this third type, which I am calling elicitative, may become more common, and perhaps not always in a good way.
One thing which makes most chatbots fail the Turing test for me is that they never seem to ask the right questions. Faced with ambiguity, they seem to assume that a short prompt already contains all the required information, then blithely start generating code without asking any questions at all.
On one of our current research projects, we have to integrate multiple research prototypes into an LLM-powered workflow. Each prototype was written by a separate researcher, and because of our rapidly looming deadline, it became difficult to gather information from everybody without either scheduling lots of meetings or asking questions on Slack and having to collate all the responses.
I tried a little social experiment to help us with this. I created a project hosted in an agentic coding environment which started out with a rudimentary description of our workflow. I enumerated the components, their basic sequencing, and identified the owner of each component by name.
The agent's standing orders were, on startup, to ask who it was talking to, and then to grill the person for any missing information required to completely spec out the workflow.
In other words, I built a requirements-elicitation chatbot, whose orders were to relentlessly ferret out inconsistencies, missing information, or contradictions in an evolving spec. It asked questions like this:
To Nigel: "Are entity IDs stable across graph regeneration after assembly modifications?"
After the researchers had taken multiple turns being interviewed in this way, a usable workflow specification started to emerge. More importantly, it spared us from booking meetings no one had time for.
I told my wife about it, and a few days later, recognising the pattern, she sent me a link to an article entitled: Retiring? An AI agent will see you now to download your knowledge.
That was when this whole AI thing began to curdle for me. I had seen this before.
⁂
I was on the internet before it was public. I remember coming down for dinner when I was in university, and breathlessly announcing that I'd connected to a computer in Japan, then having to reassure my mother that no, we wouldn't get an astronomical phone bill.
Then I watched it go public: the webrings before there were search engines, GeoCities, where everybody seemed to be creating zany, hyper-personalised webpages. Then came Google and SEO spam, and social media, which brought FOMO, and infinitely scrolling pages engineered for addiction.
Then the smartphone came out. It started out as a status item, then a few years later it seemed everyone on the subway was fiddling with Candy Crush.
I've never been a phone person. My weekly screen time reports amount to minutes/day of use. I take screenshots and send them to friends, to gloat about how I'm so above it all.
I had sidestepped the two great attention traps of my lifetime: the internet and the smartphone. So I was surprised to find that agentic coding seemed to be the thing that finally ensnared me.
What can I say? The AI caught me. I found myself constantly checking on it, answering questions. Each answer only created more questions, more design decisions, delivered in the form of numbered menus and multiple-choice quizzes, each one demanding another decision before the "work" could move forward.
For me, programming is driven not only by curiosity, craft, or the joy of making things work. It is also fuelled by dread: the fear that something will break, that some subtle trap is hiding in the code, waiting to make some future version of me suffer unless I guard against it now.
What kept me coming back was not just reflexive habit, but vigilance. The machine had learned to surface an endless stream of small dangers that only I could avert. After years of successfully resisting "engagement," the machine had found my pressure point.
Meanwhile, mail went unopened, chores neglected. Sure, eventually the emulator grew a RISC-V co-processor allowing retro games to be programmed in Rust.
In the evenings, it was as if there was suddenly a third person in the house. I was constantly talking to ChatGPT about a whole range of topics, from colonial power structures in the 17th-century Caribbean, to chemistry, to theology and on and on.
And unlike Wikipedia, where I could have found the same information — and which is arguably more accurate too — this was delivered by a friendly "personality" eager to help me explore further. A parasocial relationship began to bloom, then entangle itself around my need for cognition.
Outside, spring arrived unnoticed. The backyard squirrels had formed no opinion about AI and seemed the better off for it.
Everywhere, things were starting to look a little more generated. Signs on poles offering house cleaning and junk removal dropped block letters and replaced them with slick logos. One poster for dog walking services showed a dog proudly standing on a grassy promontory, leash extending out of frame, with one leg missing. 1
As for the promise that AI will free us from the drudgery of programming so we can focus on the interesting parts, I found instead that it often does the opposite. It can also strip away the rewarding parts, leaving behind a residue of system integration, obscure product behaviour, missing documentation, and other chores which are difficult but not intellectually nourishing.
At work, we are already past the evangelism phase and seem to be entering a scarcity phase. Tokens are getting harder to find, caps are being installed. A message repeatedly popped up in red at the bottom of my screen: "API Error: 400 You have reached your specified per-user API usage limits. You will regain access on ..." with a delay of hours, then days, then weeks. 2
Each time I got shut out, I found myself preferring to wait for my limit to reset than to dive in and push the code forward myself.
This was something new.
The AI hasn't just captured my attention, but also my sense of agency over the code. Agentic coding indeed.
Yet, we are lucky as programmers. For now, at least, we get to tell the AI what to do. I can easily imagine a future in which millions of people will have AIs telling them what to do, day by day, even minute by minute. For many, that future is already here: Uber drivers, warehouse workers, call-centre workers, and fast-food employees already live with algorithms micromanaging them.
As programmers, we may be asked to build such systems. My requirements-eliciting agent came uncomfortably close: a collegial little machine for tuning up a workflow specification could easily be turned to another purpose.
I don't know what happens next, but I have my suspicions. ChatGPT just served me my first ad this morning, something about "EU AI Act Compliance." As we are all aware, once ads arrive, tracking is never far behind. I'm holding back a flood of baleful predictions as I write this.
AI is already accelerating that implacable machine which gloms onto curiosity and the desire for human connection: growth hacking, engagement metrics, and the relentless pressure to make every human activity answerable to a logic foreign to itself.
Somebody tried to bring back GeoCities as Neocities, but I don't think we can easily go back. Not so much because the internet has changed, but because it has changed us.
Ultimately, I can only report what happened to me. I resisted agentic coding, then found it exhilarating but also exhausting. I came up with clever constraints to channel the model past its limitations. Together we pulled off one of the toughest, craziest programming digressions I had ever attempted, much faster than I could have managed on my own.
I started out determined to stay firmly "in the loop." The emulator came to life and bloomed in ways I could barely have imagined as a kid, and I am glad it did.
But I also found myself caught in another kind of loop: orbiting a machine, pulled in by its gravity.
- If Claude be washed away by the sea, will Europe be the less? With apologies to John Donne: Meditation XVII. ↩
- Oddly, while all the talk around AI is still centred on prompting strategies, no one seems to be talking about what it means if programming becomes a metred activity. Will hobbyists still be able to afford the kind of open-ended experimentation that taught many of us to program? And what happens when even large corporations have to pay a third party to enable their own staff to write code? They pitch AI as empowerment, but its structural effects remind me of dependence.
↩

Leave a Reply