Brent Fitzgerald

The sensations of building software with LLMs

Note: This post was surprisingly challenging to write! I’m not accustomed to describing the sensations and textures of an experience that is, at the end of the day, largely cerebral minus some clickety clacks on a keyboard. I think it was worth trying, if only to exercise self-observation.

I sometimes notice that I miss a kind of mental sensation of being deep in a codebase. Writing code all by myself evokes sensations I don’t experience quite so much when working through an agent.

So I’ve been wondering: what subjective changes are practitioners actually feeling?

If we’re metaphorical woodworkers getting access to power tools, we’ll go faster for sure. But in our haste and adoption of this new role as agent managers, do we lose the smell of the wood and the feel of the grain? And I expect it’s not just a loss, but a trade; are there new feelings and sensations?

I’m guessing this varies by person, but I haven’t seen it discussed much. So I took a personal inventory. Here’s my summary of my very subjective observations:

Feeling of… Manual code Agent-assisted code
Place Local Tourist
Texture Sensitive Tough
Scale Micro Macro
Time Self-paced Externally-paced
Control Ownership Renting

Place: local vs visiting tourist

When I’m working in one focused area of code, it starts to feel almost cozy. I recognize functions as they scroll past. I know the tooling. Everything is where I expect it.

With an agent, I’m a tourist. The agent is a guide (which may not always be good). My view is out a window, not down at the workbench. I can travel within and between codebases much faster than before, and see things I wouldn’t have understood in the past. But I’m not really there.

Texture: sensitive vs tough

Manual coding makes friction really feel like something. Bad APIs grate. Awkward abstractions are an itch you want to scratch. A misnamed variable sticks out to me until I rename it. The texture is right there, and often it’s discomfort driving me to make changes.

With an agent, I don’t feel that. There’s no pain when I’m dealing with gross or bad stuff. Bad abstractions? Dependency hell? I just stomp over them. It’s like a mech suit: I have more leverage, more power, different sense of scale. I can move mountains. Sometimes to the wrong spot.

Scale: micro vs macro

Manual coding puts my hands on small units: lines, functions, variables. The work is granular and the seams are tactile and visible.

With an agent, my hands are on bigger units: features, PRs, whole modules. There’s leverage in that, but the seams are less directly pronounced. It can become a big mass I’m squishing around like clay, rather than fine little lego bricks.

Time: self vs external

There’s a state I sometimes fall into hand-coding where time goes soft. No streaming output to watch. No tool call to wait on. Just me and the code, whatever pace my thinking goes at.

With an agent, the rhythm is a bit harder to control. I read, ask, then wait. Even when I’m steering, I’m steering between what feels like someone else’s bursts of work, when they look up. I notice myself getting impatient. I want to see the agent go brrrr, tests pass, feature ship.

Control: own vs rent

When I’ve written something line by line, I remember it. Or, at least, there’s a chance I’ll remember it. I can look at a function from a few months ago, and while it may take me a minute or ten, eventually I might recall what it was like to write it, maybe why I named it that, or how the bug was making me feel, or how long I spent. I’m more rooted in the code, or it in me.

When I’m using an agent, while I may read code, I don’t spend time agonizing over the details that burn the forms into my memory. And no matter how much I invest in my little harness skills or setups, it all feels a bit temporary. Some of that is the pace of change in the industry. But also I don’t own the models, not the big ones. And I don’t know what will change next month. No point making myself super at home.


All of the above are intentionally exaggerated comparisons. Real behavior, at least with engineers I know, is some blend. You can use these tools in all sorts of ways, and I’m sure there are tricks to adopt the new tools with fewer compromises, or with different sensation profiles.

I do notice writing code unassisted today feels quite slow and effortful. It’s downright uncomfortable contending with, say, a big React codebase without an agent there to buffer me from all the bundling, linting, and dependency sharp edges. It’s also not really justified to do unassisted in any practical projects that just need to ship a thing.

So I find myself going agentless very rarely. Pretty much never. When I do, it’s harder to find the state I used to find easily.

But I’ll keep trying. It’s healthy to force it now and then? Like choosing to walk for fifteen minutes when you could just drive for two. When I take those walks, I always see some new detail I would never have noticed from a car. And afterward I tend to feel more embodied and aware of the world.