all writing
2026-08-01

I miss coding

We vibe-code everything now, and it ships faster than ever. So why do I miss the part where I actually wrote the code?

I shipped a feature last week that would have taken me three days a couple of years ago. It took an afternoon. I described what I wanted, the model wrote most of it, I reviewed the diff, nudged it twice, and it was done. Tests passed. It deployed. By every metric that shows up in a standup, it was a good day.

And I closed the laptop feeling like I hadn't really done anything.

I've been trying to name that feeling for a while, because I don't think it's just nostalgia, and I definitely don't want it to be the "back in my day" reflex that every generation of programmers eventually catches. So here's my honest attempt. I miss coding. Not software. Coding.

The part that's gone

There's a specific kind of attention that writing code used to demand. You held the whole problem in your head. You knew every variable because you named it, every branch because you reasoned your way to it. When something broke, you had a map, because you drew the map. The bug was somewhere in a territory you'd walked yourself.

Vibe-coding is different. You describe the destination and something else walks the territory for you. When it works, it's wonderful. When it breaks, you're standing in a place you've never been, holding a map someone else drew, trying to understand code that is technically yours but that no part of your brain actually built. Debugging generated code you never reasoned through is a strange, hollow kind of work. You're reverse-engineering your own project.

I'm not saying it's worse. In a lot of ways the output is better. I'm saying something real got traded away, and I think we should at least be honest that a trade happened.

Flow was the whole point

The thing I actually miss is flow. That state where the editor disappears and you're just thinking in the shape of the problem, an hour passing like ten minutes, the small continuous hits of getting a function right and moving to the next one. Coding was one of the most reliable ways I knew to get there.

Vibe-coding doesn't have flow. It has a different rhythm: write a prompt, wait, read, judge, correct, wait again. It's more like managing than making. You're a reviewer now, and review is a real skill, but it is not flow. You don't lose track of time reviewing. You watch the clock, because waiting on a generation is dead air.

I got into this work because making things by hand felt good. Not because it was efficient. Because it felt good. It's a little uncomfortable to admit that the efficient version feels worse, but it does, and I'd rather say so than pretend the productivity chart is the only thing that matters.

What I'm not arguing

I want to be clear, because this is the part where posts like this usually go off the rails. I'm not saying stop using AI. I use it every day. It's genuinely the biggest shift in how I work since I started in 2022, and I'd be foolish to wave it off. The junior version of me would have killed for a tool that explains an unfamiliar codebase in thirty seconds.

And I don't think the craft is sacred. Plenty of coding was never fun. Wiring up the four-hundredth CRUD endpoint, fighting a build config, translating a design into the same flexbox you've written a thousand times. Handing that to a model is pure gain. Nobody was reaching enlightenment configuring webpack.

So the tools are good. My discomfort isn't with the tools. It's with what I let them take.

What I'm doing about it

I've started drawing a line, mostly for my own sake, between work I want to hand off and work I want to keep.

The boilerplate, the glue, the config, the tests for obvious cases: hand it off, gladly. That was never where the joy lived.

But the core of a hard problem, the part where the real design decision lives, I'm keeping that for myself now. Not because the model can't do it. Often it can. I keep it because I want to be a person who can still do it. I want to hold a whole problem in my head. I want to keep the muscle that lets me walk the territory, because a reviewer who's never built anything by hand slowly loses the ability to tell good work from work that merely looks good. And that ability is the entire reason I'm worth having in the loop at all.

There's a selfish version of this argument and an honest one, and they happen to point the same way. The selfish version: if all I do is approve generated diffs, my judgment atrophies, and my judgment is my job. The honest version: I like coding, it's most of why I do this, and I'm not ready to give up the part I like just because a faster path exists.

The uncomfortable ending

I don't have a neat resolution, which is itself a little against the vibe-coding spirit, where every problem is supposed to have a quick clean answer. Some afternoons I hand almost everything to the model and I'm thrilled with what ships. Some afternoons I turn it off and write a parser by hand like it's 2022 and I feel more like myself than I have all week.

Maybe that's the actual answer. Not all or nothing. Ship fast when shipping is the point, and every so often, deliberately, do it the slow way. Keep the calluses. Not because the work needs them. Because I do.

I miss coding. So I'm going to keep coding, on purpose, even when I don't have to. It's a strange thing to have to schedule. But here we are.