I have been writing code professionally for the past 20 years. I have steadily gotten better at it, learning what clean, functional, properly-factored code looks like. How simple always beats clever. The importance (and difficulty!) of naming for communicating concepts. Up until a year or so ago, the workflow has always been just about the same: Add or modify some code, manually test it, fix any problems that arose, test adjacent functionality that might use the same code, commit and push it.

That workflow has been severely disrupted over the past year. It will never be the same again. So long as I have internet access, I will not be writing any more code by hand.

I have never been an early adopter. Early-access technology too often wasted my time by just not working, which was not a worthwhile trade-off for any new whiz-bang features. There was an awful lot of hype around LLMs though in the software development community so I jumped in quicker than I typically do. In late 2024 I was using autocompletion and chat. I would ask it to do something in a particular file, and it would suggest changes inline as a diff. Cool, I’m maybe 20% faster, I thought, definitely worth the $10 / month for GitHub CoPilot!

In early 2025 I was collaborating with an extremely AI-bullish developer and he introduced me to Cursor. This must have been right when it was blowing up, the fastest growing SaaS product in history. When asking it to do things, it would make changes across multiple files! It could refactor! Holy shit! I thought, and immediately bought an annual license for $200 or so.

I was mostly doing backend work in early 2025, and the LLMs were not particularly adept at navigating the massive, atrocious, PHP codebase I was toiling in. I had been steadily rewriting bits of the frontend in React for my own sanity. But one day I was asked to build out a fairly major new frontend feature from scratch (a rare greenfield opportunity in this role), and just totally leaned in on Cursor. Over a half day of prompting it built out the entire feature! Holy shit! I thought yet again, this would have taken me a week by hand, and it worked first try!

In July 2025 I finally (long, long overdue) switched jobs, this time to an ambitious pre-seed ML-heavy startup. All the engineers there were already doing the majority of their development with LLMs. Oh damn, I thought, and was fairly intimidated by the torrent pace of development by the team. Through my extensive server-side and recent DevOps experience I pointed out an architectural flaw preventing some major features from being shipped, and was able to add value right away. I still wrote a good chunk of code by hand over those first few months, maybe 40-50%. I rationalized that because of this, the quality of code I was shipping was still better than most of the rest of the team.

In August or September we signed up for a team plan for Claude Code. The other engineers jumped on it immediately, spinning off agents to do a lot more than just write code. The agents would create commits! Write PRs! Help debug cloud issues with the AWS CLI! Holy shit, I thought yet again, this makes me so much faster at absolutely everything.

All along I had been closely reviewing critical code created by these agents with a constant suspicion that it was going to do something catastrophically bad. Proper deployment processes and CI/CD workflows prevented a lot of potential issues. But sometime around the turn of the year I was no longer in Cursor anymore. This week, I rewrote the entire frontend for our new product experience, with major UX iterations shipped every day to our dev environment so the rest of the team could provide feedback. While writing this article, I polished off another iteration of one of our major new UI experiences, wrote a PR, and deployed it. Throughout the week, while waiting for the agents to do their thing, I created a git worktree in an adjacent directo