While “vibe coding” was a catchy phrase when I first heard it, something about it felt like a head fake to me. And, now that I’ve leveled up to “competent individual software developer” again (after 33 years of not writing any code) I think it’s the wrong phrase. Instead, I’d refer to what’s going on as AI Pair Programming.When I started playing around with AI-related coding tools last Christmas (because, well, I was bored), I had zero skills with contemporary software development. While I hadn’t written any production code since 1992, I played around with a new programming language every few years. Perl. Ruby. Ruby on Rails (sort of, not really). Python. Clojure. I could do Hello World and a few other simple things, but I never really got past basic CSS, tooling, or deployment stuff. I had a Github account and would futz around with it, but quickly get tired of trying to figure out why I didn’t care about a PR. And damn, so many CLI things.For Level 1, I downloaded Cursor. After trying to figure out how Django actually worked (yet another online course), gave up, and decided to use Next.js. That led me to Vercel, reinforced by a few friends in their 20s who told me that all the cool kids were using Vercel (although Render, Digital Ocean, and AWS all were the beneficiaries of my credit card.) Pretty soon, I was using Cursor to fight with Vercel, Supabase, Clerk, and Github. After realizing Auto was no fun, I shifted to Claude 3.5. Dinostroids resulted (security holes and all …)For Level 2, I got a little more serious. I discovered Linear, fought with Notion, and came up with a few ideas and a broader hypothesis around how things might work. I built a v0.1 of a thing.For Level 3, I decided Lovable might be a better way than Cursor given that everyone was talking about it. I wasted about $200 on it, built a really cool design by vibe coding, but then watched it get very, very confused as it tried to go from simple design to something that actually worked that had some data complexity and AI calls. I thought about trying Bolt and Replit but quickly realized, after too much scrolling around on the web, that I’d likely run into the same issues.So, I went back to Cursor and put a lot of efforts into my system prompt, tuning things, watching Cursor evolve quickly on a number of fronts (MCPs – yippee!, Agent mode as default – finally) while simultaneously watching my Cursor bill go up. It was easy to decide to go to Max mode and spend $200 / month instead of $20 / month when dinner in Aspen costs at least $100 / person no matter which restaurant you go to.I hung out at Level 4 for a while. Cursor kept improving. Claude 4 came out. Auto mode still went off the rails and broke all my code. I started refactoring things and realized that the amount of cruft in my code was absurd. Little bugs turned into fatal flaws when I tried to have Cursor fix something. I learned about “git reset –hard HEAD”. I spent way too much time fighting with config issues on localhost:3000 (at least I’d figured out how to make Cursor always start the server on localhost:3000). I started using Docker. I was baffled that Cursor couldn’t remember stuff I told it the prior day, but intellectually understood why this was. I mean, memories.The end of my joy at Level 4 was when ChatGPT 5 came out and was free on Cursor for a week. At first, it felt fast. Wheeee. Lots of stuff changing. It seems to be working. And then, after a few days, holy shit what a tangled mess of code it generated. Why are all my API routes suddenly broken. Console statements everywhere. UI elements in different parts of the application doing the same thing but look totally different. I went back to Claude and did another code review and major refactor. So many Vercel build errors. I finally embraced CI/CD. And Prettier. And Husky. Suddenly, I ran out of my monthly Cursor credits and shifted to usage-based pricing. $800 later, I realized that there was no reason for me to be using Opus or the thinking models for what I was doing.Level 4 was a huge drag. But it was also when I started thinking of this as AI pair programming. The AI (or agent, or sub-agent, or whatever you want to call it) is my pair with hands on keyboard. It can type much faster than me. But I have to watch and constantly look over its shoulder, give it feedback, point at the stuff that needs to be done differently, and document what is important to remember to do.And then I discovered Claude Code. This didn’t happen until Claude Code 2 came out at the end of September and corresponded with Sonnet 4.5. After my ChatGPT 5 I went back to Claude (and Sonnet) and started referring to Claude Sonnet as “Claudia” since she was my pair programmer. I thought about Claudia as a pair, related to her as I would a human pair programmer, and changed my approach. But when I loaded up Claude Code 2 in my terminal (I mean, just type “Claude”) I immediately leveled up again.So – I’m now at Level 5 in the video game. It’s changed from a game of vibe coding to AI pair programming. And, it’s still fun!The post Leveling Up in the Vibe Coding Video Game appeared first on Feld Thoughts.