Everyone agrees AI is transforming how we write code. Adoption is through the roof, productivity metrics look promising, and a growing chorus of voices insists we are months away from this whole thing being “solved.” They are probably wrong. Not because AI is bad, but because “almost solved” is the most dangerous phase in any engineering problem.
Month: March 2026
Complexity Is Never Eliminated. It Is Only Relocated.
COBOL moved complexity from machine instructions to business logic specification. 4GLs moved it from code to data modeling. No-code moved it from programming to workflow configuration. LLMs are moving it from syntax to verification. The complexity never disappeared. It accumulated at the new boundary. And the new boundary is arguably harder than the old one.
“Done” Is Not Merge: Why Your Definition of Done Is Probably a Lie
The most dangerous lie in software engineering is a two-word status update: “It’s done.” In most teams, done means the pull request was merged. The CI pipeline turned green. The ticket moved to the right column on the board. Someone wrote “Done” in Slack, maybe with a checkmark emoji for extra confidence. And then everyone…
AI Made Learning Feel Pointless. That’s Exactly When It Matters Most.
A week ago my blog post got noticed by developers. I got so many messages and there was a recurring theme. They feel helpless and anxious with the ever growing AI dominance in writing code that might not be perfect but it is almost good enough in many cases. But one question stood out more…
The Training Data Paradox: What Happens When AI Replaces the Engineers Who Trained It
There is a question hiding in plain sight behind every celebration of AI-generated code, every prediction that developers are obsolete, every LinkedIn post about building an app 100x faster with a prompt. It is a question that almost nobody in the current hype cycle is asking, and it may be the most important question of…