The problem with the "if it works who cares what the code looks like" mindset for agentic work is that it assumes the agent has a perfect understanding of "works." Realistically, things are underspecified, agents make bad assumptions, etc.
To be fair, agents are pretty good at unit test coverage. They're pretty bad at designing human experiences (API, CLI flags, etc.), especially cohesive ones for future roadmap plans they may not have visibility into (unless your backlog is perfect and vision fully laid out, which I doubt). They're bad at knowing where performance matters and what type (CPU vs memory tradeoffs). They're bad at where compatibility matters and where it doesn't (and tend to err on the side of preserving it without further guidance). Etc.
Unless you have this ALL specified, you can't possibly claim "it works" without taking a look and thinking about it.
I am so sick to death of people talking about the "competitive advantage" that AI gives you. That's complete and utter hogwash. AI has zero impact on competitive advantage. Competitive advantage comes from building a high-quality product that people want to buy. It comes from talking to customers, understanding their problems, and building what they need. AI adds nothing. It just helps you type faster. (And there's ample proof that "first to market" is also BS, so typing faster is of no help, either. The products that win are usually the second or third ones—the ones that fix the kluges and security holes and corner cutting and bad thinking and ignoring customers that were an inevitable result of that rush to get it out the door.)
Fragments: enjoying programming with LLMs, four types of LLM conversation, the crevasse between AI enthusiasts and skeptics, AI companies get product/market fit, the need for decentralization
https://t.co/PB1XOJxKXO
Trevor was making a joke in reference to anthro, but jokes on him, ...
Intel's compiler *did* intentionally generate worse code for AMD, called the "cripple AMD feature".
You would think when everyone has a couple of MCPs and frontier LLMs to-hand, consulting businesses like mine would be toast. Why pay Speedshop four figures a month to fix your app when "an LLM can just do it for me?"
I've been running at 100% capacity for the past year despite all the advances on the model front. Why?
1. You've gotten more effective, but so have I. What _I_ can accomplish with an hour + $50 of tokens is still 10x what _you_ can accomplish with that.
2. You still don't know what questions to ask. Consultants are _still_ more effective than LLMs at answering the unknown unknowns, whereas LLMs still require you to prompt them. The "analyze my entire codebase" skill you have is nowhere near as effective as what I can do.
3. Trust and blame-ability. Everyone is sitting on piles of now _hundreds_ of pull requests which are generated by agents but they are too nervous to merge without human review. I am that human review and accountability now, or I am the expert who helps you build the software factory which can automate this trust and verification process (which you cannot build yourself because you don't know how to verify software for performance).
4. Not all problems are LLM-shaped. Certain problems are a great fit for "token generator in a loop": fix all my N+1s, make my test suite faster. But others are very, very poorly shaped for LLMs: refactor my codebase to fit Russian Doll caching (it will generate an utter hackjob), prioritize 100 different possible things I could be doing, define the goals of performance work, etc. Drudgery is now automatable, yes, but not all the work we do is drudgery.
5. Not all useful knowledge is in the training data. I have ten years of experiences and knowledge from working on literally hundreds of applications which never made it to my blog or books and does not appear in the training set. I know things the LLMs do not.
There are probably more reasons. And I'm not just sitting on my laurels either, I still feel the pressure to get better every day as the frontier capabilities continue to grow. But the business is still good.
Undeniable that Anthropic presents the biggest known structural business risk with their arbitrary, customer-hostile, non-negotiable, non-transparent model limitations + user data retention.
If you use Claude as a business you should want to have an offramp to another model.
Oracle tried to take MySQL from its creator. So he forked it and named it after his other daughter.
This is one of the most dramatic stories in open source history.
Michael Widenius created MySQL in 1995 and named it after his daughter Mai.
In 2008 Sun Microsystems bought it for $1 billion. One year later Oracle bought Sun. The same Oracle whose main product directly competes with MySQL.
The same day the acquisition was announced, Michael forked MySQL into MariaDB. Named after his other daughter Maria.
He tried to block Oracle entirely. The EU approved the deal anyway.
Oracle promised to keep MySQL alive. They technically did.
But the best features quietly moved behind a paid enterprise version. Bug reports piled up. Community contributions dried up. The soul of it was gone.
MariaDB filled the gap fast.
→ Fully compatible with MySQL. Zero rewrites needed to migrate.
→ Wikipedia migrated.
→ Google migrated.
→ Most Linux distributions dropped MySQL and made MariaDB the default.
Then in 2024 MariaDB was bought by private equity.
A different villain. The same feeling.
Michael also has a son. He named a database after him too. MaxDB.
He only has three kids. So there are no more databases left to name. No more forks left to make.
The man who named two databases after his children to protect them from corporations watched both get acquired anyway.
Some stories do not have a happy ending. They just have a really good dad.
Things I really dislike about Fable:
1. Anthropic collects my prompt history, stores it, and does whatever they want with it for 30 days. No opt-out
2. They can nerf their most expensive model without telling me, billing me the same amount, wasting my time. Whenever they want
One of my personal favorite features announced at WWDC will I suspect be a sleeper hit: container machines, allowing your Mac to run a lightweight, persistent Linux environment with your home directory and repos automatically mounted: https://t.co/dOBdfOOVxC
Most developers misunderstand DRY
They think it's about removing duplicate code.
It's not.
DRY is about duplicated knowledge, not the code.
Duplicate code is only a symptom.
The real problem is duplicated business rules hiding across the system.
When the same rule lives in five places, change becomes dangerous.
You fix one place and forget the other four.
Here is where most teams get it wrong:
❌ They extract shared helpers too early.
❌ They create generic utilities that are hard to maintain
❌ They couple unrelated features just to reduce duplication.
This actually makes the code worse.
Sometimes duplication is fine.
If two pieces of code change for different reasons, keep them separate.
This follows Single Responsibility better than forced reuse.
DRY is violated only when the same reason to change exists in multiple places.
Examples of real DRY violations:
→ Validation rules copied across controllers
→ Pricing logic repeated in services and background jobs
→ Authorization checks duplicated across different layers
Examples that are usually fine:
→ Similar loops doing different jobs
→ Repeated mappings near their usage
→ Small duplicated database query logic
Treating DRY in the wrong way leads to "enteprisy" code:
- Too complex code to understand, too many abstractions
If you have the same EF Core query (in 2 lines of code) present in 2 different classes, it's fine; you don't need a repository for this.
Here is how I apply DRY:
If I need to duplicate some logic in a third place, it's a sign that I should extract it elsewhere. Before that - no premature refactorings.
Next time you see duplication, ask one question first:
"Is this the same knowledge, or just similar code?"
That question changes how you design software.
What is one place where DRY caused more harm than good in your project?
——
♻️ Repost to help others understand DRY Principle
➕ Follow me ( @AntonMartyniuk ) to improve your .NET and Architecture Skills
You have noticed it. ChatGPT feels dumber than it used to. Your prompts that worked six months ago produce worse results now. The writing sounds flatter. The ideas sound safer. The internet itself feels like it is shrinking. Every article reads the same. Every email sounds the same. Every answer sounds like it was written by the same voice.
You thought it was you. It is not you.
Researchers at Oxford and Cambridge published a paper in Nature proving what is happening. They call it Model Collapse.
Here is the mechanism in one sentence. AI trained on AI-generated data gets dumber every generation until it forgets what real human data looked like.
The internet is filling with AI-generated content. Blog posts. Articles. Reviews. Comments. Social media. AI companies scrape the internet to train the next generation of models. Which means the next generation of AI is being trained on the output of the current generation.
Each cycle loses information. Not randomly. It loses the rarest, most unusual, most creative parts first. The researchers call these the "tails of the distribution." The weird ideas. The unexpected perspectives. The things that made the internet feel human. Those disappear first.
What remains is the average. The safe. The expected. The bland.
Then the next generation trains on that. And loses more. And the next generation trains on that. And loses more. The researchers proved this is not a slow decline. Major degradation happens within just a few iterations. Even when some of the original human data is preserved.
They tested it on large language models. On image generators. On statistical models. The pattern was the same every time. The output converges toward a narrow, flattened version of reality that looks nothing like the original data.
The lead researcher put it plainly. "Large language models are like fire. A useful tool. But one that pollutes the environment."
The pollution is invisible. You cannot see which sentence on the internet was written by a human and which was written by AI. Neither can the AI that is about to train on it. And once the tails are gone, they do not come back. The damage is irreversible.
This is not a prediction anymore. It is a diagnosis.
The internet you grew up on was built by humans writing things no algorithm would have written. Strange, personal, imperfect, alive. That internet is being diluted. One generation of AI at a time. And the models trained on what remains are learning a smaller and smaller version of the world.
Model Collapse is not a technical problem. It is a cultural one. The thing that made the internet worth reading is the thing that disappears first.
GitHub went from 1 billion commits a year to 1.4 billion commits a month. AI did that. And GitHub is breaking because of it.
GitHub COO Kyle Daigle just went public and admitted it openly. The platform that hosts 100 million developers has logged hundreds of incidents in the past 12 months. Outages hitting search, GitHub Actions, CI/CD pipelines. Public apologies. All of it.
AI agents alone are generating 17 million pull requests every single month. GitHub planned for 100% growth. The actual number blew past that before they could even react.
Here is what they are doing to survive it:
→ Rebuilding how GitHub Actions dispatches jobs entirely from scratch
→ Moving performance sensitive code out of their Ruby monolith into Go
→ Migrating fully off their own data centres onto Azure
→ Isolating critical services so one broken system cannot take everything else down
→ Bringing in Microsoft engineers who have scaled systems at this level before
The goal is to get GitHub to handle 30 times its current load.
Not 30 percent. 30 times.
GitHub launched Copilot in 2021 and created the AI coding era. That same wave is now threatening to break their own platform.
The company that started the fire is now racing to stop it from burning everything down.
Full story here:
https://t.co/b59mA7K8GK
1- AI-generated code just creates more technical debt.
2- At the end of the day, you (the developer) are responsible for the code, not the LLM that generated it. So the less code you have, the easier it is for you to own it.
3- A good engineer knows what code to write, and equally importantly, what code not to write or to delete.
(BTW, this is what we old-school software engineers have been saying for a long time, and we've been called all sorts of names for it.)
In my normal programming work, I use AI tools in a very focused way that I've been told is "wrong," even though I'm more productive, but there we are. I'm not spewing out 20x my previous output, so maybe that's it. I'm an engineer, so when I work with an LLM, I do engineering. Shocking, I know.
I work incrementally, in small batches, with a well-defined architecture guiding the process. (People talk nebulously about "guardrails." Having a coherent AI-friendly architecture is an important one.) I do not let the AI design the program for me. I build thin vertical slices with domain value, not random features. I focus on quality, not output volume.
I tell the LLM what the code should do, of course, but I also tell it how to structure the code—how it fits into the architecture, what the APIs or messaging looks like, etc. I don't simply describe the surface behavior of a "feature" and expect the AI to do all the work under the covers. Instead, I ask the AI to write small, manageable, focused, black-box testable components that fit into an overall system architecture that it does not control. The architecture comes first, and then I tell the LLM to implement it one component at a time. (I should add that some architectures work better than others in this context. DDD nested aggregates and entities have worked pretty well for me, as have message-based components with hardened perimeters.)
I'll admit that I often don't give the output more than a cursory glance, but I'm a fanatic about testing. (There's another "guardrail.") I don't let the AI write my tests. When I first started doing this, I found that the AI would modify the tests so that the incorrect code it generated would pass. That's not testing. Also, the AI-generated tests tested the wrong things—e.g., small implementation details, not domain-level behavior.
I'm a big TDD guy, so I write my tests first and then tell the AI that the code it creates must pass them. When I do use the LLM, I'll specify the test in Gherkin format, and the results are small enough to review manually. To me, manual review of the tests is essential. There's no room for AI ambiguity in a test.
I've been told that I'm not leveraging the full capabilities of the AI by working this way, that I should just describe features or modifications and have the AI do all the work. I am, nonetheless, more productive than when I don't use the LLM, and don't seem to have the problems (e.g., lurking bugs, fragility in the face of scaling, overwhelming complexity, etc.) that seem commonplace with other approaches.
My measure for productivity is time to complete a story, which has gone down. I couldn't care less about output volume. When working in the small like this, with the work constrained by component boundaries, the LLM cannot break existing code when it makes unrelated changes. I'm not overwhelmed by a pile of code so vast that I can't understand it.
So, maybe I am doing it "wrong," but I'm happy with what I'm doing.
A French engineer who lives quietly in Paris has spent 30 years writing software that the entire internet now runs on without knowing his name.
He wrote the code that streams every YouTube video, every Netflix show, every TikTok clip. He wrote the code that runs the virtual servers underneath AWS, Google Cloud, and Microsoft Azure. He calculated more digits of pi than anyone in history. He has no Twitter. He has no marketing. He just keeps shipping.
His name is Fabrice Bellard.
Here is the story, because almost nobody outside the systems programming world knows what one man has built.
Fabrice was born in 1972 in Grenoble, France. He studied at École Polytechnique, the top French engineering school. He never went to Silicon Valley. He never built a startup empire. He just wrote code.
In 2000 he started a project called FFmpeg, an open-source multimedia framework for encoding, decoding, and streaming video. He was 28. The project did one thing nobody else had done well. It handled every video and audio format that existed, in one library, on every operating system. He led it himself for years.
Today FFmpeg is the invisible engine of the internet. YouTube uses it. Netflix uses it. VLC uses it. Chrome and Firefox use parts of it. Every Android phone, every iPhone, every smart TV, every video editing tool you have ever touched runs FFmpeg somewhere underneath. If you have watched a video on a screen in the last 20 years, Fabrice's code processed it.
He was not done.
In 2003 he started QEMU, a machine emulator and virtualizer. He wrote it solo until version 0.7.1 in 2005. QEMU lets you run any operating system on any other operating system. It became the foundation of modern virtualization. KVM, the Linux kernel hypervisor, runs on top of QEMU. Every major cloud provider, AWS, Google Cloud, Microsoft Azure, IBM Cloud, runs virtual machines on infrastructure built around it. The Quick Emulator is the most cited piece of cloud infrastructure code on Earth.
He kept going.
In 2001 he won the International Obfuscated C Code Contest with a small C compiler that grew into TCC, the Tiny C Compiler. TCC can compile and boot a Linux kernel from source in under 15 seconds. In 2004 he calculated the most digits of pi ever computed at the time, using a personal desktop computer and an algorithm he derived himself called Bellard's formula. In 2011 he wrote a complete PC emulator in pure JavaScript that runs Linux in your browser, a project called JSLinux that engineers still cannot believe is real.
In 2019 he released QuickJS, a small but complete JavaScript engine that fits where V8 cannot. In 2021 he released NNCP, a neural network based lossless data compressor that immediately took the lead on the Large Text Compression Benchmark.
Then he turned his attention to large language models. He built TextSynth Server, a web server with a REST API for running LLMs locally. He released ts_zip and ts_sms, compression utilities that use language models to compress text and short messages at ratios traditional algorithms cannot reach. He released TSAC, a very low bitrate audio compression system. In December 2025 he released Micro QuickJS, a new JavaScript engine for microcontrollers, separate from QuickJS, designed for environments with almost no memory.
Fabrice co-founded a telecom company called Amarisoft in 2012, where he serves as CTO. Amarisoft builds 4G and 5G base station software used by carriers and labs around the world. He has been running it for over a decade while continuing to ship personal projects from his own home page at bellard dot org
He has no Twitter. He has no Instagram. He gives almost no interviews. His personal website is a flat list of projects with no styling, no fonts, no marketing copy. Just titles and links.
A quiet French engineer who never moved to Silicon Valley wrote the code that quietly runs the internet.
He is still shipping.
Either Sam Altman reads The Pragmatic Engineer (I wrote about this in detail exactly one week ago for paid subscribers) or I'm just a week ahead to what he also sees!
Rare to hear a founder of an AI coding harness be this honest. A reason I respect @thdxr
"We’re shipping way more hacks where we should have just rethought the whole system from the ground up, or redesigned it to make it more flexible.
So I think our judgement is just off.”
Two economists just published a mathematical proof that AI will destroy the economy.
Not might. Not could. Will — if nothing changes.
The paper is called "The AI Layoff Trap." Published March 2, 2026. Wharton School, University of Pennsylvania. Boston University. Peer reviewed. Mathematically modeled.
The conclusion is one sentence.
"At the limit, firms automate their way to boundless productivity and zero demand."
An economy that produces everything. And sells it to nobody.
Here is how you get there.
A company fires 500 workers and replaces them with AI. A competitor fires 700 to keep up. Another fires 1,000. Every company is behaving rationally. Every company is following the incentives correctly. And every company is building a trap for itself.
Because the workers who were fired were also customers.
When they lose their jobs faster than the economy can absorb them, they stop spending. Consumer demand falls. Companies respond by cutting costs — which means automating more workers — which means less spending — which means more falling demand — which means more automation.
The loop has no natural exit.
The researchers tested every proposed solution. Universal basic income. Capital income taxes. Worker equity participation. Upskilling programs. Corporate coordination agreements.
Every single one failed in the model.
The only intervention that worked: a Pigouvian automation tax — a per-task levy charged every time a company replaces a human with AI, forcing them to price in the demand they are destroying before they pull the trigger.
No government has implemented this. No major economy is seriously discussing it.
Meanwhile the numbers are already tracking the curve. 100,000 tech workers laid off in 2025. 92,000 more in the first months of 2026. Jack Dorsey fired half of Block's workforce and said publicly: "Within the next year, the majority of companies will reach the same conclusion."
Nobody is doing anything wrong. Companies are following their incentives perfectly. That is exactly the problem.
Rational behavior. At scale. Simultaneously. With no mechanism to stop it.
Two economists built the math. The math leads to one place.
Source: Falk & Tsoukalas · Wharton School + Boston University ·
Also the Pope is talking about Epistemia. AI can “weaken personal judgment.”
This is exactly the point we make in our paper on the epistemological fault lines between human and artificial intelligence.
LLMs and humans do not merely differ in performance.
They differ in their epistemic pipelines.
We identify seven fault lines:
Grounding.
Parsing.
Experience.
Motivation.
Causality.
Metacognition.
Value.
At each step, human intelligence and artificial intelligence process the world in structurally different ways.
And yet, LLM outputs are so fluent and confident that we often treat them as true.
This is how we enter Epistemia: a regime in which epistemic verification is replaced by linguistic plausibility.
A world full of knowledge that we are not able to judge.
A world in which we will be totally lost.
*
Full paper in the first reply.