I Know When You're Vibe Coding
73 points by clintonb
73 points by clintonb
In a large codebase that takes effort to read and learn, and operates in a complex environment, there have always been so many ways to take a shortcut and jam some code in there that somebody will regret later. It used to be copying in random Stack Overflow code; now it’s letting LLMs write random code.
Fundamentally, this is a result of the individual attitude, the team dynamics, and the corporate culture, not the specific tools.
If you say “LLMs let me do it faster”, take a moment to ask “let me do what faster?”
Code copied from StackOverflow was understood by at least one person. Unfortunately, there are no such guarantees with LLMs!
Unfortunately that was never a guarantee. However, stackoverflow snippets are rarely more than a dozen lines long. By its very nature SO snippets were distilled. And somebody had to make efforts in stitching them together. With LLMs it is now hundreds of lines, spanned across many classes, almost always more verbose than necessary, its just a lot more work than any SO copying.
As teammates at work have adopted LLMs for assistance, whether occasional or frequent, this was the big divider:
I want you to care.
When reviewing some interesting/unusual code from people who had chosen to care, I ask questions, and would sometimes get a well-considered answer. Other times, I would be told “Claude pointed me to encabulate()
and it worked, so I moved on”, but when asked for more details, because they were choosing to care, they would offer to confirm details, share findings, et cetera. That is perfect.
When someone chose to not care, often it was obvious from the code itself. I found myself resenting that I even needed to ask “Why did you create bar()
for this feature, when last month you created foo()
?” I knew with 95% likelihood that the answer would be they didn’t know. Because they didn’t care. The same person, a year prior, would have written bar()
themselves, and at least had an answer (whether satisfactory or not).
This was not just a divide between people, either. The same person could care to different degrees in different moments or different projects. We’ve had team discussions and worked past it now, but it was an interesting cultural speedbump to encounter.
The same person could care to different degrees in different moments or different projects. We’ve had team discussions and worked past it now, but it was an interesting cultural speedbump to encounter.
Could you share a bit more about what worked vs what didn’t when trying to convince others to care more?
I think often people frame it as a given/unchangeable thing (“you can’t make someone care if they don’t want to”), but it sounds like you were able to change people’s behavior in a noticeable way, so curious how you approached it.
“you can’t make someone care if they don’t want to”
In general, this is true.
What you can do, however, is lead them to understand why they should want to care. If you want to change people’s behavior in a way that sticks, there’s really no shortcut: you have to do the hard work of providing them the context, knowledge, and understanding that they need to draw the conclusion themselves that whatever you’re aiming for is important, correct, etc.
This is in large part why modern organizations are tending to see more success running autonomous teams with complete ownership rather than hierarchical command-and-control structures. When people are doing things “just because you say so”, they aren’t really learning or improving, they’re just checking boxes and doing as they’re told. The moment you look away, they’re going to stop doing those things, because they don’t really care.
So, really what I’m saying is that there’s a surprising amount of depth to your question. A complete answer is almost impossible, because it’s bundled up in everything that it means to be an effective leader and catalyst of change. The best way to get started, I think, is to think of yourself more as a teacher/mentor/enabler rather than falling into the trap of “this person just doesn’t care”. While it’s true that there are a small number of people that will be beyond help, for most people it’s about figuring out how to get through to them individually in a way that really clicks, which is one of the core jobs of the leader.
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.
I like that the article ends on a note of acknowledgment + guidance. I’ve seen some workflows where prompts to LLMs are just “explain this” or “make this better,” but it really takes time, effort, and nit-picking, even, to get your prompt right.
Sounds like an expensive, time-consuming pain in the ass. Why are we doing this again?
LLMs are what is going to enable niche languages to get above the fold. It is actually incredibly easy to get codebase specific norms and coding patterns, this is what LLMs do!
You want to apply a pattern or a refactoring in a context dependent way? Use an LLM!
You want to figure out how a specific codebase handles errors or logging? Use an LLM!
You want to debug build configuration? Use an LLM!
You can even have it read the PR messages and give yourself a codereview before you even submit the PR.
The line is caring and creativity.
Personally, I think it’s interesting technology and it’s cool to see how behaviors can change with little tweaks to an input prompt. From a learning perspective, I’ve gotten a lot of fun out of interacting with LLMs.
Professionally, in work, adding non-determinism into generally deterministic systems is asking for something to go wrong, unless there’s a human in the loop somewhere, to validate and check that things are okay to move forward (even then, not guaranteed).
As for why we’re doing it professionally, IMO, a lot of corporations value speed over quality, which is sad to see.
The question about speed being the greatest virtue really hits home for me. The coffee analogy falls short though. It’s not just the fleeting feeling of a good cup of coffee, it’s will my bank calculate the correct balance?
Edit: Accidentally hit “post”, I wanted to elaborate on that more. Obviously, that’s an extreme example in a regulated environment, but the idea is that when we’re building production systems, the second order effects of the system matter!