The Ideas Were Good. The Economics Were Bad.
Software engineering is full of ideas that look obviously correct the moment you read them.
Of course contracts should define what a function is allowed to accept and return. Of course tests should check properties instead of a few hand-picked examples. Of course teams should measure whether tests actually catch faults instead of assuming coverage is enough. Of course architecture decisions should stay synchronized with the code they are supposed to govern.
None of this was controversial. The problem was that these ideas were expensive in the one way most teams could not afford: they consumed specialist attention.
For years, strong engineering strategies kept getting trapped in the same cycle. A team would adopt one. It would work. Quality would improve. Then the maintenance cost would arrive. Contracts would drift. Property tests would fall behind the schema. Surviving mutants would pile up without triage. Architecture docs would become fiction. The strategy did not fail because it was wrong. It failed because it asked for a level of ongoing expertise that most product teams could not keep staffed.
That is the real backdrop for the current AI moment. The important change is not that models can write code quickly. The important change is that they can now absorb a large amount of the specification and verification labor that used to make advanced engineering practices uneconomical.
What Actually Kept These Strategies Niche
It was never compute. Cloud compute has been cheap for a long time.
It was never tooling alone. Good tools existed for many of these ideas, but the tools still assumed someone knew how to feed them the right invariants, the right generators, the right contracts, and the right boundary rules.
The real bottleneck was expertise that did not parallelize well.
Take a few examples:
- Design by contract required engineers to write and maintain preconditions, postconditions, and invariants with enough rigor that the checks stayed useful during refactors.
- Property-based testing required people who could look at a function and think in terms of algebraic properties, round trips, idempotence, and error conditions instead of examples.
- Mutation testing required triaging survivors and deciding whether they exposed real coverage gaps or harmless equivalents.
- Type-level correctness required engineers comfortable with branded types, phantom types, typestates, or even formal verification tooling.
- Living specifications required somebody to continuously translate human decisions into enforceable architecture rules.
Each strategy carried its own maintenance tax. Combining several of them was even worse, because then you needed integration glue between them.
That is why so many “good on paper” ideas stayed in aerospace, finance, formal methods research, or unusually disciplined infrastructure teams. The methods worked. The staffing model did not.
What AI Changes
AI does not remove the need for engineering judgment. It changes where judgment is spent.
Before, a senior engineer had to author most of the scaffolding by hand. Now the model can draft the contract, suggest the properties, build the schema, propose the architecture rule, and generate the first pass at a regression test for a surviving mutant. The human reviews for domain correctness instead of starting from a blank page.
That shift matters more than it sounds.
The old workflow was author-heavy. The new workflow is review-heavy.
That means:
- Contracts become cheaper to introduce because the annoying first pass is no longer manual.
- Property-based tests become more realistic because the model can systematically suggest round-trip, idempotence, and error-raising properties from a signature.
- Mutation testing becomes more useful because AI can help classify survivors and draft targeted tests.
- Architecture constraints become more enforceable because natural-language decisions can be converted into static checks instead of dying in a document folder.
This is the real economic unlock. You are not replacing engineers with a model. You are making strategies that previously required specialist authorship affordable for ordinary product teams.
The Important Insight: These Strategies Compound
The best part is not any single technique in isolation.
The interesting shift is that AI makes the stack affordable as a system.
A contract can feed into a property test. A property test can feed into mutation testing. A schema can define the runtime boundary. An ADR can generate an architecture rule. A branded type can tighten the surface area before any runtime check runs. The value is not just in each part. The value is in the glue.
Pre-AI, most teams could barely justify one of these strategies. Post-AI, a team can realistically combine several without turning reliability work into a full-time specialist program.
That changes how we should think about engineering maturity.
The question is no longer “Should we do formal-ish techniques or move fast?”
The better question is “Which layers of prevention, verification, assessment, and recovery can we now afford to automate?”
This Is Not Magic
There is still a wrong way to do this.
If you let AI generate code, contracts, and tests without deterministic enforcement, you just create a larger pile of plausible-looking text. The goal is not to ask a model to bless your codebase. The goal is to use the model to produce artifacts that can be checked cheaply and repeatedly.
That means the winning pattern is still the boring one:
- generate with AI
- validate with deterministic tools
- review changes at the specification level
- fail fast in CI when a rule is broken
AI is valuable here because it closes the expertise gap, not because it should become the final judge.
Why This Matters Right Now
Teams are already using AI to compress implementation time. The risk is that delivery speed rises faster than verification depth.
If that happens, you do not get a more productive engineering organization. You get a faster path to brittle systems.
The opportunity is to use the same models that accelerate generation to also resurrect reliability practices that were historically too expensive to sustain. That is how you keep speed from turning into operational debt.
The next few years will reward teams that understand this distinction early. AI-assisted coding on its own is not a strategy. AI-assisted verification and enforcement is.
And that is why so many old engineering ideas suddenly matter again: not because they became newly correct, but because they finally became economically practical.