← Ficus Kirkpatrick

ZIRP Engineering

June 2026

A lifetime of computer programming has endowed me with a lot of instincts that are serving me well in the age of coding agents. I know a bug factory when I see one.1Honored and humbled to announce that I am permanently retired from shared-state multithreaded code. I know what kinds of things are hard to change and think hard about APIs before they become contracts.

Some of the most influential engineers I have worked with have been wizards at prototyping. This type of person invariably has great taste in figuring out what is worth trying and in doing it efficiently. They have great intuition for what the absolute minimum thing is that will express the core idea and support its viability. At Oculus, John Carmack was known to short-circuit endless debates about whether to take some technical path by arriving with a working prototype (code, optics, whatever). My all-time favorite Carmack quote: "There is no rebuttal to an existence proof."

Coding agents have unevenly devalued a lot of this skillset. You still need good judgement on paring down to the minimum thing in the name of communication efficacy, but you absolutely do not need to figure out what is worth trying anymore. Of course it's worth trying. It's free! I feel like my bargain-shopping instinct is overdeveloped and my focus discipline needs work. It's just too easy to go on side quests now.

Evolving even more rapidly is my mental model of technical debt. I had a very formative experience last year: in March of 2025, I tried Claude Code for the first time and thought "I'm going to try this 'vibe coding' thing that Karpathy is talking about." I built a little mapping app I had been meaning to work on, and about $2502Only about $50 of this was Claude API usage. The other $200 went to Google in about 45 seconds when my vibe coded app called the Distance Matrix API in a tight loop until I hit my spend limit. So this experience was educational in multiple ways. and a day or two later, I had something pretty cool that I thought maybe I would spruce up and actually keep around and maintain.

At last, I pulled back the curtain and looked at the code, and it was beyond salvage. Just a huge pile of Will Smith spaghetti. I realized pretty quickly that I would basically have to start over, so I just abandoned the repo and kind of forgot about it until sometime around Thanksgiving. Opus 4.5 came out and was knocking everyone's socks off, and I thought maybe I'd take another run at that app. I figured that the fastest way to explain the app was just to tell Opus to read the code for the old repo.

Sure enough, Opus read the whole thing, understood the purpose of the app and its features, and cleaned everything up. The code was not pristine by any means but it was sensibly organized, had tests, and overall felt like something that I could build on. I went from an unmaintainable pile of slop to a pretty good starting point, and my main contribution was to sit on my hands for nine months.

I simply cannot relate to the reports I've heard of despair at this realization. I feel like I've unlocked a few more degrees of freedom: I freely one-shot prototypes of an entire new subsystem or feature. Sometimes I don't like it and abandon it immediately. But now I don't have to love it to keep it. If the block diagram level design looks reasonable and the external API is sane, that is often good enough for me to just merge it. Maybe the insides are a little messy, but I often get to those when doing cleanups in the course of other follow-on work, and sometimes a new model drops and I get a big cleanup for free.3The very first thing I did with Fable was a whole-repo code review and it immediately came up with five really good projects. Everything got done my first day with the model. I'm glad I didn't put it off until later!

In a world of insanely cheap capital and a more-than-annual debt forgiveness jubilee, you are probably not borrowing enough.