In today's massive applications, the number of people who can see the entire structure is very limited—yet commercial applications still work.
And I think GPT Codex and the products from AI companies are, at least for now, working reasonably well.
Of course, it depends on your baseline for quality.
But here's what I think is the core point:
Modern SaaS applications have become significantly more complex compared to older codebases. If you look at old books on open source architecture, the lines of code and overall size were much smaller. But today's commercial applications require a much higher level of complexity just to be marketable. In that kind of complexity, there are bound to be many bugs. But I think AI has significantly reduced that complexity burden
We have been building complex software before and we continue to do so. The question is where is this mythical codebase 10 times more complex then the Linux kernel that we were previously unable to produce? Or let it just be complex software. Where is it? What are the names?
The real problem is that we forget that there was a lot of bad code in the early days.
When I studied books from 10 to 15 years ago, the patterns that were considered 'common practice' back then would be considered low-quality code today.
Our threshold has risen. People tend to forget the rings of experience embedded in community codebases and only look at the final results.
And they always claim that only the best results represent their community.
But the 'bad results' were also produced by the same community.
From that perspective, I think the floor has risen significantly. You might disagree. People with name recognition in open source usually only see the 'best' code.
But I mostly see the 'worst' code.
This is an issue of accessibility depending on your environment. I work for $15 an hour, as a freelancer doing subcontracting work in Korea, so I mostly see the worst of the worst. In that context, AI code quality feels like a huge improvement.
Because in closed source codebases, there's plenty of low quality code.
In contrast, open source projects tend to curate only the best code, driven by visibility and reputation. I think that difference is significant.
You might not agree with me. And that's fine. We all have our own value systems. I don't agree with you, and you probably don't agree with me. That's a natural consequence of us being different people.
But here's what I think: I respect you, but our views can differ. I think your point is valid in certain contexts, but I stand by mine.
Right, there were examples like Singleton and baseController. We moved from ambient/global dependency access to explicit constructor injection and Composition Root, didn't we?
Application entry points use Composition Root now, but old general programming books didn't. Errors were handled differently too. In the past, you'd throw new Exception() and wrap it in try/catch at a higher level, but these days we use Result<T, E> type modeling. Of course, C# still uses try/catch, but the guidance in .NET has long been to return predictable failures as type contracts.
Old .NET documentation used to encourage global access to common features and dependencies. Now it's shifted toward composition at the entry point.
Node.js used to use nested error-first callbacks as a standard pattern, but that's no longer the case, right? It moved to promise/async-await, and these days, as you know, type-based modeling is trending.
C# books also used to return null if something was missing, but now we use nullable reference types to express nullability more explicitly.
Even inheritance—these days it's often advised to avoid inheritance, but it used to be very common.
Just off the top of my head, I can think of quite a few examples. Record keywords and immutability features started appearing about 10 years ago, and Java has started adopting them too.
These are all outdated patterns now, with clearly defined use cases. More precisely, the contexts in which they should be used have become much more granular.
I could probably give about 30 more examples of this.
And the 'monad' that functional programmers always talk about—same story. In C#, they encourage monadic composition by chaining errors. But about 15 years ago, that wasn't the case.
Back then, if there was no value → null.
Now, even the absence of a value is modeled with Option, Maybe, or nullable types.
Failures are handled not with throw/try-catch but with Result, Either, or Try.
Overall, we've shifted toward a style where we preserve the computation context and then compose the next computation. Instead of manually branching every time, now we use map, bind, or LINQ-style operations that define the composition rules.
Things that used to be used only by a small group of people eventually become embedded into the language itself.
For example, callbacks have evolved into Task, Promise, and async/await.
So honestly, I don't think quality has declined at all. I think there's just more context to keep track of now. I've seen around 40 different company codebases. I have no idea about US code, but I've seen code from Korean and Chinese large corporations, and the difference between past and present code is quite significant.
I feel like the industry has learned a lot of good lessons from functional programming, and that has been reflected by functional features being baked into almost every popular imperative language.
If there were a need for a new open-source OS to replace Linux, it would be used then. Once infrastructure becomes entrenched, the cost of dismantling or replacing it becomes enormous.
So you might argue:
'If AI is so great, shouldn't it be able to directly modify Linux's millions of lines of code right now?'
My answer is different:
'Why break something that already works? It only makes sense to change it when a problem actually arises.'
The example of Bun, originally written in Zig and later ported to Rust, illustrates this. Zig is a relatively new language, but whether for political reasons or not, Bun was eventually ported to Rust. And after the rewrite, Bun still works just fine.
And rewriting infrastructure from scratch is fundamentally a cost issue.
I can handle up to 60,000 lines of code on my own. With AI, I can handle up to around 200,000 lines. But building new infrastructure from scratch is an entirely different matter.
Why would you replace something that already works with AI? That's a separate question. If the current OS were no longer viable and a new one were needed, then the situation would be different.
In other words, I don't think your argument is wrong—I just don't think there's enough motivation for it.
In that sense, codebases that heavily use AI are already appearing in abundance.
There were issues with Open CLAW, but it was purely AI-written and still boasted a huge number of active users, right?
Same goes for Codex.
So my conclusion is this: AI is currently being used in layers above the infrastructure. But if a new infrastructure needs to be built, that's when AI will come into play.
In other words, it's a matter of motivation. Using AI for coding doesn't eliminate maintenance costs. And to be extreme, both maintenance and generation now require spending 'tokens'—you're paying money instead of the developer's time. We need to think about that cost.
In other words, there's no reason to break something that's already working.
I'd summarize it as: there's no reason to reinvent the wheel.
And I think GPT Codex and the products from AI companies are, at least for now, working reasonably well.
Of course, it depends on your baseline for quality.
But here's what I think is the core point:
Modern SaaS applications have become significantly more complex compared to older codebases. If you look at old books on open source architecture, the lines of code and overall size were much smaller. But today's commercial applications require a much higher level of complexity just to be marketable. In that kind of complexity, there are bound to be many bugs. But I think AI has significantly reduced that complexity burden