Lineage Debugger
A number is wrong and you have to find out where. Start at the number and walk upstream one hop at a time, asking the same question at every hop — the first “no” is where the incident lives, and every hop you skip is a hop you will come back to.
Nobody has ever found a data incident by starting at the source. Starting upstream means checking dozens of things that are fine before reaching the one that is not, and it means you have no way to know when to stop. Starting at the number gives you a stopping rule: the first hop where the affected period is not complete.
Lineage is also the only tool that works in the other direction. Upstream answers where did this come from during an incident; downstream answers what breaks if I change this column before one. A platform with only the first has to discover its blast radius rather than know it.
The lab
Click a metric and walk back through the graph. At each node, decide whether the affected period is complete here before you move on.
One number, with the grain now invisible.
The walk, as six questions
The same question in six places. Not a checklist to memorise — a discipline that stops you from jumping to the hop you already suspect.
- 1The tile itself
Is the tile computing what its title claims, over the period its title claims?
If yesThe number is faithfully rendering a model. Go to the model.If noA filter, a date range or a definition was changed inside the BI tool, where no lineage graph can see it. You are done, and nothing upstream was ever wrong. - 2The serving model
Is the affected period complete and unique here — right row count, no duplicates on the business key?
If yesThe model faithfully aggregated its inputs. Go to its inputs.If noThe break is in this model: a join that fans out, an incremental run that appended instead of replacing, or a filter that silently excludes. - 3The transformation that built it
Did this run succeed, and did it publish — and is “succeeded” the same thing as “published the right rows”?
If yesThe logic ran over whatever it was given. Go to what it was given.If noA crashed or abandoned run leaves the previous output in place, and the dashboard renders yesterday with total confidence. - 4The upstream datasets it reads
Is each input fresh against its own stated SLO, and complete for the affected period?
If yesThe inputs are all present. The break is semantic, not structural — go and compare definitions.If noThe first input that is stale or short is your lead. Follow that one and stop following the others. - 5Ingestion
Did every partition of the affected period land, and does its row count reconcile against the source?
If yesWhat arrived matches what was sent. Go to the source.If noA gap here is where the incident lives. Establish its bounds before you fix anything, because the fix usually destroys the evidence. - 6The source system
Did the business event actually happen at the volume you expected?
If yesThe data is right and the pipeline is wrong. Everything above is now in scope again, with a much narrower question.If noNothing is broken. Revenue really is down, and the platform did its job by telling you so — which is the outcome nobody rehearses for.
Where to go next
Revenue is down 40% and the evidence is contradictory. Diagnose before the answer is shown.
The same path, forwards →What each hop promises the next, which is what makes the upstream question answerable.
The decision tree →From the shape of the wrongness to the mechanism that produces it.