Context-Driven Testing: Why One-Size-Fits-All Methodology Fails
Most testing methodology debates are arguments about which one approach is universally correct. Should you use TDD or BDD? Should you have 80% code coverage or 100%? Should you write test cases before or after development? These debates generate enormous amounts of noise and very little useful guidance because they're asking the wrong question.
The right question isn't "which methodology is best?" It's "which approach makes sense for this project, this team, this product, and these risks?" That's the question context-driven testing asks — and the reason it's still the most intellectually honest framework in the field, thirty years after Cem Kaner and colleagues articulated it.
The Seven Principles
James Bach and Cem Kaner are most closely associated with the seven principles of context-driven testing. These principles aren't rules — they're observations about the nature of testing work. Understanding them changes how you think about testing problems.
Principle 1: The value of any practice depends on its context
There is no universal best practice in testing. Every practice — writing detailed test cases, aiming for high coverage, doing exploratory testing, requiring sign-off before deployment — is a practice that has value in some contexts and creates waste or harm in others.
Formal test cases have high value when: the team is distributed across time zones with no overlap, the feature is in a regulated domain requiring audit trails, or the testers are rotated frequently and continuity of coverage matters. Formal test cases are waste when: the team is colocated and communicates constantly, the product is a rapidly evolving prototype, or the cost of maintaining the test cases exceeds the value they provide.
The failure mode of ignoring this principle is "best practice theater" — implementing practices because they're standard in the industry, not because they solve a real problem in your context. You get comprehensive test documentation that nobody reads, coverage metrics that don't correspond to risk coverage, and process overhead that slows down the team without improving quality.
Principle 2: There are good practices in context, but there are no best practices
This extends the first principle. "Best practice" is a claim that there's one approach that's universally superior. Context-driven testing rejects that claim.
A practice is good when it's effective for a specific purpose in a specific situation. The same practice applied in a different context might be neutral, wasteful, or actively harmful.
The practical implication: stop asking "what are best practices for X?" Start asking "what problems are we trying to solve, and what practices would help us solve them in our specific situation?"
Principle 3: People, working together, are the most important part of any project's context
Testing is a human activity. The skills, communication patterns, relationships, and working styles of the people on a testing team matter more than any tool or process.
A team of mediocre testers with excellent process will be less effective than a team of excellent testers with mediocre process. This isn't an argument against having good process — it's an argument for investing in people first.
It also means that when you copy another organization's testing practice, you're not copying the people who made it work. The practice that works for a team of highly experienced testers at a mature company may fail badly for a junior team at a startup, even if every step of the process is implemented correctly.
Principle 4: Projects unfold over time in ways that are often not predictable
Testing plans made at the start of a project become wrong over time. Requirements change. Architecture decisions get revisited. Features that seemed simple turn out to be complex. Features that seemed critical get cut.
A testing approach that's locked in at the start of a project can't adapt to this reality. Context-driven testing treats testing strategy as something that evolves with the project — you adjust your approach as you learn more about the product, the risks, and the actual behavior of the system.
This is why rigid test plans created in advance of development often result in poor coverage: the plan was based on assumptions about the software that turned out to be wrong, but the plan wasn't updated to reflect reality.
Principle 5: The product is a solution. If the problem isn't solved, the product doesn't work
Testing should evaluate whether the product solves the actual problem it was built to solve, not just whether it meets a specification.
A specification can be completely satisfied and the product can still fail to solve the problem. This happens when the specification was wrong (misunderstood requirements), when the problem changed after the specification was written (market shift), or when the specification addressed the symptoms but not the root problem.
Context-driven testers ask: what is this product trying to accomplish for real users? Is it accomplishing that? This requires understanding the business context, not just reading the spec.
Principle 6: Good software testing is a challenging intellectual activity
Testing is not execution of pre-written scripts. That's mechanical work. Real testing requires judgment: deciding what to test, how to test it, how to interpret results, and how to communicate findings.
This principle is a statement about the nature of the work, not a humble-brag. It has practical implications for how testing work is staffed, how testers are evaluated, and how testing work is described in job postings and performance reviews.
If you treat testing as mechanical work, you'll hire for mechanical execution skills and get mediocre results. If you treat testing as intellectual work, you hire for judgment, curiosity, and technical depth — and you get testers who find things that scripts never would.
Principle 7: Only through judgment and skill, exercised cooperatively throughout the project, are we able to do the right things at the right times to effectively test our products
The synthesis of the first six principles. Testing effectiveness comes from judgment applied throughout the project lifecycle, not from following a defined process.
"Cooperatively" matters here. Testing done in isolation — a team that receives software at the end of development and tests it against a spec — is less effective than testing integrated into the development process. Context-driven testing doesn't mean "testers work alone using their judgment." It means the team works together to make informed decisions about testing throughout the project.
The Schools of Testing Thought
The context-driven school is one of several schools of testing thought — distinct traditions with different assumptions about what testing is for and how it should be done. Understanding the other schools helps you understand what's distinctive about the context-driven approach.
The Analytical school treats testing as a formal, mathematically-grounded discipline. Testing means deriving test cases from specifications using formal techniques: boundary value analysis, equivalence partitioning, state transition testing. Coverage means covering all branches of a formal model. This school produces rigorous, repeatable testing with well-defined coverage criteria. It works best for systems with precise specifications — embedded systems, financial calculations, cryptographic implementations.
The Standard (or compliance) school treats testing as a compliance activity: following defined processes, maintaining required documentation, meeting regulatory standards. Testing is what you do to demonstrate that you've met your obligations. This school dominates in regulated industries: medical devices, aviation, banking. ISO 9001, DO-178C, IEC 62304 — these standards define testing practices that must be followed regardless of whether they're optimal for the specific project.
The Factory school (sometimes called the process-oriented school) treats testing as a production activity: define the process, measure output, optimize throughput. Test cases are written by one group, executed by another, defects tracked by a third. This school scales well for large teams but produces mediocre results when applied to complex, changing software because the process can't adapt to new information fast enough.
The Quality (or agile) school treats testing as a collaborative activity integrated with development. Testing is part of building software, not a separate gate at the end. TDD, BDD, continuous integration, and shift-left testing belong to this tradition. This school works well for agile teams and products under active development.
The Context-Driven school doesn't prescribe a methodology. It provides a framework for choosing the right approach: understand your context, apply judgment, use practices that solve your actual problems.
In practice, experienced testers draw from all schools depending on the situation. The analytical techniques are genuinely useful for test case design. The standard practices are non-negotiable in regulated environments. The agile practices are the right default for most modern software development. The factory processes scale well for large, stable products.
Where One-Size-Fits-All Goes Wrong
The failure mode of non-contextual methodology application is predictable and common. Here's what it looks like in practice:
Scenario 1: Startup applying enterprise testing process. A 10-person startup decides to implement the testing process used at a 500-person enterprise. They add formal test plans, test case management in a dedicated tool, sign-off gates before each release, and defect tracking with mandatory fields for root cause, severity, priority, and customer impact. The result: every release takes three weeks longer because of documentation overhead. The test cases become outdated after the second sprint. The tool that cost $200/month is mostly used for reporting to management. The actual testing quality doesn't improve because the testers are too busy maintaining the process to do real investigation.
Scenario 2: Medical device team applying startup process. A team building an FDA-regulated medical device decides to adopt the "move fast" ethos of a consumer app. Exploratory testing replaces formal test protocols. Test documentation is minimal — "we know what we tested." Release decisions are based on developer confidence rather than systematic coverage evidence. The result: FDA audit finds insufficient evidence of systematic testing. Product launch is delayed 18 months while the documentation is recreated retrospectively. Several bugs that would have been caught by systematic testing go into production.
Scenario 3: Uniform coverage requirements applied across the codebase. An organization sets an 80% code coverage requirement for all production code. The requirement applies equally to the 10-year-old core transaction processing module and to the utility function that formats dates. Teams spend significant effort writing tests for simple utility code to meet the coverage requirement. The complex, high-risk transaction module has 80% line coverage but significant gaps in integration behavior, concurrent access patterns, and edge cases — none of which line coverage measures. Coverage theater has replaced actual risk-based testing.
The pattern is the same in each scenario: a methodology designed for a specific context is applied to a different context without evaluating whether it fits. The methodology provides the appearance of rigor without the substance.
Applying Context-Driven Principles Practically
Context-driven testing isn't "do whatever you want." It requires explicit analysis of your context before choosing an approach.
Start with a context analysis. For any project, answer these questions:
- What are the consequences of failure? Losing a paying customer? Financial loss? Safety risk? Regulatory violation?
- What is the rate of change? Is this a stable, mature product or an evolving prototype?
- How is the team structured? Colocated or distributed? Specialists or generalists? Experienced or junior?
- What documentation requirements exist? Regulatory compliance? Contractual? None?
- What's the testing timeline relative to development? Integrated throughout? Sequential gate at the end?
- What resources are available? Dedicated testers? Developers who also test? No dedicated testing resources?
The answers determine which practices are appropriate. High consequences of failure + regulatory requirements = more formal approaches, more documentation, more systematic coverage. Rapid change + experienced team + low regulatory burden = more exploratory, less formal, more adaptable.
Evaluate practices against your context. When someone advocates for a specific practice, ask: "For what context is this practice best suited?" Then compare that context to yours.
"You should use test case management software" — best suited for: large teams, high compliance requirements, distributed teams needing shared knowledge. Does this match our context? If you're a five-person startup with no regulatory requirements and daily standups, the answer is probably no.
"You should do TDD" — best suited for: experienced developers, well-understood requirements, unit-testable code. Does this match? If you're building a UI-heavy product with unclear requirements and a team new to TDD, the implementation cost may exceed the benefit in the short term.
Document your context-based decisions. When you decide not to do something that's commonly considered a "best practice," write down why. "We're not writing formal test cases because our team is colocated and changes daily; the maintenance cost exceeds the value." This creates a record that can be revisited when the context changes — when the team grows, when the product matures, when regulatory requirements appear.
Revisit the methodology as the context changes. The startup that doesn't need formal test documentation at 10 people may need it at 100 people. The medical device team that needed formal protocols for initial certification may be able to streamline their process for software updates after the initial approval. Context-driven testing requires periodic re-evaluation, not just initial analysis.
The Misreading of Context-Driven Testing
A common misreading of context-driven testing is that it licenses doing nothing. "We're context-driven, so we don't need to write tests." This is wrong and it's a distortion of the principles.
Context-driven testing says that practices should serve goals. If the goal is delivering reliable software, and you're not testing thoroughly, context-driven testing doesn't excuse that — it demands you justify why your current approach is sufficient for your context. In most cases, no-testing can't be justified. The context-driven framework asks you to be honest about your context and choose appropriate practices, not to rationalize insufficient testing as a philosophical position.
The school of thought that says "good testers don't need process" is not context-driven testing. It's a misappropriation of the language to justify intellectual laziness. Real context-driven practitioners apply rigorous analysis to their context, make explicit decisions about practice, and take responsibility for those decisions.
Understanding context-driven testing makes you harder to sell to. The next time someone presents a testing tool, methodology, or process as universally superior, the right question is: "Superior for what context?" If they can't answer that specifically, they're selling you something you shouldn't buy.