Diff the Clone Against Its Twin
One acceptance criterion said the promotion drops off after three months and the bill reverts to £30, then two bullets later said six months free with month seven at £16.
One acceptance criterion. Two different contract lengths.
Read the first bullet and the promotion drops off after three months, at which point the bill reverts to £30. Read two bullets further down, inside the same criterion, and the first six months are free and month seven costs £16.
Both statements were approved. Neither had been flagged.
The Story Had a Twin
The six-month variant was not written from scratch. It was cloned from the three-month story that already existed, and then edited.
Half the acceptance criteria got edited. Half kept the original numbers.
That is the whole defect, and it is worth saying plainly because it sounds too dull to matter: the numbers in one document described two different products, and every gate the document passed through failed to notice.
Three Gates, No Catch
Refinement looked at it. Review looked at it. A full technical design was written on top of it.
None of them caught it.
That is not carelessness, and treating it as carelessness is how you guarantee the next clone does the same thing. The mechanism is more specific than that.
Why Cloning Beats Review
A clone copies two things, and reviewers treat them very differently.
It copies the shape — the structure of the criteria, the given/when/then rhythm, the ordering, the vocabulary. That is the part a reviewer actually reads. It scans correctly, because it was correct in the story it came from.
It copies the numbers — durations, prices, the month at which something changes. That is the part nobody re-reads, because the shape around them already looked right.
Then the contradiction lands inside a single acceptance criterion rather than between two of them. A reviewer comparing criterion 3 against criterion 7 might have spotted it. Nobody compares bullet 1 against bullet 3 of the same criterion, because a criterion is read as one unit that either makes sense or does not, and this one made sense right up until you checked whether its own bullets agreed.
Structure passes. Line-against-line comparison never happens.
What This Was Not
It was not an ambiguity. Nothing here was open to interpretation, and no business decision was missing.
It was not a hard defect either. It needed no environment, no data, no access, and no domain expertise beyond noticing that three does not equal six.
And it was not a problem that more reviewers would have solved. Three passes had already happened. A fourth reader doing the same kind of reading finds the same nothing.
The Part That Reaches Production
This one matters more than a normal documentation slip, for a reason that has nothing to do with the document.
The numbers in an acceptance criterion are the thing a tester copies into expected results. Directly, and usually without a second source — because the acceptance criterion is the source. There is nothing else in the room that says what the bill should be in month seven.
So an unedited clone does not stay in the document. It propagates: into the design, into test cases, into whatever the test data was built to produce, and into a green result that certifies the wrong figure. By the time anyone compares the invoice against what the business intended, the number has been agreed by four artefacts that all inherited it from the same paste.
A contradiction is actually the lucky version of this. If the clone had kept the £30 consistently and simply been wrong, nothing in the document would have signalled anything at all.
The Check, and When to Run It
For any story that has a sibling, diff it against the sibling before you analyse it.
Not after. Before. The fastest way to find an unedited clone is to look at the thing it was cloned from, and the diff takes about two minutes:
- Find the twin first. A story with "6-month," "variant B," "second region" or any other differentiator in its title almost always has an older sibling. Ask which story this one came from — someone knows, and the answer is never "none."
- Compare only the values. Durations, prices, months, thresholds, quantities. Ignore the prose entirely; the prose is what already passed three reviews. Every number that is identical in both stories is either deliberately shared or an unedited leftover, and the author can tell you which in one sentence.
Do it before you write a single expected result, because after that point you are no longer reviewing the numbers — you are defending the ones you already encoded.
Which of the stories on your board right now is somebody else's story with two fields changed?