There’s a growing trend I’ll call vibe-coding: writing code with large language models and trusting the output without much validation. It feels productive, but often falls apart the moment you need precision.
Recently, while implementing the Raft consensus algorithm, I ran into this exact problem.
A simple request gone wrong
To improve the readability of my code, I asked ChatGPT:
Review my code and with the least amount of changes, make the code more readable.
That’s about as straightforward as it gets. I wanted to replace a reference to an Index property on an object with a simpler calculation derived from method arguments. In plain terms:
prevLogEntryIndex + uint64(len(logEntries))
That’s it. Clear, minimal, and exactly what anyone reading the method would expect.
Instead, ChatGPT introduced a new wrapper struct, two extra methods, and a slice-building routine to track indexes. It was like asking someone to move a chair across the room and watching them remodel the house instead.
Why this matters
This reminded me of past experiences working with freelancers where communication barriers (language, culture, skill level) made even simple instructions balloon into unnecessary complexity. The AI didn’t misunderstand English, but it did misunderstand intent.
And that’s the crux: language models aren’t optimizing for correctness or elegance. They’re optimizing for plausibility. If you need working, efficient, and idiomatic code, “plausible” isn’t enough.
Where LLMs are useful
I don’t think LLMs are useless. I use them to surface information quickly — things like syntax reminders, references, or summarizing papers. But the value stops there. For critical code, I validate everything myself.
I heard something yesterday at a C++ talk that captured this perfectly:
None of the LLMs can write optimal code that meets our standards.
That’s the most honest assessment I’ve heard in this space.
The future of vibe-coding
If you’re hacking together a side project or building something where performance and correctness aren’t priorities, vibe-code away. It’ll probably get you a demo faster.
But if you’re implementing a consensus algorithm, a high-performance database, or anything that requires rigor — don’t expect LLMs to carry you. They’re assistants, not engineers.
And that’s exactly where vibe-coding fails.