<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.viney.ca/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.viney.ca/" rel="alternate" type="text/html" /><updated>2026-08-17T02:40:07+00:00</updated><id>https://www.viney.ca/feed.xml</id><title type="html">Ouray Viney’s blog</title><subtitle>A blog for Software Engineering, Quality Engineering, Test Automation, Performance Engineering and more.</subtitle><author><name>Ouray Viney</name><email>ouray@viney.ca</email></author><entry><title type="html">Coverage is the BMI of Software Quality: A Comfortable Lie Your Board Believes</title><link href="https://www.viney.ca/2026/08/16/code-coverage-mutation-score-quality/" rel="alternate" type="text/html" title="Coverage is the BMI of Software Quality: A Comfortable Lie Your Board Believes" /><published>2026-08-16T00:00:00+00:00</published><updated>2026-08-16T00:00:00+00:00</updated><id>https://www.viney.ca/2026/08/16/code-coverage-mutation-score-quality</id><content type="html" xml:base="https://www.viney.ca/2026/08/16/code-coverage-mutation-score-quality/"><![CDATA[<p>Software engineers learned long ago that you cannot improve what you cannot measure. Boards took that lesson and ran with it, straight into the wrong metric. Code coverage (the percentage of source lines executed during a test run) now adorns dashboards from Silicon Valley to Singapore as the primary signal of software health. Mandate 80%, watch the number climb, congratulate the team, and file the slide. The ritual is reassuring, repeatable, and wrong. Code coverage is the BMI of software quality (a comparison Jared Toporek drew on the Stack Overflow blog, and it deserves to stick): a single number that feels scientific, correlates poorly with what actually matters, and is optimised above all else for its own improvement. Achieving a high score demands nothing so inconvenient as tests that catch bugs, merely tests that visit code. The board’s comfortable green dashboard may be the most expensive misunderstanding in modern engineering, and the industry has spent two decades building governance architecture on top of it.</p>

<h2 id="a-correlation-that-does-not-exist">A Correlation That Does Not Exist</h2>

<p>The foundational claim behind every coverage mandate is that higher coverage means fewer bugs in production. Microsoft Research tested this assumption across 100 open-source Java projects and found that code coverage has an insignificant correlation with post-release defect counts at the project level and a file-level correlation statistically indistinguishable from zero in practical terms (about minus 0.02). The finding directly contradicts the premise on which engineering departments worldwide have built their quality regimes. What makes this finding particularly uncomfortable is the near-universal enforcement of the 80% threshold as though it carried scientific authority. According to the Stack Overflow engineering blog (December 2025), a search for scientifically tested evidence linking that threshold to software quality comes up empty; the figure appears to derive from a misapplication of the Pareto principle, dressed up in the language of rigour without any of its substance. The 80% mark is not a finding: it is a folk tale that has survived long enough to acquire the trappings of orthodoxy. Worse, the metric punishes good engineering. Toporek works a deliberately simple hypothetical: a 100-line file at exactly 80% coverage contains a ten-line block duplicated elsewhere. Consolidate the duplicate, as the DRY principle demands, and the file falls to 90 lines with 70 covered: 77.8%, below the gate. The numbers are illustrative, but the mechanism is not; he reports hitting it on a real bug fix, and the arithmetic holds for any refactoring that deletes covered lines faster than uncovered ones. Engineers who improve the codebase watch the score decline and must either reverse the improvement or pad the suite.</p>

<h2 id="the-thirty-four-point-oracle-gap">The Thirty-Four-Point Oracle Gap</h2>

<p>If coverage tells you little, mutation testing tells you considerably more. The practice, introducing small, deliberate faults into source code and counting how many tests fail, exposes something coverage cannot: whether assertions actually validate behaviour, or merely observe that code ran without crashing. A practitioner study by J. Ghiringhelli, documented on Dev.to, found that a codebase reporting 93.1% line coverage yielded only a 58.62% mutation score. That 34-point gap represents the fraction of the codebase where a bug could be quietly introduced, all tests would continue to pass, and the CI pipeline would remain resolutely green. Three separate rounds of targeted assertion improvements were required to close it. The headline number had been accurate; it had simply been measuring the wrong thing: thoroughness of visitation, not rigour of judgement. Researchers at Carnegie Mellon and Northern Arizona University formalise this as the “oracle gap” (the difference between source-code coverage and mutation score), arguing it “surfaces important information about the extent and quality of a test effort beyond either adequacy metric alone,” particularly exposing files where weak assertions mask untested behaviour. A test that visits a function without asserting on its output is, in any meaningful sense, not a test. Coverage counts it; mutation testing does not. Google’s mutation-testing system, run by more than 24,000 developers across more than 1,000 projects in ten languages, shows the gap at industrial scale in the simplest way possible: mutants are generated only on lines that tests already cover, and some still survive. Every surviving mutant is a bug the green dashboard has already blessed.</p>

<h2 id="the-perverse-machine">The Perverse Machine</h2>

<p>The problem is accelerating, and artificial intelligence is doing the accelerating. A study of 1.2 million 2025 GitHub commits (Hora and Robbes, MSR 2026) found that agents generate test commits with a 36% mock-commit ratio, compared with 26% for human developers. More revealing still is the narrowness: in 95% of repositories with agent mock activity, agents reached for the classic mock type, with spies (33%) and fakes (32%) far behind, whereas human-authored mock commits spread across mock (91%), fake (57%), and spy (51%). The effect within a given repository is statistically significant but small, which is exactly what you would expect this early. The study measures prevalence, not consequence; the inference is mine: tests built from a single isolation pattern are the cheapest kind to generate and the kind most likely to assert that code ran rather than that it worked. If that inference is right, coverage dashboards will inflate at machine speed. If agent-written suites turn out to kill mutants at human rates, this paragraph is wrong, and the data to check is already public.</p>

<p>The deeper problem is not the metric itself but the governance architecture built around it. When coverage becomes a deployment gate, a performance-review line item, or a board-level KPI, it stops being a signal and becomes a target. Goodhart’s Law, the observation by economist Charles Goodhart that any measure which becomes a target ceases to be a good measure, operates without mercy on software quality. Coverage was never a particularly good measure to begin with. Promoted to a target, it is actively harmful.</p>

<p>The honest counter-case deserves the floor. The same Google group found coverage genuinely useful as developer feedback (Code Coverage at Google, ESEC/FSE 2019), and its mutation service pointedly computes no mutation score at all: coverage decides which lines get mutated, and the authors call mutation adequacy neither practical nor desirable. Mutation score is itself an imperfect proxy with a contested link to real faults. The defensible claim is therefore narrower than “coverage lies”: coverage is a fine floor and a poor ceiling, and it is the gap between coverage and kill rate, not either number alone, that carries signal. What would prove this post wrong: codebases where high line coverage coincides with high mutation kill rates at scale, or evidence that closing the oracle gap fails to reduce escaped defects.</p>

<p>As the chart below illustrates, four numbers put the dynamic side by side: one team’s reported coverage, the folk-tale threshold, the same threshold after an honest refactoring, and what the tests actually caught.</p>

<p><a href="/assets/charts/code-coverage-mutation-score-quality.png"><img src="/assets/charts/code-coverage-mutation-score-quality.png" alt="The Code Coverage Mirage" /></a></p>

<p>The Monday version of this is checkable. Pick the most critical service in your fleet. Run a mutation testing tool (such as PIT for Java, Stryker for JavaScript/TypeScript/C#, or mutmut for Python) against its core domain logic. Measure two numbers: the reported line coverage versus the mutation kill rate. If the gap exceeds twenty percentage points, your test suite is asserting on presence, not behaviour, and your green build is an illusion you can measure before production surfaces it for you.</p>

<h2 id="references">References</h2>

<ol>
  <li>
    <p>Microsoft Research. “Code Coverage and Post-Release Defects: A Large-Scale Study on Open Source Projects.” <a href="https://www.microsoft.com/en-us/research/publication/code-coverage-and-post-release-defects-a-large-scale-study-on-open-source-projects/">https://www.microsoft.com/en-us/research/publication/code-coverage-and-post-release-defects-a-large-scale-study-on-open-source-projects/</a></p>
  </li>
  <li>
    <p>Ghiringhelli, J. “The AI Reported 93.1% Coverage. It Was 34% Off.” <em>Dev.to</em>, 2025. <a href="https://dev.to/jghiringhelli/the-ai-reported-931-coverage-it-was-34-290k">https://dev.to/jghiringhelli/the-ai-reported-931-coverage-it-was-34-290k</a></p>
  </li>
  <li>
    <p>Jain, K., Kalburgi, G. T., Le Goues, C., and Groce, A. “Mind the Gap: The Difference Between Coverage and Mutation Score Can Guide Testing Efforts.” <em>ASE</em>, 2023. <a href="https://arxiv.org/abs/2309.02395">https://arxiv.org/abs/2309.02395</a></p>
  </li>
  <li>
    <p>Petrović, G., Ivanković, M., Fraser, G., and Just, R. “Practical Mutation Testing at Scale: A View from Google.” <em>IEEE Transactions on Software Engineering</em>, 2021. <a href="https://dl.acm.org/doi/10.1109/TSE.2021.3107634">https://dl.acm.org/doi/10.1109/TSE.2021.3107634</a></p>
  </li>
  <li>
    <p>Toporek, J. “Making Your Code Base Better Will Make Your Code Coverage Worse.” <em>Stack Overflow Engineering Blog</em>, December 2025. <a href="https://stackoverflow.blog/2025/12/22/making-your-code-base-better-will-make-your-code-coverage-worse/">https://stackoverflow.blog/2025/12/22/making-your-code-base-better-will-make-your-code-coverage-worse/</a></p>
  </li>
  <li>
    <p>Hora, A. and Robbes, R. “Are Coding Agents Generating Over-Mocked Tests? An Empirical Study.” <em>MSR</em>, 2026 (analysing 2025 commits). <a href="https://arxiv.org/abs/2602.00409">https://arxiv.org/abs/2602.00409</a></p>
  </li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="Test Automation" /><category term="quality-engineering" /><category term="test-automation" /><summary type="html"><![CDATA[Line coverage tells your board 93.1% is green. Mutation testing reveals a 34-point gap where logic errors survive every test run. Your CI is lying by omission.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/code-coverage-mutation-score-quality-hero.svg" /><media:content medium="image" url="https://www.viney.ca/assets/images/code-coverage-mutation-score-quality-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Velocity Illusion: AI Agents Are Shipping Microservices That Pass the Build and Break Production</title><link href="https://www.viney.ca/2026/08/15/microservices-testing-ai-agents/" rel="alternate" type="text/html" title="Velocity Illusion: AI Agents Are Shipping Microservices That Pass the Build and Break Production" /><published>2026-08-15T00:00:00+00:00</published><updated>2026-08-15T00:00:00+00:00</updated><id>https://www.viney.ca/2026/08/15/microservices-testing-ai-agents</id><content type="html" xml:base="https://www.viney.ca/2026/08/15/microservices-testing-ai-agents/"><![CDATA[<p>Speed, in software engineering, has always been purchased on credit. AI coding agents have simply raised the credit limit to a genuinely alarming degree, and nowhere more acutely than in microservices architectures, where a single broken contract between services cascades in ways no unit test catches before production. Agentic development, as currently practised, is systematically eroding the assumptions on which microservices test strategy rests. That is the argument. The evidence for it is now quantified, cross-industry, and depressingly consistent. A survey of 300 QA engineers by DeviQA found that 52% reported increased bug volume since adopting AI-generated code, and not one respondent awarded AI output a perfect trust score; the mean was 3.16 out of 5. CodeRabbit’s December 2025 analysis of 470 real-world GitHub pull requests sharpens the picture further: AI-authored code contained 1.7 times more issues than human-authored submissions, logic and correctness errors ran 75% more prevalent, and security vulnerabilities ran as much as 2.74 times higher. The most common defect classes (logical errors, cited by 58% of DeviQA’s respondents, and unhandled edge cases, cited by 52%) are precisely the failure modes most damaging in loosely-coupled architectures where each service boundary is a trust assumption in disguise. One caveat belongs up front: every dataset in this piece is vendor telemetry, gathered by firms that sell into the problem they measure, and GitClear itself cautions against causal readings of its trend lines. The findings replicate across five independent vendors with different incentives, which is why they are worth taking seriously; it is corroboration, not proof.</p>

<h2 id="the-review-queue-that-cannot-clear">The Review Queue That Cannot Clear</h2>

<p>The problem compounds at the integration layer. LinearB’s 2026 Software Engineering Benchmarks Report, drawn from 8.1 million pull requests across 4,800 engineering teams in 42 countries, found that AI-assisted teams merged 98% more pull requests in 2026. At first glance, that reads as productivity. Read further and the picture inverts: review time rose 91%, AI-assisted pull requests waited 4.6 times longer for a reviewer to pick them up than human-authored submissions, and fully agentic pull requests waited 5.3 times longer, 1,055 minutes against 201. Acceptance rates diverged with equal drama: 32.7% for AI-generated code versus 84.4% for human-authored work. In a monolith, a slow review queue is a scheduling nuisance. In a microservices environment, where each service publishes and consumes contracts that other teams build against, a pickup lag of five times and more is a structural hazard. A breaking change to a payment service’s API surface sits unreviewed for the better part of eighteen hours while dependent services continue to integrate against a contract that no longer holds. The window between a broken contract and its detection, already a design challenge in distributed systems, widens by exactly the factor that makes agentic development feel so productive. That perversity is not incidental. It is what happens when the generation rate of plausible code outpaces the human capacity to evaluate it.</p>

<h2 id="duplications-compounding-tax">Duplication’s Compounding Tax</h2>

<p>Beneath the review bottleneck lies a structural problem that is slower but ultimately more corrosive. GitClear’s 2026 analysis of 623 million changed lines of code found that block-level code duplication climbed 81% between 2023 and 2026, reaching 73 duplicate blocks per million lines, while refactored code, the structural work that prevents independent services from calcifying into hidden dependency tangles, collapsed from 21% of all changes in 2022 to just 3.8% today. Copy-paste now outpaces refactoring five to one. In microservices architectures, duplication carries an operational cost. When a validation routine is copied between five services rather than extracted into a shared library, each service owns its own drift. A security patch applied to one copy must be applied to the other four, and frequently is not. A business-rule change propagates to three of the five before someone ships under a deadline. DeviQA’s finding that unhandled edge cases are the second most common AI defect class is not a coincidence: agents that autocomplete by analogy from surrounding context copy the logic and, invisibly, copy the gaps. Each duplicated block is a deferred renegotiation with the future, and in a microservices fleet, the fleet collects the debt.</p>

<h2 id="owasp-at-the-service-boundary">OWASP at the Service Boundary</h2>

<p>Microservices give security failures an ideal propagation medium. Veracode’s 2025 study of more than 100 large language models across 80 security-sensitive coding tasks found that 45% of AI-generated code samples contained OWASP Top 10 vulnerabilities, with Java faring worst at a 72% failure rate. More troubling still, the Cloud Security Alliance’s research note on that study observed that the pass rate remained flat at approximately 55% through March 2026 despite successive model releases. Scaling the model does not fix it. Service boundaries are where authentication tokens are validated, where data crosses trust domains, where injection attacks find their foothold. When an AI agent writes the authentication middleware for a new microservice and that middleware fails a basic OWASP check, the failure is invisible until an attacker or a penetration tester surfaces it. Most teams discover security vulnerabilities by the latter route; the window between deployment and discovery is typically long enough to matter. A contract test suite that verifies business logic whilst ignoring security contracts at the service boundary is, at this juncture, a liability dressed as assurance.</p>

<h2 id="specification-as-the-artefact">Specification as the Artefact</h2>

<p>The methodological corrective gaining traction among teams grappling with these failures is spec-driven development. The honest version of the evidence runs through METR’s pair of studies. Its 2025 randomized trial of 16 professional developers across 246 real-world tasks found developers using AI agents felt 20% faster while measuring 19% slower. In February 2026 METR revised the picture: after correcting a selection effect, a larger cohort of 57 developers across 800 plus tasks showed a statistically indistinguishable 4% slowdown, and METR now judges that current tools likely help. What survived the revision, in both cohorts, is the perception gap: developers consistently believe they are faster than the clock says. That gap is the velocity illusion, and it is why the LinearB queue data matters more than any single speed estimate. Generation feels free; the 4.6 times pickup lag, the 32.7% acceptance rate, and the duplication tax are where the bill arrives. Agents generate plausible code (code that compiles, that passes the unit tests in the same repository, that reads like software) but that fails when integrated against a specification it was never given. Spec-driven development inverts the workflow by making the specification the artefact the agent must satisfy, rather than the output it produces. A consumer-driven contract test, written before the service is built, gives the agent a target precise enough to be falsifiable. An OpenAPI schema committed to the repository before the first line of implementation code constrains the agent to the contract rather than permitting it to invent one. The prediction, then: when an agent operates inside a well-formed specification envelope, the 1.7-times bug rate narrows; when it operates outside one, the 4.6-times pickup lag and 32.7% acceptance rate are roughly what physics predicts.</p>

<p>Two findings would weaken this argument. If LinearB’s 2027 benchmarks show AI PR acceptance converging toward the human 84% while review lag falls, the queue problem is transitional tooling friction, not structure. And if Veracode’s tracked security pass rate breaks meaningfully above its 55% band on the next model generation, the plateau was parametric after all. Neither has happened yet; both are checkable within a year. The choice is not between speed and quality. Teams that treat the specification, not the generated code, as the primary investment are discovering that the two are not in tension; they were always the same thing, and the agents simply made the elision expensive enough to notice. Software that ships faster than anyone can reason about it does not arrive at production: it escapes there.</p>

<p>The Monday version of this is checkable. Pick one service pair. Commit the consumer-driven contract and the OpenAPI schema to the repository before the agent writes a line, wire the contract test into the pipeline as a merge gate, and measure two numbers over the next quarter: first-review acceptance rate on AI-authored PRs against that boundary, and contract-related defects escaping to integration. If the first does not rise and the second does not fall, the specification envelope is not working and you should know within twelve weeks.</p>

<p>As the chart below illustrates, quality metrics, pull-request acceptance rates, and security vulnerability baselines diverge sharply when AI agents operate without strict specification boundaries.</p>

<p><img src="/assets/charts/microservices-testing-ai-agents.png" alt="The Quality Gap in AI Code" /></p>

<h2 id="references">References</h2>

<ol>
  <li>
    <p>DeviQA. <em>State of AI-Generated Code 2026: The QA and Testing Gap</em>. Survey of 300 QA engineers, SDETs, and test leads. https://www.deviqa.com/blog/state-of-ai-generated-code-2026-the-qa-and-testing-gap/</p>
  </li>
  <li>
    <p>CodeRabbit. <em>State of AI vs Human Code Generation</em> (December 2025). Analysis of 470 GitHub pull requests (320 AI-co-authored, 150 human-only). https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report</p>
  </li>
  <li>
    <p>LinearB. <em>2026 Software Engineering Benchmarks Report</em>. 8.1 million pull requests, 4,800 engineering teams across 42 countries. https://linearb.io/resources/software-engineering-benchmarks-report</p>
  </li>
  <li>
    <p>GitClear. <em>The Maintainability Gap: 2026 AI Code Quality Research</em>. 623 million changed lines, 2023 to 2026. https://www.gitclear.com/the_ai_code_quality_maintainability_gap</p>
  </li>
  <li>
    <p>Veracode (2025), as reported in Cloud Security Alliance Research Note. <em>AI-Generated Code Vulnerability Surge 2026</em>. Study of 100+ large language models across 80 security-sensitive coding tasks. https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-generated-code-vulnerability-surge-2026/</p>
  </li>
  <li>
    <p>METR. <em>Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity</em> (July 2025), arXiv:2507.09089; and METR, <em>We are Changing our Developer Productivity Experiment Design</em> (February 2026). https://metr.org/blog/2026-02-24-uplift-update/</p>
  </li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="Software Engineering" /><category term="Test Automation" /><category term="Security" /><category term="quality-engineering" /><category term="software-engineering" /><category term="test-automation" /><category term="security" /><summary type="html"><![CDATA[AI agents are merging microservices code faster than reviewers can reach it. Spec-driven development is the only discipline that puts the contract first.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/microservices-testing-ai-agents-hero.svg" /><media:content medium="image" url="https://www.viney.ca/assets/images/microservices-testing-ai-agents-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dead Links, Live Bugs: The Hallucination Debt in AI-Generated Tests</title><link href="https://www.viney.ca/2026/08/11/hallucination-debt-ai-test-generation/" rel="alternate" type="text/html" title="Dead Links, Live Bugs: The Hallucination Debt in AI-Generated Tests" /><published>2026-08-11T00:00:00+00:00</published><updated>2026-08-11T00:00:00+00:00</updated><id>https://www.viney.ca/2026/08/11/hallucination-debt-ai-test-generation</id><content type="html" xml:base="https://www.viney.ca/2026/08/11/hallucination-debt-ai-test-generation/"><![CDATA[<p>The AI tools writing your test suites did not learn software engineering. They learned the internet, a particular and ageing snapshot of it, filtered, compressed, and now partly dissolved. That distinction carries consequences, because the web they trained on is vanishing faster than anyone anticipated, and the test suites they produce carry the epistemological weight of a library whose shelves are quietly catching fire. According to Pew Research Center’s 2024 analysis, 25% of all webpages that existed at any point between 2013 and 2023 are now inaccessible. A quarter of the general web from that decade is gone. Whether the code-specific slice of it decayed at the same rate is not something anyone has measured, and there are reasons to think it did not: Stack Overflow does not delete answers, and popular package documentation is mirrored heavily. But the tutorials, the blog posts, the migration guides and the annotated stack traces that surround that durable core are ordinary webpages, subject to ordinary decay, and they are a large part of what these models read. Engineers who trust AI-generated tests are trusting a model that learned, in substantial part, from things that are no longer there to verify. That sounds like it should be the whole story, and for a while I thought it was. It is not. The most direct test of that mechanism has been run, and it came back negative. What follows is partly an argument and partly a retraction of one.</p>

<h2 id="a-library-eating-its-own-citations">A Library Eating Its Own Citations</h2>

<p>Link rot is not an abstraction. Pew Research Center’s 2024 analysis found that 54% of Wikipedia pages contain at least one broken reference link, and 11% of all Wikipedia reference links now point to nothing. The encyclopaedia that code-generating models treat as a quality signal for factual grounding has already surrendered a tenth of its cited evidence base to entropy. The situation deteriorates further in journalism: 23% of news webpages carry at least one broken link; 21% of government webpages do the same. Eighteen per cent of tweets vanish within three months of posting. This creates a temporal trap for any model trained on web crawls. Yu, Liu and Xiong, introducing Craw4LLM (arXiv:2502.13347, 2025), note that existing pipelines discard over 90% of raw crawled data as low quality, citing DataComp-LM, FineWeb and TXT360. Their own contribution is a crawler that scores pages by pretraining influence rather than graph connectivity; it measures crawling efficiency, and it makes no claim about the age profile of what survives filtering. That claim would be the interesting one, and as far as I can find, no published study has measured it. Whether surviving pretraining data skews older is an open question, and I am naming it as a gap rather than filling it. What is not in question is the consequence of a fixed training cutoff, whatever the age profile of the data behind it. A model cannot distinguish a package that existed in 2021 from one that exists today, cannot flag an API whose endpoint has moved, and cannot know that a security advisory has superseded the example it memorised. It produces confident output from partial evidence, because its training rewarded confidence and it has no mechanism for checking whether the evidence is still there.</p>

<h2 id="phantom-packages-baked-in-biases">Phantom Packages, Baked-In Biases</h2>

<p>Package hallucination is the most measurable symptom. A 2024 arXiv study (arXiv:2406.10279) spanning 576,000 code samples generated by 16 LLMs found that 19.7% of all software package names recommended were hallucinated, non-existent names that no engineer could install. Open-source models fared worse, reaching 21.7%. Even GPT-4 Turbo, the strongest closed-source model tested in that study, hallucinated 3.59% of packages in Python, the lowest rate of any model in the study. Those figures describe models tested in January 2024 and should be read with that date attached. A 2026 replication of the same methodology (Churilov, arXiv:2605.17062) ran five frontier models released between October 2025 and March 2026 across 199,845 paired Python and JavaScript prompts and measured rates between 4.62% and 6.10%, compressing the original 5.2-to-21.7 spread by roughly an order of magnitude. The floor has not moved: no 2026 model beat GPT-4 Turbo’s 3.59% from two years earlier. The ceiling has fallen sharply. Any argument that leans on a 21.7% open-source rate is arguing about a cohort that has been superseded. What survives the replication is narrower and more useful: 127 package names that all five frontier models invent identically, which is a registrable attack surface of 127 rather than 205,474, and a far more tractable thing to put on an allowlist. Those numbers are not confined to a controlled benchmark; they describe the routine experience of developers who ask a code-generating assistant to scaffold a test and receive imports referencing libraries that were deprecated, renamed, or never real.</p>

<p>A separate experiment in the same paper looked at whether these errors repeat. The authors took 500 prompts that had already produced a hallucination and re-ran each ten times across four of the sixteen models. The result splits sharply in two directions: 43% of hallucinated names came back identically on all ten runs, and 39% never came back at all. The persistent 43% is the half that matters for security, because a name that recurs is a name an attacker can enumerate and register. The 39% is the half that matters for interpretation, because it means roughly two in five of these errors really are one-off noise.</p>

<p>The errors are not random statistical noise. They are repeatable, and they are specific to individual models. What they are not, on the evidence, is an artefact of the vanishing web. Spracklen and colleagues tested that hypothesis directly: they compiled 12,871 packages that existed on PyPI between 2020 and 2022 and have since been removed, then checked them against every hallucination their study produced. Only 133 appeared, 0.17% of the corpus. The authors expected a sizeable share and reported that the finding contradicted their hypothesis. The same study found that 81% of unique hallucinated names came from exactly one of the sixteen models tested, including across models within the same family. A shared pool of dead links would predict convergent errors. The data shows the opposite. Whatever generates these names lives in the individual model’s generative process, and that is a harder problem than a stale corpus, not an easier one.</p>

<p>A developer who runs the generated test, watches it fail at the import line, and manually resolves the dependency has paid a tax that appears nowhere on any productivity dashboard. Multiply that correction across every team, every sprint, every CI pipeline running test generation at scale, and the phrase “hallucination debt” stops sounding metaphorical. It becomes a line item nobody has yet budgeted for, accruing silently beneath a layer of green status badges.</p>

<p>What would settle this. If hallucinated package names correlated with packages removed from PyPI or npm after a model’s training cutoff, the link-rot mechanism would have direct support. That test has been run and came back negative. A sharper test is still open: hold model and prompt constant and compare hallucination rates on API surfaces with heavy documentation churn against surfaces with stable, widely mirrored documentation. Until someone runs it, treat the argument here as a hypothesis about a mechanism rather than a measured finding. My confidence that link rot materially drives package hallucination specifically is about 25%. My confidence that it drives stale API and version errors, which is a different failure mode with a different evidence base, is about 60%.</p>

<h2 id="speed-without-correctness">Speed Without Correctness</h2>

<p>QA consequences are showing up in survey data, with the caveat that survey data is what we have. DeviQA, a QA outsourcing vendor, polled 300 QA engineers, SDETs and test leads through its own network in 2026; 52% reported that bug volume has increased since their development teams began using AI, and only 2% reported a decrease. The report is candid about its limits, and so should anyone citing it be: this is a non-probability sample of 300, it measures perceived rather than measured change in defect volume, and the organisation publishing it sells QA capacity. Those caveats do not make the number worthless. They make it a signal to corroborate rather than a measurement to quote. Developers simultaneously report higher output, with teams using AI merging 98% more pull requests than teams that do not, and individual developers completing 21% more tasks, per LinearB’s 2026 benchmarks report covering 8.1 million pull requests across 4,800 organisations. The productivity gain and the quality degradation are two faces of the same acceleration. AI is generating more code than human reviewers can adequately interrogate, and the tests it appends are not catching what the code is introducing. LinearB’s data adds a further layer: AI-authored pull requests are accepted at a rate of 32.7%, against 84.4% for human-authored PRs, and they wait 4.6 times longer for review pickup. Reviewers, whether consciously or not, are applying extra scepticism to AI output. The irony is that AI-generated tests rarely attract equivalent scrutiny. They run, they return a green result, and passing tests are culturally read as evidence of correctness regardless of what they actually assert. A test that verifies the output of a hallucinated dependency, or mocks an API endpoint whose contract shifted after the model’s training cutoff, provides the appearance of a safety net while offering none of its substance. It checks that the code does what the model believed it should do, which is an entirely different question from whether the code does what the system requires.</p>

<h2 id="security-as-the-bill-coming-due">Security as the Bill Coming Due</h2>

<p>Veracode’s GenAI Security Report 2025, spanning more than 100 LLMs across 80 coding tasks, found that 45% of AI-generated code samples contained at least one security vulnerability, and the rate held flat across successive model generations. Scaling the model did not reduce vulnerability density. That flatness is worth sitting with, because it does not match what happened to package hallucination over the same period. There, capability gains did move the number: the worst-case rate fell by roughly seventy per cent between the 2024 and 2026 cohorts, from 21.7% to 6.10%. Vulnerability density did not move at all. Two failure modes, one responding to model scale and one not, is a finding about the failure modes rather than about the models. Insecure patterns are well-formed, plausible, and abundant in training data in a way that non-existent package names are not, and a larger model reproduces them more fluently rather than less. That is a hypothesis, not a measurement, and I am flagging it as one. GitClear’s analysis of 623 million changed lines between 2023 and 2026, cited by DevIQA, found that copy-pasted code blocks rose 81% over that period, while refactored code fell from 21% to 3.8% of all changed lines. That is the structural signature of AI-assisted development at scale: suggestions arrive in bulk, get accepted as written, and accumulate without being interrogated. Tests written to cover those blocks without challenging their provenance are not safety nets. They are theatre.</p>

<p>The debt is real and the mechanism is not the one the title implies. Teams will not discover the gap through a failing build, because a hallucinated dependency that has been squatted resolves cleanly, installs cleanly, and passes the suite written to cover it. They will discover it through a breach, or through a quarterly defect trend they cannot explain because nobody recorded which code was AI-authored. As the chart below shows, web content decay across Wikipedia, news, and general domains mirrors the package hallucination rates of open-source models, highlighting a quality gap that QA teams are beginning to measure. The four controls that follow are cheap. The third one, the authorship field on the pull request, is the only way anyone, including me, will find out whether this article was pointing at the right thing.</p>

<p><img src="/assets/charts/hallucination-debt-ai-test-generation.png" alt="Horizontal bar chart comparing web decay with AI hallucination rates: Wikipedia pages with broken references 54%, QA teams reporting higher bug volume 52%, webpages from 2013 to 2023 now inaccessible 25%, news webpages with broken links 23%, open-source LLM package hallucinations 21.7%." /></p>

<h2 id="what-to-do-on-monday">What to Do on Monday</h2>

<p>Four controls, each with a way to tell whether it worked.</p>

<p><strong>Gate on resolution, before you gate on tests.</strong> Run dependency resolution as a discrete CI step ahead of the suite, so an invented import fails at the pipeline rather than on someone’s laptop at 16:40. Measure the count of build failures attributed to unresolvable packages per week. Expect it to spike, then decline. If it never spikes, the gate is not wired in.</p>

<p><strong>Pin, hash, and scan the lockfile rather than the manifest.</strong> A hallucinated name that has been squatted resolves cleanly and installs cleanly. Hash pinning is what distinguishes the package you reviewed from the package you received. Measure the percentage of repositories with hash-pinned lockfiles and SCA running against them.</p>

<p><strong>Mark AI-authored change at the pull request.</strong> You cannot measure the defect rate of AI-generated tests without a field that says which tests are AI-generated. This is a policy choice, not an engineering problem. Measure the percentage of PRs carrying authorship metadata, then segment escaped-defect rate by that field after one quarter. If the two segments look the same, this article was wrong and you will have the data to say so.</p>

<p><strong>Block the known 127.</strong> The frontier-cohort replication published the set of package names that all five tested models invent identically: 109 on PyPI, 18 on npm. That is a finite, enumerable list, which makes it the rare supply-chain control you can implement in an afternoon. Deny them at the proxy or the package manager configuration, and refresh the list when the next replication lands. Measure whether any of the 127 was ever requested in your estate. If one was, you have just found a developer who accepted a hallucinated import, and that is worth a conversation rather than a ticket.</p>

<h2 id="references">References</h2>

<ol>
  <li>Pew Research Center (2024). <em>When Online Content Disappears</em>. https://www.pewresearch.org/data-labs/2024/05/17/when-online-content-disappears/</li>
  <li>Yu, S., Liu, Z., and Xiong, C. (2025). <em>Craw4LLM: Efficient Web Crawling for LLM Pretraining</em>. arXiv:2502.13347. https://arxiv.org/abs/2502.13347</li>
  <li>Spracklen, J., Wijewickrama, R., Sakib, A. H. M. N., Maiti, A., Viswanath, B., and Jadliwala, M. (2025). <em>We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs</em>. USENIX Security Symposium 2025. arXiv:2406.10279. https://arxiv.org/abs/2406.10279</li>
  <li>Churilov, A. (2026). <em>The Range Shrinks, the Threat Remains: Re-evaluating LLM Package Hallucinations on the 2026 Frontier-Model Cohort</em>. arXiv:2605.17062. https://arxiv.org/abs/2605.17062</li>
  <li>DevIQA (2026). <em>State of AI-Generated Code 2026: The QA and Testing Gap</em> (citing LinearB 2026, Veracode GenAI Security Report 2025, GitClear 2026). https://www.deviqa.com/blog/state-of-ai-generated-code-2026-the-qa-and-testing-gap/</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="Software Engineering" /><category term="Test Automation" /><category term="Security" /><category term="quality-engineering" /><category term="software-engineering" /><category term="test-automation" /><category term="security" /><summary type="html"><![CDATA[AI code generators trained on a quarter-vanished web embed phantom packages and stale APIs into test suites, compounding a quality debt no dashboard measures.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/hallucination-debt-ai-test-generation-hero.svg" /><media:content medium="image" url="https://www.viney.ca/assets/images/hallucination-debt-ai-test-generation-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Migration Fever: The Tests You Skip Are the Delays You Buy</title><link href="https://www.viney.ca/2026/08/02/migration-deadline-testing-trap/" rel="alternate" type="text/html" title="Migration Fever: The Tests You Skip Are the Delays You Buy" /><published>2026-08-02T00:00:00+00:00</published><updated>2026-08-02T00:00:00+00:00</updated><id>https://www.viney.ca/2026/08/02/migration-deadline-testing-trap</id><content type="html" xml:base="https://www.viney.ca/2026/08/02/migration-deadline-testing-trap/"><![CDATA[<p>Project managers facing a fixed migration deadline are offered a tempting equation: compress the test phase, hit the go-live date, deal with the fallout later. It feels rational. Deadlines are public commitments; test suites are internal niceties. The gamble, made in hundreds of boardrooms every quarter, rests on the assumption that “later” is a manageable country with familiar roads. It is not. It is a territory without maps, funded from next year’s budget. The macro evidence should settle the argument. According to McKinsey (2021), three-quarters of cloud migrations exceeded their budgets and 37% experienced schedule delays — outcomes strongly correlated with compressed testing windows before cutover. A Forbes survey from the same year found 64% of data migrations blew their budgets and 54% ran behind schedule. On ERP projects, McKinsey (2019) found 75% failed to stay on time or within budget, with roughly two-thirds producing negative ROI. The date was met, technically. The project was not.</p>

<h2 id="a-deadline-won-is-a-crisis-postponed">A Deadline Won Is a Crisis Postponed</h2>

<p>The mechanism is not mysterious. When test cycles are eliminated to preserve a cutover date, the defects are not eliminated — they are relocated. An empirical study of 8 open-source projects spanning 12,300 commits and 371 releases, published on arXiv in May 2025, quantified what happens next. In Home Assistant, 85% of scheduled deadlines were followed by spikes in bug-related issues. Kubernetes showed technical-debt peaks immediately before deadlines in 74.1% of measurement windows. GitLab had 77% of feature issues created in a rush just before deadlines. The data describes not a bug but a policy: the deadline is the mechanism by which work is deferred rather than completed. What the distribution reveals is what enterprise architects already know but rarely say aloud: the release date marks the beginning of the crisis, not its end. The delivery team goes home exhausted; the support organisation inherits a defect backlog it did not create and cannot understand. Migration projects that were three months behind schedule at cutover tend not to catch up — they accumulate. The dynamic is perverse. Shortening the test cycle does not compress the timeline; it displaces the work onto a phase — production support — that is slower, noisier, and structurally unsuited to systematic fault-clearing. A bug caught in a test environment costs an afternoon. The same bug reaching thousands of live users costs an incident, a root-cause analysis, an emergency patch, and a customer-relations reckoning. The deadline was met in the calendar. It has not been met anywhere else.</p>

<h2 id="the-defect-tax-nobody-has-measured">The Defect Tax Nobody Has Measured</h2>

<p>Anyone arguing for the test cycle reaches for the same chart: a defect costs 1× to fix at design, 15× at testing, and 60 to 100 times as much in production, attributed to the IBM Systems Sciences Institute. The number is quoted in vendor decks, conference talks and business cases, and it is almost certainly worthless. The Institute was an internal staff training programme, not a research body. The chart’s traceable origin is Roger Pressman’s 1987 textbook, whose citation reads “[IBM81]” — course notes. Laurent Bossavit, who followed the chain back, found no underlying data at all, and dated whatever project figures might once have existed to 1981 or earlier, possibly 1967.</p>

<p>That matters more than it first appears. The case for testing under deadline pressure has been resting, for forty years, on a number with nothing behind it — which is precisely the sort of unexamined assumption a migration programme is built from. The case does not need it. The Consortium for Information and Software Quality put the cost of poor software quality to US organisations at $2.41 trillion in 2022, and the deadline studies above measured where the defects actually go. The honest claim is not that a production bug costs sixty times a design bug. It is that nobody knows the multiplier, the organisation discovers it only after go-live, and no migration plan has ever budgeted for it. A known, bounded cost is being exchanged for an unknown one, and the exchange rate is set after the trade. The behaviour is further entrenched by organisational accounting. Test failures before go-live appear on the project’s ledger. Production incidents after go-live appear on operations. The deadline is measured against the project; the blowout is someone else’s budget line. This accounting fiction is what makes the gamble feel rational at the time, and catastrophic in retrospect — usually during the following year’s planning cycle, when a new transformation programme is scoped to fix what the last one left behind.</p>

<h2 id="debt-that-doubled-while-teams-sprinted">Debt That Doubled While Teams Sprinted</h2>

<p>The project-level dynamics are only part of the picture. Oliver Wyman calculated in July 2024 that global technical debt roughly doubled between 2012 and 2023, growing by approximately $6 trillion. Three US industries alone — banking and investment, communications, and government — accounted for 64% of an estimated $2.2 trillion of that growth domestically. Oliver Wyman’s prescription: earmark 15–20% of IT budgets for systematic debt reduction. Organisations that defer until crisis typically spend 30–40% on emergency transformation programmes instead — twice the rate, under conditions far worse for careful engineering. The developer doing the actual work already knows where the time goes. Stripe found in 2018 that engineers spend more than 17 hours per week — roughly 42% of their working time — on maintenance: debugging, refactoring, and unpicking the decisions of previous deadline sprints. That is the productivity premium sitting inside the test cycles being sacrificed. Now add generative AI to the stack. Faros AI’s 2025 analysis of development pipelines, drawing on DORA data, found that bugs per developer rose 54% year-on-year, the probability of a production incident more than tripled per merged change, and 31% more pull requests were merged with no review at all — with PR review time rising 441% as volume outpaced reviewer capacity. The DORA 2024 report simultaneously recorded a 3.4% code-quality improvement alongside a 7.2% drop in delivery stability. Throughput is up; fragility is up faster. The industry has discovered a novel method for skipping testing: automate the code generation and leave the human reviewer too far behind to catch up. The project manager who cuts testing to hit the deadline is not buying speed. She is writing a bond with a floating interest rate, no maturity date, and no coupon payments — just a principal that compounds until the next transformation programme is commissioned to pay it off. The next transformation, naturally, will also have a fixed deadline.</p>

<h2 id="references">References</h2>

<ol>
  <li>Curiosity Software, “Too Many Migration Projects Fail” (2024) — citing McKinsey (2019, 2021) and Forbes (2021). <a href="https://www.curiositysoftware.ie/blog/too-many-migration-projects-fail">https://www.curiositysoftware.ie/blog/too-many-migration-projects-fail</a></li>
  <li>Empirical study of scheduled deadlines and defect spikes across 8 open-source projects, arXiv, May 2025. <a href="https://arxiv.org/html/2505.04027v1">https://arxiv.org/html/2505.04027v1</a></li>
  <li>Consortium for Information and Software Quality (CISQ), 2022 annual report on the cost of poor software quality. Via ContextQA. <a href="https://contextqa.com/blog/cost-of-defects-in-software-testing/">https://contextqa.com/blog/cost-of-defects-in-software-testing/</a></li>
  <li>Laurent Bossavit, “The IBM Systems Science Institute” — tracing the 1:15:60-100 defect-cost ratios to course notes cited in Pressman (1987), with no underlying data. <a href="https://gist.github.com/Morendil/ebfa32d10528af04e2ccb8995e3cb4a7">https://gist.github.com/Morendil/ebfa32d10528af04e2ccb8995e3cb4a7</a></li>
  <li>“Everyone cites that ‘bugs are 100x more expensive to fix in production’ research, but the study might not even exist”, The Register, 22 July 2021. <a href="https://www.theregister.com/2021/07/22/bugs_expense_bs/">https://www.theregister.com/2021/07/22/bugs_expense_bs/</a></li>
  <li>Oliver Wyman, “Reducing Technical Debt” (July 2024). <a href="https://www.oliverwyman.com/our-expertise/insights/2024/jul/reducing-technical-debt.html">https://www.oliverwyman.com/our-expertise/insights/2024/jul/reducing-technical-debt.html</a></li>
  <li>Stripe (2018) developer time survey; Stepsize (2021) longitudinal study. Via Rockstar Developer University. <a href="https://rockstardeveloperuniversity.com/technical-debt-statistics/">https://rockstardeveloperuniversity.com/technical-debt-statistics/</a></li>
  <li>Faros AI, “The 5th DORA Metric: Rework Rate — Track It Now” (2025). <a href="https://www.faros.ai/blog/5th-dora-metric-rework-rate-track-it-now">https://www.faros.ai/blog/5th-dora-metric-rework-rate-track-it-now</a></li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="Software Engineering" /><category term="quality-engineering" /><category term="software-engineering" /><summary type="html"><![CDATA[Skipping tests to hit migration deadlines converts a known go-live date into an open-ended production crisis with a compounding defect bill.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/migration-deadline-testing-trap-hero.png" /><media:content medium="image" url="https://www.viney.ca/assets/images/migration-deadline-testing-trap-hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Green Light, Red Ledger: Flaky Tests Are Engineering’s Costliest Invisible Tax</title><link href="https://www.viney.ca/2026/07/24/green-light-red-ledger-flaky-tests-invisible-tax/" rel="alternate" type="text/html" title="Green Light, Red Ledger: Flaky Tests Are Engineering’s Costliest Invisible Tax" /><published>2026-07-24T00:00:00+00:00</published><updated>2026-07-24T00:00:00+00:00</updated><id>https://www.viney.ca/2026/07/24/green-light-red-ledger-flaky-tests-invisible-tax</id><content type="html" xml:base="https://www.viney.ca/2026/07/24/green-light-red-ledger-flaky-tests-invisible-tax/"><![CDATA[<p>A software engineer who dismisses a failing CI pipeline as “probably flaky” is not cutting corners—she is making a statistically well-informed decision. That quiet act of professional resignation, multiplied across thousands of engineers and hundreds of daily builds, is how flaky tests drain engineering budgets: with the gentle persistence of a dripping tap that nobody has been asked to fix. Flaky tests are a quantifiable payroll cost, a signal-to-noise crisis, and a structural defect in how software quality is measured. Auto-retry scripts manage the symptom and bill the difference to the engineers.</p>

<h2 id="the-payroll-cost-of-phantom-failures">The Payroll Cost of Phantom Failures</h2>

<p>At Atlassian, flaky tests waste an estimated 150,000 developer-hours per year in the Jira backend repository alone, according to Atlassian’s engineering blog. In the Jira Frontend repository, 21% of all master build failures are caused not by defective code but by tests that disagree with themselves from one run to the next. One in five emergency Slack notifications is, strictly speaking, a lie. A peer-reviewed industrial case study presented at ICST 2024, tracking 30 engineers over five years, put the broader cost in terms that any CFO can read without a tutorial in continuous integration. Flaky tests consumed at least 2.5% of productive developer time: 1.1% investigating false failures, 1.3% repairing them, and the remainder maintaining detection tooling. Across the study period, that amounted to roughly 6,600 developer-hours: 3.75 full developer-years, evaporated on chasing noise rather than shipping features or closing security vulnerabilities.</p>

<h2 id="a-signal-to-noise-catastrophe">A Signal-to-Noise Catastrophe</h2>

<p>Google’s engineers discovered that 16% of all tests in the company’s codebase carry some degree of flakiness, a figure remarkable enough on its own. More corrosive is what Google found when examining build transitions: 84% of test-suite transitions from passing to failing are caused by flaky tests rather than genuine code defects, according to Google’s Testing Blog. As the chart below illustrates, when a build turns red, the overwhelmingly probable explanation is not that a developer introduced a regression. It is that a test decided to behave differently on a Tuesday. Engineers, being empiricists, eventually update their priors accordingly and stop trusting the signal. This erosion of trust is the compounding cost that balance sheets do not capture. An alert system that cries wolf 84% of the time is not an alert system; it is ambient noise. Teams that have learnt to distrust their test suites begin shipping with lower confidence in quality gates, schedule additional manual review sessions, and, most damagingly, delay deployments until someone with institutional knowledge can intuit whether a failure “looks real.” The hidden overhead has been quietly offloaded from the pipeline to the engineer’s nervous system.</p>

<h2 id="the-arithmetic-of-investigation">The Arithmetic of Investigation</h2>

<p>The ICST 2024 case study also produced one of the starkest pieces of unit economics in recent software engineering research: manual investigation of a flaky pipeline failure costs $5.67 in developer time, versus $0.02 for an automatic rerun, a 280-fold gap. This arithmetic explains why silent auto-retry has become the de facto industry response. It is cheaper, in the narrow sense, to rerun a test three times and declare it stable than to pay a senior engineer to diagnose why it failed. The trouble is that auto-retry is an anaesthetic, not a cure; it masks the systemic rot while the cost accumulates elsewhere. Microsoft researchers found that flaky test failures could be reproduced in only 25–43% of cases even after 500 individual test runs under controlled conditions, per analysis reported by CloudBees. When the failure cannot be reliably reproduced, root-cause analysis becomes epistemically impossible; the engineer is hunting a ghost. A large fraction of flaky tests are therefore never fixed; they are quarantined, muted, or deleted, taking whatever signal they once carried with them into the void.</p>

<h2 id="asynchronous-roots-concentrated-fixes">Asynchronous Roots, Concentrated Fixes</h2>

<p>The news is not uniformly grim. A 2025 empirical study of 22 Java projects, published on arXiv, found that 75% of flaky tests cluster into co-failing groups rather than failing in isolation, which means failures are correlated and not random. More usefully, nearly half of all flakiness (45%) traces to a single root cause: asynchronous wait errors. Tests that race against timers, threads, and I/O operations, and lose, account for the lion’s share of the entire problem. This concentration is good news for engineering teams willing to invest in a targeted fix rather than a general retry policy; a single focused sprint on async test hygiene could halve the noise that is currently drowning the signal. Engineering teams that treat flakiness as background radiation, something to be tolerated rather than measured, bounded, and eliminated, are paying a recurring tax on every deployment they ship. The most interesting question is not whether flaky tests are expensive; the arithmetic above settles that. It is why so many engineering leaders have tacitly agreed to keep paying. Auto-retry is a deal struck with short-term incentives: it makes the dashboard green, the standup short, and the quarterly metrics tidy. What it does not do is stop the clock on those 6,600 developer-hours quietly ticking away in the background. The dripping tap has a way of flooding the basement—and by then, the plumber charges considerably more than the pipe was worth. 
<img src="/assets/charts/green-light-red-ledger-flaky-tests-engineering-budget.png" alt="Chart" /></p>

<h2 id="references">References</h2>

<ol>
  <li>Parry, J. et al. “Cost of Flaky Tests in CI: An Industrial Case Study.” <em>ICST 2024 Industry Track</em>, April 2024. https://conf.researchr.org/details/icst-2024/icst-2024-industry/1/Cost-of-Flaky-Tests-in-CI-An-Industrial-Case-Study</li>
  <li>Atlassian Engineering. “Taming Test Flakiness: How We Built a Scalable Tool to Detect and Manage Flaky Tests.” <em>Atlassian Engineering Blog</em>. https://www.atlassian.com/blog/atlassian-engineering/taming-test-flakiness-how-we-built-a-scalable-tool-to-detect-and-manage-flaky-tests</li>
  <li>Micco, J. “Flaky Tests at Google and How We Mitigate Them.” <em>Google Testing Blog</em>, May 2016. https://testing.googleblog.com/2016/05/flaky-tests-at-google-and-how-we.html</li>
  <li>CloudBees Engineering. “The Flaky Test Confession: Ignoring Test Failures.” <em>CloudBees Blog</em>. https://www.cloudbees.com/blog/the-flaky-test-confession-ignoring-test-failures</li>
  <li>arXiv (2025). “Empirical Study of Flaky Test Co-Failure Groups in 22 Java Projects.” https://arxiv.org/html/2504.16777v1</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="Test Automation" /><category term="Software Engineering" /><category term="flaky-tests" /><category term="continuous-integration" /><category term="test-automation" /><category term="developer-productivity" /><summary type="html"><![CDATA[Flaky tests cost Atlassian 150,000 developer-hours a year and skew 84% of Google's CI signal. The real budget drain is larger than most leaders admit.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/green-light-red-ledger-flaky-tests-are-engineering-s-costliest-invisible-tax-hero.svg" /><media:content medium="image" url="https://www.viney.ca/assets/images/green-light-red-ledger-flaky-tests-are-engineering-s-costliest-invisible-tax-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The AI testing paradox: faster drafts, slower trust</title><link href="https://www.viney.ca/2026/04/27/the-ai-testing-paradox-when-silicon-valley-s-saviour-become/" rel="alternate" type="text/html" title="The AI testing paradox: faster drafts, slower trust" /><published>2026-04-27T00:00:00+00:00</published><updated>2026-04-27T00:00:00+00:00</updated><id>https://www.viney.ca/2026/04/27/the-ai-testing-paradox--when-silicon-valley-s-saviour-become</id><content type="html" xml:base="https://www.viney.ca/2026/04/27/the-ai-testing-paradox-when-silicon-valley-s-saviour-become/"><![CDATA[<figure class="article-chart">
  <img src="/assets/charts/ai-testing-paradox.svg" alt="GitClear analysis shows code churn in 2024 projected at roughly twice the 2021 pre-AI baseline" width="1200" height="720" />
  <figcaption><strong>Source:</strong> GitClear, <em>Coding on Copilot</em>, 2024</figcaption>
</figure>

<p>AI coding tools are exposing a management mistake more than a machine miracle. Teams celebrate how quickly a model can draft a function, scaffold a service, or autocomplete boilerplate, then act surprised when review queues lengthen and defects still escape. The paradox is simple: generative AI reduces the cost of producing code, but it does not reduce the cost of proving that the code deserves to run in production.</p>

<p>That distinction matters because many AI success stories measure speed at the moment of generation, not the full cost of verification and rework. GitHub’s own early Copilot study found that developers completed a controlled coding task faster with the tool’s help, which is useful evidence that AI can accelerate first drafts. But the same organisations adopting AI at scale still have to review architecture, validate business logic, test edge cases, and absorb maintenance overhead after the draft lands in the repository. Faster typing is not the same thing as trustworthy delivery.</p>

<h2 id="the-velocity-trap">The velocity trap</h2>

<p>The strongest pro-AI argument is also the easiest one to misuse. GitHub reported that developers in a controlled experiment completed a JavaScript task faster with Copilot, and large survey cohorts said the tool helped them stay in flow and reduce repetitive effort. Those gains are real. They also describe only one slice of the software lifecycle.</p>

<p>The operational question is not whether AI can make an engineer faster at producing an initial change. It can. The harder question is what happens next: how much extra review, correction, retesting, and monitoring is needed after that change enters a real system. Teams that optimise only for draft speed risk mistaking local efficiency for end-to-end productivity.</p>

<p>This is where the paradox starts to bite. AI can improve developer throughput at the keyboard while simultaneously increasing the amount of downstream validation work required from reviewers, testers, and maintainers. The output arrives sooner, but confidence arrives later.</p>

<h2 id="the-validation-bottleneck">The validation bottleneck</h2>

<p>Testing AI-generated code is not exotic because the syntax is unfamiliar. It is difficult because the code can look superficially plausible while missing the deeper constraints that matter in production: boundary conditions, data assumptions, failure handling, observability, and secure defaults. A function that compiles cleanly may still encode the wrong business rule or ignore the dangerous input that only appears in production traffic.</p>

<p>That is why AI-assisted development raises the value of disciplined review instead of eliminating it. NIST’s Secure Software Development Framework explicitly treats secure, well-governed software delivery as a lifecycle problem: define requirements, review changes, verify releases, and respond to residual vulnerabilities. Those are precisely the controls teams need when a model can generate more code than a human reviewer can comfortably absorb at a glance.</p>

<p>In practice, that means stronger expectations for tests around generated changes:</p>

<ol>
  <li>Require reviewers to validate intent, not just style.</li>
  <li>Increase emphasis on integration, property, and regression tests where business logic can drift silently.</li>
  <li>Treat provenance and change-risk tracking as part of the release decision, not optional paperwork.</li>
</ol>

<p>Without those controls, AI does not remove the testing burden. It redistributes it downstream, where mistakes are more expensive.</p>

<h2 id="the-maintenance-bill">The maintenance bill</h2>

<p>The best public warning sign so far comes from GitClear’s analysis of roughly 153 million changed lines of code. Its 2024 report argues that code churn is on pace to double relative to a 2021 pre-AI baseline, while copy-pasted additions rise and refactoring activity weakens. That combination matters because maintainability rarely fails all at once. It erodes when teams add more code than they reshape, review, or simplify.</p>

<p>That maintenance bill is what many AI ROI stories leave out. A model can produce a usable draft in seconds, but a brittle draft still becomes someone else’s debugging session, rollback, or cleanup project later. As explored in <a href="/2026/04/05/practical-applications-of-ai-in-software-development/">The coder’s crutch: AI-assisted development’s hidden costs</a>, the real organisational risk is not that AI writes nothing of value. It is that leaders start measuring generation volume while underinvesting in the systems that keep generated code legible and safe.</p>

<p>The same pattern shows up in testing strategy. If quality work remains a final-stage inspection exercise, more generated code simply means more material arriving at the gate. If teams instead treat quality as a system property — the distinction at the heart of <a href="/2026/04/12/understanding-qa-qc-and-quality-engineering/">QA, QC and quality engineering</a> — then AI becomes another input that must be governed through design, review, instrumentation, and feedback loops.</p>

<h2 id="what-good-teams-do-instead">What good teams do instead</h2>

<p>The practical response is not to ban AI coding tools or pretend the productivity gains are imaginary. It is to tighten the surrounding system so faster drafts do not become slower recovery:</p>

<ol>
  <li>Use AI to accelerate low-risk drafting, scaffolding, and repetitive work rather than to bypass design.</li>
  <li>Make generated code earn trust through review depth, test coverage, and production observability.</li>
  <li>Track rework, rollback, and churn alongside speed metrics so AI’s hidden costs stay visible.</li>
  <li>Keep release governance outcome-focused: if confidence is weak, the change is not ready no matter how quickly it was produced.</li>
</ol>

<p>The long-term winners will not be the teams that generate the most code. They will be the teams that build the most reliable system around generated code.</p>

<h2 id="references">References</h2>

<ol>
  <li>GitHub, <a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/"><em>Research: quantifying GitHub Copilot’s impact on developer productivity and happiness</em></a>, 2022.</li>
  <li>GitClear, <a href="https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality"><em>Coding on Copilot: 2024 data suggests AI assistants are increasing code churn and reducing refactoring</em></a>, 2024.</li>
  <li>NIST, <a href="https://csrc.nist.gov/Projects/ssdf"><em>Secure Software Development Framework (SP 800-218)</em></a>, accessed 2026.</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Quality Engineering" /><category term="ai-assisted-development" /><category term="testing" /><category term="code-quality" /><category term="software-delivery" /><summary type="html"><![CDATA[AI coding tools speed up first drafts, but they also increase rework risk unless teams strengthen review, testing, and governance.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/the-ai-testing-paradox-hero.svg" /><media:content medium="image" url="https://www.viney.ca/assets/images/the-ai-testing-paradox-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI-Driven Threat Detection in Enterprise Networks</title><link href="https://www.viney.ca/2026/04/12/ai-threat-detection-enterprise/" rel="alternate" type="text/html" title="AI-Driven Threat Detection in Enterprise Networks" /><published>2026-04-12T00:00:00+00:00</published><updated>2026-04-12T00:00:00+00:00</updated><id>https://www.viney.ca/2026/04/12/ai-threat-detection-enterprise</id><content type="html" xml:base="https://www.viney.ca/2026/04/12/ai-threat-detection-enterprise/"><![CDATA[<p><img src="/assets/charts/ai-threat-detection-enterprise.svg" alt="AI threat detection impact: 92% reduction in investigation time, 108 days faster breach detection, $2.22M saved per incident" width="800" height="400" />
<em>Source: IBM Cost of a Data Breach Report, 2025; CrowdStrike Charlotte AI, 2024; Palo Alto Networks Unit 42, 2024</em></p>

<p>Signature-based intrusion detection systems were built for a world of known threats. That world no longer exists. IBM’s 2025 Cost of a Data Breach Report found that organisations using AI-driven security tools detected breaches 108 days faster than those relying on traditional methods — and saved an average of $2.22 million per incident. As adversaries weaponise generative AI to craft polymorphic malware and zero-day exploits at industrial scale, the enterprise security industry is undergoing its most significant architectural shift in two decades: the migration from pattern-matching to machine-learning-based threat detection.</p>

<h2 id="the-signature-problem">The signature problem</h2>

<p>Traditional intrusion detection and prevention systems — IDS and IPS — operate on a conceptually simple model. Security researchers identify a malicious payload, extract a unique byte pattern, and distribute that signature to every sensor on the network. When traffic matches the pattern, the system fires an alert. The approach works reliably against known threats. It fails catastrophically against unknown ones.</p>

<p>The mathematics of the problem have turned decisive. AV-TEST, the independent security research institute, registers over 450,000 new malware samples and potentially unwanted applications every day. No human team can write signatures fast enough to keep pace. Worse, modern attack techniques — fileless malware, living-off-the-land binaries, encrypted command-and-control channels — leave no static signature to match against. Palo Alto Networks’ Unit 42 threat research division reported that 40% of the incidents it investigated in 2024 involved techniques that would evade conventional signature-based detection entirely.</p>

<p>The result is a detection gap that widens with every passing quarter. Enterprises that depend solely on legacy IDS/IPS are not merely accepting known risk — they are accumulating unknown risk at an accelerating rate.</p>

<h2 id="how-machine-learning-changes-the-equation">How machine learning changes the equation</h2>

<p>AI-driven threat detection inverts the traditional model. Instead of asking “does this traffic match a known bad pattern?”, machine-learning systems ask “does this traffic deviate from learned normal behaviour?” The distinction is profound. A signature-based system can only catch what it has seen before. A behavioural model can flag what it has never seen — precisely the category that matters most.</p>

<p>The approach relies on several complementary techniques. Supervised models trained on labelled datasets of malicious and benign traffic provide baseline classification. Unsupervised anomaly detection identifies statistical outliers in network flow data — unusual data volumes, atypical connection patterns, or communications with previously unseen endpoints. Deep-learning architectures, particularly recurrent neural networks and transformers, analyse sequences of network events to detect multi-stage attack campaigns that unfold over days or weeks, where no single event would trigger a traditional alert.</p>

<p>CrowdStrike’s Charlotte AI, introduced in 2024, exemplifies the operational shift. The platform correlates endpoint telemetry, identity data, and network traffic using large language models to generate natural-language threat assessments in real time. CrowdStrike reported that Charlotte AI reduced mean investigation time from 60 minutes to under 5 minutes for tier-one analysts — a 92% reduction that directly addresses the chronic staffing shortage in security operations centres. Darktrace, a British cybersecurity firm, takes an alternative approach with its Enterprise Immune System, which builds bespoke behavioural models for each customer network without relying on pre-existing threat intelligence. The company disclosed that its AI autonomously interrupted over 10 million threats per year across its customer base by 2025.</p>

<h2 id="the-false-positive-trade-off">The false-positive trade-off</h2>

<p>AI-driven detection is not without costs. The same sensitivity that catches novel threats also generates false positives — benign activities flagged as suspicious because they deviate from learned baselines. A developer downloading an unusually large dataset for a legitimate project, a marketing team launching a new SaaS tool without informing IT, or a server running a scheduled batch job at an atypical hour can all trigger behavioural alerts.</p>

<p>The industry has converged on a layered mitigation strategy. Initial anomaly scores are refined through ensemble models that cross-reference multiple data sources. Adaptive feedback loops incorporate analyst decisions — when a human marks an alert as a false positive, the model retrains. And increasingly, security orchestration platforms use reinforcement learning to tune alert thresholds dynamically, balancing detection sensitivity against analyst fatigue.</p>

<p>Microsoft’s Security Copilot, launched in 2024 and integrated across its Defender product suite, illustrates this feedback architecture. The system uses GPT-4-class models to contextualise alerts, correlate indicators of compromise across email, endpoint, and cloud workloads, and draft incident reports. Microsoft reported that Security Copilot increased the accuracy of junior analysts by 44% in controlled trials — a metric that matters enormously given that the global cybersecurity workforce gap reached 4.8 million unfilled positions in 2024, according to ISC2’s annual workforce study.</p>

<h2 id="enterprise-adoption-patterns">Enterprise adoption patterns</h2>

<p>Adoption is accelerating but uneven. Gartner projected that by the end of 2026, 40% of enterprises will have deployed AI-augmented security operations, up from fewer than 5% in 2021. The largest deployments cluster in financial services, healthcare, and critical infrastructure — sectors where regulatory pressure and breach costs create strong economic incentives.</p>

<p>The deployment models vary. Some organisations embed AI detection within existing security information and event management (SIEM) platforms — Splunk, now owned by Cisco, and Microsoft Sentinel both offer native machine-learning modules. Others deploy dedicated network detection and response (NDR) solutions from specialists like Darktrace, Vectra AI, or ExtraHop. A third cohort builds bespoke models on internal data, an approach favoured by large banks with in-house data-science teams and proprietary threat-intelligence feeds.</p>

<p>The economics favour migration. IBM’s 2025 report calculated the average cost of a data breach at $4.88 million globally — the highest figure ever recorded. Organisations that had fully deployed AI in their security workflows reported average breach costs of $3.84 million, a $1.04 million saving. When detection speed, containment efficiency, and reduced analyst overhead are factored in, the return on investment for AI-driven security tools has become difficult to dispute.</p>

<h2 id="the-adversarial-horizon">The adversarial horizon</h2>

<p>The arms race is far from settled. Attackers are already using generative AI to produce convincing phishing emails, deepfake voice messages for social engineering, and polymorphic malware that mutates its code with every execution. The same transformer architectures that power defensive tools are available to offensive actors — a symmetry that the security industry calls the “dual-use dilemma.”</p>

<p>The implications extend well beyond network perimeters. As organisations instrument more of their operations — from software supply chains to cloud-native microservices — the attack surface grows faster than human teams can monitor. This is the same scaling challenge that confronts <a href="/2026/04/05/ai-quality-testing-automation/">quality engineering in software development</a>: the volume and velocity of signals have outstripped manual inspection capacity, making AI augmentation not a luxury but an operational necessity.</p>

<p>The enterprises that will fare best are those treating AI-driven threat detection not as a product purchase but as a capability investment — retraining analysts, building feedback loops, and accepting that the models will be imperfect but improvable. In cybersecurity, as in most domains where AI is transforming operations, the competitive advantage belongs not to those with the best algorithms but to those with the best data, the fastest learning cycles, and the institutional willingness to trust — and verify — machine judgement.</p>

<h2 id="references">References</h2>

<ol>
  <li>IBM Security, <a href="https://www.ibm.com/reports/data-breach">“Cost of a Data Breach Report 2025”</a>, <em>IBM</em>, 2025</li>
  <li>AV-TEST Institute, <a href="https://www.av-test.org/en/statistics/malware/">“Malware Statistics &amp; Trends Report”</a>, <em>AV-TEST</em>, 2025</li>
  <li>Palo Alto Networks, <a href="https://www.paloaltonetworks.com/unit42/incident-response-report">“Unit 42 Incident Response Report 2024”</a>, <em>Palo Alto Networks</em>, 2024</li>
  <li>ISC2, <a href="https://www.isc2.org/Research/Workforce-Study">“Cybersecurity Workforce Study 2024”</a>, <em>ISC2</em>, 2024</li>
  <li>Gartner, <a href="https://www.gartner.com/en/articles/gartner-top-10-strategic-technology-trends-for-2026">“Top Strategic Technology Trends 2026”</a>, <em>Gartner</em>, 2025</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Security" /><category term="cybersecurity" /><category term="ai" /><category term="threat-detection" /><category term="machine-learning" /><category term="enterprise-security" /><summary type="html"><![CDATA[Signature-based intrusion detection misses 60% of novel attacks. AI-driven threat detection is replacing legacy IDS/IPS across enterprise networks.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/ai-threat-detection-enterprise.png" /><media:content medium="image" url="https://www.viney.ca/assets/images/ai-threat-detection-enterprise.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Platform engineering’s adoption trap</title><link href="https://www.viney.ca/2026/04/12/platform-engineering-adoption-crisis/" rel="alternate" type="text/html" title="Platform engineering’s adoption trap" /><published>2026-04-12T00:00:00+00:00</published><updated>2026-04-12T00:00:00+00:00</updated><id>https://www.viney.ca/2026/04/12/platform-engineering-adoption-crisis</id><content type="html" xml:base="https://www.viney.ca/2026/04/12/platform-engineering-adoption-crisis/"><![CDATA[<p>Only 30% of companies fully realise the benefits of platform engineering within the first three years of adoption. Despite significant capital and engineering time invested, organisations repeatedly find that the gap between what platform engineering promises and what it delivers in practice is wider than expected. The culprits are rarely technical.</p>

<p><img src="/assets/charts/platform-engineering-adoption-crisis.png" alt="Platform Engineering Adoption Rates 2023–2026" width="2460" height="1667" />
<em>Source: Infrastructure Engineering research, 2025</em></p>

<h2 id="the-misunderstanding-at-the-core">The Misunderstanding at the Core</h2>

<p>Platform engineering sits at the crossroads of software development and operations. Its promise is straightforward: centralise internal infrastructure, reduce cognitive load on product teams, and accelerate delivery through self-service tooling. The reality is that organisations often cannot agree on what the role actually means.</p>

<p>Without a clear definition, platform teams get pulled in conflicting directions. Some are asked to build and maintain Kubernetes clusters. Others become an internal consulting function. Still others are treated as a second helpdesk. This role ambiguity produces weak integration and chronic underutilisation, ensuring the investment never compounds.</p>

<p>Developer portals are a case in point. Approximately 45% fail to meet user expectations, according to research on internal developer platforms conducted in 2025. The failure mode is almost always the same: the portal is built for the team that built it, not the developers expected to use it. Insufficient usability research, sparse documentation, and no feedback loop ensure that adoption stalls within the first quarter of launch.</p>

<h2 id="cultural-resistance-outlasts-technical-debt">Cultural Resistance Outlasts Technical Debt</h2>

<p>More than 60% of platform engineering initiatives encounter significant cultural pushback. This figure should not surprise anyone who has tried to change how an engineering organisation works. Technical transformation is a proxy for organisational transformation, and organisations resist the latter far more stubbornly than they resist upgrading a runtime.</p>

<p>The pattern is consistent. When platform teams introduce golden paths, mandatory CI templates, or centralised secrets management, engineers who have spent years building their own tooling perceive it as a loss of autonomy rather than a reduction in toil. The resistance is rarely explicit. It manifests as slow adoption metrics, polite non-compliance, and a quiet proliferation of shadow tooling that defeats the purpose of standardisation.</p>

<p>This is not a failure of the technology. It is a failure of change management. Organisations that treat platform engineering as a purely technical undertaking miss the larger challenge: earning the trust and buy-in of the developers the platform is meant to serve. Internal developer experience surveys, public roadmaps, and lightweight feedback mechanisms are not nice-to-haves — they are the adoption mechanism.</p>

<h2 id="tooling-gaps-compound-the-problem">Tooling Gaps Compound the Problem</h2>

<p>Personnel and cultural barriers are compounded by infrastructure that was not designed to support the self-service model platform engineering requires. Many organisations launch platform engineering initiatives without auditing whether their existing tooling can deliver on the abstraction layer the model depends on.</p>

<p>The result is partial implementation. Developers gain access to a portal that cannot provision real infrastructure. The golden path works for a subset of use cases and breaks for everything else. On-call rotations pile up because the platform cannot self-heal. In these environments, the platform becomes a source of friction rather than a relief from it.</p>

<p>Addressing this requires sequencing. Platform engineering adoption should begin with a narrow, well-scoped capability that can be delivered reliably — a single runtime, a single deployment workflow, a single secrets store — rather than an ambitious abstraction across the entire stack. Incremental wins build trust. Overambitious launches that under-deliver destroy it.</p>

<h2 id="measuring-what-actually-matters">Measuring What Actually Matters</h2>

<p>A recurring observation from platform engineering post-mortems is that teams measure the wrong things. Lines of platform code written, number of services onboarded, and portal page views are easy to report but poorly correlated with value delivered.</p>

<p>The metrics that matter are downstream: deployment frequency for teams on the platform versus off it, change failure rate, mean time to restore, and developer satisfaction scores. These require baseline measurement before the platform launches, which most organisations skip, making it impossible to demonstrate impact after the fact.</p>

<p>Without that evidence, platform teams struggle to justify continued investment — even when the platform is working. The 30% adoption figure cited above may be an undercount of value delivered, because teams that never measured the counterfactual cannot prove what they saved.</p>

<h2 id="the-path-forward">The Path Forward</h2>

<p>Platform engineering will fulfil its potential only where organisations treat the adoption challenge as seriously as the technical challenge. That means defining the platform team’s mandate clearly before the first line of infrastructure-as-code is written, investing in developer experience research as a first-class activity, sequencing capabilities from narrow to broad, and measuring outcomes that connect to engineering throughput rather than platform activity.</p>

<p>The tools are not the constraint. The discipline of building for your users — even when your users are your colleagues — is.</p>

<h2 id="references">References</h2>

<ol>
  <li>Infrastructure Engineering: A Still Missing, Undervalued Role in the Research Ecosystem, <em>arXiv</em>, 2025. Available at: <a href="https://arxiv.org/abs/2405.10473">arxiv.org/abs/2405.10473</a></li>
  <li>Mastering Site Reliability Engineering in Enterprise, <em>Springer</em>, 2025. Available at: <a href="https://link.springer.com/content/pdf/10.1007/979-8-8688-1448-8.pdf">link.springer.com</a></li>
  <li>Internal Developer Platforms: A 2025 Benchmark Report, <em>CNCF TAG App Delivery</em>, 2025. Available at: <a href="https://tag-app-delivery.cncf.io">tag-app-delivery.cncf.io</a></li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Software Engineering" /><category term="platform-engineering" /><category term="developer-experience" /><category term="devops" /><category term="adoption" /><summary type="html"><![CDATA[Most platform engineering initiatives stall before delivering value. Here is why cultural inertia, poor tooling, and misaligned expectations derail the promise.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/platform-engineering-adoption-crisis.png" /><media:content medium="image" url="https://www.viney.ca/assets/images/platform-engineering-adoption-crisis.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Golden Path: Platform Engineering’s Quiet Revolution</title><link href="https://www.viney.ca/2026/04/12/platform-engineering-developer-portals/" rel="alternate" type="text/html" title="The Golden Path: Platform Engineering’s Quiet Revolution" /><published>2026-04-12T00:00:00+00:00</published><updated>2026-04-12T00:00:00+00:00</updated><id>https://www.viney.ca/2026/04/12/platform-engineering-developer-portals</id><content type="html" xml:base="https://www.viney.ca/2026/04/12/platform-engineering-developer-portals/"><![CDATA[<p><img src="/assets/charts/platform-engineering-developer-portals.svg" alt="Platform engineering adoption: from 15% of large software orgs in 2022 to a projected 80% by 2027" width="800" height="400" />
<em>Source: Gartner, 2024; CNCF Annual Survey, 2024; Spotify Engineering Blog, 2025</em></p>

<p>Platform engineering — the discipline of building internal toolchains and self-service infrastructure for development teams — has moved from conference buzzword to organisational imperative. Gartner predicts that by 2027, 80% of large software engineering organisations will have established platform engineering teams, up from fewer than 15% in 2022. The shift reflects a hard-won lesson: giving every team unfettered access to raw cloud primitives does not scale.</p>

<h2 id="the-problem-with-infinite-choice">The problem with infinite choice</h2>

<p>The promise of cloud-native development was liberation. Containers, Kubernetes, serverless functions, and infrastructure-as-code tools handed developers unprecedented power to provision and deploy. What followed was not the productivity revolution that vendor slide decks forecast but a proliferation of bespoke configurations, inconsistent security postures, and what Humanitec’s 2024 State of Platform Engineering report termed “the paradox of choice paralysis.”</p>

<p>The Cloud Native Computing Foundation’s (CNCF) 2024 survey of over 2,000 organisations found that the average enterprise manages 16 different developer tools across the software delivery lifecycle. Nearly 60% of respondents reported that developers spend more than 30% of their time on infrastructure tasks rather than writing application code. Cognitive load — the mental overhead of navigating tooling complexity — had become the silent tax on engineering velocity.</p>

<p>This is the environment that platform engineering addresses. Rather than expecting every team to assemble its own deployment pipeline, database provisioning workflow, and monitoring stack, platform teams build opinionated, self-service “golden paths” — pre-approved, well-documented routes from code commit to production deployment. The developer retains autonomy to deviate when necessary. The default, however, is paved.</p>

<h2 id="the-internal-developer-portal">The internal developer portal</h2>

<p>At the centre of most platform engineering strategies sits an internal developer portal (IDP): a single interface through which developers discover services, provision infrastructure, trigger deployments, and consult documentation. The portal transforms scattered tribal knowledge into searchable, standardised, and governed information.</p>

<p>Spotify’s Backstage, open-sourced in 2020 and accepted as a CNCF incubating project in 2022, has become the reference implementation. Its software catalogue, scaffolding templates, and plugin architecture have attracted over 2,800 adopters by early 2026, according to the CNCF’s project metrics. Backstage succeeded not because it was the most polished product — early adopters often describe months of customisation before it delivers value — but because it codified what every scaling engineering organisation eventually needs: a single pane of glass for the developer experience.</p>

<p>Commercial alternatives have sharpened the market. Port, an Israeli startup, raised $33 million in Series A funding in 2024 and offers a no-code portal builder that reduces the implementation timeline from months to weeks. Cortex, acquired by a larger infrastructure vendor in 2025, focused on service maturity scorecards — measuring each team’s adherence to production readiness standards such as on-call coverage, documentation completeness, and dependency freshness. The common thread is that all three platforms treat developer experience as a product to be designed, measured, and iterated upon, rather than an afterthought.</p>

<h2 id="measuring-what-matters">Measuring what matters</h2>

<p>The strongest evidence for platform engineering’s impact comes from organisations that have published before-and-after metrics. Spotify reported that Backstage reduced new-developer onboarding time from an average of 60 days to fewer than 20 — a 67% improvement that translates directly into revenue for a company hiring hundreds of engineers per year. Zalando, the European e-commerce group, published internal data showing that its platform team’s golden-path templates reduced time-to-first-deployment for new microservices from two weeks to under four hours.</p>

<p>These gains echo findings from the DORA (DevOps Research and Assessment) programme. The 2024 Accelerate State of DevOps Report found that organisations with well-implemented internal platforms were 2.4 times more likely to be classified as elite performers on DORA’s four key metrics: deployment frequency, lead time for changes, change failure rate, and mean time to recovery. The correlation held after controlling for organisation size, industry, and cloud maturity.</p>

<p>The economic argument is straightforward. McKinsey’s 2024 analysis of software developer productivity estimated that the average enterprise developer loses 20–30% of working time to “developer toil” — repetitive operational tasks that a well-designed platform could automate. For an organisation with 500 developers at a fully loaded cost of $200,000 each, eliminating even half of that toil represents $10–15 million in recovered annual capacity. Platform teams, typically staffed at 5–8% of total engineering headcount, represent a fraction of that figure.</p>

<h2 id="the-golden-path-is-not-a-golden-cage">The golden path is not a golden cage</h2>

<p>Critics argue that platform engineering risks recreating the centralised IT bureaucracies that DevOps sought to dismantle. The concern is legitimate. A platform that mandates tooling choices without feedback loops, that prioritises governance over developer ergonomics, or that lacks clear escape hatches for teams with genuinely exceptional requirements will breed resentment and shadow infrastructure.</p>

<p>The most effective platform teams operate with a product mindset. They survey their internal customers, measure adoption rates and satisfaction scores, and treat low usage as a signal to improve — not a justification for mandates. Thoughtworks’ Technology Radar has consistently advocated for this approach, describing golden paths as “optional defaults with high gravitational pull” rather than enforced standards.</p>

<p>There is also the question of who builds the platform. The CNCF’s 2024 survey revealed that 40% of organisations attempting platform engineering lacked dedicated platform teams, instead assigning the work to existing DevOps or infrastructure engineers as a secondary responsibility. These part-time efforts correlated strongly with lower satisfaction scores and higher abandonment rates. Platform engineering, it turns out, requires the same product discipline as any other software product — dedicated ownership, user research, iterative delivery, and sustained investment.</p>

<h2 id="implications-for-engineering-leadership">Implications for engineering leadership</h2>

<p>For organisations evaluating platform engineering, the pattern is now clear enough to act on. First, start with developer pain points rather than technology selection. The portal is a means, not an end. Second, staff the platform team as a product team: a product manager, dedicated engineers, and a clear mandate to serve internal customers. Third, instrument adoption. If developers are not using the golden path voluntarily, the path needs repaving. As explored in <a href="/2026/04/05/practical-applications-of-ai-in-software-development/">a previous analysis of AI-assisted development’s hidden costs</a>, tooling that promises productivity gains without accounting for developer behaviour and cognitive load often fails to deliver lasting results.</p>

<p>The organisations that will benefit most are those already feeling the strain of scale — teams tripping over inconsistent deployment practices, security reviews bottlenecked by bespoke configurations, and new hires taking months to become productive. For them, platform engineering is not a trend to watch. It is infrastructure to build.</p>

<h2 id="references">References</h2>

<ol>
  <li>Gartner, <a href="https://www.gartner.com/en/articles/gartner-top-10-strategic-technology-trends-for-2024">“Top Strategic Technology Trends for 2024: Platform Engineering”</a>, <em>Gartner</em>, October 2023</li>
  <li>Cloud Native Computing Foundation, <a href="https://www.cncf.io/reports/cncf-annual-survey-2024/">“CNCF Annual Survey 2024”</a>, <em>CNCF</em>, 2024</li>
  <li>Humanitec, <a href="https://humanitec.com/whitepapers/state-of-platform-engineering-report-volume-3">“State of Platform Engineering Report Vol. 3”</a>, <em>Humanitec</em>, 2024</li>
  <li>DORA, <a href="https://dora.dev/research/">“Accelerate State of DevOps Report 2024”</a>, <em>Google Cloud</em>, 2024</li>
  <li>McKinsey &amp; Company, <a href="https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/">“Unleashing Developer Productivity with Generative AI”</a>, <em>McKinsey Digital</em>, 2024</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Software Engineering" /><category term="platform-engineering" /><category term="developer-portals" /><category term="backstage" /><category term="developer-experience" /><category term="internal-developer-platform" /><summary type="html"><![CDATA[Platform engineering is reshaping how organisations deliver software. Internal developer portals are cutting onboarding times and cognitive load.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/platform-engineering-developer-portals.png" /><media:content medium="image" url="https://www.viney.ca/assets/images/platform-engineering-developer-portals.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Financial Toll of Security Debt: A Growing Concern</title><link href="https://www.viney.ca/2026/04/12/the-hidden-economics-of-security-debt/" rel="alternate" type="text/html" title="The Financial Toll of Security Debt: A Growing Concern" /><published>2026-04-12T00:00:00+00:00</published><updated>2026-04-12T00:00:00+00:00</updated><id>https://www.viney.ca/2026/04/12/the-hidden-economics-of-security-debt</id><content type="html" xml:base="https://www.viney.ca/2026/04/12/the-hidden-economics-of-security-debt/"><![CDATA[<p>Security debt behaves like financial debt with one important difference: the interest invoice often arrives as a breach. A vulnerability left unpatched this quarter rarely appears as an accounting entry. It reappears later as incident-response overtime, regulatory exposure, delayed releases, higher cyber-insurance premiums, and board meetings devoted to explaining why a known weakness was left in place. Cybersecurity Ventures projects that unmanaged security debt will cost organisations an average of $9 million annually by 2026. The figure is less a forecast than a warning about what happens when patching, asset visibility, and remediation capacity remain permanently undersupplied.</p>

<p>What makes the problem stubborn is that most leaders already understand the principle. They know that delaying remediation increases risk. Yet the operating model still treats vulnerability management as a discretionary clean-up task rather than a funded capability. The result is the same pattern seen across software delivery: structural underinvestment creates a backlog, the backlog normalises, and the cost of clearing it rises faster than the budget allocated to reduce it.</p>

<p><img src="/assets/charts/the-hidden-economics-of-security-debt.png" alt="Trend in Security Debt Management Costs" width="2460" height="1667" />
<em>Source: Cybersecurity Ventures, 2026; IBM Cost of a Data Breach Report, 2025</em></p>

<h2 id="the-bill-arrives-after-the-breach">The bill arrives after the breach</h2>

<p>Unpatched vulnerabilities are a ticking time bomb, accounting for up to 60% of cyber breaches. Even as the average cost of a data breach reached $4.35 million in 2025, the urgency of addressing these vulnerabilities has not been matched by action within many companies. Analysts from the IBM Cost of a Data Breach Report affirm that these breaches are not merely costly incidents but symptomatic of deeper systemic issues within organisations’ approaches to cybersecurity.</p>

<p>Companies that delay patching critical vulnerabilities often see their potential breach costs rise by as much as 50%, according to FTI Consulting. This daunting increase demonstrates not only the latent financial risks but also the reactive approach many organisations have towards cybersecurity. Rather than proactively managing vulnerabilities, businesses frequently find themselves in a cycle of firefighting—addressing issues only after they escalate into breaches.</p>

<h2 id="why-the-debt-keeps-compounding">Why the debt keeps compounding</h2>

<p>The charted rise from $5 million in 2024 to a projected $9 million in 2026 captures more than inflation in cyber tooling. It reflects the compounding mechanics of neglected exposure. The longer a backlog of critical findings remains unresolved, the more systems, suppliers, and business processes depend on insecure foundations. Security debt stops being a technical hygiene problem and becomes a drag on operating flexibility.</p>

<p>Addressing security debt is not just a technical challenge but a financial and managerial one. A majority, 60% of Chief Information Security Officers (CISOs), cite budget constraints as the primary hurdle in addressing security debt effectively. The McKinsey Cybersecurity Survey underscores this reality, highlighting how severely limited budgets inhibit the ability to undertake comprehensive vulnerability management.</p>

<p>These constraints lead organisations to spend an average of 10% more on security tools due to inadequate vulnerability management. Essentially, limited budgetary allocations force many companies into a reactive, rather than proactive, stance on cybersecurity, leaving them vulnerable to constant threats and the associated high costs. The irony is that many of these same organisations will still approve emergency spend after an incident because the post-breach invoice is politically unavoidable in a way that preventive investment rarely is.</p>

<h2 id="automation-is-not-absolution">Automation is not absolution</h2>

<p>Despite the rising consensus on the escalating costs of security debt, a contrarian viewpoint suggests that strategic investments in security tools and automation could mitigate these projected costs significantly. Proponents argue that, when integrated with robust management practices, such investments could provide a more stable financial impact than expected, allowing organisations to maintain operational efficiency without succumbing to rising cybersecurity costs.</p>

<p>This view is partly right and often overstated. Tooling does help when it reduces detection latency, prioritises exploitable findings, and gives analysts better visibility into attack paths. But automation does not cancel the debt on its own. Even the strongest <a href="/2026/04/12/ai-threat-detection-enterprise/">AI-driven threat-detection programmes</a> still depend on disciplined patch management, asset inventories, exposure tracking, and leadership willing to fund remediation work that produces no immediate applause.</p>

<h2 id="what-leaders-should-fund-first">What leaders should fund first</h2>

<p>The financial dynamics of security debt will continue to evolve as organisations strive to keep pace with a rapidly changing cyber threat landscape. The continuous increase in breach costs and security debt management expenses indicates a clear requirement for a strategic overhaul. Organisations must move towards integrating proactive measures into their cybersecurity frameworks.</p>

<p>A real-world example can be seen in the strategic approach taken by major financial institutions. These institutions have incorporated AI-driven threat detection tools, which not only identify potential breaches before they occur but also provide predictive insights that enable more effective resource allocation. These tools represent a forward-thinking strategy that organisations across sectors can emulate to balance their budgets against the need for robust security measures.</p>

<p>Furthermore, organisations adopting comprehensive cyber hygiene practices will be better positioned to manage security debt effectively. By revisiting their security policies, investing in remediation capacity, and keeping abreast of emerging threat landscapes, they ensure their investments in cybersecurity yield tangible returns. The key lies in transforming cybersecurity from a reactive to a proactive posture, ensuring robust defence mechanisms are in place long before threats materialise.</p>

<p>Ultimately, organisations that strategically invest in advanced security practices and tools today will safeguard their operations and finances against the increasing threat of cyber vulnerabilities tomorrow.</p>

<h2 id="references">References</h2>

<ol>
  <li>Federal News Network, “Visibility is the Only Way to Fix the Public’s Growing Security Debt”, <em>Federal News Network</em>, 2026, <a href="https://federalnewsnetwork.com/commentary/2026/04/visibility-is-the-only-way-to-fix-the-publics-growing-security-debt/">Accessed online</a>.</li>
  <li>IBM Cost of a Data Breach Report, “Data Breach Costs”, <em>IBM</em>, 2025, <a href="https://www.ibm.com/reports/cost-of-a-data-breach-2025">Accessed online</a>.</li>
  <li>FTI Consulting, “2026: Make-or-Break Year for Economy”, <em>FTI Consulting</em>, 2026, <a href="https://www.fticonsulting.com/insights/articles/2026-sets-up-make-break-year-economy">Accessed online</a>.</li>
  <li>McKinsey Cybersecurity Survey, “Cybersecurity 2026”, <em>McKinsey</em>, 2026, <a href="https://www.mckinsey.com/business-functions/risk-and-resilience/our-insights/the-numbers-behind-cybersecurity-2026">Accessed online</a>.</li>
</ol>]]></content><author><name>Ouray Viney</name></author><category term="Security" /><category term="security-debt" /><category term="security" /><category term="cost-benefit" /><summary type="html"><![CDATA[Security debt is no metaphor. Delayed patching and underfunded remediation are turning cyber risk into a measurable balance-sheet liability.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.viney.ca/assets/images/the-hidden-economics-of-security-debt.png" /><media:content medium="image" url="https://www.viney.ca/assets/images/the-hidden-economics-of-security-debt.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>