BA Playbook 05
Two Systems Show Different Numbers
A practical BA guide to investigating data mismatches.
Surya · August 8, 2026 · 4 min read · 14 practices
For Business Analysts investigating data discrepancies, BAs supporting reconciliation or control functions, Anyone handed "which number is right" with no other context and Product Owners triaging a data quality ticket.
System A: 1,248 trades. System B: 1,231 trades. Someone drops both screenshots into Teams and asks: "which one is wrong?" Maybe neither. Different numbers often come from different definitions, timing, populations, filters or processing states — not from either system being broken. The first job isn't finding the wrong number. The first job is making sure you're actually comparing the same thing.
01Step 01
Confirm the metric
"Trades" alone is not a shared definition yet.
Step 01
Confirm the metric
"Trades" alone is not a shared definition yet.
At a glance
- Trade?
- Order?
- Execution?
- Booking?
- Gross or net?
Why it helps
Two teams can both be right and still disagree, if one is counting orders and the other is counting executions.
02Step 02
Confirm the time window
The same day can mean three different things to three different systems.
Step 02
Confirm the time window
The same day can mean three different things to three different systems.
At a glance
- Business date, or calendar date?
- Which timezone?
- What's the cut-off?
- What time does the batch actually run?
Why it helps
A trade booked at 11:58pm can land in "today" or "tomorrow" depending on which of these four answers a system uses.
03Step 03
Confirm the population
Before comparing counts, confirm both sides are counting the same slice of the world.
Step 03
Confirm the population
Before comparing counts, confirm both sides are counting the same slice of the world.
At a glance
- Market?
- Region?
- Client?
- Product?
- Venue?
- Status?
Why it helps
One system scoped to EMEA and one scoped globally will never match, and neither is malfunctioning.
04Step 04
Confirm the source
Not every number comes from the same place, even when the screen looks the same.
Step 04
Confirm the source
Not every number comes from the same place, even when the screen looks the same.
A cached report lagging the live database by design isn't a bug. It's worth knowing before anyone spends an afternoon chasing it as one.
At a glance
- Live database?
- API?
- Scheduled report?
- Cache?
- Warehouse?
Why it helps
The source tells you how fresh the number is allowed to be — which sometimes fully explains the gap on its own.
05Step 05
Compare definitions, not just counts
The two systems can both be correct and still never agree.
Step 05
Compare definitions, not just counts
The two systems can both be correct and still never agree.
Compare
System A
Counts an amended trade as one trade — the latest version only.
System B
Counts every trade version separately, including amendments.
Why it helps
Both may be behaving exactly as designed. The mismatch is a definition gap, not a defect in either one.
06Step 06
Compare processing states
A count taken mid-pipeline will never match a count taken at the end of it.
Step 06
Compare processing states
A count taken mid-pipeline will never match a count taken at the end of it.
The flow
Why it helps
If System A counts anything past "Received" and System B only counts "Settled," the gap is explained before you look at a single row.
07Step 07
Check the filters
Somebody, at some point, probably applied a filter and forgot about it.
Step 07
Check the filters
Somebody, at some point, probably applied a filter and forgot about it.
At a glance
- A UI filter left switched on
- Report defaults nobody remembers setting
- SQL WHERE conditions baked into the query
- Statuses excluded by default
Why it helps
This single step resolves more mismatches than any of the others, and it's the easiest one to skip because it feels too simple to be the answer.
08Step 08
Check for duplicates
Sometimes the higher number is the wrong one, not the lower one.
Step 08
Check for duplicates
Sometimes the higher number is the wrong one, not the lower one.
Why it helps
A retried request, a re-run batch, or a join that fans out unexpectedly can all quietly inflate a count.
09Step 09
Check for missing records
And sometimes it's the lower number that's actually incomplete.
Step 09
Check for missing records
And sometimes it's the lower number that's actually incomplete.
Why it helps
A failed load, a filter that silently drops nulls, or a join that drops unmatched rows can all quietly shrink one.
10Step 10
Compare identifiers
Matching on the wrong key can look exactly like a data mismatch.
Step 10
Compare identifiers
Matching on the wrong key can look exactly like a data mismatch.
At a glance
- Trade ID
- Order ID
- Transaction ID
- External ID
Why it helps
If System A keys off an internal trade ID and System B keys off an external reference, records that genuinely match will look unmatched until the mapping is fixed.
11Step 11
Take a small sample before you touch the whole population
Do not start with all 100,000 rows.
Step 11
Take a small sample before you touch the whole population
Do not start with all 100,000 rows.
Why it helps
Pick 5 to 10 individual mismatches and trace each one by hand. The pattern that explains all of them is usually visible after the third or fourth.
Pro tip — If the same explanation accounts for your first five mismatches, it's very likely the explanation for the rest too — confirm it before assuming otherwise.
12Step 12
Sort what you find into reconciliation buckets
Not every mismatch is the same kind of mismatch. Separate them before explaining them.
Step 12
Sort what you find into reconciliation buckets
Not every mismatch is the same kind of mismatch. Separate them before explaining them.
The flow
Why it helps
"Only in A" points at a missing-record problem. "In both, values differ" points at a definition or timing problem. They need different investigations, not one shared explanation.
13Step 13
Classify the root cause
Every mismatch traces back to one of a small number of causes.
Step 13
Classify the root cause
Every mismatch traces back to one of a small number of causes.
At a glance
- Data — something's missing or duplicated
- Definition — the two sides mean different things
- Timing — the two sides were measured at different moments
- Processing — the two sides are at different pipeline stages
- Reporting — the report layer, not the underlying data, is wrong
- Requirement — nobody actually specified which of these was correct
Why it helps
Naming the category is most of the fix. "It's a timing issue" tells everyone what kind of conversation happens next.
14Step 14
Document the actual cause, not just that it's resolved
"Fixed" is not a finding. It's the absence of one.
Step 14
Document the actual cause, not just that it's resolved
"Fixed" is not a finding. It's the absence of one.
The shift
Why it helps
The next person who hits a similar mismatch — and there will be a next person — needs the actual cause, not a status update.
Neither number was "wrong."
They were never counting the same thing.
Most data mismatches resolve into a one-sentence answer once someone traces a handful of records instead of arguing about the totals. The totals are a symptom. The definition, timing or status gap underneath them is the actual finding.
Take this with you
Data Mismatch Investigation Checklist
DATA MISMATCH INVESTIGATION CHECKLIST [ ] Same metric [ ] Same business definition [ ] Same date [ ] Same timezone [ ] Same population [ ] Same filters [ ] Same status [ ] Same source [ ] Same identifiers [ ] Duplicate check done [ ] Missing-record check done [ ] Small sample reconciled [ ] Root cause classified [ ] Business decision recorded
Get new playbooks first.