How a Bad Join Created a 5x Reporting Error
A call center believed carriers were rejecting 61 percent of its calls. The real number was 11 to 12. The difference was one join that silently dropped 81 percent of rows.
An outbound call center came to us convinced it had a crisis: an internal analysis said carriers were declining 61 percent of its outbound calls as spam. Panic-level numbers. Before anyone spent money fixing the problem, we asked a quieter question: is the measurement itself right?
It wasn't. The real decline rate was 11 to 12 percent, about 1 in 8 calls. The first analysis overstated it five times over.
Where the 61 percent came from
The analysis joined two log tables: dial attempts and call outcomes. The join key looked reasonable and ran without errors. But it only matched about 19 percent of rows: 9,485 matches out of 50,087 attempts. Every unmatched dial silently vanished from the denominator.
Nothing crashed. No warning fired. The query returned a clean, confident, catastrophically wrong number, and it made it into decision-making.
How we got the real number
Two rules made the difference:
- Reconcile every headline number two independent ways. We computed the decline rate through two separate paths in the raw dialer logs. They landed at 10.84 percent and 10.92 percent. When two independent methods agree to a tenth of a point, you can trust the number. When they disagree, you have found your next bug.
- Audit the join before trusting its output. Match rates are a first-class metric. A join that matches 19 percent of rows is not a join, it is a filter you did not mean to apply.
The same audit surfaced the opposite error elsewhere: the inbound answer rate was reported near 14 percent, but a single catch-all number was absorbing roughly 60 percent of inbound traffic. The true answer rate was about 71 percent. One metric was five times too pessimistic, another five times too gloomy about a different part of the operation. Both came from measurement, not reality.
The lesson
Dashboards inherit the sins of their joins. Most businesses do not have a data problem so much as a trust problem: the numbers exist, but nobody has verified the plumbing that produced them. Before optimizing anything, make the measurement trustworthy. It is cheaper than acting on a number that is five times wrong.
We wrote up the full engagement, including the caller-ID rotation findings, in the case study below.