I spend hours on a spec, working with Claude Code to first generate and iterate on all the requirements, going over the requirements using self-reviews in Claude first using Opus 4.5 and then CoPilot using GPT-5.2. The self-reviews are prompts to review the spec using all the roles and perspectives it thinks are appropriate. This self review process is critical and really polishes the requirements (I normally run 7-8 rounds of self-review).
Once the requirements are polished and any questions answered by stakeholders I use Claude Code again to create a extremely detailed and phased implementation plan with full code, again all in the spec (using a new file is the requirements doc is so large is fills the context window). The implementation plan then goes though the same multi-round self review using two models to polish (again, 7 or 8 rounds), finalized with a review by me.
The result? I can then tell Claude Code to implement the plan and it is usually done in 20 minutes. I've delivered major features using this process with zero changes in acceptance testing.
What is funny is that everything old is new again. When I started in industry I worked in defense contracting, working on the project to build the "black box" for the F-22. When I joined the team they were already a year into the spec writing process with zero code produced and they had (iirc) another year on the schedule for the spec. At my third job I found a literal shelf containing multiple binders that laid out the spec for a mainframe hosted publishing application written in the 1970s.
Looking back I've come to realize the agile movement, which was a backlash against this kind of heavy waterfall process I experienced at the start of my career, was basically an attempt to "vibe code" the overall system design. At least for me AI assisted mini-waterfall ("augmented cascade"?) seems a path back to producing better quality software that doesn't suffer from the agile "oh, I didn't think of that".
Is not a gift if it was stolen.
Anyway, in my opinion the code that was generated by the LLM is yours as long as you're responsible for it. When I look at a PR I'm reading the output of a person, independently of the tools that person used.
There's conflict perhaps when the submitter doesn't take full ownership of the code. So I agree with Antirez on that part
I disagree. The code you wrote is a collaboration with the model you used. To frame it this way, you are taking credit for the work the model did on your behalf. There is a difference between I wrote this code entirely by myself and I wrote the code with a partner. For me, it is analogous to the author of the score of an opera taking credit for the libretto because they gave the libretto author the rough narrative arc. If you didn't do it yourself, it isn't yours.
I generally prefer integrated works or at least ones that clearly acknowledge the collaboration and give proper credit.
The distinction drawn between both concepts matters. The expertise is in knowing what to spec and catching when the output deviates from your design. Though, the tech is so good now that a carefully reviewed spec will be reliably implemented by a state-of-the-art LLM. The same LLM that produces mediocre code for a vague request will produce solid code when guided by someone who understands the system deeply enough to constrain it. This is the difference between vibe coding and zen coding.
Zen coders are masters of their craft; vibe coders are amateurs having fun.
And to be clear, nothing wrong with being an amateur and having fun. I "vibe code" several areas with AI that are not really coding, but other fields where I don't have professional knowledge in. And it's great, because LLMs try to bring you closer to the top of human knowledge on any field, so as an amateur it is incredible to experience it.
This is beautiful to see, their mastery harnessing the power of the intelligent machine tools to design, understand and build.
This is like seeing a master of image & light like michelangelo receiving a camera, photoshop and a printer. It's an exponential elevation of the art.
But to become a master like michelangelo one had to dedicate herself to the craft of manually mixing and applying materials to bend and modulate light, slowly building and consolidating those neural pathways by reflection and, most of all, practice, until those skills became as natural as getting up or bringing a hand to the mouth. When that happened, art flowed from her mind to the physical world and the body became the vessel of intuition.
A master like antirez had to wrap his head around concepts alien to the human mind. Bits, bytes, arrays, memory layout, processors, compilers, interfaces, abstractions, constraints, types, concurrency do not exist in the savannas that forged brains. Had to comprehend and learn to use his own cognitive capabilities and restrictions to know at what level to break the code units and the abstraction boundaries. At the very top, master this in a level so high that software became like Redis: beautiful, powerful and so elevated in the art that it became simpler, not more complex. It's Picasso drawing a dog.
The intelligent software building machines can do things no human manually can (given the same time, humans die, get old or get bored), but they are not brush and canvas. They function in another way, the mind needs other paths to master them. The path to master them is not the same path to master artisanal software building.
So, this new generation, wanting to build things not possible to the artisan, will become masters of another craft, one we right now cannot even comprehend or imagine, in the same way michelangelo could never imagine the level of control over light the modern photography masters have.
Me, not a master, but having dedicated my whole life to artisanal software building, am excited to receive and use the new tools, to experiment the new craft. Also frightened by the uncertainty of this new world.
What a time to be alive.
People need to stop apologizing for their work product because of the tools they use. Just make the work product better and you don't have to apologize or waste people's time.
Especially given that you have these tools to make cleanup easier (in theory)!
"4GL" was a phase in the 1980s when very high level languages very provided by software companies, often integrating DB access and especially suited for particular domains. The idea was that one could focus more on the actual problem rather than having to write boilerplate needed to solving it.
LLMs permit to go from natural language specification to draft implementation. If one is lucky, it runs and produes the desired results right away; more often, one needs to revise the code base iteratively, again navigated by NL commands, to fix errors, to change the design based on reviewing the first shot at it, to add features etc.
I feel like this wording isn't great when there are many impactful open source programmers who have explicitly stated that they don't want their code used to train these models and licensed their work in a world where LLMs didn't exist. It wasn't their "gift", it was unwillingly taken from them.
> I'm a programmer, and I use automatic programming. The code I generate in this way is mine. My code, my output, my production. I, and you, can be proud.
I've seen LLMs generate code that I have immediately recognized as being copied a from a book or technical blog post I've read before (e.g. exact same semantics, very similar comment structure and variable names). Even if not legally required, crediting where you got ideas and code from is the least you can do. While LLMs just launder code as completely your own.
Don't fall into the trap of thinking "if I don't heavily adopt Claude Code and agentic flows today I'll be working at Subway tomorrow." There's an unhealthy AI hype cottage industry right now and you aren't beholden to it. Change comes slowly, is unpredictable, and believe it or not writing Redis and linenoise.c doesn't make someone clairvoyant.
He is absolutely right here, and I think in this article he has "shaped" the direction of future software engineering (which is already happening actually): we are moving closer and closer to a new way of writing code. But this time, for real. I mean that it will increasingly become the standard. Just as in the past an architect used to draw every detail by hand, while today much of the operational work is delegated to parametric software, CAD, BIM, and so on. The architect does not "draw less" because they know less, but because the value of their work has shifted. This is a concept we've repeated often in recent months, with the advent of Opus 4.5 and 5.2-Codex. But I think that here antirez has given it the right shape and also did well to distinguish it from mere vibecoding, which, as far as I'm concerned, are two radically different approaches.
* Does the spec become part of the repository?
* Does "true open source" require that?
* Is the spec what you edit?
This includes standard testing strategies, but also much more general processes
I think of it as steering a probability distribution
At least to me, this makes it clear where “vibe coding” sits … someone who doesn’t know how to express precise verification or feedback loops is going to get “the mean of all software”
There's actually a wealth of literature on defining levels of software automation (such as: https://doi.org/10.1016/j.apergo.2015.09.013).
It is just that for some decades now it was possible to get away with poor or lacking specification, by continually incrementing by sprints, or pivoting, or whatever.
But, back in the day when systems analysts were still a person with very particular skills that might never code, specification was everything.
And now, the wheel turns, and the importance of good specification appears to be the defining factor once again, all of a sudden.
Disagree.
So when there is a bug / outage / error, due to "automatic programming" are you ready to be first in line to accept accountability (the LLM cannot be) when it all goes wrong in production? I do not think that would even be enough or whether this would work in the long term.
No excuses like "I prompted it wrong" or "Claude missed something" or "I didn't check over because 8 other AI agents said it was "absolutely right"™".
We will then have lots of issues such as this case study [0] where everything seemingly looks fine at first, all tests pass but in production, the logic was misinterpreted by the LLM with a wrong keyword, [0] during a refactor.
[0] https://sketch.dev/blog/our-first-outage-from-llm-written-co...
Even the most one shot prompt vibecoding is still getting high level intent from the person and then testing it in person. There is no "without being part of the process at all".
And from there its a gradient as to how much input & guidance is given.
This entire distinction he's trying to make here just doesn't make sense frankly. Trying to impose two categories on something that is clearly a continuous spectrum.
I embrace this new term.
"Vibe coding" is good for describing a certain style of coding with AI.
"Automatic programming" is what I get paid for in my 9-5, things have to work and they have to work correctly. Things I write run in real production with real money at stake. Thus, I behave like an adult and a professional.
Thank you 'antirez for introducing this language.
Everyone seems to want to invent a new word for 'programming with AI' because 'vibe coding' seems to have come to equate to 'being rubbish and writing AI slop'.
...buuuut, it doesn't really matter what you call it does it?
If the result is slop, no amount of branding is going to make it not slop.
People are not stupid. When I say "I vibe coded this shit" I do not mean, "I used good engineering practices to...". I mean... I was lazy and slapped out some stupid thing that sort of worked.
/shrug
When AI assisted programming is generally good enough not to be called slop, we will simply call it 'programming'.
Until then, it's slop.
There is programming, and there is vibe coding. People know what they mean.
We don't need new words.
Waterfall made sense when changing code was expensive. Agile made sense when you couldn't know requirements upfront. But what if generating code becomes nearly free?
I've been experimenting with treating specs as the actual product - write the spec, let AI generate multiple implementations, throw them away daily. The spec becomes the persistent artifact that evolves, while code is ephemeral.
The surprising part: when iteration is cheap, you naturally converge on better specs. You're not afraid to be wrong because being wrong costs 20 minutes, not 2 sprints.
Anyone else finding that AI is making them more willing to plan deeply precisely because execution is so cheap that plans can be validated quickly?
Whatever you call it, for an experienced engineer to gain so much leverage in so little time while maintaining quality, it’s vibey and a ton of fun.
It certainly quicker (and at times, more fun!) to develop this way, that is for certain.
What does that even mean? You are a failed novelist who does not have ideas and is now selling out his fellow programmers because he wants to get richer.
Strongly disagree. This is a huge waste of currently scarce compute/energy both in generating that broken slop and in running it. It's the main driver for the shortages. And it's getting worse.
I would hate a future without personal computing.
Copyright protects human creations and the US Copyright Office has made it clear that AI output cannot be copyrighted without significant creative alterations from humans of the output after it is generated.
That belief has no basis at this point and it's been demonstrated not only that AI doesn't improve coding but also that the costs associated are not sustainable.
At the end of the day, you produce code for a compiler to produce other code, and then eventually run it.
It's called programming.
When carpenters got powertools, they didn't rename themselves automatic carpenters.
When architects started working with CAD instead of paper, they didn't become vibe architects, even though they literally copy-paste 3/5 of the content they produce.
Programming is evolving, there is a lot of senseless flailing because heads is spinning.
I posted yesterday about how I'd invented a new compression algorithm, and used an AI to code it. The top comment was like "You or Claude? ... also ... maybe consider more than just 1-shotting some random idea." This was apparently based on the signal that I had incorrectly added ZIP to the list of tools that uses LZW (which is a tweak of LZ78, which is a dictionary version of the back-reference variant by the same Level-Ziv team of LZ77, the thing actually used in Zip). This mistake was apparently signal that I had no idea what I was doing, was a script kiddie who had just tried to one shot some crap idea, and ended up with slop.
This was despite the code working and the results table being accurate. Admittedly the readme was hyped and that probably set this person off too. But they were so far off in their belief that this was Claude's idea, Claude's solution, and just a one-off that it seemed they not only totally misrepresented me and my work, but the whole process that it would actually take to make something like this.
I feel that perhaps someone making such comments does not have much familiarity with automatic programming. Because here's what actually happened: the path to get from my idea (intuited in 2013, but beyond my skills to do easily until using AI) was about as far from a 'one-shot' as you can get.
The first iteration (Basic LZW + unbounded edit scripts + Huffman) was roughly 100x slower. I spent hours guiding the implementation through specific optimization attempts:
- BK-trees for lookups (eventually discarded as slow).
- Then going to Arithmetic coding. First both codes + scripts, later splitting.
- Various strategies for pruning/resetting unbounded dictionaries.
- Finally landing on a fixed dict size with a Gray-Code-style nearest neighbor search to cap the exploration.
The AI suggested some tactical fixes (like capping the Levenshtein table, splitting edits/codes in Arithemtic coding), but the architectural pivots came from me. I had to find the winning path.
I stopped when the speed hit 'sit-there-and-watch-it-able' (approx 15s for 2MB) and the ratio consistently beat LZW (interestingly, for smaller dics, which makes sense, as the edit scripts make each word more expressive).
That was my bar: Is it real? Does it work? Can it beat LZW? Once it did, I shared it. I was focused on the bench accuracy, not the marketing copy. I let the AI write the hype readme - I didn't really think it mattered. Yes, this person fixated on a small mistake there, and completely misrepresented or had the wrong model of waht it actually took to produce this.
I believe that kind of misperception must be the result of a lack of familiarity with using these tools in practice. I consider these kind of "disdain from the unserious & inexperienced" to be low quality, low effort comments than essentially equate AI with clueless engineers and slop.
As antirze lays out: the same LLMs depending on the human that is guiding the process with their intuition, design, continuous steering and idea of software.
Maybe some people are just pissed off - maybe their dev skills sucked beofre AI, and maybe they still suck with AI, and now they are mad at everything good people are doing with AI, and AI itself?
Idk, man. I just reckon this is the age where you can really make things happen, that you couldn't make before, and you should be into and positive. If you are a serious about making stuff. And making stuff is never easy. And it's always about you. A master doesn't blame his tools.
I guess a large of that is that 1-2 years ago the whole process was much more non-deterministic and actually getting a sensible result much harder.
The question is if you can have it all? Can you get faster results and still be growing your skills. Can we 10x the collective mind knowledge with use of AI or we need to spend a lot of time learning the old wayTM to move the industry forward.
Also nobody needs to justify what tools they are using. If there is a pressure to justify them, we are doing something wrong.