Thursday, July 23, 2026

Software Craftsmanship — Why Testing Matters More Than Ever

A few weeks ago, I wrote a post called SoftwareCraftsmanship — When AI Writes the Code. The basic idea was pretty simple: AI hasn’t made software craftsmanship disappear. It has moved the craft from writing every line ourselves to making sure we understand the problem and own the outcome. That part is not really new.

For most of my career, we crafted code by taking requirements, breaking them down into logic, and turning that logic into instructions a computer could execute. AI is changing that because it can generate code fast enough that writing code is no longer the hard part, regardless of the size or complexity of the ask.

On the surface, that sounds like pure upside: higher productivity, more output, shorter cycle times. But software delivery has never been just about producing code. It is about delivering value to customers through software they can trust. The hard part was rarely just writing the code. It was understanding the problem, deciding what success looked like, and proving that the software solved the right problem.

AI can make code generation faster, but it does not remove the work on either side of it. The more it helps us generate software, the more we have to prove that the software works as intended. That sounds obvious. I’m not sure we’ve started acting like it yet.

I was reading Leah Brown's article How to Work with AI Coding Tools Without Losing Your Engineering Judgment, and this line jumped out at me:

"They do not produce correct answers—they produce statistically likely answers, which is a different thing."

That is an important distinction. Because generative AI systems are probabilistic rather than deterministic, they are incredibly good at producing answers that look right. Sometimes they are right. Sometimes they're not. The tricky part is that both correct and incorrect answers are often presented by an AI with the same level of confidence.

Later in the article, Brown asks a question that I think every engineer should get comfortable asking:

"What observable evidence would confirm that this suggestion is actually correct, and have I gathered it?"

I think that's the question that as engineers we need to get better at asking.

Not "Does this code look reasonable?"

Not "Would I have written it this way?"

Instead, the better question is: what evidence do I have that this is actually correct?

That is not just my concern. The industry is starting to see the same issue.

Google's DORA team talks about a "verification tax" that organizations pay as they adopt AI-assisted development. As code generation gets faster, teams spend more effort reviewing, validating, and proving that generated code actually does what it is supposed to do.

That same pattern shows up in the 2025 DORA research, which summarizes it this way: "Without robust control systems, like strong automated testing, mature version control practices, and fast feedback loops, an increase in change volume leads to instability." That is the risk AI exposes if our delivery pipelines cannot handle the volume of change in an AI-native world.

The Octopus Deploy AI Pulse Report describes something similar. Teams are seeing real productivity gains from AI, but they're also discovering that testing, reviews, deployment processes, and delivery systems don't automatically speed up just because code generation does.

In other words, AI can help us produce code faster. It does not automatically help us prove that the software works. That proof still has to come from engineering discipline, automated validation, and the delivery systems around the code.

That lines up with the way IT Revolution described the downstream problem: "The current constraint in the delivery cycle is usually somewhere downstream of the coding effort: code review, integration, system test, or some other verification or validation step." If that is true, then writing more code faster does not help much unless the validation system gets stronger and more automated too.

Testing Is the Safety Net Now

This is not a new idea. Integration and system tests in the deployment pipeline have always mattered. What AI changes is how little room we have left to pretend they are optional. If AI helps us generate code faster, automated validation cannot stay a "we'll add that later" item. For new systems, that means building it in from the start. For existing systems, it means moving automated validation into the delivery path now, before manual QA becomes the bottleneck.

As AI makes writing code cheaper, unit tests are not enough. Unit tests can tell us whether a function behaves the way we expect. They do not tell us the system works. Automated integration and system tests in the deployment pipeline are the safety net for delivering applications in the AI-native era.

Those tests need to run before production. And if they fail, that should pull the Andon Cord: make the problem visible, stop the pipeline, and get the right people swarming on it immediately. Not warn us politely. Not create a ticket for somebody to look at someday. Stop the pipeline until the safety net is green again.

This also changes what we need to pay attention to in code review. It has been easy to treat test code as a second-class citizen in the code base because it is not the actual product code. We review the product code carefully, then give the tests a lighter pass as long as they exist and seem reasonable.

Tests are code. They do not stay useful because we wrote them once. Every new feature, every meaningful change, and every bug fix should leave the pipeline with better coverage than it had before. If the product keeps changing and the tests do not, the safety net slowly stops protecting the system we are shipping.

That does not work anymore. If tests are what we are relying on to validate AI-assisted changes, then tests need to get at least the same scrutiny as the product code, if not more. First, we need to know the system works on the happy path. If we do not have that, the risk is not that we missed an edge case. The risk is that the system fails and nothing in the pipeline catches it. Even when the pipeline is green and all the checks pass, the safety net can still have holes in it.

That is the part that gets more important in an AI-assisted world. Testing is not becoming more important because AI writes bad code. Testing is becoming more important because AI writes a lot of code, and it makes an old problem harder to ignore. We have always been able to write code faster than we can prove it works.

That proof cannot depend on manual QA catching up after the fact. It has to be built into the delivery system. The pipeline needs to keep asking the same blunt question before we ship: does the product still work the way we think it does?

Unit Tests Still Matter, But They Are Not Enough

None of this makes unit tests less useful. It makes them less sufficient. Unit tests still matter because they are fast, close to the code, and good at helping us understand small pieces of behavior. They can catch regressions while the change is still small enough to understand, and they can make debugging easier without forcing us to reason through the whole system every time.

But unit tests are not a substitute for integration and system tests. They can give us fast feedback that small pieces behave correctly in isolation. They cannot show that the product works when those pieces are wired together, deployed, configured, authenticated, authorized, and used the way customers use it. Unit tests are still worth writing. They help us move faster safely only when they sit alongside integration and system tests that prove the product still works.

What We Need to Do Now

AI is not making software engineering easier. It is making some parts faster and other parts harder to ignore. Testing is one of those parts.

If we are going to use AI to create more code, we need delivery pipelines that can handle more change. That means automated integration and system tests that run before production. It means failed tests stop the pipeline. It means tests get reviewed like code because they are code.

It also means treating tests as part of every feature, every meaningful change, and every bug fix. Not someday. Not after the release. As part of the work. If the product changes and the tests do not, the pipeline gets less trustworthy over time.

As the 2025 DORA research puts it, AI's primary role is "as an amplifier, magnifying an organization's existing strengths and weaknesses." If the pipeline is slow, fragile, or mostly dependent on manual validation, AI will just move the bottleneck downstream faster. The teams that benefit most from AI will not be the ones that generate the most code. They will be the ones that can safely absorb more change because their pipelines give them fast, honest feedback about the current state of the product.


References

·        Leah Brown, How to Work with AI Coding Tools Without Losing Your Engineering Judgment, IT Revolution: https://itrevolution.com/articles/how-to-work-with-ai-coding-tools-without-losing-your-engineering-judgment/

·        Jonathan Snyder, Triangulating for Truthiness: Effective Engagement with LLMs for Software Development and Operations, IT Revolution: https://itrevolution.com/product/triangulating-for-truthiness/

·        GeeksforGeeks, Deterministic vs Probabilistic AI: Why Modern Models Lack Predictability: https://www.geeksforgeeks.org/artificial-intelligence/ai-for-geeks-week2/

·        Google Cloud DORA, ROI of AI-Assisted Software Development: https://cloud.google.com/resources/content/dora-roi-of-ai-assisted-software-development

·        DORA, State of AI-assisted Software Development 2025: https://dora.dev/report/2025

·        Octopus Deploy, 2026 AI Pulse Report: https://octopus.com/publications/ai-pulse-report

·        DevLead.io, DevTips: Andon Cord: https://devlead.io/DevTips/AndonCord

Software Craftsmanship — Why Testing Matters More Than Ever

A few weeks ago, I wrote a post called SoftwareCraftsmanship — When AI Writes the Code . The basic idea was pretty simple: AI hasn’t made so...