L1 · Running the work
L1Go deeper4 min read

Traceability: requirement to test to result

Answering “which tests cover this requirement, and did they pass” without a week of archaeology. A matrix in a spreadsheet is the old form and still works; links in your tracker are the better one. Dull until an auditor, a customer or a regulator asks — and under the AI rules, more of them now do.

When you order a parcel you get a tracking number.

That number joins four things: the order you placed, the item that was picked, the van it went on, and the moment it arrived. Nobody finds this thrilling. Everybody wants it the day the parcel does not turn up.

A requirements traceability matrix is that tracking number for testing. It joins the requirement to the cases that cover it, and the cases to their last result.

One question, answered without a week of archaeology: which tests cover this, and did they pass?

What it actually is

Three columns and a date. Everything else is decoration.

  • The requirement. A story, an acceptance criterion, a clause in a spec, a regulation.
  • The tests. Which cases or automated checks cover it. Named, not counted.
  • The result. Pass or fail, on which build, when.

Read left to right and you get coverage. Read right to left and you get impact, which is the direction people forget. When a test fails, which requirement is now unproven? When a requirement changes, which tests must be rewritten?

Why you should care about this

Because the question always arrives later, and always under pressure.

A customer says a feature never worked. An auditor asks what you tested before the March release. An incident review asks whether anybody had checked the thing that just broke. Without traceability, answering means reading old tickets and trusting memory. With it, the answer takes a minute.

The AI layers have made this sharper. Governance frameworks now ask for exactly this evidence, and much of what they want is testing evidence with dates and versions attached. That is the same material described in AI governance, and traceability is the shape it wants to be in.

How to do it without a project

  1. Trace at the level people ask about. Usually the acceptance criterion or the story. Tracing every sentence of a spec is a project nobody finishes.
  2. Link, do not copy. A case that names its story, and a run that names its build, is traceability. Retyping requirement text into a spreadsheet is data entry that goes stale within a sprint.
  3. Let the tracker do it. Cases linked to stories, runs linked to builds, defects linked to cases. This is exactly what test management tools are for, and it means the matrix is a report rather than a document.
  4. Use a spreadsheet when the tracker cannot. For a contract, a regulation or a security requirement that has no ticket, a five-column sheet is honest and fine.
  5. Include the automated checks by name. A test file path is a perfectly good entry, and it pairs with scoring what to automate first. Coverage that ignores automation is misleading.
  6. Record gaps as rows, not blanks. An empty cell reads as an oversight. "No test, accepted by product on 12 August" reads as a decision.
  7. Refresh it at release time. The matrix is only evidence if the results in it belong to the build you shipped.

Nobody has ever wanted a traceability matrix. Plenty of people have urgently wanted the answer it gives.

A filled-in matrix

Here is the gift-card release at Willow Books, traced at acceptance-criterion level. Nine rows, and it took twenty minutes because the links already existed.

traceability-gift-cards.txt
RELEASE  gift cards, build rc-2026-09-04.5     matrix refreshed 2026-09-04

REQUIREMENT (story / criterion)        TESTS                     LAST RESULT
WB-1801 buy a card, 4 amounts          GC-001, GC-002            pass 09-04
                                       api/gift-card.spec.ts     pass 09-04
WB-1801 buy with Apple Pay             GC-003                    pass 09-03
WB-1802 redeem in full                 GC-005, e2e/gift.spec.ts  pass 09-04
WB-1802 redeem in part, card pays rest GC-004                    pass 09-04 (after
                                       api/partial.spec.ts       fix WB-1864)
WB-1802 card is consumed before card
        is charged                     GC-004, GC-006            pass 09-04
WB-1803 balance page, logged out       GC-010                    pass 09-04
WB-1803 balance updates after use      GC-011                    FAIL 09-04
                                                                 WB-1865 accepted
                                                                 by Sam, caching
WB-1804 refund an order paid by card   GC-014, GC-015            pass 09-04
WB-1805 admin can void a card          GC-018                    pass 09-02
WB-1806 card expiry                    none                      NOT TESTED
                                                                 out of scope, see
                                                                 test plan, agreed
                                                                 with Sam 08-24

COVERAGE  10 criteria, 9 covered, 1 deliberately not tested
OPEN      1 accepted failure (WB-1865), noted in the release note

The two interesting rows are the last ones. One is a failure that was accepted in writing, by a named person, on a date. The other is a requirement with no test and a reason. Both are far more useful than a green cell, because they record a decision instead of hiding a gap.

How to show you know it

  • A one-page matrix for a real release, refreshed at release time. Attach it to the summary report so both live together. Most teams have never produced one.
  • A gap row with a name and a date. It proves you record decisions rather than only outcomes.
  • The reverse lookup. "This test failed, so these two criteria are now unproven." Reading the matrix backwards is the part people miss.
  • Traceability that is a report, not a document. If you can produce it from the tracker in a minute, you have built the durable version.

Questions

Do we need a traceability matrix if we are not regulated?

You need the links. You may never need to format them as a matrix. Cases joined to stories and runs joined to builds gets you the answer, and the formatted document can wait until somebody asks.

Is a spreadsheet acceptable?

Yes, and for requirements that live outside your tracker it is often the only option. The risk is staleness, so date it and refresh it per release rather than treating it as a living document.

How detailed should the requirement side be?

Acceptance criteria are usually the right grain. Stories are too coarse to be useful, and individual spec sentences are too fine to maintain.

What about automated tests, do they count?

They count, and leaving them out makes coverage look worse than it is. Name the file or the test id, the same way you name a manual case.