The original tweet[1] talked very specifically about not caring about quality, just accepting whatever code the AI produces blindly, as long as you get the black box output you're looking for, and just randomly try again if you didn't.
Are people now using this term to mean "giving an AI agent broad tasks"?
[1] https://x.com/karpathy/status/1886192184808149383?lang=en
Vibe coding is when you don't review the code at all. If you're using LLMs to help you write code but you're actually reviewing what they produce (and iterating on it) that's not vibe coding any more.
This battle is almost certainly lost already, but dammit I'm gonna keep fighting anyway!
Salty version: https://bsky.app/profile/simonwillison.net/post/3ll2rtxeucs2...
> Feels like I'm losing the battle on this one, I keep seeing people use "vibe coding" to mean any time an LLM is used to write code
> I'm particularly frustrated because for a few glorious moments we had the chance at having ONE piece of AI-related terminology with a clear, widely accepted definition!
> But it turns out people couldn't be trusted to read all the way to the end of Andrej's tweet, so now we are back to yet another term where different people assume it means different things
I found out this anti-pattern where a newly coined term loses its definition as it spreads more widely is called "semantic diffusion": https://simonwillison.net/2025/Mar/23/semantic-diffusion/
In a dream world, each new terminology goes through an RFC to figure out a meaning we all (some of us) can agree to, so at least we can link to an angry RFC when people continue to misuse the term anyways.
I have a suspicion that Facebook insist on calling their open weights models "open source" because the EU AI act says "This Regulation does not apply to AI systems released under free and open-source licences" but doesn't do a good job of defining what "open-source" means! Bottom of this page: https://artificialintelligenceact.eu/article/2/
Correction: the closest it gets to defining open source is in https://artificialintelligenceact.eu/recital/102/
> The licence should be considered to be free and open-source also when it allows users to run, copy, distribute, study, change and improve software and data, including models under the condition that the original provider of the model is credited, the identical or comparable terms of distribution are respected.
(I found that by piping the entire EU AI act through Gemini 2.5 Flash - https://gist.github.com/simonw/f2e341a2e8ea9ca75c6426fa85bc2...)
Vibe-but-verify? Faux-Vibe? AiPair? (... I'll see myself out...)
Entirely fictional creature that doesn't exist
Every person who I have seen embracing AI coding has been getting lazier and lazier about verifying
What did you really expect?
It's as if the culture wants a certain level of specificity for a phrase and if you start too far from it, it'll ignore your wishes and drift to that level anyway.
"There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. ... I "Accept All" always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension ... Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away. It's not too bad for throwaway weekend projects, but still quite amusing. ..."
So yes, "not reading the code" is baked in quite specifically.
> I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it
That sums up vibe coding, imo.
The article talks about code quality with vibe coding, but I think that misses the point. The real problem is code knowledge. When a vibe coder inevitably needs to debug something, if they have no idea what any of the code does, or why it is the way it is, they are not going to have a good time.
Sure they can copy paste the error into the LLM and hope for the best, but what happens when that doesn’t fix it? I’ve already had to spend hours at work tracking down bugs that ending up being in there because someone just blindly accepted the code an LLM wrote, I fear it’s only going to get worse.
Kernighan's law still applies.
If the AI wrote the code to the top of its ability, it doesn’t have the capability to debug said code, because its ability to detect and correct issues has already been factored in.
You end up with a constant stream of “I see the issue, it’s: <not the actual issue>”, which is consistent with my experience of trying to have LLM’s debug their own code without basically doing the work myself and pointing them to the specific actual issue.
> It's not too bad for throwaway weekend projects, but still quite amusing
You were never supposed to vibe code on serious projects.
I have lost count of the number of quick one off scripts that ended up still being used in production workloads five (or more) years later.
Also I am a backend engineer. I don't know what kind of code it's producing for my front end. I just hit accept all. But seeing how it does the backend code and having to prompt it to do something better (architectural, performance, code reuse) I have no doubt the front end of my pool is a pile of poop.
I fear that management will see these small quick gains and think it applies to everything.
I'm of the opinion now, that vibe coding is good if you are familiar with the code & stack and can ensure quality. You don't want to give it to a product owner and have them try to be an engineer (or have a backend dev do front end, vice versa).
Just my opinion.
And I’ve also had to spend hours at work tracking down badly copy pasted stack overflow code, or from other places in the codebase that didn’t do what the programmer thought it did. A shitty carpenter will build a shitty staircase whether they have a chisel or a dremel
A good carpenter will build a shitty staircase if he is forced to use the wrong tool, given a timeline that doesn't accommodate it, and paid for delivering something that superficially resembles a staricase on time regardless of quality.
Then you throw the code away and start newly from scratch. Or you accept that your problem cannot be solved by vibe coding.
Neither side cares unfortunately.
When users attempt to prompt away their problems without understanding the error and it doesn't solve it, that is still good news for Cursor and Anthropic and it is more money for them.
The influencers encouraging "vibe coding" also don't care. They need to be paid for their Twitter money or YouTube ad revenue.
I wonder if maybe some people have been trying to jump on the "I have also tried vibe coding" train without being willing to hop as far as the term initiator defined it.
I definitely still stick to the "Vibe Coding is when you don't read / grok the code" definition.
GitHub copilot which is mostly single line completions isn't "vibe coding".
I think vibe coding also entails some "what it did was so simple, I didn't bother to check it".
I asked ChatGPT for help, and it was quite helpful.
However, its code was really verbose, and fairly “messy.” Even though it worked, it didn’t work well.
I used it as guidance for training myself in the tech, and developed an approach that is far better. I had to learn the tech, and refactored the code example in a pretty major way.
Maybe some of the other tools are better, but I haven’t gotten any code that I would even consider shipping; pretty much exactly like my experience with Stack Overflow, for years.
"Vibe-coding" as it is defined, throws away all the principles of software engineering and adopts an unchecked approach into using AI generated code with "accept all changes" then duct-taping it with more code on top of a chaotic code architecture or none (single massive file) and especially with zero tests.
The fact is, it encourages carelessness and ignores security principles just to make it acceptable to create low quality and broken software that can be hacked very easily.
You can spot some of these "vibe-coders" if they believe that they can destroy Docusign in a day with Cursor + Claude with their solution.
Who's going to tell them?
If you read to the end of his tweet, he specifically says "It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works."
It's his job to sell now. He's selling.
Broadly I agree with the two other replies: his 'day job' has not been coding in some time, so I would put him in the same bucket as e.g. a manager who got promoted out of writing code 5-10 years ago. I do want to understand where you're coming from here -- do you think that's a fair characterization?
He spends a lot of time as an educator these days.
> Merge pull request #740 from karpathy/gordicaleksa-fix_dataloader2
> - fix tokenizer omg
> - attempt to fix PR
> - Merge branch 'fix_dataloader2' of https://github.com/gordicaleksa/llm.c into gordicaleksa-fix_dataloader2
Do you write perfect commit messages every single time on every project you work on?
I think it is. He is certainly a great AI researcher / scientist, but not really a software engineer.
> It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works."
So is that the future of software engineering? "Accept all changes", "Copy paste stuff", "It mostly works" and little to no tests whatsoever as that is what "Vibe coding" is.
Would you yourself want vibe-coded software that is in highly critical systems such as in aeroplanes, hospitals, or in energy infrastructure?
I don't think so.
Try reading the whole tweet! https://twitter.com/karpathy/status/1886192184808149383
"Would you yourself want vibe-coded software that is in highly critical systems such as in aeroplanes, hospitals, or in energy infrastructure?"
Of course not. That's why I wrote https://simonwillison.net/2025/Mar/19/vibe-coding/#using-llm...
To save you the click:
> The job of a software developer is not (just) to churn out code and features. We need to create code that demonstrably works, and can be understood by other humans (and machines), and that will support continued development in the future.
> We need to consider performance, accessibility, security, maintainability, cost efficiency. Software engineering is all about trade-offs—our job is to pick from dozens of potential solutions by balancing all manner of requirements, both explicit and implied.
> We also need to read the code. My golden rule for production-quality AI-assisted programming is that I won’t commit any code to my repository if I couldn’t explain exactly what it does to somebody else.
> If an LLM wrote the code for you, and you then reviewed it, tested it thoroughly and made sure you could explain how it works to someone else that’s not vibe coding, it’s software development. The usage of an LLM to support that activity is immaterial.
"Vibe Coding Is The Future" https://www.youtube.com/watch?v=IACHfKmZMr8
... And then a few weeks later, my boss' boss scolded the team for not having heard of the term, and told us to learn and use vibe coding because it's the future.
The whole point of AI agents is to eventually get good enough to do this stuff better than humans do. It's okay to dogfood and test them now and see how well they do, and improve them over time.
Software engineers will eventually become managers of AI agents. Vibe coding is just version 0.1 pre-alpha of that future.
I am already seeing "vibe coding experts" and other attempts to legitimize the practice as a professional approach to software development.
The issue is clear, if you have accepted all PRs with no reviews as vibe-coding suggests, you will end up with security and functionality flaws.
Even if you do review, if you are the type of developer who thinks you can vibe-code a serious project, I doubt you are interested in regular security reviews.
Lastly, businesses are long lasting projects, and the state of AI is constantly evolving. Your codebases stability and speed of development is your businesses success, and if only the AI model who built it understands your code, you are on shaky ground when the models evolve. They are not constantly forward evolutions, there will be interactions that fail to fix or implement code in the codebase it previously wrote. Human engineers may not even be able or willing to save you, after 3 years of vibe coding your product.
Beyond the developer side of the hype that gets talked a lot, I'm witnessing a trend on the "company side" that LLM coding is a worthy thing to shell out $$$ to, IOW there is an expected return on investment for that $$$/seat, IOW it is expected to increase productivity by at least twice that much $$$.
Companies already have a hard time throwing away the prototype - god forbid you showcase a flashy PoC - and priorise quality tasks (which may need to run over a quarter) over product items (always P0), and in that ROI context I don't see that LLM-assisted trend helping with software quality at all.
You can be an enthusiastic adopter of AI tooling (like I am) without wanting them to eventually be better than humans at everything.
I'm very much still in the "augment, don't replace" camp when it comes to AI tooling.
I'm okay with directing AI to write exactly the software I need, without having to manage "stakeholders", deal with the egos of boomers up the management chain, and all the shitty things certain people do in any organizations that get large enough.
Source? This seems very optimistic on both ends (that AI will replace SE work, AND SEs will still be employed to manage them).
https://www.businessinsider.com/anthropic-ceo-ai-90-percent-...
The entire Council on Foreign Relations on stage chat is on YouTube.
I agree with that. The problem I have is that people are getting sucked into the hype and evaluating the results of those tests with major rose-colored glasses. They glaze over all the issues and fool themselves into thinking that the overall result is favorable.
That's what AI is good for right now - boilerplate acceleration. But that's clearly not enough to drive the immense transfers of capital that this high ecosystem demands.
Boilerplate… is bad, right? If our languages were more elegant, we’d need less of it. It is necessary because things don’t have sane defaults or sufficient abstraction.
In particular, if the AI is able to “guess” what boilerplate you wanted, that boilerplate ought to be knowable beforehand (because the AI is not actually guessing, it is a deterministic set of rules where you type things and programs come out; it is a programming language, albeit a weirdly defined one).
It's tough to say in a vacuum. Generally, the lower level you go, the more "boilerplate" you'll need. That cost of iteration is to give such programmers more control over the task.
So python may sneer at such boilerplate. Whereas Rust would prefer being more verbose.
I will say in terms of fixing boilerplate or doing tedious work it's a godsend. The ability to give it literally garbage formatted content and return something relatively structured and coherent is great. Some use cases I find:
- Rapidly prototype/scaffold a new feature. I can do what takes me hours/days in magnitudes of less time and saving my brain energy lol. 90% of it is usually garbage, but I just need a PoC or direction and I can sniff out what approach doesn't work (goes with the above of not doing too much at at time)
- App typically has a lot of similarly structured sections that can't be DRY for whatever reason. Fix in one area, feed to LLM how to solve the problem and then apply it to X number of other sections. Boom, edits 20 files and saves me tedious hours of doing it manually and potentially screwing it up.
- Run logs and sections of code in an initial bug to see if I'm missing something obvious up front. Helps dive into the right areas.
- Transform garbage content into something else when I can't be bothered to write a complicated regex or script for.
We have had a steep learning curve in prompt preparation (what we're doing is certainly not engineering), but Claude Code is now one-shotting viable PRs in our legacy codebases that are, well, good.
Saying LLMs are only good for boilerplate acceleration is so far from my experience that it sounds absurd.
Claude Code refactored numerous projects for us into TS, often one-shotting it. Saying LLMs don't understand TS (which may be true, in that LLMs questionably understand anything) says more about your perception than model and agent abilities.
But it's the wrong perspective. Think instead what a self driving car is to someone who cannot drive. It doesn't matter if it sometimes disengages to have an operator step in or can only handle basic local trips. It's a total game changer. AI is unlocking computers for people who have never written a line of code in their life.
I don't think I can dispute the claim, but it feels more like someone who can't build a house being able to do it now that they have YouTube tutorials. Unless the person was already quite smart and competent, the house will probably have significant structural issues.
Is that a bad thing? For housing, governments the world over seem to agree that it is. But coding has never had a real attempt at regulation. You're going to end up with "vibe coded" production code handling people's personal and financial information, and that is genuinely a bad idea. A novice will not spot security issues, and AI will happily produce them.
I have DIY’d an addition onto my house with professionally architected blueprints and engineering seal. During various stages, I would call the City who would send code inspection officials to incrementally sign off on my project’s progress. Other than pouring a new slab of concrete and electrical, I built it all myself to code. I followed YouTube tutorials.
My point is that DIY isn’t the issue - lack of oversight is. With standards, expert input, and review processes, even non-experts can safely build. AI-assisted coding needs the same approach.
This is not a popular opinion on software development circles - unless you're already in one of those regulated fields, like where a software engineer (a literal accredited engineer) is required.
But it's been an increasingly common talking point from a lot of experts. Bruce Schneier writes about it a lot - he convinced me long ago that our industry is pretty pathetic when it comes to holding corporations liable for massive security failures, for example.
It is already costing millions of dollars and it’s just accepted.
You're asking someone with zero coding experience to jump in and fix bugs so niche or complex that the LLM is incapable of doing it.
And this is why the holodeck tries to kill its occupants in half the episodes in which it is featured.
It would be a very dangerous thing if said self-driving car crashes ten times every ride.
I'd say that breaks the entire concept of "self driving" at that point. If people are fine with some of those "actually Indian" stories where supposedly AI powered tools turned out to have a significant human element to it, why not just go back to the taxi? You clearly don't care about the tech, you care about being driven to a destination.
This isn’t a movement or a manifesto. I’m not trying to coin a term or draw a line in the sand. I just want to articulate something I care about, now that AI-assisted coding is becoming so common.
The phrase “vibe coding” already is a "thing", if not well defined. It’s been tossed around to describe a casual, improvisational approach to programming with AI tools. Sometimes it’s playful and exploratory - which is fine in personal, low-stakes settings. But when vibe coding crosses into production software or educational tools without critical thought and human review, it can become actively harmful.
I’ve seen definitions of vibe coding that outright celebrate not reading the generated code. Or that dismiss the need to understand what the code does — as long as it runs. That’s where I draw a hard line. If you’re unwilling to engage with what you’re building, you’re not just missing the point — you’re potentially creating brittle, inscrutable systems that no one can maintain, not even you.
It’s the kind of anti-intellectual aversion to thinking for yourself that leads you to Vibe Code a CyberTruck of an app: an aggressive, self-satisfied, inexplicably pointy prison piss pan.
It plows along mindlessly — overconfidently smashed, shot at, and shattered on stage, problems waved off with “a little room for improvement” and “we’ll fix it in post”; then it’s pushed straight into production, barreling under “Full Self-Delusion” mode through crowds of innocent bystanders, slamming at full Boring speed into a tunnel painted on the face of a cliff, bursting into flames, and finally demanding a monthly subscription to extinguish itself.
Vibe Coded CyberApps are insecure thin-skinned auto-crashing cold-rolled steel magnets for hackers, bots, vandals, and graffiti artists.
It’s the kind of city planning where you paint a tunnel directly onto the side of a cliff, floor it like Wile E. Musk, and trust that the laws of physics — or software engineering — will graciously suspend themselves for you.
It's where you slap a “FREE TOLL” sign on a washed-out bridge and call it a feature, not a bug.
By contrast, what I’m calling “craft coding” is about intentionality, comprehension, and coherence. It’s about treating code as something more than a means to an end — something worth shaping with care. That doesn’t mean it’s always elegant or beautiful. Sometimes it’s messy. But even when it’s messy, it’s explainable. You can reason about it. You can teach with it. You can read it six months later and still understand why it’s there.
Craft coding doesn’t require you to be an expert. It requires you to care. It’s a mindset that values:
Understanding what your code does.
Naming things clearly.
Keeping code, comments, and documentation in sync.
Being able to explain a design decision — even if that decision is "this is temporary and kind of gross, but here’s why".
Leaving the campsite cleaner than you found it.
Craft coding has been around a long time before AI-assisted coding. I've been fortunate to read the code of and work with some great Craft Coders. But in order to learn from great Craft Coders, you've got to be willing and eager to read other people's code and documentation, not repelled and appalled by the notion.
But vibe coding has also been around since before the time of LLMs. Tools like Snap! (and before that, Logo) encouraged exploratory, playful, improvisational approaches to programming.
Kids learn a lot by poking around and building things with little upfront planning. That’s not a bad thing — in fact, it’s a great on-ramp to coding. Snap! supports a kind of vibe coding that’s deeply aligned with constructionist education: learning by making, reflecting, iterating.
The same vibe exists in educational simulations like Factorio, SimCity/Micropolis, and The Sims — call it vibe space industry, vibe city planning, vibe architecture, or vibe parenting. You drop some zones, throw up some walls, dig out a swimming pool, tweak a slider, pop out some babies, see what happens. It’s empowering and often inspiring.
But you don’t want to live in a city you vibe-mayored in SimCity, with a vibe-tunneled Boring Company loop, or ride a vibe-planned HyperLoop, or board a vibe-engineered rocket operating under “Full Self-Delusion” mode, held together with PowerPoint and optimism, headed for a Rapid Unscheduled Disassembly.
The road from vibe coding to craft coding is a natural one. You start by exploring. Then you get curious. You want to understand more. You want your code to be shareable, readable, fixable. You want to build things you’re proud of, and that others can build on.
This is especially relevant now because AI-assisted coding is amplifying both the good and the bad. Tools like Cursor and Copilot can accelerate comprehension, or they can accelerate incoherence. They can help you learn faster, or help you skip learning entirely. It depends on how you use them.
But used with intention, LLMs can support craft coding, as a "coherence engine" rather than a "chaos reactor". They can serve as a kind of coherence engine — helping you align code with documentation, keep multi-dialect implementations in sync, and build multi-resolution natural language explanations of your design. They’re not just code generators. They’re context managers, language translators, spaghetti groomers, diff explainers, OCD style critics, grammar police, relentless lint pickers, code and documentation searchers and summarizers, and conversation partners. And if you treat them that way — as tools to reinforce clarity and coherence — they can be an extraordinary asset.
So this isn’t about gatekeeping. I’m not saying vibe coders aren’t welcome. I’m saying: if you’re interested in the practice of craft coding — in learning, building, and maintaining systems that make sense — then you’ll probably want something more than vibes.
And if you’ve got a better name than “craft coding,” I’m all ears. But what matters isn’t the name. It’s the practice.
Yes some of the current AI coding tools will fail at some use cases and tasks, but some others tools might give you good results. For example, Devin is pretty bad at some trivial frontend tasks in my testing, but cursor is way better.
I have good success with web development and JavaScript in particular, on several large codebases.
I also built my own AI coding and eval tools that suits my needs, though cursor has largely replaced the AI coding tool that I built.
Of course outsourcing software development hasn't gone away, but it hasn't become anywhere near as prevalent and dominant as its proponents would've had you believe. I see the same happening with AI coding - it has its place, certainly for prototyping and quick-and-dirty solutions - but it cannot and will not truly replace human understanding, ingenuity, creativity and insight.
As you say, by the time you specify everything, you've written the code.
I don't know if that's a good idea but a lot of people are going to try it.
The LLM is some sort of transpiler.
Somebody will have to add some syntax to these LLM prompting systems to include text that doesn’t get converted. So the next round of PMs can ask you to documents your prompts).
What could go wrong?
Sadly not when it’s a 2000 page word document with a million formatting quirks and so many copy-paste versions you don’t know if you should trust “reqs_new25”, “reqs_new25v1” or the x number of other copies floating around.
Then remember when we said tests should be the specs?
Then we said the end users are the specs?
All of them can be construed as a joke in our erratic search for the correct way to write software without those $150k developers that seem to be the only ones getting the job done, assuming they have a competent management hierarchy and stock options incentives.
[1] We have a waterfall software and I wonder whether Crockford’s license “JSON should be used for good, not evil” was meant for me
What I am saying it is a mess from beginning to end and I am honestly not sure if there is one factor that could solve it..
What did your manager say when you said this to them?
If you have multiple of those, you can tell it about required sections / format, or provide a good past example.
I worked at [insert massive retailer here] a few years ago and this mindset is still very much alive.
Last time i was at a faang my org also had offices in one of those “low-income countries”. So in a way we haven’t stopped.
Also, depending on how you define “low-income” then up to two thirds of the organisation i worked in was in a low-income country.
No, when I was at a large, well-known company a year ago, job listings were 2:1 off-shore (India, South America) vs on-shore. There was also an increasing amount of contractors used, even for public-facing stuff you wouldn't expect.
Giga-projects with 50k, 100k, 500K, lines of code are going to get decimated. By and large these programs are written to capture large audiences by offering a massive feature set. But how often is any one user ever actually needing those 100k LOC?
If LLMs can start nailing 5K LOC projects pretty reliably, and the technical moat cleared away (i.e. using an IDE to run code). Software businesses are going to see a collapse in users as people just churn out bespoke single task software for their own use case each day.
If you think it's fine because you can't prompt Gemini "Create an excel clone", you are doing the equivalent of drawing a robot with a vinyl record player in 1950 and calling it "Entertainment of the future!". In a world with functional robots, portable vinyl players for it to play music make no sense.
I’m not sure why those fully bought into the AI hype so often dismiss anyone who’s less bullish as simply too small-minded to see the writing on the wall.
That aside, while I do think software is going to change, I’m not sure that I agree with your particular version. What examples of apps with 100k, 500k+ LoC codebases are going to get decimated? The biggest successes in software today have moats around inventory or network effects. Are people going to make their own Netflix or Uber? Even at a smaller level, is the idea that local gym owners are going to replace gym management software with their own mini apps? Or restaurants are going to do their own point of sales apps? Unless AI can make the cost of maintaining software something close to zero time, which is a really tall order, why would business owners waste time on something outside of their core business. And if this is such an untapped opportunity why didn’t we see the start of it with the no-code movement?
Will a big chunk of the software market fall off and be replaced by custom mini apps that the layperson crafts with AI? Maybe? But I don’t see how one justifies the level of confidence I see from these predictions.
Because, as we all know, what is important about coding is outputting lines of code.
This is the main difficulty, this is were IA will change the game forever.
Thinking about the code you write, that's worthless, do not do that. Improving a large code base ? Again, no need to think to do that. Just inject random lines of code and it will do the trick.
Of course, in a world where your code has no value because it's just a copy/paste from elsewhere that has a low lifetime expectancy, IA is shinning.
But if you want something a bit more useful, a bit more clever, a bit more adapted to your use case, IA sucks. Because IA do not think.
IA is a threat to dev that do not think. Good ridance, they won't be missed.
That sounds like it's going to take a lot more time that just writing the code for an experienced developer. The issue with AI for me is that it produces plausible-looking code which requires a lot of attention to read through, because things that look superficially "right", including any justification in code comments, can actually have really problematic flaws.
There are a few kinds of developers: good, bad, slow and fast. Everyone wants to be a good developer but a fast and bad developer is worse than a slow and bad developer because they end up doing so much damage.
There are four kinds of military officers: smart and lazy, smart and hard working, dumb and hardworking, dumb and lazy.
Keep the dumb and hardworking away from any high level position. They actively make things worse. Dumb and lazy are useful for simple tasks with oversight. Smart and hardworking are excellent for high level staff and analyst positions.
The Smart and Lazy should be saved for high level command. They expend only the energy necessary to get the job done and then focus on the next important task.
As a consultant the majority of my work is around business process automation and integrating cloud systems. We build a lot of small "applications" that change almost constantly. The number of concurrent users is low, the lifespan of the software typically short and to justify the effort has to be done quickly and efficiently.
It's 100% "value engineering".
AI agent pairing has been an absolute game changer. It can single shot most requirements and refactors. I basically am just writing technical requirements and reading pull requests all day now.
I actually think the quality of the output has gone up significantly because you can just accomplish much more in the same limited budget.
The first kind of quality is the only kind that matters in the end. The second kind has mattered a lot up until now because of how involved humans are in typing up and editing software. It doesn't need to matter going forward. To a machine, the entire application can be rewritten just as easily as making a small change.
I would gladly give up all semblance of the second kind of quality in exchange for formal specifications and testing methods, which an AI goes through the trouble of satisfying for me. Concepts and models matter in the problem domain (assuming humans are the ones using the software), but they will increasingly have no place in the solution domain.
Your end users will eventually notice how long bugs take to get fixed, how long and how often outages occur, and how long it takes to get new functionality into your software.
But beyond your end-users, you likely have competitors: and if your competitors start moving faster, build a reputation of dependability and responsiveness, your business WILL suffer. You will see attrition, your CAC will go up, and those costs get absorbed somewhere: either in less runway, less capex/opex (layoffs), higher priced or all of the above. And that’s an entire domain AI isn’t (yet) suited to assist.
There’s no free lunch.
That’s the easiest way to get both definitions of quality as it’s way esier to test isolated modules and their integration than testing the whole system as a whole. And way easier to correct wrong code.
The first isn't entirely true, and automating tooling is actually quite poor at doing any sort of architecture analysis since the "right" architecture is heavily dependent on factors you cannot see in the code itself: What sort of SLO are you setting? What is your services load and usage pattern (read heavy? write heavy? blend?). Read heavy and high availability? You may want CQRS, but if the service is only experiencing light loading that could easily be over-engineering. Tooling won't help you identify that; you'll need experienced engineers to make judgements.
How easy it is to maintain and extend does absolutely matter, in a world where software is constantly growing and evolving and never "finished"
Just an observation though:
There seems to be a world in software where "it works" well enough to grow a large user base to achieve a a large valuation and then dip out is also a viable option.
Growing/evolving the code does not matter because the product no longer matters after the founders have made a large sum of money.
You're harming:
* your customers who trusted you
* the people that purchased your product
I think "grift" is a good term (GPT recommended 'predatory exit' as an alternative) for what a team that's done that has done.There’s nothing wrong with iterating fast or building MVPs. But when teams knowingly pass off a brittle mess to others, they’ve stopped building products and started selling lies.
I was not trying to imply that it was not. Just observing that when money is on the table there appears little incentive in some cases to build a good product.
Or to follow good engineering practices because the founders & investors already made money without it.
Yes. But the first kind of quality is enabled with the second kind.
Until we live in a faultless closed loop[1], where with AI "the entire application can be rewritten just as easily as making a small change." you still need the second kind.
[1] and it's debatable if we ever will
Moreover, I suspect the second kind of quality won't completely go away: a smart machine will develop new techniques to organize its code (making it "neat and clear" to the machine), which may resemble human techniques. I wouldn't bet much on it, but maybe even, buried within the cryptic code output by a machine, there will be patterns resembling popular design patterns.
Brute force can get results faster than careful planning, but brute force and planning gets results faster than both. AI will keep being optimized (even if one day it starts optimizing itself), and organization is presumably a good optimization.
Furthermore: LLMs think differently than humans, e.g. they seem to have much larger "context" (analogous to short-term memory) but their training (analogous to long-term memory) is immutable. Yet there are similarities as demonstrated in LLM responses, e.g. they reason in English, and reach conclusions without understanding the steps they took. Assuming this holds for later AIs, the structures those AIs organize their code into to make it easier to understand, probably won't be the structures humans would create, but they'll be similar.
Although a different type of model and much smaller, there's evidence of this in auto-encoders: they work via compression, which is a form of organization, and the weights roughly correspond to human concepts like specific numbers (MNIST) or facial characteristics (https://www.youtube.com/watch?v=4VAkrUNLKSo&t=352).
From a business perspective, this is what's exciting to a lot of people. I think we have to recognize that a lot of products fail not because the software was written poorly, but because the business idea wasn't very good.
If a business is able to spin up its product using some aspect of vibe coding to test out its merits, and is able to explore product-market fit more quickly, does it really matter if the code quality is bad? Likewise, a well-crafted product can still fail because either the market shifted (maybe it took too long to produce) or because there really wasn't a market for it to begin with. Obviously, there's a middle ground here, and if you go too far with vibe coding and produce something that constantly fails or is hard to maintain, then maybe you've gone too far, but it's a balance that needs to be weighed against business risk.
An AI will be as flustered by spaghetti as a human. Or not so much flustered it will just make willy willy changes and end up in an expensive infinite loop of test failures and drunken changes to try and fix them.
Tell that to the vagus nerve in the giraffe.
Those are just some of the questions that are in my head lately. I would appreciate other people's opinion.
> Do you think AI assisted coding has a negative impact on developer's growth?
Almost certainly. Easier to do things the easier way, but you never learn unless you do it the hard way. Maybe that won't matter -- i.e., the skills that one would've learned are now to be subsumed by AI. But as long as humans are needed, it will be necessary to build deep skills and understanding of systems, which AI coding does not seem to give us.
> Are today's juniors never gonna reach senior levels because of AI assisted coding?
Some definitely will, same as some people today get really good at programming in assembly. Almost certainly fewer will -- at least to what we today consider "senior".
> Is the need for developers gonna increase in the longterm but decrease in shortterm?
It all depends on the shape of the curve -- how far AI coding will be able to take us, and how fast.
It turns out to mostly serve the same purpose as low-code/no-code, where devs are needed to do 'serious' work and mixing the two becomes difficult? I doubt there'll be a slump at all.
It turns out to obviate the need for devs entirely, but only for certain common tasks -- or, it speeds up devs across the board by enough that significant double-digit (e.g. 40-50%) percentages of their work is now handled by AI? Then yes I expect we'll see a slump of some degree. But if it's not close to a 2x multiplier I expect we slump back to the first category, given just how much code it's clear there is still to be written.
On the other hand, though: if AI continues to advance and actually replaces developers 1-to-1 at lower cost? We're probably in for a sharp exponential and the question isn't how many developer jobs will be left, it's how long humanity has left.
Paying attention saves you energy in the long run. In the words of Gus Levy, nothing wrong with being greedy, but there's two types of greed, long term and short term; the latter is stupid.
Of course for a throwaway project it's irrelevant by definition. But the problem is in professional work you cannot get away with low effort, you're just pushing your problems to the back and they'll come back with interest. Vibe coding is simply moving your problems to other people, or to yourself at a later point in time.
Vibe coding is first and foremost moving some of your problems to the AI and that can be suffice even in professional setting where there's a lot of mundane requests, e.g. setting up slack alerts, running simple data transforms or figuring out one-off data analysis. Maintainability is less of an issue on tasks where it can be done from scratch if need be.
If your situation is result-driven and easily verifiable AI-driven solutions are absolutely appropriate.
And importantly make sure the user doing the brain work has the experience and support to do it properly. The XY problem can cause a lot of damage with AI agents that implement what's asked of them instead of asking why.
Simple.
LLMs for code are currently sold as sort of that.
It is not software engineering.
You use AI to make a PR? You are still responsible. You code reviewed the PR? Also responsible.
The AI is not responsible.
> embrace the vibes, but honor the craft
For reference, Tailwind 4 will not read in config files by default (which is the older behavior) - the encouraged practice is to configure customizations directly in the CSS file where you import Tailwind itself.
Not sure how o3 is generally at coding, but this kind of meta information works well for me to avoid version missmatches with Claude and Gemini
It's kinda important that the AI finds the issues itself so it can properly document it in her own words.
This won't be 100%, but that'll be the companies who're able to hire somebody to parse the problems that arise. Without that engineer, they'll be doing what OP calls 'vibe coding', meaning they'll neither understand nor be able to fix when the whole thing blows up.
On another note, a related but somewhat different technique that I think is still under-appreciated is "vibe debugging", i.e. repeatedly executing commands (builds, tests, typechecks, dependency installs, etc.) until they run successfully. This helps a lot with what imo are some of the most tedious tasks in software development—stuff like getting your webpack server to startup correctly, getting a big C project to compile for the first time, fixing random dependency installation errors, getting your CloudFormation template to deploy without errors, and so on. It's not so much that these tasks are 'difficult' really. They just require a lot of trial-and-error and have a slow feedback loop, which makes them naturally a good fit for AI.
I put a lot of focus on execution control in Plandex in order to make it helpful for these kinds of problems. It's built to be transactional—you can apply the changes from the sandbox, run pending commands, and then roll back all changes if the commands fail. You can do this repeatedly, even letting it continue automatically for some number of tries until the commands succeed (or you hit the tries limit). While there are some limitations to the terminal modality in terms of UX, I think this is an area where a CLI-based agent can really shine.