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 feel I'm late to adopt. Many of my peers have already stopped writing code. At Rails World, DHH said they "have gone pencils down on [writing] code by hand." Noting how he's 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.

It 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 started really using AI in late 2025 through OpenCode. I only used it for the 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 little tweaks, and I 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 test cases. 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 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.

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. I never trusted my code because I wrote it. I trusted it because it passed those checks. The bar is the same for AI.

If AI writes the tests too, who checks the tests? That's why I also throw in "adversarial agents." Their job is to poke holes in the code and the test coverage. With those in place, I could just let AI do it all. Take my experience. Combine it with AI's unlimited capacity. And 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. A team lead who reviews every line isn't leading. They're in the way. And all that time making the code look like mine didn't make it work any better.

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, what matters most is that it works.

AI gets to "it works" faster than you. Maybe not "better" than you. But faster. As DHH put it 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. If you don't, that's the real problem. And it was a problem before AI.

You're no longer the programmer. You're the builder. So step back. And build.

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