Skip to content

I don't write code anymore

Main Thread 5 minutes published

I wrote code for 25 years. I don't write code anymore.

Honestly, I barely look at code now. I have AI do everything. AI writes the code. AI writes the tests. AI reviews the PRs.

I know this still sounds nuts to a lot of programmers. But I'm late to adopt. Many of my peers have already stopped writing code. At Rails World, DHH said they are "pencils down on [writing] code by hand." Noting how he too has spent "a quarter of a damn century chiseling code by hand and loving every moment of it."

I'm fully in DHH's camp. He's "pencils down". And so am I.

This didn't happen overnight. It happened over the last year. Looking back, there were four distinct stages. And a lot of programmers have yet to reach the final stage.

Stage 1: Tedious code

I didn't start really using AI until late 2025. I only used it for tedious or mundane tasks. At first I'd allow it to write a very specific snippet. Not even within the codebase. Often in isolation. I'd copy the result over by hand.

After a few weeks, I'd let it work within the codebase. I made sure the repository was in a clean state. So I could nah whenever it went wrong. Which it often did. Even when it worked, I reviewed every line. I made tweaks. I still wrote all the important code myself.

Stage 2: Tests first

In early 2026, I let AI write more of the code. But I wrote the tests first. I'd make sure they described the intent. I'd write the "happy path" test case. Plus several "sad path" test cases to emphasize the boundaries. Then I'd tell AI, "make the tests pass."

That's when I started letting go. Just a little. I was still in control. The tests gave AI guardrails. AI couldn't "go rogue". The code it wrote had to pass my tests. Combined with git status, I knew it wasn't complete slop.

Stage 3: Code like me

By spring 2026, AI was writing most of the code. I still had it follow test driven development (TDD). AI wrote the tests. I'd review. Then AI made them pass. I did the work on feature branches and opened PRs. I'd review the code before merging. I served much like a team lead who was "still in the code".

Much like a transitioning team lead, I still wanted the code to look like mine. So when I found some "rough edges", I'd jump back in with a prompt to have AI refactor. If I noticed something often, I'd add a guideline to my AGENTS.md. Eventually I created a skill to follow my BaseCode practices. I'd run /basecode at the end of each session.

Looking back, this was a lot of effort for very little value. I was teaching AI to write like me. Just so I felt comfortable when I read it. But slowly, I was no longer reading the code.

Stage 4: Letting go

By summer 2026, I let go completely. I stopped reviewing the code. I stopped worrying whether it looked like mine. But nothing about my guardrails changed. I've always had tests, static analysis, and a CI pipeline. Checks were always in place to give me confidence in the code I wrote. The bar is the same for AI.

This raises a circular question. The classic, "who tests the tests?" When I start asking that, I use "adversarial agents". Their job is to poke holes in the code and the test coverage. In the end, checks are in place. I trust them. I also trust when something breaks, I can fix it. That's where my experience still matters. Combine it with AI's unlimited capacity. And I can just build things.

I built Double, a modern PHP mocking library I'd dreamt of for years. I built PHPUnit TIA on the 4-hour flight home from Laracon US. I chronicled the progress on X. Both built completely with AI. I never opened an IDE. I've barely even looked at the code. AI completely manages both of them now. From writing code to reviewing PRs.

The logical conclusion

I said at the start this probably sounds nuts. It's not. It's the logical conclusion. If you're going to let AI write code, you have to let AI write all the code. Otherwise, you're the bottleneck. You're the weak link.

That was me in Stage 3. AI could write the code faster than I could review it. The same as a team lead who reviews every line isn't leading. They're in the way.

You have to realize your value as a programmer isn't writing code anymore. Maybe it never was. Your value is delivering a result. Sure, there's value in code being performant or maintainable. But the reality is, none of that matters until it works.

AI gets to "it works" faster than you. Maybe not "better" than you. But faster. As DHH wrote in Over my dead pencil, it's "simply not an economically viable enterprise going forward to have humans typing out lines of Ruby, Rust, or C++."

Your experience isn't wasted. It's how you guide AI toward "better". It's what goes into the guardrails. Uncle Bob put it this way:

My current strategy is to not read any of the code written by my agents... What I do instead is to surround the agents with extreme constraints. Unit tests, gherkin tests, QA procedures, quality metrics, mutation testing, test coverage, and a plethora of others.

If you have guardrails in place, you can embrace this new agentic workflow. If you don't, that's the real problem. And it was a problem before AI. You have to let go.

I don't write code anymore. I'm a software engineer turned software foreman. And I've grown okay with that.

End of article
Scroll to top