I was consulting with a founder building a lead enrichment pipeline at a small, VC-funded startup where everyone wore three hats and shipped fast.

The pipeline pulled GitHub profiles and matched them to LinkedIn accounts, cross-referencing company pages along the way. The model returned 0.78 confidence on a match.

The model gave us the wrong person. Right company, right first name — wrong human being.

We needed to understand why.

The pushback surprised me. They couldn’t dispute the wrong match, but fixing it would require understanding how the system reached its predictions.

“Let’s rebuild the system. We will do better.”

“We need to hire ML researchers.”

“We just need to keep iterating.”

None of that would explain the failure. We didn’t know what guided the model’s prediction or whether we were feeding it the wrong context.

Could anyone explain why this match was supposedly correct?

Not “the model said 0.78 confidence.” Why 0.78? What did it weigh? What did it consider and reject? What evidence supported the decision?

Nobody could answer that, because the system wasn’t built to answer it. It was enabling us to do the wrong thing.

What they resisted wasn’t slowing down but confronting a harder question: Can we measure and explain why our pipeline produces these results?

The question was uncomfortable because shipping faster wouldn’t fix a visibility problem. “0.78 confidence” was a number, not an explanation.

What Financial Audits Require

After Enron collapsed in 2001, the response wasn’t “we need better accountants.” Sarbanes-Oxley required stronger internal controls and records that auditors could trace.

Even when I Venmo my buddy Brett $23.44 for pizza in Brooklyn, there’s a record. Corporate finance does this at scale: every journal entry traceable to source documents.

AI systems need the same kind of traceability.

What Dashboards Miss

We talk about Evals and Observability like they solve the problem.

Observability tells you what happened—latency, cost, throughput. Evals tell you how often you’re right—perhaps 85% accuracy on a test set.

Neither tells you why any individual decision was made.

Evals don’t explain how to improve the system. They surface the gap—”we’re wrong 15% of the time”—but someone still has to inspect the failures, infer what went wrong, and revise the prompts.

I see this in startups under pressure to ship. Teams track latency, cost, and benchmark accuracy while individual decisions remain opaque.

Admitting that an impressive demo might be confidently wrong is uncomfortable. Shipping the next feature is easier than investigating the last failure.

So we tried something different.

Recording the Decision

After the wrong match, we changed how the pipeline made and recorded decisions.

For that same profile, the new system logged:

Evidence Span Trace

Lead Enrichment Pipeline

GitHub → LinkedIn Match · Traced Decision

Source: GitHub
Íñigo Montoya
@inigo

Software Engineer. Building at Guilder Inc. Passionate about revenge and sword fighting.

📍 Florin 📦 47 repos 👥 892
Candidates Evaluated
Íñigo Montoya
SAP Analytics Consultant · Freelance
× Rejected
Name match, company mismatch
Íñigo Ruiz
Managing Partner · Ruiz & Associates
× Rejected
Name partial match only
Íñigo Montoya Fernández
CTO · Guilder Inc
✓ Match
Name + company match
Evidence Breakdown
Company 95%
from Guilder Inc
to Guilder Inc
Name 85%
from Íñigo Montoya
to Íñigo Montoya Fernández
Role 45%
from Software Engineer
to CTO
Decision: Flagged for review

Strong name + company match. Role mismatch (Software Engineer → CTO) may reflect recent promotion or outdated GitHub bio. Flagged for human review.

An evidence span: not "0.78 confidence" — but why.

Instead of recording only “0.78 confidence,” the system recorded four candidates, the evidence for and against each one, and the final decision. When the next wrong match happens, we can inspect that record.

The founder asked me later: “How do we know the good matches are actually good?”

You can’t trust the hits if you can’t explain the misses.