I also notice this in PRs from of others. Yes, in a shallow sense, it solved the problem that they had in their prompt. But while doing it, their LLMs made very suboptimal solutions that are hard to maintain long-term.
So, I have increasingly resorted to smaller open source models or 'weaker' models like Claude 4.5 or 4.6, since they are often much better for LLM-assisted programming, where you have the implementation steps in your head (you know what the implementation should look like) and work towards the solution with the model step by step. Working like that is extremely powerful and much faster than programming by hand (an LLM memoizes/searches the APIs faster/better and can more quickly write the boilerplate that programming sometimes also requires. I feel like a can be a few times faster than my old self, while not leaving the code base behind in a mess, and not atrophying knowledge, since I still do most of the thinking, design, etc.
Most people don't find this to happen because the size of projects and the granularity of the expectations are wildly different.
My usage might be much simpler than what you do, but it went from "but I gave a list of things to do, you only did 5 of them" - "okay, here are the other 7, oh btw, I skipped the verification rule because nobody has time for that" to good compliance, the orchestrator starts the sub agents, tells them exactly one thing to do, and makes sure they've done it afterwards.
makes sense on planning as well, I think. spend your tokens on the best model to explore the problem and design the solution, but the implementation and testing/verification cycles don't need the strongest model you can get.
From a conversation yesterday:
> You're right, and it's the same miss again. I wrote the three memory tiers into DESIGN.md — ring buffer for current values, constfold+XOR block history at ~76 MB/hour, zstd to disk — and then built none of them. The collector never decodes a frame; it copies bytes socket→file and converts on close. There is no in-memory session, so there is nothing for a live view to read.
> Worse, I justified that in a code comment: "received straight to disk without decoding... keeps the receive path cheap." That was me optimising away a stated requirement and writing a rationale for it.
So despite a lot of discussion and planning, it ignored all of it without communicating back that it was doing so until I peered into what it had done.
I've been thinking of doing the same since the models will often take design decisions that I am not a fan of, or make changes in a way that is easily understood by me, which leads to tech debt and being unable to anticipate what it will take to deliver a certain feature (e.g. whether we should build on top or build from a clean slate, etc.)
I've been crafting beautiful code for almost 20 years - that itch is scratched. Now I just want to be productive and build cool stuff. AI is helping me make a better end-product in a fraction of the time. As long as codex understands what's going on in the ball of spaghetti, there's no problem. Sure - if I was working in enterprise then this is no good. But for personal projects and small indie shops, it's fine.
AI is just a new layer on top of the stack now. In the same way high-level languages are a layer on top of writing machine code manually. You just need to let go.
Another layer, yes, but NOT "in the same way." It is a new, different kind of layer. The other layers were deterministic, not probabilistic.
LLMs are quite interesting in that regard because you have a lot of levers to influence the shape of the distribution; the ways are different for each model, so it’s a very experimental science, but applying the scientific method is exactly how you get good results.
A compiler is semantically deterministic. It has a spec. Give it an input and you can know exactly what the output will do. And if there's edge cases where behaviour is undefined, thats also well known apriori.
(And yes, to get ahead of the nitpickers, I know the specific sequence of bytes the compiler will emit can vary (hence the difficulty of reproducible builds), hence why I said "semantically").
LLMs do not share this property. At all. I mean not even close
They are a completely new and different class of tool. They are not just a step up the abstraction layer. They're not compilers for English. To call them that is to fundamentally not grok what a compiler is or does.
That doesn't make them bad. It just makes that analogy, and any conclusions you might draw from it, bad.
I can see this struggle it in my organization as well, in the last year there was a big push to adopt AI everywhere and tons of initiatives to automate processes and produce code and text and other artefacts with LLMs. Now it seems the pendulum is swinging back a little as people see that all of the LLM generated stuff shows all of these subtle quality degradations, and people get tired of managing it as they are suddenly confronted with tons of additional information they need to manage.
Given that models are still evolving and becoming better at a rapid pace I think that we will solve most of these issues in the near future, but for now I don't think the age of hand crafted code is over yet.
I have been thinking about that machine code analogy before as well, I don't think it really holds. Machine code is written in an automated way but following mostly deterministic rules that have been crafted through decades of manual optimizations and testing. AI generated code has nowhere near this level of scrutiny, testing and optimization behind itself. The fault rate of compilers and optimizers is incredibly small (I can't find any numbers but it must be on the order of ppm or ppb), AI generated code has fault rates that are even in the best case on the order of 99-99.99 % maybe (i.e. between one error per hundred lines and one error per ten thousand lines in the best case), try building anything complex using such a fault rate without manual correction and review. It's impossible. I have done it, I dabbled with writing a compiler, a database and even a simple web framework from first principles. I didn't get far, even though I had good mental models of these things and I carefully wrote RFCs and documents for the LLM, specified test cases etc... If you're lucky it will regurgitate some existing code or follow documented guidelines, but when you're on new territory these models won't be able to produce anything good. I would really like to see a single example of someone vibe coding a high quality library or tool with LLMs, I haven't found anything and no one can point me to a complex codebase (say 10,000 lines or more) that was generated using high level prompts that looks decent and doesn't have multiple glaring issues that appear when looking at it in detail.
But the "letting go" point is I think about what people enjoy. Personally, I enjoy code. I've had jobs where I really enjoyed what I was doing because they gave me the opportunity to write interesting code. The end product wasn't interesting to me. I had a great job building tools for companies that build a very popular consumer product that I've never owned or been interested in. So the software we were building to assist in creating those products wasn't interesting to me in terms of what it is, but the job was motivating and interesting because of the technical problems I got to solve.
I think that's one of the big divides we're seeing in comments now. There are people who want to build things for the sake of the final product. They're happy because LLMs speed that up by a lot, at least initially. Then there are people who enjoy the process and craft of writing code. For them it's hard to let go of manual coding because that's the enjoyable part of the work.
> They're happy because LLMs speed that up by a lot, at least initially. Then there are people who enjoy the process and craft of writing code. For them it's hard to let go of manual coding because that's the enjoyable part of the work.
coding enjoyer here, but for me i want it to be an assistant to speed up what im doing (in the "bicycle for the mind" kind of way) or a problem solver for when i got really stuck; i feel like "agentic" workflows miss a lot of this cause its like talking to someone through slack... thats not enjoyable and also too far removed from the actual code/problem im working on; i think there is an opportunity for much better ux here...It is hard to me to fathom why anyone would find those limits acceptable, especially with years of experience writing code. It seems something like an experienced painter giving up on their art to doodle with crayons, and maybe that could be cathartic. Maybe you get experience with other aspects of your craft.
I work with a lot of AI code, and it’s not any worse than what big teams were already producing.
A small team of 2-3 really good humans is in a whole different league, but that has always been a very rare case.
I am saying this because I haven’t seen latest gen AI unable to implement something no matter how convoluted the code base. On the other hand, people easily get overwhelmed. These days I have more faith in Claude implementing something for me than for a person, including me , doing it thoroughly enough on unfamiliar code bases (and for any big enough code base, large swathes of it will be unfamiliar to any individual developer).
It's true that AI has an incredible ability to take in a massive amount of information and do useful work with it. But it has no direct ability to exercise judgment, and with each iteration of reasoning and applied changes, its ability to hold the original intent degrades very differently from a human intelligence.
Say you're working on a project, and it does an ok job like what the GP says. Each step looks fine, but put together it looks off. You give it some instructions, and then you let it work.
But what are you doing in the freed up time? You context switch into another project and give that some instructions.
Now you have two or three or ten projects that superficially look fine, but you yourself have context switched so much you don't have the overview anymore of why exactly each project needs fixing.
Along that same use, I've never touched any cloud service for code gen, and looked at docs or arena LLM. From my POV, it seems like a lot of people arn't even paying attention to the LLMs output when they generate their projects. So I don't find it hard to believe there's seemingly intelligent people being swindled by LLMs, big or small, because they do make bizarre assumptions and go into code edits that don't make sense even when they appeared to be running.
Then there's people that say they're in the ballpark of 500k context before they even get to work on something where these local models struggle when they get up to 100k both from generating and keeping scope on what they're doing. This is managed by opencode plugin dynamic-context-pruning that has the LLM rewrite sections of the context into summaries, while keeping the working context. It works pretty wel where a session then gets into ~500k where the working increments from 30k-80k of useful life.
So, I think we all underestimate how easily people can be swindled into poor development behaviors and _one_ reason, is the large cloud models just dump way more changes along a scope and can easily poison a whole chain of a feature or app implementation.
So the OP above who got 3 months into an app they think is hitting a dead end is recognizable as having one idea in their head of what's being built and the LLM building something subtly different because they're inevitably only reviewing the things that confirm the specs in their head and don't look for the edge cases that break it.
I'm curious and hear a lot about agentic programming, yet hear little about the cognitive load from it. Having more code generated doesn't make you more productive, in fact, I would argue the contrary is the case. There's more code to understand, more code to discard, an extra decision (which result do I pick? How do I split the workload through my agents), which is not at all how we operate (I. E context switching, limited by our cognitive energy, working task by task).
I really don't buy the whole agentic thing. The only reasonable use case I can see for it, is to scaffold multiple projects at the same time.
Anytime I tried spec driven development, it produced total garbage, the problem is that the model usually swings too far, if they write unnecessary complexity, a nag about it and you risk it code golfing, this problem across 100 lines of specs and you're guaranteed it will swing too far on some segments you just wanted X slightly more than Y (usually for me it was reliability dropped for better readability since # users = # developers = 1)
Another thing I dropped is steering implementation design too early, start with the goal and nag in the direction you want, it works well for me but might not work well for big complex codebases.
For now I love LLM coding but I'm sure my opinion will change if I have to review code from a developer that does the 1 prompt = 1 PR without looking at the code jutsu.
Before you throw away, I propose having an LLM write a comprehensive spec from your code, then a clean-room implementation. It's an interesting experiment, if nothing else.
I think this doesn't mean AI is useless (it's not), it's just that we have to think harder about the requirements and end-stage verification and have less trust in the process to result into valuable outcome.
A CICD flow had broken. It was not giving the URL of a deployed service.
A team member used AI to fix it without reading the code and AI added 55 lines of code
When I noticed the issue, I modified the code by removing 5 extra lines and used the right command to get the url
Earlier I was doing a grep and matching the output against .com to get the url Recently I noticed that the utility provided a --format json option that was much cleaner!
My first aim is to get to what feels like v1 feature-completeness. My approach is building out the feature, dogfooding it for a few days, work out the bits I don’t like, adjusting, and then rinse and repeating.
I don’t like the finer UI details (the colours it’s chosen for instance), nor do I fully jive with how it’s implemented the business logic (it’s verbose and needlessly fancy in some places) but - that’s not what I’m concerned about now. I’m concerned about whether my wife and I find the tool useful. (We do, huzzah).
I’m now looking forward to sitting down and redesigning the finer details of the UI to my taste, and then, having established pretty solidly how the backend is going to need to work, how I would do it, and then crack on and do a rewrite from the ground up so that I can maintain/extend it more effectively going forward.
Which is all to say, I find Claude and it’s kin are excellent for prototyping (answering questions, giving someone something to play with), and for uncovering/discovering the requirements of a project which make it then easier to do “properly” if you feel it hasn’t done a good job already.
Everyone will have their own approach of course, but I’ve found it helpful to take this one in this case.
AIs greatest strength is still throwaway code.
The experiment was: given existing Experience section of Senior Software Engineer CV (manually and carefully written), write 2-4 lines of high pitch About [me].
gpt-sol-xhigh just could not do it, making a complete AI slop mess.
It became substantially better when I asked to get a sample of real Senior/Principal engineers CVs, that it would be able to connect with meaningful online presence/contributions of their authors, and draw ideas from that.
Nevertheless, the remaining issues were critical, with their classes spanning:
- word for word repetition;
- tautology (phrases mapping to the same semantic entity);
- category mistakes (combining apples with oranges);
- faulty composition of generalised and concrete terms.
Before throwing it away I decided to give it a try and asked for strict prompt following, setting low logical errors threshold, and eventually providing a formal proof that it complied.
It took spaCy, doing NER and dependency parsing; then I suggested adding stanza for constituency parsing.
After slapping together the artefacts of analysis and thinking a bit, it produced great phrase (to my taste).
-
Then when I asked to apply the framework and improve bullet points in some experience block, it did 2 of 4 well, then miserably broke down; I’m not sure if it’s harness issue (codex) or fundamental model restriction.
-
So no, without substantial investment in steering, SOTA AI doesn’t perform even remotely close to a human, in complex reasoning.
So I suppose which is it? Is AI going to replace us all, or it's not even capable of writing basic code?
I've never seen a topic so divisive where people's experiences differ in such magnitudes.
I suppose the biggest thing drawing this distinction is that on one side, you have AI releasing features which is all the business cares about. On the other side you have it generating slop, which is all engineering ever cares about.
I think in this battle, executives are going to eventually win. They had been looking for a way to crush the engineering department's value for years and AI seems to be their golden ticket.
The pesky dev cost center can finally shrink and they don't have to bother paying them six figures thanks to LLMs..
“Any organization, cleanup or consolidation needed?”
That would also make a great description for human societies, wouldn't it?
Actually, after second thought, actually LLMs at least give the surface level impression, which might not be exactly the case for humanity at the moment.
Ok, sarcasm apart, I'm fine with LLM at the moment as a technology. How we use it, what impact it has on society is certainly more of a concern than the technology itself. Compared to weapons, at least they're not fundamentally designed specifically to harm and threat.
The funny thing with LLM’s is that with a sufficient sized code base they pretty much will loop forever if you tell them to find and fix issues, making new ones as they fix old ones.
I just hope my bank doesn’t go Claude code all the way any time soon.
This is not meant to offend, but at this point I usually highly suspect there to be some more or less obvious flaw in people's LLM usage or even understanding of how they work when they report results like yours.
Happy to hear more details and be proven wrong, however.
I think a lot of experienced programmers, who have adopted LLMs early on, have the same finding: yes, LLMs give a great productivity boost. No, you cannot let agents completely wild without plenty of human supervision, because it will lead to a big ball of mud and atrophy knowledge of humans. I think these are relevant data points and they should be taken into account during the adoption of LLMs.
This type of LLM-maximalist thinking is thoroughly anti-scientific, they want to throw away data points that are not in line with the hypothesis they want to see confirmed at all cost.
ps: since when was complexity ever a good defense for why your codebase is difficult to work in?
I get that people without this mental baggage will adopt LLMs more easily as they do not care about any of these and they are often not able to perceive quality. And maybe quality is something that doesn't even exist and doesn't matter much, in the end people don't care how the sausage is made and what is inside if it tastes good and nourishes them. It surprises me though how fast most "engineers" throw away their engineering principles when using these systems. So I could also say mean things like maybe these people weren't good engineers to begin with. I guess the divide is more between people that care about the underlying principles and quality of their work vs. people that care about being done and having the desired effect on the outside world through their work. For software that's more acceptable than in other engineering disciplines I guess, people won't get harmed (much) if your vibe coded SaaS app crashes or leaks your whole user database. Trust into vibe-coded software seems to be higher than I think is warranted though, which makes sense as the companies pour trillions of USD into marketing and getting people hooked on these systems. Feels a bit like the whole crypto bubble, LLM absolutists aren't that different from crypto bros in 2015 that were certain traditional finance was doomed and in five years our entire life would play out on the blockchain. I don't think it's entirely comparable though as LLMs have tons of real-world use cases. And I think it's not surprising that people have such strong opinions on them, there were similar discussions about Rust or frontend frameworks, seems in tech there are just types of people that discover something new and immediately think it will solve all of their issues and that anyone who has a different experience must be wrong, even though they are only seeing a tiny part of the whole problem space. So, glad people get value out of LLMs and I do too, but I don't get how one can use models and not see these quality issues.
Maybe one point regarding quality, even for small scripts that I write using LLMs e.g. for data analysis I have to be very careful as they will often create subtle mistakes that ruin the whole analysis. Things that are not per se wrong as the script runs and produces the desired output (which the systems are optimized and trained for, i.e. they know how to create a script that works and kind of corresponds to the prompt), but in disciplines like data science where you need to think carefully about every step of an analysis LLMs are quite dangerous as they produce convincing looking results that seem correct at every stage but are completely wrong. The only way to get that right (in my experience) is to go really slowly testing each step individually with known good inputs and outputs, giving the LLM that as a harness to work in.
I have been looking at LLM produced artefacts for a while now especially in data science and there are very cases where the models actually produced something entirely correct, at least when it's more complex than averaging some numbers or other simple things. The same goes for writing, superficially it looks good but there are often subtle inconsistencies that the model just doesn't see and that are hard to spot. And again, some people will just look at that and think "that's fine!" because they just can't see the quality issues or they don't care about them, but that doesn't make these issues disappear...
Think about it statistically, the benchmarks say clearly these models produce correct code in maybe 90-95 % of cases for most complex questions. That sounds high but given that a real-world system can consist of e.g. 100 such individual components then even a 99 % correctness rate at the level of an individual component gives you only a 36 % correctness rate for the entire system! That's also true for papers, presentations and anything else. Again, most people won't even understand this, for them something that looks correct and works is good enough.
if this is how you write to LLMs, I can easily see why you aren’t more productive over all from using them
A colleague of mine had the observation that the problem we're seeing is a strong tendency to produce solutions which add extra, undesirable connections in the code, resulting in inordinately complex API boundaries which are hard to properly disentangle.
That's all fixable with enough effort, but it's hard to ignore that experience when somebody comes along and tells you that vibe coding really does suffice by itself, and you can just point a good model and harness at a ticket and a codebase and let it rip.
I prompt LLMs by writing design specs and iterate on them first, then let it implement them step by step, checking the results after each step. That works fine for simpler changes where I use the LLM to write code that I have mostly worked out in my head, it always goes wrong once I try to do that with larger features. I have tried a lot of different things like writing extensive RFCs and design docs for the whole codebase, building harnesses and evaluation loops to ensure we stick to specific paradigms in the codebases but the LLMs still deviate from that in sublte ways and spuriously introduce duplication, wrong abstractions or simple hacks. That said my codebases are quite complex, it's not run of the mill CRUD software, I suspect these LLMs would do much better on these. That's probably why other people report large success using AI based development, 90 % of apps out there are just plain RoR or Django backends, React or Next.js frontend or Android apps, and they are already built following strict cookie cutter recipes, LLMs have no trouble following these. My work is e.g. on novel parser generators, graph data persistence layers, format-preserving pseudonymization and personal information detection in unstructured data so there's really nothing that you can base the software design on apart from general principles, I suppose that is why the models struggle so much.
There was a discussion here explaining the attention mechanism of the larger models and why they are not good at using their full context length, that was quite enlightening to me as it explained a lot of the behavior I saw on more complex changes, so I think one mistake I made was to have too long conversations with too much context (even though "on paper" the context length was fine and well within limits of the given model), I guess I need more careful conversation management and in general reduce the level of abstraction I'm working at with an LLM. For me at least they're not yet good enough to work at the business or concept level of abstraction, but they are capable of speeding up delivery of finished architectural designs.
Maybe it's also a perception problem. A lot of people will just look at their AI generated software and check that it does what it's supposed to do on the happy path and they will be fine with that, calling it a day (and to be honest I did that too for projects with tight deadlines, though it feels irresponsible). Especially juniors or people without programming background don't care about how the code looks that the AI wrote, I only see these issues because I have 10+ years of experience working by hand in large codebases and I have developed a "taste" for what good code is supposed to look like for me. That might explain why people are feeling so radically different about LLMs, if you don't have all of that intrinsic baggage that senior level developers have amassed over their careers then AI generated code will always look good to you. And maybe they are right, could be that in 10 years no one looks at any code anymore and we just care about tests and making sure the behaviour is correct. To be honest I never looked at Assembly code in the last 10 years and I don't care how my compiler unrolls my loops (mostly) as it's a solved problem for me, maybe it will be similar with the higher level code, we just move the abstraction that we work at to a higher level. But I still feel that we don't have the right tools for working at this higher level yet.
Humans, and especially good developers, naturally create really good mental models for how to think about complex systems. We have to. That's ultimately how we build complex systems.
Refactoring (when it's not simply upgrading packages or changing languages) typically happens because we realise there's a better way to model the system we're building and we want our code to reflect the model in our minds.
AIs today simply don't do this. They write code that solves a specific problem, and while they do this well, they don't seem to create well defined and well reasoned models about how to think about complex systems. Or maybe they do, but the AI definitely doesn't say, "hey, I think what you're building is more like x than y, so I want to spend 20 minutes of refactoring your codebase".
I guess to use an analogy, imagine trying to tell someone how to build a bike who has never heard of a bike before, and therefore has no mental model of what a bike is. You'd probably start by telling them to put two wheels on a frame, then to add a seat on top, then to a add some pedals and attachment them to the wheel with a chain... At the end of this process that person might create something bike-like, and it might kinda do the thing you want, but it would likely be very different from the bike someone would build if they had a very clear mental model of what a bike is.
I suspect this is why current AIs rapidly hit a limit after the prototyping stage. I don't think task duration is the right way to think about this limitation. I suspect it's more of a proxy for how complex a task can become before the AI isn't able to create a deep enough model of the problem it's trying to solve, so begins to hit complexity limits and just spits out spaghetti code.
AIs are getting better quick though. I think they'll get there soon, but people are creating a lot of mess in their codebases in the mean time.
My stack for this project is React Native and Supabase which I've got a good amount of experience using.
Which LLM are you using?
After two years of investment LLMs can write code mostly on their own due to a combination of proper architecture (you can't really "cheat it"), documentation, instructions and human checks.
On my personal projects, it's still a super good match for building prototypes, but at some point if you don't write it your own you lose the plot. So you're bound to write it your own before handing it off to LLMs.
In any case there are no black or white solutions, and there are aspects that make me think that the more capable the less fit it is for serious projects at some point.
Nah that's old meta, you're supposed to generate candidate issues with an agent swarm running at high temperature. It's the only way to fly!
I've used 5.6 Sol on 1M context and max thinking, and also Opus 5 on max context and thinking, and I agree with that comment. Now what? Does this information matter or will you just say we must be doing something wrong?
The AI we have today consists of a generic base model whose software expertise comes from specific training designed to impart specific skills. We don't have AGI - we have a collection of narrow skills that kinda looks like general until you start poking it.
The core software skill today's AI has is coding, which is the low hanging fruit. There is tons of code available to train on, and RLVR for coding is easy - does the code compile and work as intended.
There is also plenty of training data available for some of the other skills you may want the AI to have.
For example, if you want the AI to have some human taste in designing web pages, then there is plenty of training data for that, and it's easy to hire humans to do A/B testing and express their preferences.
You want to the AI to be an expert hacker like Mythos? Just put it in a playground where it can build and test it's exploits and let it learn from that via RL - no problem since it's generating it's own training data.
So, for some of the "collection of narrow skills", such as coding, that you want your wannabe-developer AI to have, training data is no problem. Where it IS a problem is for architecture/design and reasoning about large systems, since:
a) The majority of larger systems, where architecture and design starts to be an issue, are private commercial software. Training documentation is not available.
b) Even for open source projects, designers just don't tend to blog their thought processes - they just silently apply their expertise, and even where design documents exist they tend to document what was produced not WHY (the reasoning data that might let an AI learn to design itself).
c) A lot of the value of good architecture/design is not just about taking user/business requirements (or the vibe coders' request!) and mapping that into something that works, but rather about understanding the future consequences of design decisions - there will always be many ways of doing something, so what criteria do you use to pick one over the other? Which choices will be easy to debug both in development and production, which will be easy to modify for anticipated future requirements, etc. These also tend to be things that are not documented - no training data available - but are rather just the accumulated expertise of the battle-hardened developer.
Of course, an LLM will have a go at anything, but if you want an AI to be a human-equivalent developer, not just a coder, then you need more than just training data for coding - you need training data for each of the individual developer skills you want the AI to have, and training data for some of these, such as for reasoning-based design/architecture is in extremely limited supply.
I notice the same pattern when using LLMs to write longer text like reports or scientific papers, individually each section they write makes sense but overall the whole document feels off in a hard to describe way. I think it's where you can see the difference between human intelligence and whatever it is LLMs have, it's not the same thing. We are much slower and less able on the small scale but seems we can do some higher level reasoning that is still impossible for LLMs. That always becomes clear when you point an LLM at an obvious flaw it produced and it goes "You are absolutely right!" as if it's obvious in hindsight but when running multiple "Please look for issues" iterations it would never have spotted the issue by itself.
That said I think it will be absolutely fine writing a simple CRUD app for you e.g. using some popular JS framework, Tailwind for styling and a regular ORM, there's more than enough training data available for these things. But then again such software could be purchased before already e.g. as a SaaS template, I don't think LLMs are so revolutionary here, they just replace the template (but to be honest a good hand-written SaaS boilerplate is probably still better than a vibe coded one).