10 reasons test coverage struggles to keep up with product growth
Dmitry Reznik
Chief Product Officer

Summarize with:
Development velocity is, probably, the most in-demand characteristic across startups and SMEs.
You might recognize your retro in these lines
- “We must add this feature before our main competitor does”
- “This user flow is too sophisticated. Simplify it, it’s a piece of cake for you!”
- “You didn’t include in test coverage third-party APIs we added to the codebase last sprint”
The concern here is clear: while product development accelerates, the testing process moves significantly slower.
The 2024 GitLab DevSecOps survey states that test execution and QA processes remain the primary bottlenecks delaying deployment across engineering teams.
What is more interesting is that sometimes it is not even a tech question at all. It’s a harder, organizational question: are we structured well enough to ensure reliable validation for the workflows, features, and integrations that matter most to our users?
A team can have 80% code coverage and still be missing test cases for three critical checkout paths and the entire mobile onboarding flow. Code coverage tells you what’s been executed. Business-critical coverage tells you whether the product will hold up when more real users hit it.
Maintaining that second kind of coverage gets measurably harder as the product grows.
This article breaks down the 10 most common reasons test coverage falls behind product growth — and how to include mitigations into your QA strategy.

1. Rapid feature development outpaces testing
Agile methodology has forced modern dev teams to deliver faster, which, in turn, has widened the gap between development and testing and has accumulated technical debt.
Typical velocity of a mid-sized dev team is 4 to 8 features per sprint. Setting up automated testing for those features takes materially longer than writing the code, as it involves designing scenarios, setting up test data, handling edge cases, integrating with CI, and so on.
Of course, test creation also depends on the team’s proficiency and other context, but roughly this usually takes around two person-hours per test case (we are talking about a stable framework and an engineer who knows the codebase).
Let’s say one feature requires 10 to 20 test cases to reach meaningful coverage.
Let’s calculate roughly: 8 features x 15 test cases x 2 hours = 240 engineer-hours per sprint. A two-person QA team working a standard sprint has roughly 160 hours of combined capacity — before maintenance, meetings, or incident response.
Accordingly, we see a coverage deficit by design.
Potential risks in practice
Given: A B2B SaaS company builds a new multi-seat account management feature over two sprints. The feature allows account admins to invite team members, assign role-based permissions, set per-seat billing, and transfer ownership to another user.
So, the QA team writes tests for the primary path: admin invites a user, user accepts, user appears in the dashboard. That takes the available bandwidth.
What might not get covered in this case:
- Permission boundary failures: An editor-role user can access an admin-only endpoint through a direct API call because the permission check was implemented in the UI layer but not enforced server-side.
- Billing cases: For example, a user who accepts an invite but is immediately removed. Or when an admin re-invites such a user within the same billing cycle. Potentially, the finance logic can charge for the seat twice.
- Ownership transfer: If the current owner initiates a transfer while the new owner is mid-session, a race condition leaves the account in a state where both users have admin rights simultaneously.
- Invitation expiry: Invitation tokens expire in 72 hours. The expiry check runs against the server’s UTC clock (while users in UTC-5 or earlier get “link expired” errors on valid invites).
Experienced teams can actually predict such cases and failure modes. But they often go untested, not even because the team is immature, but because coverage capacity ran out before the sprint did.
Proper automation of the end-to-end testing may resolve some part of this challenge. But for now, the 2025-26 Capgemini World Quality Report found that 60% of companies struggle with relevant test data, and 58% with fine-tuning AI-powered tools for scaling test automation.
2. Increasing product architecture complexity
An outdated monolithic application had another coverage, which doesn’t fit modern architecture. Single-service backends transitioned to a microservices mesh, and, hence, the number of things that can fail significantly increased.
A single-service application has one deployment, one database, one set of API boundaries to validate. A modern mid-size SaaS usually has 15 to 40 microservices, each with its own data store, deployment pipeline, and its own core contracts.
An E2E test that passes every assertion in the UI layer tells you that the happy path through those 40 services worked under controlled test conditions. It says nothing about what happens at the boundaries under load, during a partial deployment, or when a downstream service returns an unexpected response format.
International Conference on Service-Oriented and Cloud Computing identified in their research: Testers who interact with a distributed system through the user interface may assume their tests are comprehensive, but they have no instruments to verify that assumption.
However, architectural complexity doesn’t make coverage impossible. It just makes the cost of low-quality coverage much higher because the failure modes are harder to reproduce, diagnose, and are more likely to involve multiple teams’ code (which basically also means time and money).
3. Growing number of user workflows
Having the MVP stage successfully completed, product teams begin stabilizing existing user flows and adding new ones. And every user flow requires its own test scenarios, which drastically enlarges testing suites.
A basic SaaS product at launch might have 5 or 6 primary flows: sign up, log in, core action, billing, and account settings. After the MVP, that same product might have 40.
What flows usually added
- Onboarding flows: Since we are talking about a post-MVP product, there is rarely only one way to onboard a user: self-serve signup, invite-based team onboarding, SSO via an identity provider, and API key creation for developer access — each situation will have a unique onboarding flow one way or another.
- Transaction flows: Surprisingly, a checkout flow isn’t a monolithic single testing surface. We shall look beyond the obvious happy path and break it down, as each payment method requires its own coverage. Card, bank transfer, wallet, invoice will have their own retry logic after a declined transaction, currency handling at API boundaries, refund flows, free-trial expiry billing, and so on.
- Settings: A role-based permissions system with four roles, four object types, and three permission levels generates up to 48 theoretically distinct combinations. Teams typically test the extremes on behalf of admin account, which “can do everything”. Yet, the middle states are where unauthorized access bugs often hide.
- External integrations: Each third-party integration adds scenarios that the team can’t fully control. Stripe, Salesforce, or any other integration is the weakest point and may lead to a gap in production coverage.
Common untested scenarios include
- onboarding interrupted mid-step and resumed from a different device
- invite accepted after the inviting account has been suspended
- SSO tokens issued by a provider configured with non-standard claims
Example: test cases and capacity
Given: A product with 10 new features per quarter. At first glance, we should simply add 10 test cases per quarter. Such an unsystematic approach is a common mistake. Think of it more as adding 10 branches to the workflow tree, each requiring coverage of happy paths, error states, edge cases, and cross-feature interactions.
At two person-hours per test case, and 15 test cases per feature, that’s 300 engineer-hours of new coverage per quarter. Add future maintenance.
Most QA teams don’t have 300 hours of net-new capacity per quarter, and this deficit will amass.
4. Manual testing cannot scale with product growth
Sooner or later, a successful MVP stage transitions into the growth stage, from a user base perspective, from an operational perspective, and from any other side.
And it is product growth that is a “roadblock” for back-and-forth regression testing, not manual testing as a tool itself — software becomes too large against the average speed of manual testing.
Where the manual part slows down end-to-end testing
A typical amount and speed of manual regression tests is roughly 50 to 80 test cases per day, if we include communication, potential double-checks, and documentation. A mid-size, 18-month-old SaaS product might have 400 to 600 regression scenarios.
At 60 test cases per day, a single QA engineer needs 7 to 10 working days to complete a full manual regression cycle.
As you see, it seems doubtful to complete everything within a two-week sprint. That’s why the teams compress — they cut scenarios, skip edge cases, and rely on judgment calls about what’s “safe enough to skip”.
The human limitations that influence QA strategy anyway
Time is not the only problem here. Scalability is what bothers tech leaders as well.
Capgemini presented their automated testing suite for Cloud transition, and it showed 50 to 60% test cycle time reduction compared to manual execution.
Only one case, a specific context, and no guarantees that the same will work for you. But the fact remains — to speed up your software testing, you shall consider capacity and other strategic factors, not a technology one on its own.
5. Regression testing becomes too large
Every feature that ever shipped, every bug that was fixed, every edge case that was hardened — it all ends up in the regression suite. That’s the point:
- Increasing number of cases: Features mount up, and that means the historical debt of what could break grows. It’s a paradox in some sense — the more effort you put in, the bigger the number of effort you’ll need to put in (to avoid a future crash).
- Longer cycles: Without parallel execution or architectural tiering, test runs go from minutes to hours or days.
- Delays: Developers stop waiting for results, pipelines run permanently red, and the engineering department is forced to delay the release.
Regression testing can consume a lion’s share of development resources, as the time and cost of running a growing codebase grow with it.
Manage a growing regression suite with four tips
1. Organize the suite by execution tier
Group tests into three tiers: smoke (20 to 30 business-critical scenarios, runs on every commit in under 5 minutes), regression (300 to 500 tests covering core functionality, runs on every merge to main), and full suite (everything you need to check, runs nightly or before major releases).
2. Apply risk-based prioritization
Run the specific tier, depending on the affected area, its importance and size. Fun fact: Such a smart stratification is not very popular.

Only 3% of organizations have more than half of their test suites integrated into delivery pipelines. Link tests to the product areas they cover, then trigger the relevant subset based on which areas were modified in the commit.
3. Determine a schedule for test retirement
Make your clean-up hygiene a system. A monthly review is more than enough. Determine two criteria:
- tests that cover deprecated functionality get removed
- tests that haven’t passed cleanly in 30 days without a known fix

Quarantine those and assign an owner with a one-sprint deadline.
4. Eliminate duplication
Run a quarterly audit of test coverage by user journey (add it to a feature-based audit). This prevents duplicates when teams test the same checkout flow from several entry points with different data setups but the same assertions. The fix is merging: one test covering multiple data variants beats three structurally identical tests.
6. Test automation maintenance becomes difficult
It solves the execution speed problem… and introduces a different one: keeping the automated tests working while and after changes. What changes, and do they affect automation?
- UI changes break automated tests: Traditional automation relies on matching strict DOM element identifiers, specific CSS selectors, or rigid page structures. So, div:nth-child(3) > button breaks in the moment a designer restructures a component.
- Brittle test scripts: Without advanced architectural abstraction, tests become highly sensitive to network latency and timing differences. Hardcoded environment URLs, credentials embedded in test files, and timeout values scattered across individual cases require multi-file changes whenever any of those values need updating. In a 500-test suite without centralized configuration, changing a staging environment URL can mean touching 30 files. Feels like a second full-time job.
- Maintenance consumes more time than teams can afford: Again, engineers must manually locate the exact line of failure across multiple script files after changes, rewrite the selector, and verify the patch. The average SDET’s salary in the US/UK is USD 100K+. Now, you have a clearer picture of where the project make they waste their time.
94% of companies find quality insights in production data, but 50% struggle to turn those insights into valuable testing strategies. Partly it’s a tooling problem and partly a maintenance burden problem.
Why traditional strategies keep tech teams from scaling test automation
A framework built without self-healing locators, centralized configuration, clear ownership (ideally, by module), and without a defined process for retiring outdated tests will deepen the maintenance debt.
Again, the paradox: the more the product grows, the faster the debt does. The long-term cost of a framework is the percentage of QA capacity the framework will consume indefinitely.
7. Lack of a clear testing strategy
The difference between a strategically reasonable plan and just a batch of tests matters more than it sounds.
The core difference is that the strategic approach is deeper and more future-proof than testing what’s in front of you.
The recently shipped feature, the bug just came in, the scenario that the developer mentioned when opening the PR produce coverage that mirrors the team’s recent focus rather than coverage that maps to the product’s actual risk profile.
Features that haven’t changed recently get no new tests; this is where teams forget about dependencies and the main parameter for creating new tests — business criticality.
The three patterns that appear most in such teams
1. They test features in isolation instead of workflows
A feature test confirms that a component works. A workflow test may confirm that a user can accomplish a goal. These are not the same thing. Testing features in isolation consistently misses the failure modes that emerge at the seams between components.
2. Prioritising easy-to-test scenarios rather than revenue-generating ones
These are typically unit tests, they are isolated, deterministic, and fast. End-to-end testing covers complex business scenarios, E2E tests are harder to set up and slower to run.
3. Inconsistent coverage depth across the product
That’s okay for startups to some extent, but for established businesses, without a structured view of which user journeys exist and which are covered at which depth, coverage inconsistency blurs a picture of where the gaps are. Only a production incident makes one visible.
Three must-haves for basic coverage
Push through these decisions explicitly and, ideally, document them:
- Make a prioritized list of user journeys by business impact: Authentication, core transactional flows, billing, account management, data export, etc.
- Set a defined coverage target per journey tier: Critical journeys, supporting ones, and peripheral features.
- Establish review cadence for the coverage map: What you will review quarterly and what more frequently.
8. Limited collaboration between developers and QA
For decades, development and quality assurance teams worked in corporate silos. But it’s no longer relevant for recent years — developers consult testers, and testers support developers. McKinsey research found that companies with open cross-functional teamwork are 1.5 times more likely to report above-average growth.
Yet, we have to admit the disconnection still exists in some enterprises, with all its risks: misaligned deployment priorities, hidden technical debt, expensive post-release fixes, and so on.
How to manage it: for your size and maturity
- Small businesses and seed startups: Silos practically don’t exist, or they are harmless in this case. Teams are tiny, and developers often act as their own QA or collaborate side-by-side. There is often little formal process, so the best you can do for the team here is to not put roadblocks in their way.
- Medium-sized enterprises (usually, up to 350 people; sometimes up to 500): Developers and QA work in the same planning meeting but rarely collaborate on test design, and QA is typically handed features to test after development is “done enough”. Possible situation: QA discovers scenarios that were never discussed during development, communicates them back through a bug ticket, and developers (already working on the next feature) context-switch.
- Enterprises: The multi-framework fragmentation causes immense tool sprawl, coordination overhead, and a massive skills gap that leaves critical integration paths completely unvetted.
9. Lack of scalable testing infrastructure
A comprehensive testing suite can’t be called comprehensive only due to the number of tests. It’s more about whether the suite can run fast enough, across enough environments, to be useful in an active development pipeline.
Expanding the codebase and adding features, the hardware, network, and environmental resources, teams have to run additional validation checks. That means additional cloud, tools for cross-browser and cross-device testing, multiple isolated environments, etc.
Infrastructure is a fundamental question. Platforms like Owlity, with their cloud, smart suggestions, and sufficient autonomy, change financial evaluations.
And time. The managing infrastructure overhead goes to near-zero, as well as coverage gaps.
10. Testing processes don’t evolve as the product grows
This point stems from all 9 previous ideas.
The processes, workflows, and tools that effectively protected a simple minimum viable product (MVP) will undermine an enterprise platform.
Signals to scale automated testing
- Outdated testing workflows: Static spreadsheets or simple manual checklists track QA coverage. This might work for 20 features, but it collapses for 500 features.
- Manual-heavy processes: Scaling quality by continuously hiring more manual testers is a linear cost trap. Humans suffer from cognitive fatigue and other delights of human existence. Too unreliable for a single pillar for your QA strategy.
- Slow feedback loops: Check time, waiting for sign-off, and other delays may cost your company more than you think.
The core idea is simple — nurture your software testing with product growth.
Bottom line
When manual testing and legacy frameworks trap your team in an endless maintenance, you do not think about improvement.
This is another reason why so few startups transition to scale-ups and established companies.
To close an operational gap, modern engineering teams must shift from high-overhead coding to a software-driven QA strategy.
Modern platforms like Owlity simplify this workflow:
- Anyone on the team can capture real user journeys using the Owlity Recorder to start test automation in minutes
- The platform combines built-in AI features to create a test suite from the recorded flow
- Any teammate can run the selected suite in Owlity Cloud.
And, of course, the expert teams is always here for them.
Monthly testing & QA content in your inbox
Get the latest product updates, news, and customer stories delivered directly to your inbox


