Skip to content
Latchkey
Published June 2026

The State of Test Automation 2026

Suites only ever grow, so the teams that stay fast shard, target, and trade coverage for speed deliberately, on a runner layer cheap enough to make parallelism the default.

34%
year-over-year growth in test count for an actively developed service
Latchkey analysis (modeled)
38%
of teams run test impact analysis to skip unaffected tests
Latchkey analysis (modeled)
6.8x
wall-clock speedup from sharding a large suite across runners
Latchkey analysis (modeled)

Executive summary

Test suites only ever grow. Every feature adds cases, every bug adds a regression test, and every refactor leaves a few behind, so an actively developed service routinely sees its test count climb by roughly a third year over year. Nobody approves that growth as a decision, because it arrives one test at a time, but left alone it turns a fast suite into a slow one and a slow suite into a merge bottleneck the whole team feels on every push.

The teams that stay fast do it with three levers rather than one. They parallelize and shard, splitting the suite across many runners so wall-clock time stays roughly flat even as test count climbs. They adopt test impact analysis, running only the tests a change can actually affect instead of the whole suite on every push. And they treat the coverage-versus-speed tradeoff as a deliberate choice rather than an accidental drift, knowing which legs of the matrix earn their minutes and which do not.

This report quantifies how far each lever has spread and what it returns. Sharding delivers near-linear speedup well past the point most teams stop. Impact analysis has moved from a Google-scale luxury to a mainstream practice. And the coverage curve is sharply non-linear, with the last few points of coverage costing far more runtime than the first fifty. None of the three is exotic; all three are pipeline hygiene that compounds.

Three numbers frame the year. Test count for an actively developed service grows by about a third annually, so a suite roughly doubles inside three years without anyone deciding it should. Close to two fifths of teams now run impact analysis to skip tests a change cannot touch. And sharding a large suite across eight runners returns nearly a sevenfold wall-clock speedup, with returns continuing past that point if the runners are available.

The constraint underneath all three levers is runner capacity. Sharding to thirty parallel jobs only helps if thirty runners are actually there, and impact analysis only helps if the runners you do use are fast and cheap. Managed runners supply elastic parallelism at roughly a third of hosted cost, which is what lets teams buy speed without buying it back in their CI bill, and it is the layer that turns these techniques from expensive to default.

Test count growth over time
Year 01 xYear 11.34 xYear 21.79 xYear 32.41 x

Indexed median test count for an actively developed service, by year. · Source: Latchkey analysis (modeled)

Speedup from sharding a large suite
1 shard1 x4 shards3.6 x8 shards6.8 x16 shards11.2 x

Wall-clock speedup versus a single runner, by shard count. · Source: Latchkey analysis (modeled)

Email me the report

The full report is right here on this page, free. Want the link in your inbox to read later or share, plus new Latchkey reports as they drop? Drop your email and we will send it over.

Sent! Check your inbox for the report link.

No spam. Unsubscribe anytime.

Suites grow faster than anyone budgets for

A service that doubles its test count in under three years is normal, not exceptional. Our modeled growth puts a typical actively developed service at roughly a third more tests each year, which compounds to about a 2.4x suite by year three. That is healthy in one sense, more tests usually means more confidence, and corrosive in another, because every one of those tests costs wall-clock on every run that includes it.

The reason the growth goes unmanaged is that it never arrives as a decision. No one approves doubling the suite; it accretes one regression test and one new feature's cases at a time, each individually trivial. By the time the pipeline is visibly slow, the cause is diffuse and spread across two years of small additions, with no single commit to point at and no obvious thing to cut.

The teams that stay fast treat test runtime as a first-class budget, watched and capped like compute or headcount. They alert when suite wall-clock regresses, they know which tests dominate the runtime, and they reach for sharding and impact analysis before the suite becomes the bottleneck. The difference between a team that stays fast and one that wakes up slow is rarely the tests themselves; it is whether anyone was watching the curve.

  • Test count grows about a third per year, roughly doubling a suite inside three years for an actively developed service.
  • The growth accretes one test at a time, so it is never approved as a decision and never has a single cause to cut.
  • Treating suite runtime as a watched, capped budget is what separates teams that stay fast from teams that wake up slow.

Sharding returns are real but capacity-bound

Splitting a large suite across runners delivers near-linear speedup well past the point most teams stop. Our model shows four shards returning roughly a 3.6x speedup, eight shards close to 6.8x, and sixteen shards over 11x, with the gap from ideal linear scaling coming from per-shard fixed costs like setup and dependency install rather than from any ceiling on parallelism itself.

But that speedup is entirely conditional on the runners being there. Sharding to sixteen jobs against a pool that can supply four does not deliver a 11x speedup; it trades execution time for queue time and delivers roughly what four shards would, with extra scheduling overhead on top. The parallelism is only real if the capacity is elastic enough to absorb it at the moment the jobs fan out.

This is why the speedup curve and the runner layer have to be designed together. A team that shards aggressively on a fixed, scarce pool is optimizing the wrong constraint: the bottleneck moved from execution to scheduling, and the wall-clock barely improved. Elastic capacity that can supply every shard a runner on demand is the precondition that makes sharding pay, which is exactly where a managed runner layer changes the math.

  • Four shards return about 3.6x, eight about 6.8x, sixteen over 11x; the shortfall from linear is per-shard fixed cost.
  • Against a pool too small to supply every shard, sharding trades execution time for queue time and the speedup collapses.
  • Elastic capacity is the precondition for parallelism to pay, so shard count and runner supply must be designed together.

Test impact analysis is past early adoption

Running only the tests a change can actually affect has moved from a Google-scale luxury to a mainstream practice. In our modeled split of test-selection strategies, full-suite-every-push is still the single largest cohort, but impact analysis is now a meaningful share and is the strategy with momentum, ahead of simple path or tag filtering and well ahead of manual ad hoc selection.

The payoff compounds with suite size, which is the opposite of how teams usually assume optimizations behave. The bigger the suite, the larger the fraction of it any single change leaves untouched and therefore safe to skip. A one-line change in a large monorepo might legitimately affect a few percent of the tests; running the other ninety-plus percent is pure waste that impact analysis removes without reducing real coverage of the change.

The reason adoption is not universal yet is that impact analysis requires a dependency graph the tooling can trust, and building or maintaining that graph is real work. But the practice has crossed from frontier to mainstream because the alternative, paying for a full-repository validation on every one-line change, gets more expensive exactly as the codebase grows, which is when teams most need the brake.

How teams choose what to run
Full suite every push 41%
Path / tag filtering 21%
Test impact analysis 27%
Manual / ad hoc selection 11%

Estimated split of teams by test-selection strategy. · Source: Latchkey analysis (modeled)

The coverage-versus-speed curve is non-linear

The minutes needed to push coverage higher rise steeply near the top. Our modeled curve takes a mid-size suite from six minutes at 50 percent coverage to fourteen at 70, twenty-seven at 85, and fifty-two at 95, so the last ten points of coverage cost more runtime than the first fifty. The relationship is sharply non-linear, and the expensive region is precisely the one teams drift into without deciding to.

The reason is that the easy coverage comes first. The initial tests hit the common paths that are quick to exercise; the final points chase rare branches, error handling, and edge cases that are slow to set up and slow to run. Chasing 95 percent everywhere applies that steep top-of-curve cost uniformly, including to code where the marginal confidence is not worth the marginal minutes.

The fast teams pick a coverage target deliberately and buy back the speed with sharding and impact analysis, rather than letting an unexamined 'more coverage is always better' reflex quietly inflate every pipeline. They might hold critical paths to a high bar and accept a lower target elsewhere, spending their runtime budget where the confidence actually matters. The point is not that high coverage is wrong; it is that uniform high coverage is a choice with a steep, often unexamined, price.

The coverage-versus-speed tradeoff
50% coverage6 min70% coverage14 min85% coverage27 min95% coverage52 min

Median suite wall-clock time by coverage target, unsharded. · Source: Latchkey analysis (modeled)

Transient flakes self-heal rather than re-run

Every lever in this report adds test executions, and more executions mean more chances for a mechanical failure that has nothing to do with the test logic. A network blip pulling a dependency, a registry timeout, an out-of-memory kill on an undersized shard, a race that only surfaces under parallel load: these fail tests that would pass on a clean retry, and they get more common precisely as you parallelize harder.

The instinctive response, blanket automatic retries at the test-framework level, treats every failure as potentially transient and re-runs it, which masks real regressions and bills the runner for the full re-execution. It also does nothing for the engineer who context-switches when a green change comes back red. The retry is paid in minutes and attention, and the signal that something genuinely broke gets diluted.

Self-healing at the runner layer is the sharper tool. When a shard fails on a known-transient infrastructure signal rather than an assertion failure, the platform retries it on a fresh environment before a human sees the red check, so the mechanical failure never reaches the pull request and a real test failure still surfaces immediately. The flake is recovered, not re-run blindly, and the minutes spent are recovery minutes rather than wasted ones, which keeps aggressive sharding from importing an aggressive flake tax.

Cheap parallel capacity is the enabling layer

Every lever in this report cashes out as more runner-minutes. Sharding fans a suite across more runners, impact analysis runs faster but still needs fast runners, and a high coverage target on critical paths is more tests to execute. On hosted runners all of that shows up as a bigger bill, which is the quiet force that pushes teams to under-shard and over-skip in the name of cost.

Managed runners change the calculus by supplying elastic parallelism at roughly a third of hosted cost. When a shard-minute is cheap, sharding to the point of near-linear speedup stops being a budget conversation, and running impact analysis on fast hardware is affordable rather than a luxury. The techniques that were expensive on hosted minutes become the default, because the thing that made them expensive, the per-minute rate at scale, is the thing the managed layer removes.

This is why the runner layer is the enabling constraint rather than a footnote. The speedup curves and adoption numbers in this report are achievable on any infrastructure in principle; they are achievable affordably only when parallel capacity is both elastic and cheap. The managed layer is what turns the modeled returns into something a team can actually buy without watching the speed gains reappear as a CI bill they cannot defend.

The fastest test pipelines share habits, not a stack

Across languages and frameworks, the teams with the shortest test feedback loops do the same handful of things. They cache dependencies aggressively so the install before the first assertion is seconds rather than minutes. They shard with impact analysis so work scales with the change rather than the repository. They order tests fail-fast and cancel superseded runs so doomed pipelines stop wasting minutes early.

These habits are configuration rather than code, which is what makes them portable. None of them require rewriting the test suite or adopting a particular framework, and none of them are moonshots. They are the unglamorous discipline of treating the test pipeline as a product surface with a runtime budget, an owner, and metrics that get watched the way coverage gets watched.

What ties the habits together is the runner layer underneath. Caching, sharding, fail-fast ordering, and self-healing all assume capacity that is fast, elastic, and cheap enough that using more of it is not a budget event. The fastest teams are not the ones with the most exotic tooling; they are the ones who paired ordinary good test hygiene with a runner layer that does not punish them for exercising it.

Recommendations

Put a watched, capped budget on suite runtime

Suite growth never arrives as a decision, so it never gets reviewed unless someone watches the curve. Track suite wall-clock and alert when it regresses, the same way you track coverage. Knowing which tests dominate runtime is what lets you intervene before the suite becomes the merge bottleneck.

Design shard count and runner capacity together

Sharding only pays if the runners are actually there. Match your shard count to capacity that can supply every shard a runner on demand. Sharding hard against a fixed, scarce pool just converts execution time into queue time, so size the parallelism to elastic capacity rather than a fixed pool.

Adopt test impact analysis, especially as the repo grows

Run only the tests a change can affect. The payoff compounds with suite size, because the larger the suite the bigger the fraction any single change leaves safe to skip. This is the most effective brake on the cost curve as a codebase grows, and it is now a mainstream practice rather than a frontier one.

Choose a coverage target deliberately by code criticality

The coverage curve is sharply non-linear, so uniform high coverage applies a steep top-of-curve cost everywhere. Hold critical paths to a high bar and accept a lower target where the marginal confidence is not worth the marginal minutes, rather than letting a "more is always better" reflex inflate every pipeline.

Self-heal transient flakes instead of blanket-retrying

Aggressive parallelism imports more mechanical failures. Blanket test-level retries mask real regressions and re-bill the full run. Recover transient infrastructure failures on a fresh environment at the runner layer so flakes never reach the pull request while genuine assertion failures still surface immediately.

Outlook

Expect suites to keep growing and the three levers to keep moving from optional to expected. Impact analysis in particular is on the trajectory caching was on a few years ago: a frontier practice becoming table stakes as the tooling matures and the cost of going without it rises with codebase size. The teams that adopt it early spend the next two years shipping faster than peers still paying for full-repository validation on every change.

The decisive variable, as throughout this report, is the runner layer. As elastic, cheap parallel capacity becomes a default rather than a procurement project, the speedup curves stop being theoretical and become the normal operating point. Sharding to the knee of the curve and running impact analysis on fast hardware is a budget conversation only as long as parallel minutes are expensive, and that constraint is exactly what the managed model removes.

For engineering leaders the practical takeaway is that test automation does not need a heroic rewrite to stay fast. It needs a runtime budget, three well-understood levers applied deliberately, and a runner layer that makes parallelism cheap enough to use freely. The organizations that internalize that will treat a growing suite as a managed cost rather than a creeping tax, and they will do it without trading away the coverage that made the suite worth running.

Methodology

This report synthesizes publicly available developer-survey and DevOps research with Latchkey's own modeled analysis of suite growth, sharding behavior, and runner economics. Figures labeled "modeled" are illustrative estimates derived from typical suite shapes, observed sharding returns, and published runner pricing, not a primary survey; figures attributed to a named source reflect that source. Growth, speedup, and adoption percentages are scenario estimates and should be validated against your own CI history. Figures labeled "modeled" are illustrative estimates derived from public pricing and typical pipeline shapes, not a primary survey; figures attributed to a named source reflect that source. Pricing reflects published rates at time of writing and should be verified against current provider pricing.

Sources

More Latchkey reports

See what you would save with Latchkey managed runners and self-healing. Start free →