Vibe coding is a low-agency implementation of AI

— 5 minute read

We should be arguing about how, not if permalink

The claims around vibe coding can spin your head. They range from actively upending the entire industry, to having already done so when you weren't looking. A lot of ink has been spilled, and a lot of job security has been crushed.

Personally, I'm now fully bought in that AI is an essential skill for modern software engineers. This year, I've switched from neovim to Cursor and AI is now deeply integrated into my workflow. If you are building non-groundbreaking web-apps, I'm convinced that this technology is already a force-multiplier, and it's only getting better.

Given that, I find the discourse around AI frustrating because it's centered on if, not how. Overall, my sense is that the backlash to these new tools stem in no small part from elitism. Technical people feel challenged by a new paradigm that has eroded their professional moat, and understandably lash out. You see people smugly deriding the work of people just starting out, gleefully (and distastefully) gloating when they get DDoS'd. A lot of them are using the bottom tenth percentile to characterize the entire toolset, and using that as a lazy excuse to avoid learning how to leverage it well.

I also think that these arguments obfuscate a much more interesting conversation we could have about how we should transition into using AI. For example…

I think that vibe coding is an attractive looking tar-pit that will lock up a lot of engineers potential.

Optimize for slope, not y-intercept permalink

One of the saddest things commonly hear from the vibe coding camp is that "you can just keep regenerating until you get a version that works".

I'll acknowledge immediately that this is not actually the workflow of most people who "vibe code". In actuality, most people I know who are doing this do edit the code they generate, and make tweaks all the time. Still, I think this is instructive of the direction vibe coding is pushing us in. Who hasn't tried submitting things three or hour times, hoping "it might get it right next time"?

The end-state of vibe coding is the complete abstraction of low-level implementation details. The engineer thinks at systems level, the AI does the code plumbing. That'll be amazing when we get there, but clearly we aren't yet. Maybe we will be someday, at which point I'll review my take, but you have to evaluate these tools where they are. Anyone failing to do that is in the future predictions business, or is failing to live in reality (often these are the same thing).

For the time being, I think this is an awful end-goal to adopt if we want to improve over time, because it views our outputs as being limited to the constraints of a single tool in our arsenal. This is a low-agency frame-of-mind being disguised behind a high-agency tool. Many people will confuse the additional capabilities it gives them as agency, and fail to recognize that they are capable of much more than minor tweaks and fixes to the code the models spit out.

I think there is a version of this transition in which developers should feel completely unshackled. We should see our brains as fundamentally capable of solving problems, and that AI is merely helping us to get there by making it easier for us to learn quickly.

Get out of the tar-pit permalink

Let's start from a position of using the tools, because they are high-agency tools. It's fantastic that there are so many more people who can code now. It's great that my PM can contribute code, correct me, and assist when needed. This is an absolute win.

But as we the tools, use it to push us to new heights. Use it as an accelerant of your growth curve and not as a brake. Let it take you through most of the low-value boilerplate quickly, and spend more time extending/challenging yourself to improve. Understand where you went wrong in the prompt and guide it home.

I believe there are legitimate, massive gains to be had in developer productivity using AI today (again, today, not six to twelve months from now), but they are mostly being reaped by people who use these tools to turbo-charge their own growth trajectory:

  • Never done mapping before? You can get in-context example code in the blink of an eye to get started with and learn how to do it well.
  • Trying to get though the monotonous, boiler plate stuff quickly so you can push yourself on to learn and improve the complex parts of your system? That's easier than ever.
  • Struggling to find the right words to describe some pattern in the codebase that you want to research and understand? You no longer need to wait for a staff developer/mentor to respond to you.
  • Trying to build a large surface area quickly? Spend more time than you could previously learning and setting up high-quality patterns, and less time copy and pasting as your let the AI "do-it-for-you".

People in this high-agency mode of thinking are using AI as a learning-tool just as much as they are using it as a craft-tool. What distinguishes them from "vibe coders" is that they are using AI as an accelerant rather than a ceiling, and historically you should bet on slope. They're also having more fun than vibe coders because they feel empowered rather than reliant and valuable rather than replaceable.