All articles
  • Test planning
  • QA process
  • Test strategy

A Test Plan People Actually Read

Thirty-page test plans get skimmed once and ignored. One page that answers six questions gets used every release — and settles the arguments before they start.

Muhammad Asadullah Kissana7 min read

I have written test plans that nobody read. They were thorough, they followed the template, they had a glossary and a document history table, and their only real function was to exist so that a box could be ticked.

A test plan is a communication tool. If the people it is written for do not read it, it has failed at its only job, and length is usually why.

Why the long template gets ignored

The standard template asks for sections that repeat between projects — introduction, references, definitions, roles and responsibilities — and by the time a reader reaches anything specific to this release, they have stopped reading. Worse, the boilerplate makes the document expensive to update, so it goes stale, and once it is stale everyone learns to ignore it.

What a developer, a product owner, and a manager each want from a test plan is small and specific: what is being tested, what is not, when it will be done, and what happens if something fails. Everything else is context they already have.

One page, six questions

The plan I actually write fits on a page and answers six questions in order:

  1. What is being tested? The release scope, in features not in test cases.
  2. What is explicitly not being tested, and why? The most important section.
  3. How will it be tested? Types of testing, environments, roles and data.
  4. When does testing start, and what must be true before it does?
  5. What must be true for me to sign this off?
  6. What could go wrong, and what will we do about it?

That is the whole structure. It takes an hour to write, five minutes to read, and it can be updated in place when scope changes rather than becoming a lie.

Scope is mostly about what you are not testing

The out-of-scope section is where a test plan earns its keep, because it converts a silent assumption into a stated decision.

Write it concretely:

  • "Payment gateway integration is tested against the provider's sandbox only. No live-transaction testing before release."
  • "Load and performance testing is out of scope for this release; the last performance pass was in the previous cycle."
  • "Internet Explorer is not covered. Supported browsers are the current versions of Chrome, Firefox, Edge, and Safari."
  • "Third-party email deliverability is not tested beyond confirming the send is triggered."

Every one of those lines is a risk somebody may want to reject — and giving them the chance to reject it before the release is the entire point. Silence implies you tested everything, and when a defect surfaces in an untested area, silence is what turns a documented trade-off into an apparent miss.

Entry and exit criteria stop the arguments

Entry criteria protect your time. Without them, testing "starts" on a build that does not deploy, and the days lost get counted against QA anyway.

Mine are usually close to:

  • The build deploys successfully to the test environment
  • Smoke tests on core flows pass
  • Test data and accounts for each role exist
  • Feature tickets are marked ready for testing, not still in progress

Exit criteria protect the release. Vague criteria — "all critical bugs fixed" — cause an argument about the word "critical" at the worst possible moment. Specific ones do not:

  • No open defects at critical or high severity
  • All Tier 1 cases executed and passed
  • Every fixed defect re-verified on the release build
  • Known medium and low defects listed, with the product owner's acceptance recorded

Agree both sets before testing starts. Agreeing them at 9pm the night before a release is not agreement, it is negotiation under duress.

Name the risks and what you will do about each

A risk section that says "risk: insufficient time for testing" is filler. A useful one pairs each risk with a response:

The discount calculation touches invoicing, and the invoice module has no automated coverage. Mitigation: all Tier 1 invoice cases run manually with database verification, and the reconciliation query is run against staging before sign-off.
The mobile release depends on a third-party SDK update. Mitigation: regression on payment and login flows on two physical devices per platform, because the SDK touches both.

Two or three of these are worth more than a page of generic risk language, because each one tells a reader something they did not already know and states what is being done.

Write the environment down like a stranger will use it

Half the disputes in a release come from environment ambiguity — someone reproduces on the wrong build, or tests against a database that was reset overnight.

State the environment URL, the build or commit under test, the account credentials per role, and where the test data comes from. It takes four lines and it eliminates a class of wasted afternoon. It also makes your defect reports better, since a report a developer can act on needs the environment stated anyway.

Keep it alive, or do not write it

A test plan that describes a scope which changed two weeks ago is worse than no plan, because people who trust it are misled and people who know better stop reading.

So: keep it in version control next to the code, edit it in place when scope changes, and note the change. If a feature is dropped from the release, move it to out-of-scope rather than deleting the line — the record of what was dropped and when is useful later, and it takes one keystroke.

What a good plan actually buys you

Not compliance. Three specific things.

It surfaces disagreements early, while they are cheap. Most of the value appears in the twenty minutes someone spends reading the scope section and saying "wait, we do need that tested."

It makes your sign-off mean something. A sign-off against stated criteria is a professional judgement. A sign-off with no stated criteria is an opinion, and it will be treated as one the first time a defect escapes.

And it makes you replaceable in the good sense. When someone else runs the release while you are away, the plan is what they follow — which is the same reason a regression strategy belongs in a document rather than in your head.

If you need a QA process set up from scratch rather than inherited, that is something I do for teams.

Work with Asadullah Kissana

Available for QA contracts, consulting, and full-time roles — and for web and mobile builds through aimEncoders.