The Defects Your Quality Reporting Has Never Measured

One High-priority defect, 33 stories, 76 linked bugs — and two monitoring reports that describe worlds with nothing in common. An unlinked bug is not scored as low risk; it is absent.

One new defect that week. High priority.

Add a product to the cart, remove it, and the generated contract comes out blank. Exactly the kind of finding a sprint report exists to surface.

It appeared in one of our two monitoring reports and was invisible to the other. Not downgraded. Invisible.

Two Watches, Two Worlds

We run the escape analysis from both ends, deliberately.

The story-side watch walks the sprint's 33 stories, follows their linked bugs, and reports what testing found against delivered work. That week it reported 76 linked bugs.

The bug-side watch starts from the bug feed and reports what was raised, regardless of where it came from. That week it reported the blank contract.

Put the two outputs side by side and they have nothing in common. The story-side report does not contain the new defect. The bug-side report knows nothing of the other 76. Two monitors, same sprint, disjoint worlds.

The defect was linked to none of the 33 stories.

That is the whole cause. Not a tooling outage, not a permissions problem, not a filter someone typed wrong. One relationship that was never created, on one ticket, by someone in a hurry.

And every traceability-derived metric we own reads that relationship. Escape rate reads it. Defects-per-story reads it. RTM coverage reads it. They are all the same query wearing three different hats, and that query starts from the story and walks outward.

A bug with no link is not on the far end of any walk.

Absent Is Not Low

Here is the part worth sitting with.

If an unlinked defect were scored badly — counted against an "unknown" bucket, dumped into a residual row, flagged as unclassified — it would be a housekeeping problem. Someone would clear the bucket on a Friday.

It is not scored badly. It is not scored at all.

The population that the metric describes is defined by the link. Remove the link and the defect leaves the population, and a metric computed over a population cannot report on what is outside it. Escape rate came out clean that week not because escapes were rare, but because the one candidate had stepped outside the set being measured.

Nothing in the tooling announces an absence. A dashboard renders what it was given. It has no way to display the shape of what it never received, and no instinct to try — that is a property of counting in general, not of any particular tool.

What It Was Not

It was not a low-severity finding sneaking through. High priority, on the most visible artefact in the flow: the contract a customer signs.

It was not a stale report either. Both watches ran, both were current, both were correct about their own inputs. Two accurate reports whose union nobody was computing.

And it was not a one-off in any meaningful sense. The mechanism does not care which bug it is. Any ticket raised in a rush, or raised against something nobody had a story for, lands in the same blind spot — and there is no reason to think the blind spot has ever been empty.

The Reconciliation

Treat the missing link as a defect in its own right. Not admin, not tidying, not something the release manager sorts out later. A defect in the measurement system, filed against the measurement system.

Then run a standing reconciliation between the two feeds. Every sprint, compare the bug feed against the traceability feed and produce one list: the bugs that appear in one and not the other.

That list is short, it takes minutes to produce, and it is the most informative artefact in the whole reporting pack. It is not a backlog to clear. It is the exact population your quality reporting has never measured — and until you compute it, you have no way of knowing whether it holds one High-priority blank contract or thirty.

Symmetry matters here. Run the comparison in both directions, because the reverse case — a story-side link pointing at something the bug feed no longer contains — fails just as silently and looks even more like good news.

Your last sprint report: was every raised defect actually inside the population it was counting?