> Fact is, vibe-coded projects devolve over time into an unmaintainable mess. The reason is simple, yet hard to fix: code maintainability and good architecture don’t have good measurements that we can apply, because it takes months, years even, to notice the effects of bad architecture or of unmaintainable code.
>
> For one, AI is not trained on what it means for code to be maintainable. For instance, any reinforcement learning done needs a reward signal that can be measured immediately, not in months or years.
Sad to say, but this is no different from human written code. Human written code just takes even longer to realize the mistakes because the pace is slower.
I think at the end of the day, it is not impossible to have AI write "good" or "high quality" code. If anything, once the patterns are established, AI will be more likely to adhere to the patterns and rules than any human team. It requires the most experienced engineers on the team to split their time writing the core patterns and documenting them in references/skills.
But it takes a lot of "taste" and a willingness to slow down a bit with AI (to create necessary artifacts), something teams find hard to do when you can ship so fast now.
My experience has been that there is a camp of very senior engineers that are unwilling to adapt to reality and focus on documentation and writing (effectively producing skills and agent guidance which multiplies their effectiveness); they will cling to their knowledge thinking coding a sacred art.
For this to work long-term there has to be continuous improvement.
My belief is that paying off tech debt requires a better model than creating it. At the same time there are people who will create tech debt no matter the tool.
Should the models stop improving, the debt will pile up.
We (collectively) were unprepared for a machine that presents itself in human forms. We were the frogs that boiled ourselves. We built a world of images and words on a screen. And then we built a machine that can (increasingly) mirror that world; it does so in a way which most of us are incapable of disambiguating.
It feels like there is indeed a ghost in the machine.
And there is, but that ghost is us. And that ghost is fading surprisingly quickly.
Tbf, at this point, this has been said ad-nauseam.
At least I did not find a new thought in that (granted, relatable) rant.
"This is bad and you are bad" requires people to not defend their reality through rationalization, but the point we're at with AI right now is driven by exactly that. So this is at best highly ineffective at reaching the people it claims to want to reach.
That said, the underlying emotion of "you all suck and I hope you lose your jobs you frauds" is relatable and worth screaming from the rooftops of Linkedin dot com for the catharsis alone.
There's a continuum between "vibe coded by someone with no technical knowledge or inclination" and "hand written domain driven design development". You can absolutely use coding agents AND have maintainable code. But yes, the coding agents will not magically make everything maintainable if you don't tell them to.
"Code maintainability and good architecture don’t have good measurements that we can apply"
Who has no wisdom? There are dozens of ways to measure code maintainability. Cyclomatic complexity is just one.
Nothing stops you from wiring up something like SonarQube metrics to your agentic coding workflow.
> You can absolutely use coding agents AND have maintainable code. But yes, the coding agents will not magically make everything maintainable if you don't tell them to.
The trillion dollar question is how you do this, if your employees do not care (they are optimising for salary & time spent not code quality) and you have no way of telling apart AI slop vs. good maintainable code. (If you could you would just train the AI.)
Before AI there was at least some way to tell apart good programmers from bad, because there was some human effort involved in coding. Now with AI and slop generation there is almost now way to do this.
> Before AI there was at least some way to tell apart good programmers from bad
There were only bad ways, and the best way was to just find people who were both good programmers and cared about quality to keep an eye on the rest. Nothing much has changed in that respect.
> and you have no way of telling apart AI slop vs. good maintainable code. (If you could you would just train the AI.)
I know how to distinguish good maintainable code from garbage. I have known for quite a few years. But knowing how to train someone, or an AI? I'm a good coder, not necessarily a good teacher. And there are things about code that I _feel_, not that I can rationally explain.
I completely agree with you on this. I was talking about the employer perspective. They have no way to tell apart the two and thus have no way to set the incentives.
You might write good, maintainable code, but they will prefer the slop generator who delivers quicker.
Disagree, throwing more money at devs hoping it will improve quality while continuing to take away their authority will only perpetuate the slop machine.
It's not that hard: treat people with dignity and take their contributions seriously, not as a disposable meat mass. In fact, not only will this improve code quality, it's likely to improve employee retention too.
Sounds like a culture problem. I’ve never had a team I lead not give a shit. Even if the project is dumb (some projects are dumb), there’s enough pride in competence and desire not to dump garbage on the people around you to ensure they at least want to try.
One way to get one's employees to care about the quality of the product they are being paid to build is to show some loyalty and build trust over the course of a decades-long career by treating them fairly and avoiding layoffs.
> Before AI there was at least some way to tell apart good programmers from bad
That's why companies were interviewing people on tasks that had nothing to do with writing maintainable software. /s
I understand the concern and it should be addressed and researched. But, simply saying "humans were writing code themselves" doesn't provide any evidence for better quality.
I don't think it's that hard of a question to answer. I've noticed on my team, our thinking has shifted from how do you directly solve a problem, to how you get an agent to effectively solve the problem and not produce slop in the process.
One thing that we have done that's probably made the biggest impact is alot more upfront architecture with the knowledge that pretty soon agents will be running wild all over the code. Having worked with these agents for a while now, you get a very good sense of how they will go about solving a problem and the various footguns they will encounter along the way. Editing an AGENTS.md file or building a skill is not nearly as fun as coding by hand but it will pay dividends over and over if you do it right.
Another big thing is doing refactoring passes. Early on in our projects our agents generated ALOT of slop and we had to go back and fix alot of it. But every time we did one of these passes, a major aspect was improving agent instructions / skills / etc so it doesn't happen again. It can be a painful process at first but I found that over time, the amount of slop the agent produces goes down by orders of magnitude.
I feel like we're still very much programming, but we're now doing it at a "higher level" where we are not writing the code ourselves but instructing the agent to. And IMHO, properly instructing an agent on a production codebase is not a trivial task.
The comment you replied to did not say anything about unit tests. And "software quality" is much broader than "data structure and code complexity".
I do think this gets to the heart of the matter. I think many programmers have missed the forest for the trees on why things like data structure and code complexity matter. They do matter, but they don't matter in and of themselves. They matter because they are the best techniques we have for making software that is of high quality (the software, that is, not the code) and which remains so over time, while continuing to be developed and adapted.
I strongly believe that it is now much easier to create software that is of high quality and adaptability, orthogonally to the data structure and code complexity concerns. Those concerns remain relevant, but it's a mistake to think of them as the primary thing rather than things that support the primary thing
Plenty of measurements exist, but the trick, as the article said, is finding good measurements.
Cyclomatic complexity has been pretty solidly discredited within the maintainability research community for decades.
Sonar's cognitive complexity metric is a bit better, but here's a study that found that it still only has about a 0.5 correlation with how much difficulty programmers actually had reading code as measured by multiple methods.
They found that the most accurate way to measure code complexity that didn't involve something like an eye tracker or EEG is still basically just vibes - asking programmers if they thought it was hard to understand. That had a 0.9 correlation.
Yeah, we have this rule in our SQ and I absolutely hate it because of the number of times I'm forced to break something up. Complexity that matters is usually at a higher, more architectural level.
//There's a continuum between "vibe coded by someone with no technical knowledge or inclination" and "hand written domain driven design development".
Somewhere in the middle of that continuum sits - "domain driven specifications, described using high level english concepts(that are well defined) from the domain , combined with a selection of a few standard architectures"
> But yes, the coding agents will not magically make everything maintainable if you don't tell them to.
But that's not actually a change. Humans wouldn't magically make everything maintainable if you don't tell them to (and maybe not even if you do). You have to monitor them and train them, carefully, basically forever.
Maybe not forever. Humans you have to do it basically forever, because humans don't improve very fast. AI... you have to do it forever with the current level of tech. If the tech improves enough, who knows?
Those metrics don't amount to wisdom. Wisdom is something like realizing that you don't have to special-case some code over <here>, you just need to create a new reusable primitive over <there> that fixes two bugs with one stone, and you'd probably wind up needing it anyway. Both bits of code could sail through all the measurements of code maintainability you could come up with, and an agent suggest to me the brittle solution, but I came up with the more maintainable one.
> But yes, the coding agents will not magically make everything maintainable if you don't tell them to.
You say that like adding "Make it maintainable." to your prompts solves the problem. But the reality is we only have weak metrics for measuring maintainability. For example, you can trivially optimize for Cyclomatic complexity by blowing away abstractions and duplicating code everywhere. That doesn't make the code better. Cyclomatic complexity is a tool that has to be applied judiciously.
That doesn't mean you can't or shouldn't use AI to generate code. But it does mean if you want your project to scale, you're still going to need a lot of developer involvement at the code level to ensure the code remains maintainable so that future developers can build on top of it. AI is not like compilers, which allow developers to build complex solutions without being proficient at the next level down (assembly).
> There's a continuum between "vibe coded by someone with no technical knowledge or inclination" and "hand written domain driven design development". You can absolutely use coding agents AND have maintainable code. But yes, the coding agents will not magically make everything maintainable if you don't tell them to.
Yes. But I think the idea is without "hand written domain driven design development" the result trends to "vibe coded by someone with no technical knowledge or inclination," as developers de-skill.
- lot of (most?) people can do basic multiplication (I’m too lazy to fetch any stats but I hope you’ll have some observations in your bubble dear reader)
Our class sizes at the university that I teach at have plummeted with the crash. What I'm hoping is that this means I'm just going to be teaching people who are actually interested in producing quality code.
So are you agreeing with me or not? Because it's not black and white. Having a few non-deskilled developers around who do the equivalent of "compete in mental calculations" the the same as having none at all.
It's sort of like the retort "AI won't take all the jobs from humans, some will be left at the very top and very bottom." Even if true, fat lot of good it does most people who would be unemployed in that scenario.
Also, if you get widespread deskilling, but massive increases in code production due to AI, you're probably still going to get "organizations falling into the trap" like the OP describes and the remaining skilled people getting burned out trying to hold it all together. Modern American business culture (in aggregate) is incapable of learning to not burn people out until everyone is already burned out, only then will it pay attention to the problem.
I agree that "maintainability" is the wrong place to stake one's flag. It's a technical problem and will probably be overcome.
The "lack of wisdom" in AI coded projects which does not strike me as a soluble technical problem concerns questions like: which software is worth writing and which isn't? How are tradeoffs evaluated?
I don't think AIs are structurally capable of answering these questions in the same way humans are. But they make those decisions anyway!
>vibe-coded projects devolve over time into an unmaintainable mess
The author seems to be confusing "I didn't write any code" with "I don't care about software design and maintainability". There exist maintainable and thoughtfully designed software systems for which the designer did not write any code and didn't read most of it. It's not the median, but the median software project has always been unmaintainable before agents.
Sure but many many developers who are willing to outsource every modicum of thought and effort to AI don't care about design and maintainability. And the supposed "super intelligence" of AI gives them a cop out for that
Here's the one simple trick that fixes everything:
- Use the code that your agents write in anger.
There you go. Do I know when my agents fuck up? Yes, I absolutely do -- because I'm a user of the code I have my agents write, and I ask things like "why is it taking 50 ms to start this program ..." and then I go in and find stupidity, and excise it. I do this over and over again.
Is it faster than writing it out by hand? Maybe! It's definitely a different perspective.
Start behaving like a baby "why, why, why" and then do a bit of reading, and you'll be fine.
A lot of these blog posts seem like they're aimed at software written by B2B companies who don't even use their own software ...
> Fact is, vibe-coded projects devolve over time into an unmaintainable mess.
We've had strong coding agents for less than a year. Anyone making such a definitive statement about how vibe-coded projects progress over time is basing it on guesswork, not evidence.
In my experience, the most difficult part of a software project is getting the specifications correct. To abuse Harold Abelson famously quote: "Programs must be written for people to read, and only incidentally for machines to execute."
"A Project must have proper tests and specs, and only incidentally for a working program that executes"
As much as I'd love to believe it, it is now a conservative take. Sure, having a solid architecture in mind still matters right now, but manually writing code is completely unnecessary and, before long, even designing the architecture is going to be completely automated.
Does writing table schemas count as writing code? Is that architecting? Both?
I personally don’t trust coding agents to have enough context to write domain-specific table schemas, and I don’t have the patience to transcribe all of the context into a natural language prompt. If I ask it to, it’ll write something for sure, and maybe that can be a jumping point for me, but at some point I have to physically write what the columns will be.
You should definitely try it if you haven't already. Most of the models are deeply familiar with domain specific areas in ways that most of us aren't. In fact, I would say the problem is generally the opposite. If model size and effort is is high, it will over architect what an app needs. I find myself reigning in a giant email notification system with subscriptions and "channels" and other such nonsense when sometimes you just want a simple one off.
Yes, the LLM knows the definitions of the words in my domain, that’s clear and obvious.
No, the LLM doesn’t know our product strategy and why certain things matter and certain things don’t. That’s very much what I get paid to do. There’s not even agreement within our team about what path we should take through the domain-product space, there’s no chance in hell that the LLM will choose a profitable random walk through that domain-product space.
If it were able to do that, then AGI would have already been achieved and we’re only compute power away from OpenAI or Anthropic making the marginal utility of any piece of code $0.
Yeah, it's not just over-engineering, it is just that generic systems that look like everything else usually don't solve a business problem, but I think I would be less dismissive of its world model in general.
LLMs are not a "random walk", they take in information and they explore the space according to the way they've been instructed.
I’m taking this view now as well. If you’re reading code, you’re probably doing it wrong. You should absolutely be setting criteria that can be objectively measured and rejecting code that doesn’t meet those criteria or perform as specified. We are all senior software engineering managers now, with a fleet of cheap and ambitious young engineers doing all the authoring.
But reading code? What does that accomplish, other than to slow your dev process down enormously? Serious question.
Man, I think that code is still the artifact that we produce as developers. Code is the truth. I don't find it difficult or super time consuming to just... read the code, either. I've highlighted quite a few issues with LLM/Agent output from just glancing at the code.
I'll let you know how it goes... My new VP of engineering is a 'no looking at code' type of guy and is ripping 10K LOC PRs / Docs / plans against our 25 year old codebase and I would not say that they're 'good' PRs.
Maybe I'm completely wrong, but I think reading the code is more valuable than ever when working in a full-stack / small company role. I can tell you exactly what the business logic or functionality is for a certain piece of our system, in truth, without having to step through and make sense of ambiguous docs (that were also AI generated).
(I have a sneaking suspicion that in two years or less, my small team is going to significantly compromise the integrity of this codebase. Maybe by then we can refactor with GPT 12.)
Here I am starting to think a central part of knowledge work is the knowledge gained.
Maybe you are right, maybe not, let's see. Unfortunately I kinda agree, because humans are really good at being lazy and going in the path of least resistance (including me). It's genuinely difficult to not use AI even if it makes my work worse, as long as it's easier and faster.
I'm not quite a doomer. I use AI every single day. I also take a fairly negative view of AI generated code, but I think it's unavoidable while remaining employed these days. A fact I find pretty depressing.
I absolutely agree with the author that humans need to be in the loop reviewing and understand the code they're merging, and generally take a "Hey, build X like Y utilizing Z" approach when using AI to build instead of the "Hey, solve this problem" approach. Our PE overlords actually mandate the latter, but I'm not doing it.
I do think however a point the author misses is that with AI, major refactors become relatively quick. Hours instead of months/years.
Yes, AI can and probably will land you with major foundational and architectural problems, but your architecture isn't set in stone anymore. Your whole codebase bends like a leaf in the wind.
Yes but if you don't care enough to think about, analyze, and decide how to improve your architecture, it doesn't matter. And I'm seeing that a lot with full vibe code code bases
I have more than 15 years in the industry. I have worked in some of the most horrendous codebase someone has ever conceived. Honestly? Humans can do worst than AI.
Let's stop overvaluing human work. Sure, I don't want AI to write the entire codebase without I know what the fuck it did.
But AI is on an equal footing with an average dev.
To me, the problem is not about what AI is good or bad at, but about institutional knowledge. If AI is doing the coding, writing, designing, or whatever else, you slowly lose the ability to a) learn from others in the org because nobody knows what you need to learn anymore and b) actually improve stuff because there's no more "what good looks like"
My companies current national marketing campaign strategy, structure and creative work has been created by an MBA from outside our industry who did a "deep dive" using AI. The project manager they brought in to run the tickets is also adding AI made decisions on brand and ad copy.
The short version of the result is that we're completely copying the leaders in our market that have 100x our marketing budget because they're the only ones with documented strategies for AI to cheatsheet from, with no sense or irony or concern that perhaps their scale is a core part of their strategy.
It's not just institutional knowledge. We're suffering the death of the specialist. Now every generalist is pulling triggers with no sense of limitations.
Man.. just code, let people build, design, adjust. Who cares? Who are these people writing these posts? Why should we give anything they have to say warrant? These posts are getting old, very quick.
It's a product of the times. You have some folks who are really passionate about the craft of software, some folks to whom it's just a job, and an entire culture that promotes and incentivizes engagement through raw emotional connection (outrage, passion, pick an emotion).
What you don't see from most perspectives are the silent masses who simply don't engage, don't care about the discussion, and/or are too busy doing what they enjoy.
I think too many people (very much including me) who are "passionate about the craft of software" allowed themselves to become too focused on the code itself as if that were the first order concern of the craft. But the craft has always been about the quality of the software, including how its quality changes as a function of time and adaptation. Code quality is only in support of that concern, it is not itself the primary concern.
It has been a fairly painful experience for me to shift my thinking on this, but it's a much better mindset. I still care about many of the same code quality concerns I always have, but I'm thinking a lot more about why I care than I once did.
To analogize coding to sculpting - you're in the "toddler with playdough" phase. At some point you might want to make something other people will find pleasing and maybe even worth putting on display, the rules of composition, the details of materials, and the techniques for not wasting expensive materials suddenly become important.
If you're just writing code to fuck around or automate a small part of your life, whatever. But if you're making a big system or wanting other people to use your product, these things about how to make good software become more relevant.
I work in an industry where software bugs can cause real harm to real people. I care that my coworkers are producing more bugs than ever because they don't take the time to think about the code anymore.
The acceleration of careless developers is a sign that we desperately need professional licensure and some sort of professional association or guild. Maybe people will care more if they have more legal accountability for the slop they put their name on.
I'm sick of having to use increasingly trash software at a consumer level, and concerned about the quality of software in dangerous things like cars, planes and medical systems.
Then where are your industrial controls to catch bugs before they are introduced to the product? Where is the feedback loop to the developers running the AI to control the situation?
LLMs should not touch these technologies. Keep your slop factories in webdev. We have missles, planes and pacemakers to make still. If you ever feel like using your brain again, theres plenty of work to be done that llms cannot touch.
I think that we should realistically expect that even a very rigorous testing and validation process is not fool proof, just as we anticipated that the code isn't.
I don't know, we spent the last few years with tons of posts telling us "coding is dead" and the biggest companies in the world telling us our jobs are going to go extinct.
That mindset has also deteriorated my working environment due to some coworkers buying into it.
So it's kind of nice to see some sanity checks that align with my beliefs too. I can share articles like this with my teammates. I can see that I'm not alone in thinking most LLM code is slop.
I think too junior devs NEED to see this. My team had a couple of promising juniors who are now completely brain rotted by AI and can't even write "Hello World" without consulting Claude anymore.
Forgetting about AI for the moment I do like this paragraph very much:
> The proficient developers, the experts, rely on their intuition built with sweat and tears, working long hours trying to debug and fix production issues, swearing to never again be so foolish as to repeat past mistakes. It’s the kind of intuition that can’t really be made into a list of rigid rules, because everything is context-dependent. Experts are incompatible with the same rules and recipes that make beginners more productive. Experts don’t
follow the rules, they make the rules.
.... because I have found the same thing - that there's nobody more zealous about some paradigm than those who are recently converted to it and who haven't come to find that everything has its trade-offs. Design is always about evaluating the trade-offs and seeing which ones most suit the given situation.
And, so what? Software as an engineering discipline has long lacked standardization and regulation to be on par with other engineering disciplines, and the fact that code and all its surrounding ecosystems are not "visibile" or "malleable" makes this extremely hard.
You can use terraform and yaml to define infrastructure that literally spins up machines _somewhere_ in the internet. With all its issues, bugs and associated consequences mostly being ignored.
I just don't understand the difficulty in KNOWING what needs to be done: NO LLM usage in university/grad/high schools, NO LLM usage in the first 3 years of your professional career.
Once the basics are solidly grasped, then they can use it at will.
The problem has never been about wisdom, knowledge or LLMs writing good, bad, maintainable or terrible code. It has always been about the skill level of people using it AND on the fact that people start off-loading basic things to these models that they wouldn't before.
If you have the knowledge and "suffered" through experience to learn the fundamentals, than not using LLMs becomes more deterimental than beneficial.
You just CAN NOT skip the trial by fire of learning and absorbing knowledge on your own. That's all.
> I’m going to make a prediction of my own… In the future we will see more and more companies proudly boasting their “NO-AI” policy as a competitive advantage. And they will be right
I'm going to make my own prediction: this isn't going to happen
I'll go one further: We'll see companies proudly boasting "no humans" as a competitive advantage and arguing letting humans do certain types of work is unsafe.
I think we'll probably get both kinds of companies, but that they will both be fringe approaches, and the predominant choice will be to have humans working with AI tools.
"We're not going to use tractors to plow the fields"
"We're not going to use trucks to deliver our produce"
"We're not going to use planes to meet with our global partners"
"We're not going to use computers to run our business"
"We're not going to open a web shop, brick and mortar forever"
"We're not going to use AI to make decisions for us"
And why are the people calling people Luddite some of the least intelligent people I meet, and seem to all. Be complete sheep fighting some psychological war om behlaf of their billionaire lords who own the machinery.
Not wanting to hand off all your labor to a machine does not make you a luddite, nor should it be acceptable to call people that because you dont know how to have a real conversation.
It seems like "luddite" is a reasonable description for a strict "NO-AI" policy. You softened it to "not wanting to hand off all your labor" in this comment, but the word "any" would be a more apt way to describe the quote in the comment you replied to.
Pet peeve - luddites had never been against technology. They had been against using low paid inexperienced grunt workers to displace well paid experts.
As the Industrial Revolution began, workers naturally worried about being displaced by increasingly efficient machines. But the Luddites themselves “were totally fine with machines,” says Kevin Binfield, editor of the 2004 collection Writings of the Luddites. They confined their attacks to manufacturers who used machines in what they called “a fraudulent and deceitful manner” to get around standard labor practices. “They just wanted machines that made high-quality goods,” says Binfield, “and they wanted these machines to be run by workers who had gone through an apprenticeship and got paid decent wages. Those were their only concerns.”
I remember seeing some companies boast about "no outsourcing". I think 99% of their customers won't care for such things, as long as the customer gets what they want.
Those people will never reach mastery, because they no longer make choices, they no longer take responsibility for mistakes in coding and no longer learn from those mistakes. It’s the AI that’s making mistakes now, the AI doesn’t learn from those mistakes, and neither are the people relying on AI for coding.
Just to give a hot take, it's funny to look at his builtwith.com. As a developer you have a static site that depends on Cloudflare, Mailchimp, Postmark, Isso ...
Twenty years ago any self-respecting dev would have run the equivalent of all that themselves on their own metal. In 2026 elite neckbeard practice is write the "never reach mastery, because they no longer make choices, they no longer take responsibility" post, hit "publish" and it's magically deployed around the global internet for you. Like a child.
In the future we will see more and more companies proudly boasting their “NO-AI” policy as a competitive advantage. And they will be right.
Yes, a "NO-CLOUD" policy was already so popular, surely this will happen too.
If you have ever looked at a kite and said to yourself, "that is as good as a hang-glider. maybe better.", you might be subject to the perils of one-shot AISDLC
As much as I agree with this article, I feel that there's a logical flaw here. The author admits that it's difficult to measure bad code - but continues with the assertion that it exists. If the only negative to "bad code" is that it's difficult to maintain once the author has left or difficult to refactor, then the question really is whether or not LLMs will continue to be able to maintain their spaghetti code.
Just because it's bad for a human doesn't necessarily mean everything will fall apart - unless a human has to maintain it unaided.
I think this kind of blog post reflects a fear of infantilization by AI. By asserting that only humans know what good code looks like, the author is attempting to mend his own ego.
Build the systems around the code and let the agents do their work.
I think the key distinction is that it's difficult to determine whether a single commit or pull request is bad code at a glance, but it's easy to determine when the codebase as a whole has gone bad due to many low quality commits.
The latter often doesn't even require looking at the code, you can usually feel it just by using the software. From my experience, all software primarily written by AI is full of little bugs and inconsistencies that reflect bad code architecture (such as two very similar pieces of functionality in two different places behaving in wildly different ways, due to the AI being unaware of the first when asked to implement the second and writing the code twice)
I totally agree, and I agree with the article in general. I just don't think it follows that code that's bad because humans had to maintain it is necessarily bad by definition.
I've vibecoded loads of AI apps for myself and almost none of them are still in use. Not because I didn't really want them or they didn't work, but because the more I used them the dirtier I felt, as though I could feel the bad decisions and the bugs underneath just by interacting with it.
289 comments
[ 0.30 ms ] story [ 48.8 ms ] threadI think at the end of the day, it is not impossible to have AI write "good" or "high quality" code. If anything, once the patterns are established, AI will be more likely to adhere to the patterns and rules than any human team. It requires the most experienced engineers on the team to split their time writing the core patterns and documenting them in references/skills.
But it takes a lot of "taste" and a willingness to slow down a bit with AI (to create necessary artifacts), something teams find hard to do when you can ship so fast now.
My experience has been that there is a camp of very senior engineers that are unwilling to adapt to reality and focus on documentation and writing (effectively producing skills and agent guidance which multiplies their effectiveness); they will cling to their knowledge thinking coding a sacred art.
We're a few years into a new technology that is still improving. This is a point-in-time critique.
My belief is that paying off tech debt requires a better model than creating it. At the same time there are people who will create tech debt no matter the tool.
Should the models stop improving, the debt will pile up.
It was mostly 256k, then it went to 1M and now it has stalled there.
We (collectively) were unprepared for a machine that presents itself in human forms. We were the frogs that boiled ourselves. We built a world of images and words on a screen. And then we built a machine that can (increasingly) mirror that world; it does so in a way which most of us are incapable of disambiguating.
It feels like there is indeed a ghost in the machine.
And there is, but that ghost is us. And that ghost is fading surprisingly quickly.
has the author not started to develop instincts with regard to ai usage and pitfalls?
At least I did not find a new thought in that (granted, relatable) rant.
"This is bad and you are bad" requires people to not defend their reality through rationalization, but the point we're at with AI right now is driven by exactly that. So this is at best highly ineffective at reaching the people it claims to want to reach.
That said, the underlying emotion of "you all suck and I hope you lose your jobs you frauds" is relatable and worth screaming from the rooftops of Linkedin dot com for the catharsis alone.
"Code maintainability and good architecture don’t have good measurements that we can apply"
Who has no wisdom? There are dozens of ways to measure code maintainability. Cyclomatic complexity is just one.
Nothing stops you from wiring up something like SonarQube metrics to your agentic coding workflow.
The trillion dollar question is how you do this, if your employees do not care (they are optimising for salary & time spent not code quality) and you have no way of telling apart AI slop vs. good maintainable code. (If you could you would just train the AI.)
Before AI there was at least some way to tell apart good programmers from bad, because there was some human effort involved in coding. Now with AI and slop generation there is almost now way to do this.
There were only bad ways, and the best way was to just find people who were both good programmers and cared about quality to keep an eye on the rest. Nothing much has changed in that respect.
I know how to distinguish good maintainable code from garbage. I have known for quite a few years. But knowing how to train someone, or an AI? I'm a good coder, not necessarily a good teacher. And there are things about code that I _feel_, not that I can rationally explain.
You might write good, maintainable code, but they will prefer the slop generator who delivers quicker.
Sounds like there is a compensation problem then.
It's not that hard: treat people with dignity and take their contributions seriously, not as a disposable meat mass. In fact, not only will this improve code quality, it's likely to improve employee retention too.
SonarQube
That's why companies were interviewing people on tasks that had nothing to do with writing maintainable software. /s
I understand the concern and it should be addressed and researched. But, simply saying "humans were writing code themselves" doesn't provide any evidence for better quality.
I don't think it's that hard of a question to answer. I've noticed on my team, our thinking has shifted from how do you directly solve a problem, to how you get an agent to effectively solve the problem and not produce slop in the process.
One thing that we have done that's probably made the biggest impact is alot more upfront architecture with the knowledge that pretty soon agents will be running wild all over the code. Having worked with these agents for a while now, you get a very good sense of how they will go about solving a problem and the various footguns they will encounter along the way. Editing an AGENTS.md file or building a skill is not nearly as fun as coding by hand but it will pay dividends over and over if you do it right.
Another big thing is doing refactoring passes. Early on in our projects our agents generated ALOT of slop and we had to go back and fix alot of it. But every time we did one of these passes, a major aspect was improving agent instructions / skills / etc so it doesn't happen again. It can be a painful process at first but I found that over time, the amount of slop the agent produces goes down by orders of magnitude.
I feel like we're still very much programming, but we're now doing it at a "higher level" where we are not writing the code ourselves but instructing the agent to. And IMHO, properly instructing an agent on a production codebase is not a trivial task.
I for one, have far more rigorous quality checks in my hobby projects (where AI coded), than I ever could justify when I hand-coded them.
I'm not claiming to be everybody, but surely a good portion of the population are using these technologies similarly.
I do think this gets to the heart of the matter. I think many programmers have missed the forest for the trees on why things like data structure and code complexity matter. They do matter, but they don't matter in and of themselves. They matter because they are the best techniques we have for making software that is of high quality (the software, that is, not the code) and which remains so over time, while continuing to be developed and adapted.
I strongly believe that it is now much easier to create software that is of high quality and adaptability, orthogonally to the data structure and code complexity concerns. Those concerns remain relevant, but it's a mistake to think of them as the primary thing rather than things that support the primary thing
Yet.
I'm sure in few years, as new criteria enter benchmarks, AI will be creating the clearest and smartest code people every seen, by default.
Cyclomatic complexity has been pretty solidly discredited within the maintainability research community for decades.
Sonar's cognitive complexity metric is a bit better, but here's a study that found that it still only has about a 0.5 correlation with how much difficulty programmers actually had reading code as measured by multiple methods.
They found that the most accurate way to measure code complexity that didn't involve something like an eye tracker or EEG is still basically just vibes - asking programmers if they thought it was hard to understand. That had a 0.9 correlation.
https://www.frontiersin.org/journals/neuroscience/articles/1...
Somewhere in the middle of that continuum sits - "domain driven specifications, described using high level english concepts(that are well defined) from the domain , combined with a selection of a few standard architectures"
But that's not actually a change. Humans wouldn't magically make everything maintainable if you don't tell them to (and maybe not even if you do). You have to monitor them and train them, carefully, basically forever.
Induction fallacy at its best
You say that like adding "Make it maintainable." to your prompts solves the problem. But the reality is we only have weak metrics for measuring maintainability. For example, you can trivially optimize for Cyclomatic complexity by blowing away abstractions and duplicating code everywhere. That doesn't make the code better. Cyclomatic complexity is a tool that has to be applied judiciously.
That doesn't mean you can't or shouldn't use AI to generate code. But it does mean if you want your project to scale, you're still going to need a lot of developer involvement at the code level to ensure the code remains maintainable so that future developers can build on top of it. AI is not like compilers, which allow developers to build complex solutions without being proficient at the next level down (assembly).
Yes. But I think the idea is without "hand written domain driven design development" the result trends to "vibe coded by someone with no technical knowledge or inclination," as developers de-skill.
Somewhat relevant parallel..
Calculators exist, but not all is lost:
- lot of (most?) people can do basic multiplication (I’m too lazy to fetch any stats but I hope you’ll have some observations in your bubble dear reader)
- some people actually compete in mental calculations https://worldmentalcalculation.com/mental-calculations-world...
Same will be with software devs, enthusiasts will continue to exist.
So are you agreeing with me or not? Because it's not black and white. Having a few non-deskilled developers around who do the equivalent of "compete in mental calculations" the the same as having none at all.
It's sort of like the retort "AI won't take all the jobs from humans, some will be left at the very top and very bottom." Even if true, fat lot of good it does most people who would be unemployed in that scenario.
Also, if you get widespread deskilling, but massive increases in code production due to AI, you're probably still going to get "organizations falling into the trap" like the OP describes and the remaining skilled people getting burned out trying to hold it all together. Modern American business culture (in aggregate) is incapable of learning to not burn people out until everyone is already burned out, only then will it pay attention to the problem.
The author seems to be confusing "I didn't write any code" with "I don't care about software design and maintainability". There exist maintainable and thoughtfully designed software systems for which the designer did not write any code and didn't read most of it. It's not the median, but the median software project has always been unmaintainable before agents.
- Use the code that your agents write in anger.
There you go. Do I know when my agents fuck up? Yes, I absolutely do -- because I'm a user of the code I have my agents write, and I ask things like "why is it taking 50 ms to start this program ..." and then I go in and find stupidity, and excise it. I do this over and over again.
Is it faster than writing it out by hand? Maybe! It's definitely a different perspective.
Start behaving like a baby "why, why, why" and then do a bit of reading, and you'll be fine.
A lot of these blog posts seem like they're aimed at software written by B2B companies who don't even use their own software ...
We've had strong coding agents for less than a year. Anyone making such a definitive statement about how vibe-coded projects progress over time is basing it on guesswork, not evidence.
"A Project must have proper tests and specs, and only incidentally for a working program that executes"
Hmm, I have deep concerns about what and who is going to cease to exist.
I personally don’t trust coding agents to have enough context to write domain-specific table schemas, and I don’t have the patience to transcribe all of the context into a natural language prompt. If I ask it to, it’ll write something for sure, and maybe that can be a jumping point for me, but at some point I have to physically write what the columns will be.
No, the LLM doesn’t know our product strategy and why certain things matter and certain things don’t. That’s very much what I get paid to do. There’s not even agreement within our team about what path we should take through the domain-product space, there’s no chance in hell that the LLM will choose a profitable random walk through that domain-product space.
If it were able to do that, then AGI would have already been achieved and we’re only compute power away from OpenAI or Anthropic making the marginal utility of any piece of code $0.
LLMs are not a "random walk", they take in information and they explore the space according to the way they've been instructed.
But reading code? What does that accomplish, other than to slow your dev process down enormously? Serious question.
I'll let you know how it goes... My new VP of engineering is a 'no looking at code' type of guy and is ripping 10K LOC PRs / Docs / plans against our 25 year old codebase and I would not say that they're 'good' PRs.
Maybe I'm completely wrong, but I think reading the code is more valuable than ever when working in a full-stack / small company role. I can tell you exactly what the business logic or functionality is for a certain piece of our system, in truth, without having to step through and make sense of ambiguous docs (that were also AI generated).
(I have a sneaking suspicion that in two years or less, my small team is going to significantly compromise the integrity of this codebase. Maybe by then we can refactor with GPT 12.)
Maybe you are right, maybe not, let's see. Unfortunately I kinda agree, because humans are really good at being lazy and going in the path of least resistance (including me). It's genuinely difficult to not use AI even if it makes my work worse, as long as it's easier and faster.
I absolutely agree with the author that humans need to be in the loop reviewing and understand the code they're merging, and generally take a "Hey, build X like Y utilizing Z" approach when using AI to build instead of the "Hey, solve this problem" approach. Our PE overlords actually mandate the latter, but I'm not doing it.
I do think however a point the author misses is that with AI, major refactors become relatively quick. Hours instead of months/years.
Yes, AI can and probably will land you with major foundational and architectural problems, but your architecture isn't set in stone anymore. Your whole codebase bends like a leaf in the wind.
This will probably maintain the problem in a different form.
Counter prediction: using AI attractive even for employees. Do you really think you’d wanna join such a company? No way.
This is the labor theory of value; consumers don't care if the code is hand-made, they want the cheap goods (software) that are the output.
Let's stop overvaluing human work. Sure, I don't want AI to write the entire codebase without I know what the fuck it did.
But AI is on an equal footing with an average dev.
The short version of the result is that we're completely copying the leaders in our market that have 100x our marketing budget because they're the only ones with documented strategies for AI to cheatsheet from, with no sense or irony or concern that perhaps their scale is a core part of their strategy.
It's not just institutional knowledge. We're suffering the death of the specialist. Now every generalist is pulling triggers with no sense of limitations.
What you don't see from most perspectives are the silent masses who simply don't engage, don't care about the discussion, and/or are too busy doing what they enjoy.
It has been a fairly painful experience for me to shift my thinking on this, but it's a much better mindset. I still care about many of the same code quality concerns I always have, but I'm thinking a lot more about why I care than I once did.
Also a confirmation to people who have the same inner thoughts and are ashamed to admit in public that they think the exact same thing.
I think we need such kind of posts to combat the influx of AI news.
If you're just writing code to fuck around or automate a small part of your life, whatever. But if you're making a big system or wanting other people to use your product, these things about how to make good software become more relevant.
I'm sick of having to use increasingly trash software at a consumer level, and concerned about the quality of software in dangerous things like cars, planes and medical systems.
With that in mind, writing bad code is bad.
Anyone could say the same about any post they don't agree with, doesn't seem very helpful.
That mindset has also deteriorated my working environment due to some coworkers buying into it.
So it's kind of nice to see some sanity checks that align with my beliefs too. I can share articles like this with my teammates. I can see that I'm not alone in thinking most LLM code is slop.
I think too junior devs NEED to see this. My team had a couple of promising juniors who are now completely brain rotted by AI and can't even write "Hello World" without consulting Claude anymore.
> The proficient developers, the experts, rely on their intuition built with sweat and tears, working long hours trying to debug and fix production issues, swearing to never again be so foolish as to repeat past mistakes. It’s the kind of intuition that can’t really be made into a list of rigid rules, because everything is context-dependent. Experts are incompatible with the same rules and recipes that make beginners more productive. Experts don’t follow the rules, they make the rules.
.... because I have found the same thing - that there's nobody more zealous about some paradigm than those who are recently converted to it and who haven't come to find that everything has its trade-offs. Design is always about evaluating the trade-offs and seeing which ones most suit the given situation.
And, so what? Software as an engineering discipline has long lacked standardization and regulation to be on par with other engineering disciplines, and the fact that code and all its surrounding ecosystems are not "visibile" or "malleable" makes this extremely hard.
You can use terraform and yaml to define infrastructure that literally spins up machines _somewhere_ in the internet. With all its issues, bugs and associated consequences mostly being ignored.
I just don't understand the difficulty in KNOWING what needs to be done: NO LLM usage in university/grad/high schools, NO LLM usage in the first 3 years of your professional career.
Once the basics are solidly grasped, then they can use it at will.
The problem has never been about wisdom, knowledge or LLMs writing good, bad, maintainable or terrible code. It has always been about the skill level of people using it AND on the fact that people start off-loading basic things to these models that they wouldn't before.
If you have the knowledge and "suffered" through experience to learn the fundamentals, than not using LLMs becomes more deterimental than beneficial.
You just CAN NOT skip the trial by fire of learning and absorbing knowledge on your own. That's all.
I'm going to make my own prediction: this isn't going to happen
Just look at the growing gap in traffic accident rates between human and AI driven cars. Humans are losing.
I don't disagree with you, but now what? Seriously - if we accept humans are just generally losing to AI now, what's the right thing for us to do now?
I dunno. Lobotomy? Heroic amounts of debauchery?
Any suggestions?
"We're not going to wear Google Glass"
"We're not going to use Blockchain for every single transaction"
"We're not going to connect every single object and device we have to IoT"
https://archive.nytimes.com/www.nytimes.com/books/97/05/18/r...
And why are the people calling people Luddite some of the least intelligent people I meet, and seem to all. Be complete sheep fighting some psychological war om behlaf of their billionaire lords who own the machinery.
Not wanting to hand off all your labor to a machine does not make you a luddite, nor should it be acceptable to call people that because you dont know how to have a real conversation.
Pet peeve - luddites had never been against technology. They had been against using low paid inexperienced grunt workers to displace well paid experts.
See: https://www.smithsonianmag.com/history/what-the-luddites-rea...
Just to give a hot take, it's funny to look at his builtwith.com. As a developer you have a static site that depends on Cloudflare, Mailchimp, Postmark, Isso ...
Twenty years ago any self-respecting dev would have run the equivalent of all that themselves on their own metal. In 2026 elite neckbeard practice is write the "never reach mastery, because they no longer make choices, they no longer take responsibility" post, hit "publish" and it's magically deployed around the global internet for you. Like a child.
In the future we will see more and more companies proudly boasting their “NO-AI” policy as a competitive advantage. And they will be right.
Yes, a "NO-CLOUD" policy was already so popular, surely this will happen too.
https://builtwith.com/alexn.org
Just because it's bad for a human doesn't necessarily mean everything will fall apart - unless a human has to maintain it unaided.
Build the systems around the code and let the agents do their work.
The latter often doesn't even require looking at the code, you can usually feel it just by using the software. From my experience, all software primarily written by AI is full of little bugs and inconsistencies that reflect bad code architecture (such as two very similar pieces of functionality in two different places behaving in wildly different ways, due to the AI being unaware of the first when asked to implement the second and writing the code twice)
I've vibecoded loads of AI apps for myself and almost none of them are still in use. Not because I didn't really want them or they didn't work, but because the more I used them the dirtier I felt, as though I could feel the bad decisions and the bugs underneath just by interacting with it.
dumbest take ever. AI is here and not going away, any company that does so will not survive or will be a niche thing for hippies.