AI usage generates a fragile codebase (evanxmerz.com)

290 pointsby plun912 hours ago356 comments

basilgohar 3 hours ago

I think looking at AI usage for code and development from an engineering perspective is going to be an exercise in frustration. I'm a software engineer for 20+ years and I've pivoted to using AI for my code 100%. I find it invaluable about the only way to stay relevant and run a business nowadays. Happy for anyone to disagree with me, because I don't want to be right for the first time in my life.

That said, my experience tells me that enterprise and business coding has rarely ever been about stable or robust codebases. We engineers and a fraction of competent engineering managers and a vanishing small number of directors fought against business interests to ensure quality was priority when it came to code, but it was always an uphill battle and we were oftentimes disciplined for spending too much time on quality and design.

A timed cadence of release is anathema to quality code because you can't timebox it.

So, AI is just the extension of that. Do I try to ensure my agents design code I would consider to be good? Yes, absolutely! But I've fully outsourced it and I find it's also fully capable of fixing it's own mistakes. I've gone far beyond anything I individually or even with a team was ever capable of with AI assistance, so I believe I just have to apply my experience and skills into management and architecture rather than actual lines of code.

Time only will tell how this plays out.

Wallaahu aʿlam.

mvcosta91 3 hours ago

Seconding that.

I still code by hand on some personal projects and for CodeCrafters to keep myself somewhat sharp, but when it comes to paid work, my soul is devoted to Orca and running multiple Claude sessions in parallel.

My partners are happy.

vorticalbox 3 hours ago

I would love to hand code way more but truth is when you have a small team of developers and they are all in on AI for coding then it’s actually hard to hand code. At a certain point the project ends up being only workable by AIs which is kinda sad. Coding is fun.

ratelimitsteve 3 hours ago

it's about dynamic tension. we as engineers should want to do things the right way even if it means spending infinite money and never releasing. the corporate side should want to do things the wrong way because it's cheap and gets to market faster. we should argue with one another til we're blue in the face about it every day, and the actual thing that gets delivered should exist at that perfect little goldilocks zone in the middle where both sides hate it and blame the other for its shortcomings.

rapind 3 hours ago

Widespread misconception. There are plenty of product managers / executives who also want quality and plenty of engineers who want to ship. I'd wager most engineers would rather ship and get their creation in front of users than spend eternity perfecting it.

ratelimitsteve 3 hours ago

of course we can never speak of an entire population in absolutes, only tendencies, but if you're going to argue against the tendency i'd like to see a bit more depth to the argument than "I'd wager". I also don't think my overall point suffers at all if you substitute "engineers" with "some people" and "corporate side" with "other people", so i'm going to politely request that we do that going forward so we can address the substance of the discussion rather than the makeup of the two sides of it.

rubikscube09 3 hours ago

code is disposable now.

diegolas 3 hours ago

_some_ code is disposable, but robust, proven solutions that fit the case of massive userbases will keep existing and get maintained. at a certain point it makes no sense to rebuild everything each time.

bunderbunder 2 hours ago

I’d argue that code was always disposable. What was valuable was always the specifications and test cases, which more directly represent useful knowledge with lasting business utility.

The problem is that oftentimes code is the only real record of the system design and specification. That creates problems because it’s harder to replace obsolete code and modules. You can try to reverse engineer a spec from current behavior, but that always leaves uncertainty about what behavior is intentional and what behavior is accidental and changeable, and because when the system behaves in surprising ways there’s no clear source of truth on if it was supposed to do that.

What I see with LLM coding is that it makes it easy for people to “at of one” a project, and armies of one tend to produce few artifacts other than the code itself. This, ironically, makes code less disposable by eliminating any sort of thoughtful, detailed record of design intent. The code itself becomes the only record, so modifying or replacing the code needs to either replicate the original code as close as possible, warts and all, or take extra care in reverse engineering and analyzing the original code to try and understand if any simplifying changes can safely be made. Which doesn’t actually happen very often because it’s a lot of generally unenjoyable work.

Which, in turn, is why LLM codebases tend to accumulate bloat at a higher rate.

Slartie 2 hours ago

Code has an invisible attribute "confidence" associated with it. All code has it. So-called "battle-tested" codebases have a high value, newly-written stuff starts at low values, and the only two ways of increasing it are 1) rigorous testing and 2) actual usage in production scenarios at scale.

AI can generate "confidence" only in very limited amounts. It can help with testing, but that becomes very expensive and hard once we leave the realm of tests that can be simply written with code, like unit tests. At some point, the only way to increase the confidence in a codebase is actual testing with actual, real user interaction. And once that's maxed out, the only way to further generate more confidence is to get it into production and let real users (not test users, production users) find the remaining bugs no tester and no AI ever managed to hit.

This is the sole reason why AI doesn't make code "disposable" - yes, it can rewrite any codebase far more quickly than any human, but that new code will start at low confidence values - AI cannot transfer the confidence that the old codebase achieved simply due to being smashed against reality in production use to the new code it writes.

This is also the reason why it still makes sense to maintain libraries, even though AI could not just theoretically, but also practically write a lot of functionality from scratch that we usually import into projects via open-source libraries: the newly written stuff doesn't come with the same confidence as the already-battle-tested library does.

hand2note 3 hours ago

In my experience (15+ years), the biggest trade-off is a lack of technical innovation. Current AI is unable to innovate. Humans can, but doing so requires spending extended periods deep in the code and building a solid mental model of the system.

deadbabe 3 hours ago

Most innovation is pointless, because a lot of it revolves around just making code easier to maintain and understand for humans, it’s not like you’re innovating radical new algorithms for a CRUD app or making performance modifications that people will actually notice.

But since AI writes everything anyway, innovations that improve “developer experience” are pointless, and all the other low hanging fruit has been taken.

zeroonetwothree 2 hours ago

It seems like we have more innovation around "developer(=agent) experience" than ever. Look at all the people building various agent control plane systems, containers, isolation, issue tracking, project management etc.

Quarrelsome an hour ago

innovation is about being able to reach for better solutions to problems where previously it would "take too long". e.g. DSLs.

stackbutterflow an hour ago

What I wonder then is...is it going to be the final word on the evolution of software development? AI has been trained on practices that were developed by people, by professionals and amateurs, by discussions on discussion boards, at tech events, through written books and then disseminated across open source projects. If no one writes code anymore then how to write and build software projects will never evolve beyond the 2022 state of affairs.

icantevenhold 3 hours ago

Just like GPs argument about quality; the majority of businesses doesnt need innovation and often even fights it.

I’ve been in the industry for a much shorter period than both of you; but the companies I worked for didnt really innovate anything.

zeroonetwothree 2 hours ago

Businesses in a competitive market need some kind of innovation to do better than their competition. This doesn't have to be software of course, but often software does play some part in it. And it doesn't mean it's their in-house software, but someone has to develop it after all.

pixl97 an hour ago

>the biggest trade-off is a lack of technical innovation.

Most businesses and developers shouldn't be innovating, but instead providing secure solutions to their clients. The last 30 years of "innovation" has given us countless security bugs.

intended 3 hours ago

I suspect the code being generated ends up falling into a local maxima, and only much later will the cost of extracting be apparent.

Right now, management has velocity so it’s happy.

Earlier they got the code understanding as a default, and it was never something that made a difference to their metrics.

The success of the LLM Code model then relies entirely on the ability of tech debt to be cheaper to solve in the future.

swat535 an hour ago

What you're missing in your calculus is that by the time the local maxima is reached, the business has either pivoted to something else or is throwing money at the problem to make it go away.

My biggest issue with AI is not really technical debt, it's engineers losing sight of the system's internal working. This can make it difficult to reason about the code, fix bugs or security issues.

I just don't think we have the tools right now for engineers to accept software becoming a black box.

flatline 3 hours ago

> A timed cadence of release is anathema to quality code because you can't timebox it.

The promise of Agile is that you can release quality code on a regular tempo. The features may not yet be fully polished but you can drive small incremental releases with some set of correct+desired behavior and focus on improvements to critical areas and robustness in longer arcs as long as the core does the thing you really need it to do. Sometimes you have to come up with an equally incremental path towards the Big Refactor you want, setting up dominoes cycle after cycle till you can knock them down at once, but it can and has been done. You still need to prioritize quality and may have to be political about how you do it, and you still need management buy-in because you will not move as fast as a team throwing things against the wall -- but you'll also never actually hit a wall, or if you do it will be more of a speed bump, which is the selling point.

Edit this really has nothing to do with AI. This can be done 100% by hand, 100% by massively parallel agentic swarms, or anywhere in between. It's about process, planning, and the people (yes exclusively people) involved.

dominotw 2 hours ago

oh classic "its better than humans that suck". Truth is that enterprise software development is mostly jobs program for the middle class. Software jobs building random internal tools are obviously bullshit jobs.

Using AI to generate something that had no value in first place is just silly.

rixed 2 hours ago

Agreed 100%, especially with the sentiment that a lot of people have been telling themselves stories about the importance of quality in the industry (it was quite obvious, long before AI, that quality was not a concern unless marginaly in the rare cases where it mattered for competing. But quality for the sake of customers? No way, not now, not in the past, never.

But that's only valid in the industry though. Most of the software I'm using are free software, created by passionate people who used to care about quality because that's their name on the label, their reputation as an individual, their badge of honor, and also that's what makes us all feel good at the end of the day.

So, if I have few expectations from the quality of commercial software, I'm genuinely worried that open source authors would adopt AI generators too. Of course they will, I know I did. It's hard to resist. The speed gives you the fun you've lost writing good code your way.

Is code generation going to ruin the quality of open source software? I actually don't think so. I believe the benefits in terms of finding bugs (next postgres release will be the best when it lands!), conversions into better techs (finally, that old buggy python tool that's so convenient will be rewritten to rust or something), and we will have more new ideas, more people trying more things, being more ambitious etc.

Actually, it reminds me of when I transited from assembly to C, and even more from C to OCaml, for my personal projects: for a while, it was not fun! I was unhappy with the memory layout, with the GC, with the 31 bits integers, I could hear the bytes screaming at me: "come back and take care of us" and felt guilty. But, on the other hand, I was no longer typing kilometers of repetitive boilerplate, and had more time to think. Coding was no longuer typing at the keyboard, but more about thinking about designs and abstractions, and it felt both wrong to leave so much in the dark but also appealing to be able to think bigger.

And that's a bit of the same when driving an LLM: you have to spent much more time than usual designing, specifying, spelling out everything that matters; in one hand you feel that it would be faster to type the code yourself, but it's actually not true because you have an LLM to discuss the design with; whereas left to your own devices you would type and type for nights a design that you will revise several times over, rewriting most of everything several times. Now "coding" starts with a lengthy process of arguing with Claude until a good design is written down, recursively down to some good amount of details, until you can unleash the agents and voilà, you have it all done and working the next morning.

And there is some pleasure in that, too.

I'm worried for the users, for the workers, for the citizens, for myself, but not for the programmers part of us: machines will still be fun.

jdpigeon an hour ago

I think the second part of the blog post speaks to exactly how this will play out: more incidents, longer recovery times, and a poorer user experience. Overall, a more fragile and worse ecosystem of software (even if there's more software overall).

greenowl an hour ago

We fought for quality code mostly for selfish reasons. Because it sucked to work in a messy, fragile codebase.

But AI doesn't care. It can, and it will, happily churn through a messy codebase.

mostertoaster an hour ago

I agree. And while AI does better when there is less tech debt, at the same time paying down tech debt has gotten immensely cheaper.

I find myself desiring simplifying a codebase just because I still need to make so many decisions and the cognitive load of that has gone up with how much I can do in parallel and still keep track of.

sandeepkd 32 minutes ago

I think you are underestimating the spiral effect. Working with a documented and structured code makes it easier to understand and reason with even for LLMs. At the end of the day its working with patterns, grammar, trying to deduce and implement intent. Its possible where we enter the era of blackbox applications where no one knows the internal, and yet for the required inputs it provides the expected outputs. Every failure would re-trigger the evaluation of the whole application to accomodate that one failure in requirement.

sunaurus 18 minutes ago

> It can, and it will, happily churn through a messy codebase.

Do you have examples of where this actually worked for you? How large was the codebase, how long did you have agents generate the mess in it?

I ask because my experience is pretty different, even with Opus 5.5 and Astra - unleashing agents on a messy, vibe coded repo only seems to increase the mess. The agents just slow down more and more as they keep generating further mess, they make more and more incorrect assumptions based on bad code previous agents left behind, and I grow more disappointed in their capabilities every day.

Actually reviewing all agent output thoroughly is the only effective way I've personally found of working with agents. In order to ensure that every line of code they add is actually there for a good reason, and not organized in a way that future agents will miss it, or misinterpret it. It's the only way I can prevent them from producing worse results as the repo grows.

dasil003 an hour ago

The issue is there are multiple dimensions of quality, and people mean different things when they talk about it. Personally I think code quality for its own sake has always been a false flag that only gained currency because of skill moat of software development. On the other hand, user experience and fitness for purpose has always mattered a great deal, all the moreso when code is cheap, and this is definitely tied to code quality. The connection is even more stark when you talk about evolution of a system over time and data integrity. Here, the tacit assumptions, invariants and external interfaces chosen have a huge impact on the quality of the system and fitness for purpose over time. Every choice made affects the future, and it's very easy to box yourself in with bad choices, which ultimately depend on the offline human concerns that system is impacting.

I don't think any of this changes with AI, the only thing is that it's possible to handle much more incidental complexity. Ultimately I expect it to land on a similar equilibrium in terms of software quality that is gated by what the users of the system will tolerate. The more things change, the more they stay the same.

pizza234 an hour ago

> Time only will tell how this plays out.

I can imagine things like this happening very easily mid/long term: https://www.reddit.com/r/ClaudeCode/comments/1xq2n3t/a_year_....

As of 2026, I think LLMs still lack vision, and long term, tend to build a very scattered codebase, if maintainers don't pay a lot of attention.

LLMs do have cognitive limits as well!

geodel 22 minutes ago

Since AI agents are free and unlimited in a sense. Companies would be assigning a dedicated agent to a service full time that would keep a long term memory of project design, decisions, history and all. It'd be 10x cheaper and 10x faster (at least thats the thought). They will have their own titles Agent, Sr Agent, Principal Agent, Staff Agent and so on.

kvemkon 19 minutes ago

> reddit

Discussion (though topic has been flaged): https://news.ycombinator.com/item?id=50433079

behringer 6 minutes ago

Exactly what I'm seeing. The AI does even seem to do quality code, but you have to give it a heavy hand on the engineering side of it. Track small, test-driven changes, highly detailed documentation, a way to programmatically access the application and debugging features, high quality logging, design and implementation approvals, and frequent full audits. The quality it provides is heavily dependent on your quality as an engineer and how well you can keep it on track.

NewJazz 6 minutes ago

[delayed]

amelius 5 minutes ago

> Time only will tell how this plays out.

I can tell you: your management skills will be copied by the AI (thanks to your input!)

discreteevent 4 minutes ago

[delayed]

iagooar an hour ago

This reads like a piece of content written a year ago. Things have radically changed since then.

"AI writes shallow tests" - used to be true, not true anymore since Astra and Fable 5.1 / Opus 5.5.

"AI writes overly complex ccode" - only if you let it. A "do not overengineer it" or "Pareto, 80% result with 20% of effort" go a long long way.

"Reliance on AI decreases human understanding" - human understanding does not decrease, it just moves up a level or two. The same way you do not really understand how the Linux kernel works, nor do you know how assembly really works (with probably a bunch of exceptions here given this is the HN crowd!). And then there is hardware and physics too.

Understanding code, algorithms and data structures becomes a rarer need than it used to be.

"AI moves too quickly to maintain a high quality bar" - if you are stuck with the mantra that humans must review the code today, then obviously that statement becomes true. The problem is the assumption, not the observation. The good news about AI progressing fast is that coding AND reviewing get better and better with each release.

I know it is tough to let go. But as a software engineer, the sooner you do it, the quicker you will learn to yield a much, much more powerful weapon.

bbvvc an hour ago

Blah, blah. They told us the same in 2025, 2024, 2023: "This is fixed in the latest frontier model!!!"

bigwheels an hour ago

Coding agents have only been really working for about 12-18 months at most. It's easy to forget!

genidoi 41 minutes ago

And even in that short time range, the difference in capabilities 18 months versus 3 months ago is so massive that the expectation of what it means for them to 'work' has changed.

deepfriedbits 31 minutes ago

You honestly don't notice any improvements in terms of model capabilities?

forgetfreeman an hour ago

There have been spontaneous demonstrations amongst the workers voicing their joy and gratitude at our happy new way of life...

pizza234 an hour ago

> "AI writes overly complex ccode" - only if you let it. A "do not overengineer it" or "Pareto, 80% result with 20% of effort" go a long long way.

No doubt code quality increased substantially, but I've been wrestling overengineering for a long time, with both GPT/Claude - they will take any small chance to write excess code/documentation/specifications, anything - they seem to love reinventing the wheel. Heck, even prompts sent to subagents are walls of text.

Explicitly requiring simple solutions works for simple problems, but for more complex ones, complexity quickly creeps in. I even ask the alternative model to challenge the complexity of solution, but doesn't work really well.

There is a perverse incentive for AI companies to train models to be verbose, as it increases the tokens consumption.

techmunky an hour ago

And here we are back in 2024 prompt engineering stage of "you're not using it right." Wake me up when we get back to the loops and harnesses phase.

genidoi 43 minutes ago

Even 'technical debt' seems outdated... better models are coming that will fix the shortcomings of todays models.

peterbell_nyc 3 hours ago

I'm not sure that "AI generates..." articles are going to age well.

My immediate question would be what kind of adversarial reviews and deterministic gates did the author write to capture the dimensions of maintainability (lack of DRY, cyclomatic complexity, unclear naming, poorly architected flows, etc) that they cared about.

Don't get me wrong. When I was speeding along at 200 PRs a day (personal projects - I would not have inflicted them on others) I pretty quickly slopped together a big ball of mud, but as I'm re-generating my estate (a) the models are a little better but (b) I'm adding a lot more rigor around verification (correctness, performance, security, operational costs and maintainability). It's not an easy problem to solve, but it feels to me like an engineering endeavor, not speculative rocket science.

I fully understand that many AI generated code bases do indeed suffer from more incidents and less maintainability, but I think it's important to distinguish between what is common and what is possible as the fix for one is improving the rigor of your verification whereas the fix for the other would be either accepting crappy code or giving up on LLMs.

PaulMorel 2 hours ago

I'm the author of the article. I like your comment. I wanted to answer your question.

> "My immediate question would be what kind of adversarial reviews and deterministic gates did the author write to capture the dimensions of maintainability (lack of DRY, cyclomatic complexity, unclear naming, poorly architected flows, etc) that they cared about."

I wrote a tool at Meta to use AI to solve all those issues at scale. I don't necessarily think it really solves the problem, although I'm unsure about the reason (perhaps that's why they got rid of me!). There's something about codebase brittle-ness that isn't captured with those well-known, easy-to-catch quality issues. It could be related to architecture, design patterns, or something else that's a little larger than even the largest LLM context windows right now.

I think code validation is an interesting problem. It's like judging "rightness", which is an inherently subjective thing in all except the trivial cases.

zmmmmm an hour ago

> I don't necessarily think it really solves the problem, although I'm unsure about the reason

It would only be part of the answer but the most striking thing to me is that AI lacks the inherent sense of minimalism most humans have because creating code is so hard for them. It's so hard that a large part of our initial thinking will simply be to minimise the solution down to the least possible change from current state.

AI tools do have a little bit of this but I think it's heavily in conflict with more recent efforts to increase their persistence and the scope they can undertake and length they can work on something. All these have been optimised to hill climb coding benchmarks, but put against the benchmark of "are you sure you really need this at all? Couldn't we do it a simpler way? What if we just did it X way and then we only need to change 10 lines of code" - they are not even being tested against this metric.

killiancarroll an hour ago

I strongly agree with your sentiment here. Building both deterministic and non-deterministic verification processes are the way to build sustainable software projects rather than focusing on every line of code.

proc0 an hour ago

I've been saying this for a while. Programming has been unbelievably underestimated, almost as much as art (i.e. everyone thinks they are an artist when having opinions but rarely understand anything about it).

Programming is about engaging with high level mathematical abstractions.

To the extent AI can do this high level thinking, it is going to be able to do absolutely everything else humans can. Programming (when not underestimated) is as hard as the hardest cognitive task humans can do.

markasoftware an hour ago

I used to think this too, but AI capabilities over the last couple years prove it completely wrong. The skills are more specialized per domain than I thought (though there is still a lot in common between fields)

And further, surely you know some very strong programmers who are very bad at art, or math, or human relationships?

proc0 an hour ago

Every new model is only marginally better than the last, since last year, and I'm sure they are throwing all the compute at every new model, which means it's hit diminishing returns.

Even after all of the resources it takes, it still needs human guidance. At the very least the conclusion is that it's not doing what humans are doing. They might know all the programming languages and all kinds of domains but then it needs to be told basic things to not fail at simple prompts.

Part of the problem is that this is very hard to talk about and describe. It requires a long conversation, probably better in real-time, to explain exactly how AIs are not really living up to the hype, and are actually introducing long-term risk by using them.

monjerry 4 hours ago

Code quality is not an issue.....until it is. Everyone will be happy if things seem to be working and moving fast, it's only until you start seeing symptoms like not being able to change things without breaking existing features or even seeing an increase in tokens burned for reading complex code bases that you will start caring about code quality (which i imagine now people will just have AI try to fix it's own mess).

miguel-muniz 3 hours ago

There are plenty of decades old codebases written in old guard languages that were suffering the same fate pre-ai. What is old is new again.

We will just repeat the same pattern, have the latest and greatest frontier models rewrite the software just like how many desktop monoliths moved to React SPAs.

The real winners are frontier labs, we pay them to write black box software and we pay them to rewrite the software.

B4uler5 2 hours ago

Yeah, but why are we accepting that? Do we envision a scenario where code will be so black boxed that software creators will be pinching pennies and cutting corners so they can eek out a profit margin over the cost of development? It seems insane that we’ve willingly taken this route, the power when using LLMs is immense, but the power we’re giving up is all we had.

I saw a youtube comment a few months ago that has stuck in my head, can’t remember the exact wording but it was something along the lines of “I’ve never seen an industry so excited to cuck itself out of a good wage”.

proc0 an hour ago

This pattern is somewhat self-inflicted. There's very few reasons for software to change, IF it is properly developed. A reasonable life span should be in the order of decades, not years, or I bet now with AI it will be months. Do we really want a constantly changing software landscape that requires unlimited Internet connectivity to function? THat seems like such a waste of electricity and bandwidth, but as you say that has been the norm.

proc0 2 hours ago

Yes. This is the result of the industry being led by only managers and non-technical people who scuff when engineers who talk about taking more time to do things properly as if they are just fulfilling their own personal creative needs. As a result the engineers who are just willing to make leadership happy are the ones who end up making technical decisions, usually short-sighted that leads to compounding complexity and lots of headaches down the line.

I've always thought that good engineering should go smoothly by definition. You shouldn't be juggling a ton of bugs and broken develompent pipelines. The problem is justifying this in a work culture that doesn't care about quality and is stuck looking at numbers that can be immediately justified.

20k 2 hours ago

I think unfortunately companies are going to have to learn the extremely hard way what happens when your engineers no longer understand any of your code. The drive to eliminate institutional knowledge to create a perfectly replaceable worker was always dumb at best, and just leads to car crshes

solatic an hour ago

I think we're going to see more efforts made in static analysis / linters.

> For instance, I saw one of the best programmers on my team try to merge code that used javascript events for mouseover CSS effects rather than using the :hover selector, which is a totally unscalable way of writing mouseovers.

Alright, can static analysis find the mouseover JS events and fail a linter as a result? Maybe in the past this would have been overkill or would have triggered very rarely if ever, but in an AI-written codebase, this helps catch it and point the agent harness to rewrite it.

yodsanklai 10 hours ago

I don't think this matters anymore. Software is becoming a black box and agents make it works, as long as you can provide some reasonable spec of what you want to do, and a bit of supervising and directions.

Right now, they're not great at following good software engineering principles. They do the job, with verbose code, lots of duplication, abstraction leaks, useless unit tests and so on.

Is it an issue? you could think that in the long term it'll be, that AI won't be able to handle the complexity it introduced, but I'm not really worried about it. Most software isn't that big, and agents are getting better by the day. And if you really care about design, it's not too hard to instruct your agent to follow your standards.

I wish it wasn't the case and that I could justify my experience and expertise for a few more years, but the facts are there.

hoppp 10 hours ago

I can write succinct code slowly, agents can write verbose code fast.

Depends on use case

softwaredoug 9 hours ago

I have a Stackoverflow mode for my agents (essentially a tutor) and sometimes I spend time hand coding but heavily guided by an agent. It helps A LOT to make careful tradeoff when succinct and line by line care matters.

catdog 2 hours ago

You can push the agent to write succinct code by working in small steps, going back and forth. You push the agent in the right direction but also the other way round because it finds a lot of stuff you might have missed, esp. in complex areas. It also oftentimes does quite reasonable things actually.

You definitely can use those things to improve both speed and code quality at once. But then your speedup is while quite noticeable not astronomical of course. Also the work isn't easier (apart from less typing), just different.

vkgcr 10 hours ago

So you're essentially willingly becoming 100% dependent on AI, while praying that hopefully they'll become good enough to save you from the slopocalypse down the line.

Doesn't seem like a good strategy to me.

hoppp 9 hours ago

It boils down to architecting systems.

Using AI is one element for a pipeline that produces code.

If you architect well what you generate then it stops being slop and starts behaving like a cohesive system where code is produced automatically.

vkgcr 9 hours ago

I don't think there will ever be a way to "steer" an LLM such that it produces the correct output 100% of the time. You can certainly context engineer your way to better outputs, but you can never reduce to 0 the possibility of the LLM making a mistake, due to inherent limitations of the LLM (perhaps what you ask of it wasn't RL'd during its training), but especially due to the fact that it will often misunderstand requirements and make unjustified assumptions.

So, no, you will never be able to produce code automatically. You can and certainly should use AI as a code assistant to write code faster, but the human should always 1) make all important architectural decisions and 2) carefully review the outputted code

The human bottleneck is necessary.

hoppp 9 hours ago

Not correct but you can plan in the mistakes. E.g: I designed a modular monolith where each module is strongly decoupled so an LLM can work on it individually and if it breaks it can be ripped out and replaced without damage to the rest of the system.

So the system accounts for mistakes and has protocols for removing bad modules/code.

If part of the system go down the rest will remain functional

Edit: and yes audits are part of the pipeline

vkgcr 9 hours ago

Sure but that means accepting the cost of having faulty modules running in production (and there is no guarantee that your LLM could fix a faulty module, perhaps it will just replace it with a module with different bugs. There's no way to know!)

This obviously won't fly for "serious" software such as airplane software, but I'm willing to guess that even customers of a low-stakes SaaS would get pissed off if your product regularly turns up new bugs.

I think it's easier to just do code reviews...

hoppp 8 hours ago

There are code reviews. At no point did I write no reviews, that's something you inferred.

Both me and LLMs are constantly auditing software.

In-fact auditing and QA is mainly what I do now and human audits become much easier when it's scoped to modules.

anal_reactor 8 hours ago

> I don't think there will ever be a way to "steer" an LLM such that it produces the correct output 100% of the time.

You cannot do that with humans either.

EPWN3D 8 hours ago

The difference with humans is that you can incentivize them to try and do the right thing via money. Humans are error-prone and slow, but they don't have an alignment problem, and the types of mistakes they'll make are pretty much understood. There are entire programming languages designed to minimize those types of mistakes.

The types of mistakes LLMs will make are failures of alignment, that is, basically unpredictable. They could fuck up anything. Where a human fucks up by introducing a crash, the LLM fucks up by just not solving the problem you asked it to solve.

It will happen less and less as they get better and better, but as the volume of software output keeps growing, it will happen with a consistent defect rate. And we won't be able to catch it prior to shipping, because humans won't be able to review all the code or verify all the tests.

I don't think anyone's started taking this seriously yet.

anal_reactor 5 hours ago

> The difference with humans is that you can incentivize them to try and do the right thing via money.

Gen Z has learned that usually, your dedication to work is not tied to the monetary reward.

> Where a human fucks up by introducing a crash, the LLM fucks up by just not solving the problem you asked it to solve.

Have you ever done a group work project at school?

insane_dreamer 5 hours ago

> If you architect well what you generate then it stops being slop

the problem is that the "architect well" part is also being left to the LLMs

greenowl 2 hours ago

Um, yes?

That's exactly the strategy that most companies have adopted by now.

Once you go 100% AI code generation, there's no going back.

megak1d 9 hours ago

This is what I came to post.

For the last 20 years of my career, I have prided myself on keeping a clean codebase, making 'art-not-science' decisions of when and what to abstract, scope boundaries, then implementing them cleanly, specifically to be easily grok'd by other developers. But after building, from scratch, and operating an (essentially) vibe coded software solution (in typically a very engineer led/low level space) over the last 9 months, I am still able to move at super-human speeds in terms of delivering features, investigating and fixing any issues (there aren't many, certainly less than most human teams I've been in) - whether that's because of AI advances or just their innate quality of being able to tackle the dross coding tasks that always got avoided by humans in my past I'm not sure but I'll stick with it until a better approach becomes apparent!

I feel my specialist skills (coding, debugging, devops) has been devalued - I can't justify holding those as my value-add proposition any more - but new skills are replacing those (context/AI/agent engineering) in equal measure.

geertj 9 hours ago

I think I agree with all you said. But I can’t let go of a clean codebase yet. It’s stronger than me. And I’m not sure I should. Or at least not yet, not until the agent can better understand what I actually want.

And you’re right, with a bit of direction and further prompting it’s quite easy to get your code in a reasonable shape. So that is what I do now: the agent does all the work but I still whip the output in shape.

Mostly my hope is that at some point soon the agents will start writing clean code. But then again, maybe clean code for a galaxy brained agent is not the most optimal code from a all-in token efficiency perspective.

skydhash 3 hours ago

> have prided myself on keeping a clean codebase, making 'art-not-science' decisions of when and what to abstract, scope boundaries, then implementing them cleanly, specifically to be easily grok'd by other developers

That’s more of an artist thinking than an engineering thinking, favoriting elegance (cleanness, readability) over practicality. This was not really valuable even though you prided yourself on doing so. It’s like endlessly gushing on the design aspect of the report (the medium) instead of just providing a well-written one (the message).

Code is a medium, and being an artist about it can feel good, but the information processing mechanism (the message), is what’s important. If, after using AI, you can’t reason about the mechanism (nothing about code, files,…), you can’t essentially justify anything about what happens in the software. Meaning data given to it has a non-zero chance of giving garbage answer.

> but new skills are replacing those (context/AI/agent engineering) in equal measure

This is still highlighting surface activities, not anything pertaining to engineering.

drewbeck an hour ago

Choosing readability is absolutely a practical decision.

mhitza 9 hours ago

Might be true in your company, your culture, or in Big Tech.

For a different perspective, the european peers in my developer network, while never outspoken against their company, like, and redistribute content that circle around the same points. Some have fixed mandates to use AI, in order to use AI, working more to keep the product stable (even outside normal work hours), or complains about the divide between management and developer's perspective on these tools.

There is also some consideration about compliance issues and liability when you're stamping commits with your name (luckily for almost all software enginners there is no malpraxis law to punish gross negligence).

yodsanklai 8 hours ago

> Might be true in your company, your culture, or in Big Tech.

For context, I work in a big tech company with virtually unlimited tokens on the best models, and a lot of tools integrated in our workflows. The culture makes it impossible to go against the wind. Even if you don't want to use AI as much as others, you won't be able to prevent them to do so.

zombot 9 hours ago

Meanwhile overlooking all the strategic implications of handing off your production to an external service provider, with built-in total surveillance and industrial espionage. All the software shops are turning into lemmings. Running faster into the abyss is called increased productivity. Full speed ahead!

softwaredoug 9 hours ago

The experience still matters.

I have had experiences out of my technical depth where I’ve instructed an agent to do something technically nonsensical. The agent tried to do it, creating a mess. Nothing works, I get frustrated, only to realize I have a fundamental misunderstanding of something technical.

A similar thing happens when you ask for something, but the complexity for the perfect solution is 10 x the complexity of a simpler, 90% solution. And sometimes you only realize that looking at code (or feeling lots of brittleness)

ffsm8 9 hours ago

Fwiw, that's not what the parent was talking about.

You're trying to middle road it. He was talking about actually treating it as a black box, so just give the model your expectations and goals it needs to meet, not tell it a rough solution for it to apply in detail.

The expectation/goal approach in a ai edited project works better then the middle road since opus5.5 ime. Depending on your project structure, it may not be viable however without large refactorings

rsfern 8 hours ago

Expectations and goals can be technically nonsensical. Agents have gotten really good, but they can’t magically solve intractable problems. If you’re out of your technical depth it can be easy to set unrealistic expectations without realizing it

ffsm8 8 hours ago

Then you're still middle-roading it from my perspective. Treating it as a black box means you're only specifying what comes out, essentially.

But to preempt a "I can't do that in my brownfield distributed monolith I'm maintaining at $dayjob": yes, that's why I said it may not be possible without refactoring.

rsfern 6 hours ago

I think we are talking past each other a bit? I’m curious about GP’s perspective here

My point is that you can ask for unrealistic outputs even if you’re treating the system as a black box. This is the classic case of higher level managers asking for infeasible results from their engineering team because they haven’t considered they’re trying to solve the wrong problem. Depends what you’re doing but I don’t think agents tend to push back on badly specified goals unless you’re proactive about it

snapcaster 4 hours ago

Sure theoretically. practically this isn't a real problem for me or anyone else i know

hugeBirb an hour ago

Yeah I think this is the main issue at play. Bad engineers are now 10x bad engineers with the ability to hide behind the mask cause they can output something that looks right, but they don't understand it. You can "make" an agent do ANYTHING. There is no rigor, there is no taste, there is no risk. Anecdotally I have seen this play out IRL. I worked with a 3-month boot-camper that somehow stumbled into a software developer role at a small company. The amount of slop that he was creating was unprecedented. No formal training, no idea of abstraction, letting/making the agent reinvent the wheel for everything. The LLM was doing the whole "you're absolutely right" so he was also under the impression that he was a real engineer doing the "right thing". Concretely he convinced our manager that we need to re-write our web-app in Go because it was so much faster(0 users btw) and safer than python. He had an agent build out this test suite and there was a metric like Go vs Python DB operations, Go being 107x better. Seemed sus, looked into it and he(his agent) removed connection pooling for the python side but for the Go side, 100 concurrent connections, 10 idle and a connection lifespan of 1 hour. His reason for that was that the python code kept crashing every time his agent adding pooling so he had the agent removed it. This sheet got printed as is and distributed to our C-suite to much praise. I know this is a very specific example but I fear this is happening at some level everywhere. Where in the past a bad engineer to this degree would stick out like a sore thumb if they were surrounded by competent people that have rigorous standards. An LLM/AI doesn't have to worry about what happens if things don't work and when it's confirming that YOU are a genius every step of the way. It's going to be a disaster when the reckoning comes. I am not a AI luddite but software engineering is just as much as a culture as it is art and science. Without that backstop I just think that we will see a huge degradation in quality because there is no incentive for LLMs/AI to write "good software".

dwaltrip 5 hours ago

In the black-box approach, how do you know what is a reasonable task to give it? Just ask the agent about that also?

q4y2u35uk 3 hours ago

You don't give it tasks. You give it what you want. It decides the tasks, and then executes. Then you give it feedback. "black-box approach" here is just a fancy word for vibe coding.

lilbigdoot 4 hours ago

For me it's really hard to find a balance with LLMs. Even trying one to add .NET IR codegen to my compiler that already had a working C++, JS, and C# backend for it to use as a reference. It just kept doing really odd stuff and when we got to generics it had done such a bad job with the prior work it struggled to collect the information it needed from .NET to do generic calls correctly, and mid session decided to just make everything reflection based with no notice to me. It had a doc of the AST with notes on what the nodes mean and how different constructs are represented, it's a pretty typical ML family language. Plus a working C# backend to reference.

Other times it will one shot things near perfectly that I was expecting to just use as a reference. Demo pages for work I've done its so fast and gets good enough right out the door

Every time I've tried to use it to write something small in my compiler? :"( pain. It's the perfect intersection of looks good and covers 90% of cases fine but explodes far away because some subtle invariant is wrong. I can't always think of the invariants up front without writing the code myself

titzer 9 hours ago

> Is it an issue? you could think that in the long term it'll be

This raises alarm bells. It's a deeply unserious take on software development that I hope doesn't spread (but I know will). YOLO it all.

We absolutely will regret the slop AI, as it will become load-bearing (ahem) in short order. There will be critical outages and people will die.

utilize1808 8 hours ago

That's right. I call it "organic software" --- software that behaves like living organisms --- lots of glitches and flaws but are constantly being fixed by AI agents. 99.8% of users never run into catastrophic issues, and for those who do, a dedicated human/agent will handle it manually.

scott_weber 3 hours ago

Funny, "organic software" is a mental label I have for how most human written software is produced/functions: software that could not be rebuilt from scratch, because it's construction was highly path dependent and dependent on implicit know-how distributed across irreplaceable individuals; an accumulation of unprincipled designs and patches.

catdog 3 hours ago

For some uses cases I think this might even work out well enough if you figure out and apply the right guardrails and boundaries. That's quite a big if though...

adamddev1 2 hours ago

That only (sort of) works on the VERY top level - with user-facing apps.

No one is going to want "organic software" for their Node runtime, their web browser, or their OS. Some things just need to work, and work efficiently, 99.999999% of the time.

insane_dreamer 5 hours ago

> Is it an issue? you could think that in the long term it'll be

reminds me of all the PHP spaghetti code that would float around because it was "quick and easy" -- eventually that all becomes brittle and someone has to come in and rearchitect it from scratch

you may not pay the price, but your successor will

but then again, you could say that's your employer's problem, not yours (and you'd be right)

the biggest problem is the future, not the present. Presently, we -- you, I, others -- still have the skill and experience to look inside the box and understand it, guide the LLM to make smarter decisions, etc.

not only will those skills atrophy in ourselves, but the younger generation won't even develop them in the first place. eventually you have almost no one who understands anything about how things work, they just know how to issue high level commands. It's like if eventually everyone working at CERN just knows how to push the buttons on the LHC but doesn't understand much beyond that. That's where we are heading.

mpalmer 4 hours ago

Agents are decidedly not getting better at architecture by the day, but soon they'll be the best by default because we'll all be drooling idiots (speaking in terms of technical capability).

arm32 4 hours ago

So the agents aren't getting smarter, but rather we're just getting dumber?

mpalmer 4 hours ago

Both, the former more slowly than the latter.

Picture a foolish person falling out of a hot air balloon.

"Gosh," they think, plummeting, "the balloon is going upwards SO fast!"

skydhash 3 hours ago

That reminds me of the usual argument by AI hypers:

  “it would have taken me days/weeks/years/… to learn and produce something by myself”. 
They forget that often what you need to know can be learned quickly, it’s just mastering (solving the general case) that takes a long time. Learning the piano takes years, learning how to play “Happy birthday” can be done in a few minutes.

adamddev1 2 hours ago

You think it doesn't matter because you can get away with making an app that is "good enough" or "works" satisfiably.

But what happens when your Node runtime, OS, compilers, or even libraries start regressing to the same lower-quality level? Everything starts collapsing and falling apart. That matters.

jasode 10 hours ago

I don't disagree with the article but it may give some readers the impression that pre-AI hand-written code wasn't fragile.

Here's the famous commentary about Oracle RDBMS codebase of 25 million lines: https://news.ycombinator.com/item?id=18442941

Every big company codebase with millions of lines devolves into a similar state. The small codebase starts with clean conceptual integrity. It then inevitably decays into incomprehensible spaghetti code as more people are added to it. Various reasons for it including the later devs caring less about the code than the initial team of devs, deadlines, avoiding refactoring because of fear about breaking things, etc.

If you don't want AI to create fragile code, you have to apply the same quality gates that would have been applied to pre-AI hand-written code to keep everything clean. Most companies don't do that.

Krei-se 4 hours ago

So the argument is that because before AI some code was bad it's ok that now all code is bad?

runarberg 4 hours ago

There was a time we all on HN agreed that contracting out the code was a bad idea. That ownership of the code was important, and if you sent your code out to a one off contractor it would come back as unmaintainable liability.

The shift in thinking leads me to believe that the real reason HN hated contracting out the code was the fact that you had to pay the contractors for their work.

keeda 3 hours ago

There is also the possibility that a lot of HN hated outsourcing to contractors for the same reason a lot of HN hates AI: they were taking our jobs ;-)

And I think the outcome will be the same in both cases: we figure out how to outsource effectively. In fact, many of the same strategies we developed then are applicable now.

waffuldrop 4 hours ago

where is the code that was universally accepted to be good?

delbronski 4 hours ago

No I think the argument is more like… on average the code AI produces is better than what the majority of developers were producing before AI. Don’t forget HN crowd is the exception. The people that post here are like 1% of total programmers that like this as more than just a job. The industry at large, 99%, is just people doing their job writing average to poor code and going home. AI does that better now.

christophilus 4 hours ago

I doubt we're really the exception, and I think a good developer from the before times can still guide AI to produce a reasonably maintainable codebase over time. Most likely, a bad developer from the before times will still be able to guide AI to produce a mess. But yeah. It seems to me that the latest models produce above average code, based on the messes I've seen (and helped produce) over the last 25 years or so. It's not as good as what I'd build by hand these days, but it's good enough, when in the right hands.

cyberax 3 hours ago

> Every big company codebase with millions of lines devolves into a similar state.

Not really? A lot of companies have comparable codebases that are kept in check.

Service-oriented architecture helps at this scale by forcibly creating boundaries.

jakeinspace 16 minutes ago

I'm unsure if working in an area that's still cautious with respect to AI production code (aerospace) will be good or bad for me. Of course I expect that, should I stay employed in this field, I'll also be largely done with hand-written flight software within 12-18 months at most.

a34729t 4 hours ago

One of the things AI reduces is curious engineers futzing around in the codebase, which is a great way to find dead code, suboptimal structures, etc. With AI that's all gone.

curt15 4 hours ago

How do engineers internalize the codebase now? Do they just ask Claude and nod their head "because Claude said so"?

emoII 4 hours ago

Yes, and osmosis

simonjgillespie 40 minutes ago

+Coneheads and Telepathy.

jvanderbot 4 hours ago

It's all gone if you don't take time for it, sure.

A good lithmus test I've noticed is "I want to do this thing the system should do", and if claude identifies a major refactor - well that's a sign the code needs a human touch first.

mvgoogler 4 hours ago

I'm finding it to be just the opposite - futzing around in the codebase is more effective than ever, it just looks different.

My futzing around is now at a higher level and involves enlisting the help of agents to dig through the code and logs and other sources to help solves problems.

Right now I am working an effort to reduce the amount of "build friction" across our code base. Even scoping this out would have taken a non-trivial amount of time and fixing it would never have been funded. With the help of AI tools, I can now attach this problem and make the lives of hundreds of engineers better.

dist-epoch 3 hours ago

> great way to find dead code, suboptimal structures, etc. With AI that's all gone.

it's not gone, it's literally a prompt away. I run "tech debt" loops all the time, ask it to simplify the code and architecture, remove left over code from previous refactors.

the quality of the resulting code is better than ever

arstep an hour ago

I read it and I wish I could agree with the points in the post, but I can’t. I love coding, I love typing my solutions by hand, but I also switched couple of months ago to AI generated code. If you do that in a targeted way, where it doesn’t have to build a "world model" of your codebase then it writes much better code than an average human being would. My codebase at work is about 220k lines of Python, Rust, C++ and some Bash. I can tell for Python it’s the best, for Rust, compiler helps a lot (some sneaky logic errors are still there though), for C++ it’s horrible (bloated sheeeet) and for Bash (well who cares about Bash ). So, what I am trying to say is, that it matters how you work with your setup and what the volumes are and if you can still keep up with proper reviews or not. I see literally two ways going forward, either full control and tiny gradual, marginal changes (like before AI) or full vibe-coding. There is nothing in between.

geon 42 minutes ago

> much better code than an average human being would.

Assuming you mean an average software developer, that's still an incredibly low bar.

frodowtf2 14 minutes ago

I honestly don't understand what your intention with this statement is.

Todays companies are full with average software devs but they take 10x more hours to implement something, then miss 3x more edge cases while costing way more money.

So yes... and?

hackersnooze1 4 hours ago

Code quality is no longer a concern to almost anyone since about 6 months ago. Software is a black box now, get used to it

adamors 4 hours ago

Code quality was a concern maybe at tech companies, in every other industry it was never a concern, in fact you were shunned if you mentioned code quality because then you were not doing Product Thinking™

mpalmer 4 hours ago

    Code quality is no longer a concern to almost anyone
If that's true (and it is not), it's only because almost anyone is "making" code now. That they don't understand the importance of code quality means nothing; it remains important without them. And professionals certainly don't need to pay attention to these inane oversimplifying takes of "what software is now".

leptons 4 hours ago

My company is all-in on agentic coding. We've been building a new product with it for the last 4 months. They talk about "AI governance" but I think nobody knows what that means. They have the AI writing the code and doing code reviews and everything really.

Well, one engineer decided to take a look at the code and found one file was 20,000 lines long. It was an awful mess with too much going on. So much for "AI governance". I knew this was going to happen but these guys don't want to hear anything about being cautious with AI. The solution is always more AI.

I am looking for a new job.

realusername 3 hours ago

We're going to the same direction in my company, AI produces and AI reviews it which I feel is kind of like shaking your own hand.

For now there's still human reviews but soon it will be all automated. I estimate that the AI review (latest Opus) is around 15% to 20% accurate

dawnerd 3 hours ago

I'm still holding down keeping a human in the mix where I'm at now but it's a tough battle. Other problem with AI review is it will try to find issues that are not issues and you can get in this loop of an agent fixing something, triggering another review, fixing those findings and basically going in a circle. Has happened multiple times now which ends up with a massively overbuilt task that would have taken a human a few minutes to just do to begin with.

realusername 2 hours ago

Yes indeed, we have the same problem. You can run these agents 10 times and 10 times they will find different issues. It makes me trust the AI reviews even less, is the new feedback accurate if the previous one didn't catch it?

hand2note 4 hours ago

Product quality still matters which is a result of code quality rather than the number of features you've shipped in the last week.

leptons 4 hours ago

You are both correct.

We'll have to wait and see how many companys get hurt by overuse of AI coding, the one I work at included.

missingcolours 4 hours ago

Unfortunately the fact that you can't see (or understand) the quality of the components that make up your car doesn't make it less important. And low quality components can look like they're working fine until they blow up in your face.

ndiddy 4 hours ago

Over time the codebase will get more and more bloated, and making changes will take longer and cost more tokens. You'll start losing your grasp on how the codebase works, to the point where you can't even tell if the agent is doing the right thing or not. You'll be lulled into thinking that the code is correct from the tens of thousands of AI generated unit tests and the 100% line coverage, then you'll start noticing bugs pop up when you actually try to use the product. You tell the agent to fix the bug. It makes a patch and adds another dozen regression tests. You re-test the product. The bug has been fixed, but now there's a new bug. This is your life now.

drewbeck 3 hours ago

And Anthropic will happy sell you the newest model, tuned specifically for these problems. At a premium of course.

cesarb 2 hours ago

And then you reach critical mass (http://www.catb.org/jargon/html/C/critical-mass.html), when trying to fix each bug only increases the number of bugs.

jarjoura 4 hours ago

I guess that’s an advantage for engineers who are curious and continue to know how the thing actually works.

Being able to speak to what’s possible or not will definitely be a valuable skill.

Hopefully when the cost of tokens rises and your company can no longer afford to pay for it at the level needed that someone will be willing to keep it running.

OtherShrezzing 3 hours ago

Having contracted in a company that tipped over from subscription token pricing to API token pricing recently, there’s still extremely good reason to keep your software a transparent.

The bill for the API usage was _hundreds_ of times higher than the subscriptions. Companies with a few hundred engineers, but without sky-high margins, simply cannot afford not to understand their codebases.

mrbombastic 3 hours ago

this is kind of blowing my mind, have engineers here peeked at a bill for a medium to large size orgs token usage? growing all the time and yet everyone's solution to the inevitable issues that come from letting go of the wheel is to have Fable 12 come and rescue you. have fun tying your destiny to unpredictable recurring costs, or we could just be engineers and understand the things we build.

wpietri 3 hours ago

Agreed! And unpredictable recurring costs that could easily end up being controlled by monopoly/oligopoly players who have investors with expectations that run from aggressive to hallucinatory.

catdog 44 minutes ago

Yep, fully leaning onto those subsidized subscriptions and closed models is dangerous. At the very least keep it at a level where you can fallback to some cheaper, preferably open model which has predictable pricing you can actually afford.

jryan49 3 hours ago

I've found if the code quality gets bad enough LLMs even get stuck trying to edit it. Can use LLMs to refactor it, but LLM will never suggest that if it gets stuck in loops :)

truncate 3 hours ago

I don't give code quality a consideration at my job, as that is the expectation. I'm on-paper delivering more projects and "more productive".

I also don't think this is the right way. We are giving away practices and lesson learned over decades, in just over 6 months without fully understanding long term implications both technical and non-technical. And that is based on very optimistic bet that models will be able to handle all those potential issues that we might be concerned about in present. All the arguments/counter-arguments are mostly speculative, and I think only time will tell. My speculation is that this all BS will at some point self-correct at some point, it wont be like pre-LLM but it wont be crazy vibe-code don't look at code (or pretend we review code) either.

catdog 2 hours ago

That's a big problem I think. We should use those tools to improve applying our practices. Along the way we might figure out that we can and should do things differently. But just throwing everything away, hoping for the best, does sound like a recipe for disaster.

whateveracct 3 hours ago

how can you confidently evaluate this sort of thing on a 6mo timescale

throwayay58373 3 hours ago

When was code quality ever a concern?

I remember the "software craftsmanship" movement of the early and late oughts. Refactoring patterns, clean architecture and all that--nobody outside a tiny group gave a single sh*t about it.

throw-the-towel 3 hours ago

I feel that before LLMs I could smuggle quality code in, without the managers knowing. Now, I cannot -- I'm visibly too slow if I'm trying to.

spacechild1 13 minutes ago

In many open source software projects.

InvisibleUp 3 hours ago

https://www.laputan.org/mud/ still applies, even when using coding agents.

wpietri 3 hours ago

Software was always a black box to non-coding execs, but quality still mattered to them, at least indirectly via feature velocity, user experience, reliability, and operational cost. That hasn't changed.

We all may end up ignoring the source code most of the time. But for a few years at least, we won't be able to ignore the quality of it, because nobody knows how to use "AI" in a way that has stable high quality over years of changes.

jolt42 3 hours ago

I've see agents get confused by a human's code comment and muck it up, so just get agent to rewrite from scratch.

JohnMakin 3 hours ago

says person who has never been on a pager

edgarvaldes 3 hours ago

This view is defeatist, and one hundred percent correct. The programming profession as we once knew it no longer exists. Artisanal programmers will soon occupy the same niche that Emacs users did in the past (with the occasional "Why I still code by hand" blog post). The greybeards will gradually fade away, while new code generators (human or artificial) will get the job done, with no regard for how things were done just two or three years ago.

chasd00 2 hours ago

My son brought up a good analogy using blacksmiths. They use to be the experts in manufacturing tools and other useful things then factories came along and at first the quality and output wasn't that great. Factories started improving and pretty soon no one needed blacksmiths and no blacksmith could match the output of a factory. When the blacksmiths weren't getting any work people would probaly say "well go work for the factory" to which a blacksmith would reply "but a blacksmith is who i am, i don't want to just pull a lever and push a button and out comes a part. How can you truly know it was made with care unless i do it myself by hand?".

I thought it was a pretty insightful point coming from a 16 year old boy (being a former 16 year old boy myself).

catdog an hour ago

> "but a blacksmith is who i am, i don't want to just pull a lever and push a button and out comes a part. How can you truly know it was made with care unless i do it myself by hand?".

I think this is the place where a lot of "coders" are now, they only cared about the manual part of the job which is gone.

What's different in software is that developing software always kinda was building and designing factories spitting out copies at the end (while actually creating and distributing the copy increasingly being the easy part). So in this profession you have a split between people who were actually only in for the manual part of building the factory while you have others for whom the manual part always was just a means to an end. With the purely manual part gone there is still a shitton of work left which is in the end a lot more complex and challenging than mere button pushing but it's different work.

drewbeck 37 minutes ago

> they only cared about the manual part of the job

I think this is a very small part of the population, if anybody. Craftspeople, perhaps definitionally, are people who care about the work of making AND the results. This is true for many many devs.

skydhash 6 minutes ago

> I think this is the place where a lot of "coders" are now, they only cared about the manual part of the job which is gone.

That argument has been repeated so much while all the experienced developers keep saying that coding was not the hardest part of the job. The hardest part was adding the new changes while ensuring the system doesn't break and that it's still easy to modify later. In the latter case, intuition plays a big role into labeling what is a core truth of the system (unlikely to change) and what is a transitory need.

Coding was just something you do (and relax while doing so), not something you put your whole being into. When I code, I mostly think about the system. Which is why I look at the docs and my notes often to check the semantics of whatever symbols I want to use. I don't think about the actual typing of the code.

That's the actual argument against agentic coding. No one is checking semantics, it's hope and prayers that the software is correct.

win311fwg 22 minutes ago

> no one needed blacksmiths

But they do still need the job shop machinist which fill essentially the same niche using slightly different tools (mills and lathes rather than forges and hammers). Is your 16 year old implying that LLMs are the programming equivalent of a mill/lathe in metal working?

ratelimitsteve 3 hours ago

I think we're being set up to be corn kings. A corn king is someone who the tribe makes the king, obey his every command, lavish him with wealth and pampering, all as long as things are going well. As soon as the corn harvest comes in a little bit short, we sacrifice the corn king to the gods in order to regain their favor and fix the harvest. No one cares about code quality and I can spend my days being richly rewarded for telling Claude what to do and then blindly shipping its output til we have a major prod outage or security breach, whereupon I am taken out back and shot.

spacechild1 3 hours ago

I can't speak for commercial software development, but that's very much not true for open source software. Personally, I don't want to use software that is a black box. That's the reason why I'm using FOSS in the first place.

Another note: some software has a history of multiple decades. In fact, I happen to work on such software. IMO it would be irresponsible to turn the code into an incomprehensible slop fest just because some AI boosters want me to believe that "coding is solved" or "software is dead".

ionetan 3 hours ago

I think there is more to it than that. Even if we don't read all the code, it is still essential to comprehend the core structures that carry the weight of the program. Wrote something up on that subject some time ago, arguing that agentic code is a little like a fabric, in need of structural support to be practical at scale. In case it interests anyone:

https://epiq.sh/blog/the-soft-fabric-of-agentic-code

zquzra 2 hours ago

What did change? It's always been like this: ship fast, fill your pockets, wait a while, then enshittify. Nothing's changed in this industry.

chasd00 2 hours ago

The agents are pretty good at documentation too. You can point them at existing codebases and have decent docs generated (way better than you're average dev can produce). You can also very quickly re-generate them from the ground up whenever a round of changes are done.

"An agent wrote the code" is not an excuse for failing to understand how the system works and fits together.

unrented7977 2 hours ago

Refusing or being unable to understand the problem does not mean there is no problem.

jhallenworld 2 hours ago

I've been thinking recently about this. Given that it's a black box: I think it's better to have the LLM write Rust code than Python, node.js or anything else. You might as well use the strictest possible language to improve the chances that the code the LLM writes is safe even maybe if you are not a Rust specialist.

Also: syntax is for humans, might as well use LISP AST syntax for all future languages since no human is going to read it anyway.

sarchertech 2 hours ago

Why so defensive? People who are secure in their positions don’t have to say things like “get used to it”.

user43928 10 hours ago

After 7 months and a 500k LOC codebase I can say that in my experience the fragility is inconsequential.

Disclaimer: I have no SaaS platform, it's a mobile app.

In my experience maintenance does not suffer long term with codebase size, if anything it became easier with model advances.

Most people talking about suboptimal implementation, fragility, and maintenance burden seem to theorize and extrapolate with no actual experience in implementing a large project with AI.

I can't blame them, I see the same in my day job, but the results after 500h+ on a separate project show that the concerns do not manifest in practice.

emehex 10 hours ago

Available in the AppStore? Would love to see it!

glimshe 10 hours ago

Tell us more. What I'm gathering from your comment is that you have a personal monster project (500k LOC) fully/mostly developed by AI and you're having no problems maintaining it. Can you understand anything in the codebase? Has the maintenance cost (in AI tokens) been going up as the project keeps growing? Are users happy?

Also, sharing a link would be great if you're comfortable with the idea.

user43928 10 hours ago

No, I'm not comfortable linking my HN account to my name and home address.

I'm still in the process of launching the app, it went live just two weeks ago. So far only 30 users, I have not yet started the ad campaign.

Basically I don't look at the codebase at all, I have long stopped using the IDE or doing code reviews.

From a product perspective, there have been no big surprises. Only once I was surprised to see a feature I thought I implemented only on a specific screen being available on a different screen too, hidden behind a drag gesture, spawning an UI component I totally did not expect.

While that seems like a loss of control, it's not too different from enterprise work with many contributors where I am also not aware of all changes.

About maintenance cost, no, I do not think so. It generally became easier over time since Opus 5.5 delivers better results than GPT-5.5 did.

From a token perspective, a large part of the resources go into translating to 30 languages and checking the screenshots for layout regressions.

lewispollard 10 hours ago

> I'm still in the process of launching the app, it went live just two weeks ago.

Sorry, but at this point you have no idea what the maintenance looks like.

user43928 10 hours ago

You think that after my 500h of work and daily usage of my own app, I have no idea about what maintenance looks like.

Can you explain to me how I would develop the project for 7 months and grow the codebase to 500k LOC without maintaining it at all?

The argument seems nonsensical to me, but I've been getting that comment a few times on HN.

warmedcookie 9 hours ago

Having a similar code base size for a mobile app, I believe you. No noticable issues with its size.

hologramofham 9 hours ago

> You think that after my 500h of work and daily usage of my own app, I have no idea about what maintenance looks like.

At 30 users you have no idea what maintenance looks like. That's literally what maintenance is - responding to real world usage.

Come back with your experience when you have lots of users that stick with your app, you're putting out fires and implementing new features. Your experience will be meaningful after 6 months to a year.

I'll wager that right now you have a PoC that needs a lot of work to be something that retains users. That's not a criticism, that's just how it works for every startup.

user43928 9 hours ago

I have been QA testing, fixing bugs, and adding new features near full-time for the last seven months.

I have a pretty good idea about what maintenance looks like. Particularly so about the technical aspects of how effective the models are at refactoring or fixing bugs.

Even if I were to accept the argument that users would have entirely different expectations for my app than I do, it hardly changes the fact that I already know I can easily implement large changes in the code base.

scott_weber 3 hours ago

Not sure if you're trolling at this point but: the previous comment defined "maintenance" for you: "responding to real usage". The things you list are plainly not that.

"Maintenance" does not mean "development after the first week".

user43928 18 minutes ago

I'm not even sure why I bother discussing on HN, only to always get these comments from people who seem to think they know better than me about the maintainability of my own app.

I did not ask for your opinion.

thisisit 9 hours ago

Tell me you know nothing about maintenance without saying you know nothing about maintenance. The best part is that you call others about not knowing what they are talking about.

Come back after running your mobile app for at least 6 months in the real world with real users and then we will talk about maintenance.

arm32 4 hours ago

I can now see why you don't want to link your HN to your identity!

Krei-se 10 hours ago

There will never be a link!

jvidalv 10 hours ago

Same, I maintain a really healthy mountaineering app (6K users), I started it where we where still pasting into chat-gpt, and now fully autonomous with Claude Code.

Codebase has never been better and healthier, and any tech debt that has been accumulated after a few releases can be removed in a few prompts when you are out of product ideas and have some free tokens to spare.

(I added US mountains and trails btw: https://fescims.com )

thom 10 hours ago

FAO Claude, the site randomly changes language as you navigate, and then gave this:

<Error> <Code>NoSuchKey</Code> <Message>The specified key does not exist.</Message> <Key> releases/e17a06bd04efe2b18bb38c0ae905a4d7db7ac863-42361807812-1/en/challenges.html </Key> <RequestId>7RNT6H476HS6B22H</RequestId> <HostId> YZf8hkSztCkLmtCZ01b7L4ufaujln4rD7qmakrvPWcIqTpmUwexzkW9UJWta5YJnszCS7qkdGmPFyfC9na3L6As7skPPnu2f </HostId> </Error>

gonzalohm 10 hours ago

7 months is not long term...

Topfi 10 hours ago

Purely for the models running your code base, have you ever ran an assessment of what that fragility costs you? Tool call error frequency, unnecessary test failures that the model then addresses but wouldn’t in a more parsable code base, inefficiency in navigation, anything of that sort? A model landing changes doesn’t mean it does it well.

I have seen all those when running a fairly new eval inspired by something I read in the ts-rust repo, giving a simple GPT-6 Astra code base to Opus 5.5.

Implementation accuracy was higher and token usage lower when Opus 5.5 got a Fable 5.1 built code base of the same feature set and coverage compared to the fragile GPT one. Incidentally I struggled to parse the latter but not the former.

Yes, a modern model will happily work on the most unmaintainable slop (doesn’t even need to be LLM derived slop, we have all seen bad Human written code) and that is great if you have an old code base to maintain. But if one can avoid it, even if one uses only models and never looks at the code, being efficient has value. Heck, rewrites are doable and affordable now, I have restarted projects and the gains were quickly apparent, even if we just look at model usage efficiency gains.

user43928 10 hours ago

No, since it seems difficult to assess, it's not like I have a handcrafted version of the same project to compare against.

Topfi 10 hours ago

Try another model just looking through the harness history and commits for blockers and errors, often eye opening.

hk__2 10 hours ago

Was it a preexisting 500k LOC codebase, or has the whole codebase been generated by LLMs?

user43928 10 hours ago

I started the project during 'copy snippets from ChatGPT web' days, so technically not entirely generated, but I don't think much is left of those days.

hk__2 6 hours ago

Then the number of lines of code doesn’t mean anything.

keeda 3 hours ago

Why? It’s not like the AI one-shot 500K lines of code.

nahumfarchi 10 hours ago

I recently spent a couple of hours reducing 1k lines of code produced by an LLM to about 100. Purely extrapolation, but imagine what if your project was 50k instead of 500k?

user43928 10 hours ago

If we scale that effort up from 1k lines to 500k, I'd be spending a few thousand hours optimizing the implementation.

Even if I ended up with a project of 50k lines, that would take multiple times the effort it took me to get this app ready for the initial release.

Realistically, I wouldn't have finished the project at all.

grim_io 10 hours ago

That's a bit silly to assume the LLM will 10x all of the code.

It doesn't happen often to me. If it does, I find it often handles extra edge cases I only would have found by using the customer as a guinea pig.

hologramofham 9 hours ago

> That's a bit silly to assume the LLM will 10x all of the code.

Where else did you think they came up with the "10x developer" thing?

(Yes I know LoC is a useless productivity measure, that's just a joke. Obviously it's number of PRs..)

grim_io 7 hours ago

Yeah you can 10x the code, if you are not required to review it thoroughly.

But in doing so, you will also 10x the features delivered. Maybe 5x, who knows?

But you definitely won't have to go through and decimate the generated code as a rule.

marcosdumay 3 hours ago

> That's a bit silly to assume the LLM will 10x all of the code.

Oh, for sure.

I'm assuming the GGP's system can be expressed in 5k to 1k lines of Java or Kotlin.

hologramofham 9 hours ago

You want to reduce lines of code? Next you'll be trying to reduce the number of PRs, then what will you use for productivity metrics?

Topfi 8 hours ago

sits down around the campfire

Let me tell you the story of the developer trying to reduce the number of tokens they use. It was a moonlit night, only the faint spinning of a Noctua fan audible and our intrepid developer...

madaxe_again 10 hours ago

I have a similar position - maintainability of code written by AI no longer matters in any meaningful way, as as the models advance, one simply rewrites.

At the current pace, the very idea of maintaining software will become as relevant as the idea of trimming wicks, stropping razors - or making every frame you take with a camera count.

When the marginal cost of replacement drops to a sufficiently low level, the entire paradigm changes.

I say this as someone with 30+ years of development experience, who built everything to be maintained until the heat death of the universe. I just don't think it's a relevant question in this brave new world.

rsfern 9 hours ago

Interesting analogy choices. Aren’t straight razors still the highest quality shave? We go with electric and cartridge because it’s faster and cheaper and takes less skill to get a decent result

Digital cameras are another interesting one. Since capturing images is so cheap we just snap a bunch of frames without a lot of thought towards composing them carefully, with a side effect that we get an overwhelming amount of mediocre frames and a few good ones, but we have to sift through.

I’m still not convinced I want to make this tradeoff in programming. But I work in scientific computing where I think it’s (still) really important to understand what modeling assumptions you are making through code

madaxe_again 9 hours ago

Yup - I think there will remain a space for artisanal code for a decent while yet, particularly in things like scientific computing, safety critical systems, and similar - but for most purposes, the cartridge shave will be good enough, more convenient, and much, much cheaper.

quietbritishjim 10 hours ago

> In my experience maintenance does not suffer long term with codebase size, if anything it became easier with model advances.

This reminds me of Moore's law in the 1990s.

If you program ran slowly, or used too much RAM, you could spend six months optimising it (or removing features). Or you could just sit on it for six months and release it as it is - hardware moved on so fast that, by then, it probably ran successfully.

Your suggestion is a bit like this: don't worry, the pace of model understanding will catch up faster than the code will get disorganised.

I'm not saying I agree but it's an interesting idea.

thatsabadlook 9 hours ago

Nah, Ive seen sloppy code bases. They really are hazards to the operations and companies they support. I'm not anti ai, but people opting to lose complete control of their own products so there engineers don't have to think are suffering from it, and it will get worse and worse and worse.

insane_dreamer 4 hours ago

> the fragility is inconsequential.

how many users do you have and how long has your app been out there?

unless that number is very large, then you have no idea whether your app is fragile or not

example: I own a Polestar 4. Great car, love it. I have non-deterministic SW glitches. Other people have non-deterministic SW glitches, but they're not the same ones as me. Other people never encounter any glitches. Others have tons of glitches that I don't have. Every new car that is sold, is another edge case. We had a Tesla for years, and the SW was rock solid, great stability. Why? Because their SW has been out there for over a decade with millions of experience points, and they have a large team that are aggressive about fixing and rolling out updates almost daily. Until you get to that point, you can't judge whether your vibe-coded app is stable or not.

user43928 4 hours ago

You'd know the answer if you bothered reading the thread before posting the one hundredth 'you need a million users to judge maintainability' comment I receive on HN.

insane_dreamer 4 hours ago

> if you bothered reading the thread

I did; that's why I wrote what I did

> the one hundredth 'you need a million users to judge maintainability' comment

make you should take it that there might be some truth to it then

ActionHank 4 hours ago

“I have 500k line of slop”

“It’s not a code base that warrants that size, it’s a mobile app”

“Fragility is inconsequential to me and I am blind to my users dealing with it”

slopinthebag 3 hours ago

it's really hard to judge because depending on what the app does it could be reasonable or total slop.

i'm working on a fairly complex application and it's not even near 200k loc. but this is the second version - the first was vibe coded and was over 400k and full of bugs/issues that were slowing down development. i rewrote it and it's half the size, half the dependencies, and much faster & more robust.

is it more complex than your app? hard to say since neither of us want to disclose our identities :)

sashank_1509 2 hours ago

I think the fact that you have 500K LoC is a problem already. It could have been 50k without AI.

win311fwg 2 hours ago

I did an analysis on the code I'm currently working on pre-AI and post-AI. There is no appreciable difference in implementation code size before and after, but the total LoC has grown substantially from having a lot more test code.

So you're right. Without AI the average lazy developer would write 50k implementation lines of code and 0 lines of test code, and now they have 450k lines of test code in addition to their 50k of implementation code. It might not be great test code, but I know which I'd still rather have (hint: the tests).

sashank_1509 an hour ago

I strongly disagree AI generates codebases of the same size as humans excluding test code. You can just look at Codex, codebase that is almost millions of lines of Rust Code (source) for a desktop app/ Terminal UI’s. I saw a lab employee somewhere cope on X by saying their terminal UI is as complex as a game engine, but last I checked, they just need to generate some 2D pixels, not entire 3D worlds with physics and sounds that is done with ~500k lines of code.

win311fwg an hour ago

LLMs are laughably bad at writing code in some languages and shockingly good in others, so I can see that being the case if you chose poorly. But, especially when you have decided that you aren't even going to look at it, why would you use a shitty language?

chrisra an hour ago

I agree with the 50k comment, but depressingly, it might not actually be a problem.

happy_dog1 2 hours ago

Pure speculation here, but this is a thought that occurs to me. I've often seen furniture used as an analogy for how quickly an automated process can displace craftpersons, but I think it might actually in one sense be an analogy for how craft can continue to survive and thrive even post-automation. Sure, Ikea sells a LOT more furniture than Ethan Allen; but Ethan Allen's handcrafted furniture is much higher quality and sells at a premium price.

Consumers benefit all round. Those who can afford to do so can buy the high quality handcrafted product; the majority who can't get cheap access to acceptable-quality furniture.

This is pure speculation but I wonder whether software will gradually evolve in this way with the availability of AI. For many basic tasks, consumers will be able to basically write their own software using some AI tool; it may not be high quality but at least it will be cheap and fast to produce and it will greatly reduce the barrier to access for the average computer user to do what they want to do on their machine. Meanwhile, a much smaller niche market for high-quality tools that have been at least partly handcrafted by experts to fill some special need where performance or a quality experience are crucial will continue to thrive. Either way, in this scenario, I would imagine the importance and prominence of SaaS will slowly decline.

zeroonetwothree 2 hours ago

Average people aren't going to be writing their own software, even with AI tools. They will use AI tools to achieve goals directly and perhaps it will write software in the background (but that would be an implementation detail).

happy_dog1 2 hours ago

Yes, thanks, that's what I meant / was trying to say. They want to do X on their computer and formerly they would have had to purchase software to do so; in the future perhaps they will instead ask the AI tool to do X and it will write whatever code is needed to do X. This will work well enough until it doesn't (which is where the "premium" market for handcrafted special-purpose tools might continue to thrive).

orthogonal_cube an hour ago

Someone made a comment the other day about how silly it would be for people to continue using hand tools when the electric motor was invented.

This felt very out of touch for the reason you brought forth: hand-crafted products very often become more valuable in an industry where production is done at-scale. (Provided the hand-crafted product is of high quality.)

We’ve discovered a way to take what someone asks for and generate a lot of relevant code at a significantly lower cost than what it would take to contract out. Maybe for small requests this could be fine for users in the future, but inevitably people will prefer carefully-crafted codebases that provide robust experiences or high reliability.

beastman82 10 hours ago

Try using a statically typed language, refined types, and functional programming. Your tests become limited to things that are hard or impossible to assert with the type system.

My code has never been stronger.

haolez 10 hours ago

Haskell?

hk__2 10 hours ago

Meh, if the LLM has a flawed logic it’ll implement bad code _and_ bad tests. Tests will pass, but the logic will still be broken.

a115ltd 10 hours ago

How's that different from a regular human dev doing the same thing? Or an entire team of them.

sham1 10 hours ago

You can't hold an LLM accountable, that's a big one. Nevertheless I foresee some people trying to shift blame to the LLM if something breaks. "Claude told me..." and so on.

nemo44x 10 hours ago

AI does it at scale.

fergonco 10 hours ago

I haven't ever seen a human developer inventing requirements.

Not saying it's better or worse. But it's definitely different.

onion2k 10 hours ago

I haven't ever seen a human developer inventing requirements.

My first startup was building requirements management software for small businesses to solve that exact problem. Devs add things in all the time. It's usually referred to as 'gold plating' or scope creep.

onion2k 10 hours ago

There's an implicit assumption that humans will get things wrong, which is why we invented pull requests, code reviews, design sessions, unit tests (with separate reviews for those), etc.

The belief that AI can do all that without the gates is throwing away something useful where people get to understand how the system is changing. If you keep the gates but use AI to generate all the code you either slow AI down to the speed of humans or you end up with a massive backlog of stuff to review.

This is a hard problem.

lelanthran 10 hours ago

> How's that different from a regular human dev doing the same thing? Or an entire team of them.

They aren't going to be creating 100 liabilities/hour?[1]

--------------------

[1] Each line of code added is a liability. We appear to have forgotten that.

hologramofham 9 hours ago

> How's that different from a regular human dev doing the same thing?

Another of the shallow arguments thrown around, similar to "we don't check compiler output so..."

People learn and improve. LLMs don't learn, they follow instructions to a degree.

A human has to wrestle with it to work how you want, ergo humans are necessary already.

You can't fire the LLM and hire a competent one. The few available is all there is, they're all copies of the same thing.

You don't have a team. If you think 10 LLMs = a team of 10 people, then you don't know what a team is, how different skills and views make a big difference to outcomes.

LLMs can't innovate. They can't come to you with a great idea they came up with. They don't have ideas.

If none of these things are worth anything in your particular case, then that's ok. But let's not actually lose our minds and forget why people are intrinsically better than machines.

There are only a few arguments to support using LLMs, all of which are from people who a) want to spend less on salaries or b) sell you LLMs.

hoppp 9 hours ago

LLMS definitely improve but it's the model updates.

Teams are often hierarchical where the leaders define everything and people under them have less things to say about it. Not much different than an LLM team.

bcrosby95 3 hours ago

LLMs will do things no human developer will ever do. There are unspoken default assumptions a human will not violate that an LLM will.

I do a lot of LLM coding and I catch about one of these per week. But I still look at the code after the LLM writes and reviews it. So I'm going slower than most on here, so my default assumption would be theirs are doing this more often that once/week. Whether or not it matters depends upon your project.

My favorite one from the last month was the LLM designed monster hit points in a way that everyone is healed to full between combat. No, it was not intentional, HP were just stored in a way that the structure storing it completely disappeared outside actual combat.

dimbletimbers 10 hours ago

Can you provide any evidence for your claim?

beastman82 6 hours ago

I enjoy a thin veil of anonymity.

In general any type system is designed to prove things. So all I'm really saying is "use strong types to prove more" which is irrefutable.

agumonkey 10 hours ago

which one did you use ? ocaml ? haskell ? scala ?

just curious, and tempted to do the same, so far I don't like the code made by llms in dynamic languages codebases

sausagefeet 10 hours ago

We do this with OCaml, and it works pretty great. I have a particular style that I like and it takes some working of skill files to ensure it adheres to it, but in terms of just writing OCaml, despite being a relatively unpopular language, I have not had issues in any model that I've used.

skydhash 10 hours ago

> Your tests become limited to things that are hard or impossible to assert with the type system

Type systems are not a panacea. You still have to be logical and careful about them, especially around boundaries where types are just assumptions and not logical inferences. Then you have functions that switch type, but only a subset of the input is actually valid (string -> int for a number parser). Checking for NaN is like checking for Null.

Type systems does help, but they need the same attention as code to be actually helpful.

stingraycharles 10 hours ago

I feel this is a nice theory but needs even more ruthless oversight in order for the LLM to pick the correct abstractions and types, as your tests are now effectively your higher level type system choices.

drooby 10 hours ago

Step 2: Prompt the agent to comment out the "when" code and check if the tests fail. (If tests don't fail it's a poor test)

Step 3: Prompt the agent to write mutation tests to harden the suite

Step 4: Prompt the agent to write property-based tests.

Step 5: Prompt the agent for 100% code coverage

Step 6: Keep a look out for small issues with steps 2-5 above and refine a Skill or Rule to package the workflow and plug gaps in the model's current shortcomings.

Step 7: Dedicate some time to manually reviewing and thinking about interesting edge cases worth testing.

---

If you follow these steps, you will have better test coverage than 99.9% of any code an engineer ever wrote pre-AI... and it will be almost completely automated.

My team's incidents and bugs are DOWN this year while we're shipping more.

Leveraging AI effectively requires a new paradigm of interaction. The name of the game is to use techniques and strategies and guardrails that create an environment that produce good software.

stingraycharles 9 hours ago

It’s also a great way for AI to keep creating backwards compatible bloat code when refactoring and whatnot because “tests are failing” when those tests are testing absolutely silly stuff (LLMs have a tendency to want to validate exact output rather than behavior).

I don’t think anyone has figured out the proper solution yet, I personally try to get the LLM to write code similar as I would have written it myself.

drooby 9 hours ago

What do you mean "exact output rather than behavior"?

If you mean asserting against hardcoded literals, then that is the preferred testing shape in most cases. And for good reason.

If you change production code and a unit test fails, that is useful. Idk why that's silly. If you want to test more complex interaction write a UITest or integration test.

I honestly think we're all living in different worlds. There's probably large differences in capability on a per-language, per-team, per-codebase, per-engineer environment that are producing wildly different perceptions in output quality.

stingraycharles 9 hours ago

It would add tests for exact error messages, for example. It would add tests that the process exited with very specific error codes. Basically tests that I would never ever write myself.

And yes everyone works in different domains. I work at a database vendor myself, so mostly lower-level work.

I’m very happy and successful with LLMs, I just don’t think that these “just move all your tests to your type system!” or “get 100% test coverage” rules are an answer in the long term as we haven’t yet figured out how to do this well.

I personally treat tests as components that need to be well architected, maintained, and adding them risks increasing technical debt and needs to be treated as such.

drooby 8 hours ago

That feels like a pretty uncharitable interpretation of my original comment.

I was describing general strategy, that when applied in concert is more than the sum of its parts.

E.g I mentioned property-based testing, that is another angle at which a test avoids assertions that are too fine grained.

stingraycharles 7 hours ago

Yeah I just don’t consider adding more or better tests as a solution to fragile code, which is the topic of the conversation.

I think it has much more to do with overall architecture and design, and as for now, human oversight.

TheCoelacanth 2 hours ago

LLM's are way better at generating realistic tests than any engineer I've ever worked with as long as you are pedantic about asking for it and making sure it follows it.

thatsabadlook 9 hours ago

Really? Am I the only one who finds most ai code beyond boiler plate to more or less suck? Oh right it's hn, people here just don't care anymore.

abalgir 7 hours ago

Vibe coding taught me the hard way. These principles confirmed it: AI made it easier to create software. It didn't make production easy.

1 - Done does not mean DONE. 2 - The code gets over-engineered, and you will not know about it. Unless you have a large team reviewing the AI's work. Which defeats the whole purpose. 3 - AI reviewing the code can over-review. It chases unrealistic edge cases and kills your project. 4 - Maintainability is not native to AI. It builds code nobody can maintain later.

I built a machine around the agents that takes care of these issues, and I can safely say that vibe coding made me a better builder of solutions (not a better coder).

karim79 an hour ago

I just went through development hell using AI. I'm creating a game as a side project, using codex, and I changed my mind about the name of the project a couple of days into the dev cycle. So I renamed it and all hell broke loose.

The moral of the story is try to have the final name of the product from the beginning. It took me a whole evening to resurrect upon renaming and it's still not fully cleaned up.

dgunay an hour ago

This isn't uncommon in the gaming industry, or at least, I'd assume it isn't based on how many game executables and debugging tlm/logs appear to bear the name of a working title or codename instead of the game's actual release title.

karim79 an hour ago

Yep. I'm only an aspiring game developer at this stage, and I had to learn this lesson the hard way. I'm not blaming the AI.

stickfigure 2 hours ago

Unsupervised AI generates a fragile codebase.

If you don't pay attention to the code, yeah, it will write code that you don't like. If you review the changes, you can prompt it to make changes that result in good code. I call that "my code".

The typing was never the meaningful part of programming.

luisgvv an hour ago

> Each pull request comes faster than the prior one and has to be reviewed in even less time. This leads to developers skimming the code and missing crucial details that result in long term tech debt.

Eventually unsupervised code leaks because you stop reading the 3rd (+1200, -350) pull request

pen2l 2 hours ago

Magnus is on the record saying that even though he will lose to frontier chess engines pretty much every time, he never uses them to study because the way the engine arrives to the best move, a human can't really follow that much less emulate it.

This was somewhat the case for the proofs produced of the math problems, that leading mathematicians found them quite unreadable and abstruse; and it's been my experience when programming.

I guess there is a kind of a happy middle ground where I can more or less follow what it is doing, still having an abstract overview, and if needed, could go in the weeds to inspect something.

But people tend to opt for easy and fast, and companies will cater to that market. So who knows what's to come

stevefan1999 10 hours ago

This is absolutely right because AI lacks Fingerspitzengefühl: https://architecturenotes.co/p/the-cost-of-ai-in-code-goodby...

amelius 10 hours ago

AI doesn't "lack" it, it just may have less of it, and the gap is closing. Like it or not.

gonzalohm 10 hours ago

You think that AI understands your code deeply, and the purpose and context that exists outside your code?

amelius 10 hours ago

For all intents and purposes, yes.

(as it would apply to a human software engineer also)

menaerus 10 hours ago

Yes, it does, much more than the person sitting next to you or yourself. I wrote probably 1-2 MLoC in C and C++, and I literally see no reason why would I not be using the AI to produce code when it's already much better than I am, and much better than pretty much anyone I know or have worked with.

dofm 10 hours ago

An LLM can't have intuition itself.

It can only simulate the written outcomes of intuition in its training set.

For sure, some of those written outcomes are a good guide to reaching the outcomes of intuition.

But the likely uncloseable gap is that some intution is unspoken, literally felt by the brain's default mode network and by parts of the prefrontal cortex.

LLMs basically never shower, do the washing up, kick their foot in the dirt while sitting on a park bench with a coffee: the domain of the default mode network. And they never sit frustrated looking at things, guided by their long experience, with the itchy brain feeling that there is a solution before they can even say the words.

A lot of this stuff happens to us deep down, way outside of the reach of words. And as a result, some aspects of intuitions are just never described in words.

kelseyfrog 10 hours ago

I employ a qualia harness that provides these cases to the LLMs I use.

amelius 9 hours ago

Is that harness connected to a human?

amelius 10 hours ago

> LLMs basically never shower, do the washing up, kick their foot in the dirt while sitting on a park bench with a coffee: the domain of the default mode network. And they never sit frustrated looking at things, guided by their long experience, with the itchy brain feeling that there is a solution before they can even say the words.

I'm sure the training data of LLMs contains a lot of those things, though.

dofm 10 hours ago

It contains the averaged written ghosts of the outcomes of those things (as well as, I am sure, some descriptions of those experiences, attached to descriptions of the outcomes — "so I was sitting on the bench on the common and…" would be routine in a training set derived from me!)

But they are not the things themselves — they are incomplete representations; just words that approximately describe the application of that intuition to the problem at hand.

Think about how you visualise complex code projects in your mind — how it's not quite diagrams or buildings or words but multiple things in a sort of multi-dimensional, itchy space that is satisfied when a really good implementation appears. Think about how often the code you have built retains that wordless shape long after you wrote it down. Think about how impossible it is to adequately describe it.

Leynos 9 hours ago

Coming soon: language models trained on 2000 years of tactile, proprioceptive, spatio-temporal, calorific, olfactory, gustational, humidity, temperature and barometric data.

The downside: the model doesn't always have words to describe what it's feeling.

dofm 9 hours ago

But it knows to blame it on the dog :-)

krige 9 hours ago

It may contain writings about these things, not the actual things. That's more like saving a jpg at high compression over and over if you want catchy metaphors.

dofm 9 hours ago

FWIW, I guess it probably doesn't always matter too much in a tool where you want a logical, correct, standard, robust outcome like agentic coding.

Those outcomes are more easily averaged and we are after all talking about artificial intelligence. And for a coding agent… perhaps this is the right tradeoff.

I just think it's important to note, every now and then, that words aren't feelings or thoughts, and that an author's next book cannot be calculated from only the words of their previous books, etc. Basically we should understand that the reasons why we can't generalise from "it can design processors, write code and solve maths" to "so human-expert-quality writing and web design should be easy enough" are probably rooted in differences like these.

kelseyfrog 9 hours ago

Humans still havent't accepted The Bitter Lesson[1].

Compute > Insight. Every time.

We can keep searching for essential human characteristics that humans have and AI lacks, but every attempt increasingly resembles an ego-preserving negotiation with the inevitable march. It's reminiscent of the God of the Gaps[2], but for human exceptionalism. As AI competency encroaches on more and more of human ability, we'll retreat into smaller and smaller gaps - foxholes of inimitablity.

As long as human value is justified by ability, quality, or characteristic, this problem will endure. The one escape hatch is the classical liberal idea that human value isn't tied to anything, that, by virtue of being human, people have universal, inalienable worth.

We should stop the project to attempting to substantiate human value by other means.

1. https://en.wikipedia.org/wiki/Bitter_lesson

2. https://en.wikipedia.org/wiki/God_of_the_gaps

fauigerzigerk 10 hours ago

I think shallow tests is the the most important issue on this list. AI works well if there's a good feedback loop. Without very good test cases and/or some kind of formal specification, the feedback loop is a haphazard, unrepeatable mess and code quality will inevitably decline.

sirius87 10 hours ago

Has anyone figured out a good way to fix shallow tests with AI? Intuitively, in webapps, there are many minute UX things folks on the team used to manually dev-test. not saying that was done consistently across all team members or always done, but it existed.

Now it's gone. Spec-driven dev isn't the answer either, some of the UX bugs areas are simply not something that ever existed in the regression suite.

softwaredoug 9 hours ago

I spend most of my time structuring code to be meaningfully verifiable. To me that usually means turning a large functional area into a CLI. So for example I have a pipeline of processing and enriching products for search. Thats a CLI whereas before it might be a module in my larger codebase.

Then in that CLI I have a thin front end that just parses args and calls the backend that does the work.

I test around this backend. As a kind of behavioral test.

I rarely mock, and only at some external API boundaries. I may enumerate those (they’re only 2-3 things) the tests call my code via the backend, and I can verify more easily visually the test measures something meaningful. Moreover they map cleanly to the business logic of this module.

If testing becomes brittle I can converse with my agent and show it a bug via the CLI. It can repro more easily, and with a cleaner mapping between the CLI and my tests, I can confirm it tested what I expected.

sirius87 9 hours ago

thanks. I guess the problem is more acute in larger codebases, where the code AI writes takes "inspiration" from existing human-written code (i.e. conforms to earlier human opinions), so it doesn't go out of its way to write meaningfully verifiable new code - because that would stick out like a sore-thumb in a code-review.

Writing modular, verifiable code was always an engineering tenet - but the use of AI in codebases that ignored those foundations ends up having several gaps.

sadilek 8 hours ago

For UX specifically, I have good experience with letting the agent record a demo video for me. It regularly finds issues itself while doing this and fixes them, and I get a chance to very efficiently see the UX w/o having to start a dev server and navigate somewhere and create a certain state before I can see the UX.

luckystarr 3 hours ago

I sympathise with the author, but the problem is not that the agents do that, the problem is that they haven't been told explicitly what to do and what not to do.

I had to define the ideal test in my project and from then on the agents wrote exactly the tests that were needed.

And this doesn't stop at tests, but extends to all aspects of the codebase. How should code be structured, what not to do, how should the process go, tests before code or not, etc.

Over a year I arrived at a setup where I only once every few weeks have to change how an agent should do something specific. My last change was regarding how it should decide on naming buttons when creating new features. There is now a standard, a list of preferred content for specific situations and a rule on how to decide (incl. some leeway).

When told nothing, I feel the agents take it as "its fine any way, may as well be lazy".

shermantanktop 2 hours ago

Easy way to start: ask AI to make the codebase more robust. Modern models are quite good at finding areas of fragility.

So many of these complaints suggest that people are accepting that the first attempt by a model is the best it can possibly do. Yes, it takes effort to guide and correct the model's output, but not that much effort.

You may not want that to be your job, which I understand. And AI isn't great at everything, and has gaps, etc. But if you are going to give AI a fair shot, don't hamstring it by using it poorly and then claiming your bad results are representative.

mcv an hour ago

Some of these issues can be mitigated by using strict quality checks. I'm using Uncle Bob's quality gates, which includes mutation testing, CRAP score and a couple of other things. I don't know yet if this is enough. Time will tell. I remain skeptical.

armanckeser 10 hours ago

A fragile codebase *today. What happens when the new generation models come out? Taking on debt today to move faster makes a lot more sense because the "interest rates", if you will, make the math such that new AI models can pay the debt their predecessor left. Bad tests were harmful because I had to hand fix them which meant spent time, today it just means 5 seconds for the AI model.

yurish 8 hours ago

What will happen if leading AI labs go belly up tomorrow?

armanckeser 4 hours ago

What happens if an asteroid hits earth?