← All posts
Case Study

Three teams, three churn definitions, one broken dashboard

Mahari Kalau8 min readJul 2026
Three teams, three churn definitions, one broken dashboard

A 400-person SaaS company came to us with what they described as a dashboard bug. It was not a dashboard bug. It was four years of undocumented decisions colliding in a single number.

The presenting symptom

The board deck said quarterly churn was 6.1%. The customer success team's weekly review said 4.2%. The self-serve growth dashboard said 8.9%. All three were computed from the same warehouse, and all three were correct according to their own definitions.

Untangling it

OneClickBrain's initial scan surfaced eleven distinct churn-related definitions across their stack. Three were in active use. The differences came down to four decisions nobody had reconciled:

DecisionFinanceCSGrowth
Trial accountsExcludedExcludedIncluded
Downgrade counts as churnYes (revenue)No (logo)Yes
Grace period30 days60 days0 days
DenominatorStart-of-periodAverageStart-of-period

Every one of these choices is defensible. Finance measures revenue churn with a conservative grace period because that is what the board asks about. CS measures logo churn because their job is relationships, not dollars. Growth includes trials because trial-to-paid is their funnel.

Nobody was wrong. Everybody was answering a different question with the same word.

Where the AI agents made it worse

They had three agents in production: a support assistant, an exec briefing bot, and an analytics helper. Each had been pointed at a different subset of sources during setup. When someone asked any of them about churn, they got a confident answer sourced from whichever definition happened to be indexed.

The compounding effect: a wrong number in a Slack answer gets pasted into a doc, which gets summarised into a deck, which gets cited in a board conversation. By the time anyone notices, the provenance is gone.

What resolution actually looked like

The fix was not choosing one definition. It was naming all three properly and making the distinction explicit:

Each got an owner, a written scope of use, and a canonical formula. The word "churn" on its own was deprecated — any query using it now returns a disambiguation rather than a number.

# Agent query: "what's our churn?" status: ambiguous resolution_required: revenue_churn — 6.1% (finance, board reporting) logo_churn — 4.2% (CS, account health) funnel_churn — 8.9% (growth, incl. trials) agent_response: asks which one, cites owners

What changed downstream

Three months on:

The dashboard was never broken. It was reporting one honest answer among several, without any way to say which question it was answering.

Mahari Kalau

Mahari Kalau

Founder & CEO, OneClickBrain

Writes about context engineering, agent architecture, and the unglamorous parts of enterprise AI.

Keep reading

📄
Featured

Why RAG alone can't fix enterprise hallucinations

12 min read · Aug 2026
🧩
Architecture

Metadata-first: reading a stack without touching a row

9 min read · Aug 2026
📐
Product

Treating knowledge configs like infrastructure code

6 min read · Jun 2026