Skip to content

Part 3 of 7 · Product recall tracer series ~5 min read

Turning a recall notice into codes, not a product name

A recall notice is one of the few documents in this series written specifically to be acted on quickly by somebody who has never seen it before. It is structured, it is consistent, and it names codes. The risk is not reading it wrongly; it is reading it more loosely than it was written.

Key takeaways

  • Match on codes. A product name matches things the notice never named.
  • A batch code that matches nothing you received is a useful negative result.
  • Store the notice, its source and its date. The trace is only as good as its claim.
  • Widen a trace deliberately, with a reason attached.
  • Withdrawal or recall changes what you produce, not how you trace.

What a notice actually specifies

A recall notice read into a structured claimA vertical chain inside an AWS account container, entered from a box on the left labelled Notice, an agency alert or supplier email. Identify captures product, pack size and brand. Extract codes takes batch codes and best-before dates. Bound the window records a from and to, or explicitly marks it open. Classify records whether this is a withdrawal or a recall and what the hazard is. Store the claim keeps the source and received time, with a side exit reading no codes, ask. A note says the last step is the one people skip, and that a trace you cannot attribute to a specific notice is one you cannot defend six months later.AWS ACCOUNTNoticeagency alert orsupplier emailIdentifyproduct, pack size,brandExtract codesbatch codes andbest-before datesBound the windowfrom and to, orexplicitly openClassifywithdrawal or recall,and the hazardStore the claimwith source andreceived timeAsk a humana notice namingno codesno codesThe last step is the one people skip. A trace you cannot attribute to a specific notice is a trace you cannot defend six months later.
Fig 1. Five steps and one escape hatch. A notice with no codes at all is a real thing and it needs a human, not a wider guess.
  • Storage
  • Machine learning
  • Security & identity
  • Management
  • People

Why not match on the product name

Because the notice names a product and a set of batches, and those are different statements. Matching on the name alone recalls every batch of that line you hold, which is the outcome the whole system exists to avoid. It is also, quietly, the outcome most spreadsheets produce, because a name is the only field they can join on.

There is a subtler version of the same error. Supplier product descriptions drift: Own Brand Hummus 200g becomes Houmous Classic 200g after a packaging change, and a name match now returns two products where the notice named one. Codes do not drift, which is the entire reason to prefer them.

When the codes match nothing

Two of the four batch codes in the worked example matched nothing in the register. The instinct is to treat that as a failure of the trace. It is not. It means those batches went somewhere else, and the correct output is a documented negative: we received none of L4129 or L4130, here is the register query that says so, here is the date it ran.

A documented negative is worth having for the same reason the positive is. It is the difference between telling an inspector that you checked and telling them that you believe you were not affected.

Three notice outcomes converging on a recorded trace scopeThree boxes on the left feed one box on the right. Code matches a batch leads to a normal forward trace and is the most common. Code matches nothing records a documented negative and is common. Notice names no code widens the search by product with a reason attached and is rare. All three converge on Trace scope, holding exactly what will be searched, which feeds a box labelled Scope is stored and never widened silently. A note says widening is allowed, but widening without recording that you widened, and why, turns a defensible trace into an assertion.Code matches a batchtrace forward,normal pathmostCode matches nothingrecord a documentednegativecommonNotice names no codewiden by product,with a reasonrareTrace scopeexactly what willbe searchedScope is storedand never widenedsilentlyWidening is allowed. Widening without recording that you widened, and why, is what turns a defensible trace into an assertion.
Fig 2. Three outcomes, one scope. The third is legitimate and rare, and it is the only one that should ever produce a name-based search.
  • Compute
  • App integration
  • Machine learning
  • Security & identity
  • Analytics

Withdrawal or recall

The classification does not change the trace at all. Both need the same query against the same register. What it changes is which of the three lists matter: a withdrawal is about stock you still hold, so the quarantine list is the deliverable and the customer list may be empty. A recall is about units that already left, so the second and third lists become the work.

Keeping the two words distinct is worth the small effort, because the language ends up in your customer communication. Telling people you have recalled something you merely withdrew invites them to check a cupboard that was never at risk, and it spends trust you will want later.

All posts