Writing a test plan
The document people are asked for and dread. Scope, approach, environments, data, risks, schedule and sign-off — for one release or one project, not for eternity. Learn the sections, learn which ones you are allowed to cut, and learn to write it in an afternoon rather than a fortnight.
Somebody has asked you for a test plan and you have until Friday.
Here is the reframe that makes it easy. A test plan is not a policy document. It is the plan for one journey.
You are driving somewhere on Saturday. Where are we going. Who is coming. What are we taking. What could go wrong. When do we leave and when do we need to arrive. That is a test plan, and nobody needs fifteen pages to describe a car journey.
The reason people dread it is that they have only ever seen the enterprise version: forty pages, twelve of them boilerplate, written to satisfy a process rather than a reader.
The eight sections
In the order they belong on the page. For example, on the gift-card release below, scope took four lines and out-of-scope took six.
- What this is for. Two sentences. Which release, which feature, why we are testing it.
- Scope. What is being tested. Be specific: features, journeys, platforms.
- Out of scope. What is not, and why. The most-quoted section in any plan.
- Approach. How you will test it: automated where, manual where, exploratory charters, and what data you need. Scoring what to automate first is the method behind that split.
- Environments and data. Where, with what, and who sets it up.
- Risks. What could go wrong with the testing, plus what worries you about the product. Each with a response.
- Schedule and dependencies. When testing starts, what has to be ready first, when you will report.
- Entry and exit criteria. The conditions to start and the conditions to stop, agreed now rather than argued about later.
Why you should care about this
Because the plan is where you get to set expectations while you still have leverage.
Every uncomfortable end-of-release conversation is a scope, dependency or criteria conversation that nobody had at the start. "I did not know that was in this release." "The test data was never ready." "You said it was tested." A plan is your one chance to answer all three in writing before anyone is under pressure.
It is also the most-searched document in testing, and it is answered terribly. The pages you find are blank templates with square brackets, which is why writing one still feels hard even after reading three of them. So the useful part of this topic is not the section list. It is the filled-in example below.
Nobody dreads a plan for a car journey. They dread the forty-page version written to satisfy a process rather than a reader.
How you write one in an afternoon
1. Get the scope from the tickets, not from a conversation. List the actual stories in the release. Read each one. If something is ambiguous, that is your first risk.
2. Write out-of-scope while the scope is fresh. Anything adjacent that people might assume is included: other platforms, migrations, the third-party thing, last release's known bugs.
3. Ask what could stop you testing. Test data, an environment, a dependency, a colleague on holiday, a feature flag nobody controls. These are your testing risks and they are more predictable than product risks.
4. Name the product risks with the team. Ten minutes in refinement. "What in this release worries you?" Engineers answer this well and honestly, and their answers reshape where you spend your effort.
5. Set exit criteria you would genuinely hold. Charters come from session-based testing, which is where the 90-minute timebox in the example comes from. If you would ship with two open medium bugs, do not write zero open bugs. A criterion you would waive is worse than none, because it teaches everyone that criteria are decorative.
6. Circulate it and get one round of comments. Product, tech lead, whoever signs off. Fifteen minutes of their attention now saves a week of argument later.
7. Keep it open during the release and mark it up. Annotations belong with the release record, not in a private file. A plan that is never touched after day one was a formality. Annotate what changed, and that becomes your test summary report at the end with almost no extra work.
A complete filled-in plan
Same small system as the strategy. This is the whole document, nothing elided.
TEST PLAN — GIFT CARDS
Release: 2026-09-04 Author: Priya N Reviewed: Sam O (product), Dan L (CTO)
Points at: Willow Books Test Strategy v3
1 WHAT THIS IS FOR
Willow Books is adding gift cards: customers buy one, the recipient
redeems it at checkout, either party can check the balance. This plan
covers testing for that release only.
2 SCOPE
- Buying a gift card (amounts 10/25/50/100, card + Apple Pay)
- Delivery of the code by email, immediate and scheduled
- Redemption at checkout: full, partial, and combined with a discount code
- Balance check page, logged in and logged out
- Refunding an order that was paid with a gift card
- Admin: issue a card manually, void a card
- Chrome, Safari, iOS Safari, Android Chrome
- Checkout keyboard navigation and axe checks (per strategy)
3 OUT OF SCOPE
- Physical gift cards. Not in this release.
- Currencies other than GBP. The pricing service is single-currency.
- Expiry handling. Cards do not expire yet; the field exists but is unused.
- Gift cards on subscriptions. Subscriptions do not launch until Q1.
- Load testing. Per strategy: we are under 400 orders a day.
- Stripe's own payment behaviour. Our integration only.
4 APPROACH
API tests for issue/redeem/void/balance, including the money maths.
Browser tests for buy-and-redeem happy path only.
Exploratory charters (90 min each): partial redemption maths, refunds
against a gift-card order, and the scheduled-delivery timing.
Manual pass on the three payment combinations no automation covers.
5 ENVIRONMENTS AND DATA
staging, restored 2026-08-28 from anonymised production.
Stripe test mode. Mail catcher for delivery emails.
Need: 4 seeded customers, 2 with existing orders. Dan to seed by 08-31.
6 RISKS
R1 Money maths on partial redemption is the highest-risk area
(rounding, multiple cards, discount interaction).
-> Dedicated charter plus API tests for every combination. Priya.
R2 Test data not ready by 08-31 would cost two days.
-> Confirmed with Dan 08-24; fallback is manual seeding, half a day.
R3 Refunds against gift-card orders touch live money paths.
-> Test in Stripe test mode only. Explicit sign-off from Sam before
this goes to production.
R4 Scheduled delivery depends on the cron worker, which has no
monitoring.
-> Raised as a separate ticket (WB-1841). Testing will cover the
happy path only; the gap is documented, not closed.
R5 Priya on leave 09-02 and 09-03.
-> Regression pack moved to 09-01. No exploratory work in that window.
7 SCHEDULE AND DEPENDENCIES
08-31 test data seeded (Dan) dependency
09-01 feature complete on staging (eng) dependency
09-01 regression pack run
09-02 exploratory charters (before leave)
09-03 buffer / fixes
09-04 release decision 10:00, ship 11:00
8 ENTRY CRITERIA
- all gift-card stories marked feature complete
- pipeline green on the release branch
- test data seeded and verified
- no open critical defects carried in from the previous release
EXIT CRITERIA
- every story's acceptance criteria checked and recorded
- zero open critical or high defects in gift-card scope
- money maths charter completed with no unexplained discrepancy
- regression pack run, failures triaged and either fixed or accepted
in writing by Sam
- known gaps (R4) written into the release noteLook at the risks section. Five risks, each with a named owner and a response. One is simply documented rather than solved, and one is about the tester's own holiday. That honesty is what makes a plan useful rather than decorative.
How to show you know it
A two-page plan for a real release. With the four sections that matter filled in properly. This is the artefact people ask for in interviews and almost nobody has a good example of.
A risk that you documented rather than solved. R4 above. It shows you know a plan records reality instead of pretending everything is covered.
Exit criteria you actually held. Or, better, a story about the release where you held them and what happened. That is the difference between writing criteria and meaning them.
A plan you marked up during the release. Annotations showing what changed, which becomes your summary report for free.
Questions
How long should it be?
Two pages for a normal release. The example above is a real length for a real feature. If yours is longer, check whether you are repeating the strategy.
What if we work in sprints and there is no "release"?
Write one per meaningful chunk, such as an epic, a quarter or a launch. For ordinary sprint work the standing strategy plus acceptance criteria per story is enough. Do not write a plan per sprint; nobody will read the fourth one.
Do I need one if nobody asked?
For anything with real risk, write it anyway and keep it short. It costs an afternoon and it is the cheapest way to make scope and dependencies somebody else's problem too.
Can I use a template?
Use the eight headings as a checklist, then throw the template away. Templates encourage filling in every box; a good plan cuts the boxes that say nothing and spends the space on scope, risks and exit criteria.