I Know When You're Vibe Coding

3 minute read

I shouldn’t have to care about this. I don’t want to care about how someone’s code gets into the IDE. Whether you wrote it by hand, copied it from a forum, prompted an LLM, or ran a simulation where monkeys are given infinite time to produce the solution.

I care about what gets merged into the codebase.

When I click that “Approve” button, I’ve got only a few worries on my mind. Does it produce the correct outcome? Will people understand this next quarter? Will they be able to change it?

But lately, I started noticing things that immediately tell me the code is written by an LLM. No, I don’t mean the repetitive comments (I’m fine with those), not even the switch statements they’re so fond of.

I know the code was generated because it was written in a way no developer on the team would.

It works, it’s clear, it’s tested, and it’s maintainable. But it’s written in a way that doesn’t follow the project conventions we’ve accepted. I know it wasn’t written by a human.

The smell of vibe coding

Because no one would write an HTTP fetching implementation covering all edge cases when we have a data fetching library in the project that already does that.

No one would implement a bunch of utility functions that we already have in a different module.

No one would change a global configuration when there’s a mechanism to do it on a module level.

No one would write a class when we’re using a functional approach everywhere.

I don’t want to know how you wrote this. I just want to know that you care about what comes out of the model. This is code you wouldn’t have produced a couple of years ago.

We spent decades coming up with patterns and standards that help us build maintainable software.

That’s always been the challenge - putting something in production that you can take care of for years. Anyone can vomit up a working implementation. You’ll stitch together a Frankenstein-monster-looking piece of code that will get the job done.

The part we’ve struggled with is making changes to that after you push it out the door.

Is speed the greatest virtue?

I was at a local café a few days ago, and they were training a new barista. There was a long line, and the new guy was startled, rushing to make the next cup, spilling coffee and milk.

We’re back at this stage, rushing to push out the next piece of software because we think that speed is the greatest virtue.

But people want a good cup of coffee, even if they have to wait a little bit for it.

I always thought I’d be getting angry at the finance people who’ll be looking for ways to write smaller digits in the spreadsheets, but I’m disappointed by my fellow developers who quickly threw all principles out of the window so they can speedrun software development.

What I really want

I don’t care how the code got in your IDE.

I want you to care.

I want people to care about quality, I want them to care about consistency, I want them to care about the long-term effects of their work. LLMs are engineering marvels, and I have the utmost respect for the people who’ve created them. But we still need to build software, not productionize prototypes.

Write better prompts. Give better descriptions. Tell the LLM what library to use. Give it examples to follow. Write smaller files. There are no new principles - follow the ones that already exist.

Don’t leave a codebase’s maintainability to the weights of a model.

Full Stack Tao

Everything I've learned about building software in the last 10 years.