Modern QA2026The Traditional Testing Model
Log inJoin
1 / 7 · Book 6 · Why Testing Before Deployment Is Not Enough⊞ allnext →Get the book →

1.1The Traditional Testing Model

For most of software engineering history, the testing model has looked like this:

[Write Code] -> [Write Tests] -> [Run Tests in CI] -> [Deploy to Production] -> [Hope]

This model assumes that if you test thoroughly enough in a pre-production environment, production will be safe. It is a reasonable assumption for simple, monolithic applications running on a single server. It breaks down in the modern world for reasons that are worth understanding deeply.

The Monolith Era

In the monolith era (roughly 1990-2010 for most organizations), the testing model worked reasonably well because:

  1. The system was self-contained. A single application, a single database, a single server. If your tests covered the application logic, they covered most of what could go wrong.

  2. Dependencies were few and stable. You might depend on an email service and a payment gateway. These changed rarely and had well-documented behaviors.

  3. Scale was predictable. You knew approximately how many users you had, and traffic patterns were relatively stable.

  4. Deployment was infrequent. Deploying once a month or once a quarter meant each deployment was a major event with extensive manual testing.

The Microservices Era

The transition to microservices (accelerating from 2010 onward) broke every one of those assumptions:

  1. The system is distributed. A single user request might traverse 5, 10, or 20 services. Testing each service in isolation does not guarantee the system works as a whole.

  2. Dependencies are numerous and volatile. Your application depends on dozens of internal services, third-party APIs, CDNs, DNS providers, certificate authorities, and cloud infrastructure components. Any of them can change behavior, degrade, or fail at any time.

  3. Scale is unpredictable. Viral moments, seasonal spikes, and bot traffic create load patterns that no test environment can fully simulate.

  4. Deployment is continuous. Deploying dozens of times per day means each deployment is a small change, but the aggregate risk across all services is substantial.

What Pre-Production Testing Cannot Catch

Here is a non-exhaustive list of production issues that no pre-production test suite can reliably detect:

Issue Why Pre-Production Misses It
Third-party API degradation You test against mocks or sandboxes, not the live API
Regional connectivity problems Your CI runs in one region; users are global
Certificate expiration Certificates are environment-specific
CDN misconfiguration Your staging CDN config differs from production
Database connection pool exhaustion under real load Test environments have different pool sizes and load
Memory leaks that manifest after hours of operation CI tests run for minutes, not hours
Data-dependent bugs (specific user data triggers a code path) Test data is synthetic and limited
Race conditions under real concurrency Test environments have lower concurrency
Cascading failures across services Test environments rarely have all services at production scale
Configuration drift between staging and production Inevitable in any environment with manual configuration

This is not an argument against pre-production testing. Pre-production testing is essential. It catches the vast majority of bugs. But it is an argument that pre-production testing alone is insufficient for modern systems.