2
13 Comments

Why churn dashboards are the autopsy, not the diagnosis

I spent the last 6 months building a churn analysis tool for indie SaaS founders.

Read every cancellation survey response, support ticket, and exit interview I could find from public sources (Trustpilot, HN, G2, Reddit). Here's what I learned about the gap between churn dashboards and what founders actually need.

Cancel surveys lie

"Too expensive" is the most common cancellation reason on every SaaS exit survey I've ever seen. It's also almost never the real reason. It's the polite exit. The phrase a customer types when they've already decided to leave and don't want to argue.

The real reason is usually one of:

  • The product never delivered the value promised at signup
  • A specific feature gap forced a workaround they got tired of
  • Support response time pushed them to the alternative
  • A UX friction (slow load, broken flow, missing integration) compounded over weeks until they hit a Tuesday and clicked cancel

None of those show up in a "Top Cancellation Reasons" pie chart. The dashboard treats every response as equally weighted. The diagnostic treats them as evidence.

Churn signal appears 14 days before cancellation, not at cancel

The cancel-flow A/B test is optimizing the last 30 seconds of a 14-day decision. By the time the cancel button gets clicked, the customer has already mentally churned. The signal that mattered (the support ticket they wrote a week ago, the slow page they hit three times, the email that bounced) has already happened.

Churn dashboards aggregate that signal after the fact. The Number Goes Down chart tells you the trend is bad. It doesn't tell you what to fix.

Cohort retention lies when blending trial converts with paid expansions

Most SaaS churn dashboards I've audited blend everyone in the cohort: trial-to-paid converts, paid expansions, downgrades, upgrades, all weighted by revenue. The result is a cohort retention curve that looks fine while the underlying churn signal is screaming. The trial converts drag the average up. The paid expansions drag it up further.

Separate the cohorts and the picture changes. Trial converts retain at one rate. Paid expansions retain at another. Customers who downgraded mid-tier retain at a third (usually the worst). The aggregated view is statistical noise masking the diagnostic.

What diagnosis looks like in practice

Not a number. A driver list with severity and a fix per driver.

When I run the tool on a batch of cancellation feedback from a real SaaS, the output looks like:

1. Pricing-value mismatch (critical, 35% prevalence)

Customers cited "did not see ROI after the price increase" 12 times in 30 days. Fix: re-articulate the value of the tier increase in the upgrade email, or roll back the tier increase for accounts under a usage threshold.

2. Specific feature gap (high, 22% prevalence)

Customers wanted SAML SSO for team plans, gated behind a tier they didn't want. Fix: move SAML SSO down a tier, or explicitly recommend the workaround for sub-tier accounts.

3. Support response time (medium, 18% prevalence)

Customers churned within 7 days of an unanswered ticket. Fix: SLA the first response at <8 hours for paid accounts, even if resolution takes longer.

Each driver gets a confidence score (how strongly the underlying quotes support the call), a severity score (Critical/High/Medium/Low), and a one-line priority action. The dashboard view is a chart. The diagnostic is the action plan.

Public teardowns

I've run this method on real SaaS companies using verbatim customer quotes from public sources, all with permalinks:

  • Notion: Grade D (44/100). 60+ HN complaints. Feature bloat, AI slop pressure, performance at scale.
  • Figma: Grade D (48/100). March 2025 pricing hike. Penpot HN thread hit 632 points.
  • Asana: Grade C (56/100). SAML SSO gated behind most expensive tier.
  • Cursor: Grade D (42/100). June 2025 credit-system restructure. CEO apology + refunds.
  • Evernote: Grade F (24/100). Price doubled, free tier slashed, 250 layoffs.
  • Monday.com: Grade C (52/100). Daily cancellation-warning banner dark pattern.
  • Slack: Grade D (48/100). September 2025 forced migration to Business+.
  • Linear: Grade B (72/100). Narrow, bounded churn. Per-seat pricing cliff at 50+ seats.

Grades are output of the diagnostic, not opinion. All quotes link to original public source.

The takeaway

Dashboards measure churn. Diagnostics name it. Most indie SaaS founders are stuck reading dashboards that confirm churn is happening without naming what to fix. The diagnostic loop (read the feedback, name the driver, ship the fix) is the actual work. The dashboard is the trail of evidence after.

If you want to run a diagnostic on your own cancellation data, /audit on my profile link is free. No signup. Paste any text. Returns the grade and the driver list. The point of this post isn't the tool though. The point is the framing.

What does your retention diagnostic loop look like?

on June 1, 2026
  1. 1

    It was a check-in first, fix second. Plain message — "noticed you've been quiet, anything broken or just busy?" No pitch. The replies surfaced what the dashboard never showed: one stuck on onboarding, one surprised by pricing, one just went quiet. Each got a concrete follow-up, not a coupon. The check-in opens the door; how fast you fix what they tell you is what actually saves the account.

  2. 2

    The UX friction point in your list is the trickiest one because it's the category that even a well-designed exit interview can't surface. A user who silently hit a broken API call on their third login, or whose export button spun forever and timed out, doesn't write "experienced a silent JavaScript error" in the cancel survey — they click "too expensive" because that's the shortest path out.

    The diagnostic signal for this lives in the product, not the feedback: rage click rates during sessions in the week before cancellation, API calls that returned 200s with empty payloads, JS exceptions that never reached an error tracker because they were swallowed by a try/catch. In my experience, UX-friction churn shows up as "low engagement" in dashboards but is often a handful of specific, fixable bugs affecting a subset of users on a particular browser or plan. Once you tag those sessions you can correlate them to cancellation cohorts and the pattern jumps out.

    1. 1

      Circling back, no pressure. Still happy to read your cancel notes against those session tags and pull the repeating driver if you want a second set of eyes. Free, all text. You got a batch worth digging into?

    2. 1

      This is the half I can't get from feedback text. The cancel survey and the support ticket are both downstream of the silent 200-with-empty-payload nobody logged. Swallowed exceptions never make it into language, so they surface as "low engagement" and get filed as "not a fit."

      Tagging rage-click and empty-response sessions, then joining them to cancel cohorts, is exactly what I'd pair with the feedback diagnostic: telemetry catches what users can't describe, feedback catches what they won't say.

      Are you tagging those sessions live, or reconstructing them after a cancel?

  3. 2

    this framing is solid. spent months building a churn dashboard for my app and realized all it told me was who already left. what actually helped was tracking time-between-actions. when someone who used to check daily suddenly goes 3 days without logging in, that's the signal. caught 3 potential churns that way and saved 2 of them.

    1. 1

      This is the post in one comment. Time-between-actions moves before the feeling becomes a decision, which is why it beats anything you measure at cancel. The detail most people miss is the one you nailed: you baselined it per user instead of one global threshold.

      A daily user gone 3 days is dying while a weekly user at 3 days is fine, so a flat "inactive N days" alert misfires on both. Saving 2 of 3 by reaching out is the part a dashboard won't let you do, it only reports after the window closed.

      What did the outreach look like, a check-in or a fix?

  4. 2

    This framing is strong because most churn tools still stop at reporting what happened. Founders do not need another chart telling them retention is down. They need the actual driver, the supporting evidence, and the next fix to test.

    The sharper category here is not “churn analysis.” It is closer to retention intelligence or customer-loss diagnosis. That matters because the product sounds much bigger than a dashboard: cancellation text, support tickets, public complaints, severity scoring, confidence scoring, and fix recommendations all point toward a decision system for SaaS teams.

    The one thing I would pressure-test early is the product name around IndieFailureLab. It works for content and teardowns, but if this becomes a serious SaaS diagnostic layer, the “failure lab” frame may make the product feel more like research/content than software a founder trusts with churn data.

    Beryxa .com would fit that direction better because it feels more like an enterprise SaaS intelligence product. It can carry retention signals, churn diagnosis, customer evidence, scoring, and action recommendations without boxing the product into failure-analysis content.

    1. 1

      The repositioning point is the useful half, and it's the one I'm still working. "Diagnosis" carries the promise better than "analysis," which sounds passive. You're right that the output (cancel text, tickets, severity, confidence, fixes) is closer to a decision layer than a dashboard, and the name should carry that weight.

      On the product though, the tool is RetentionCheck, not IndieFailureLab. The teardowns are the content arm, the diagnostic is the product. I'll pass on chasing a new domain, the name isn't my bottleneck at this stage, distribution is. But the shift from "analysis" to "diagnosis" I'm keeping.

      What made "retention intelligence" land for you over "churn analysis," the buyer or the scope?

      1. 1

        Mostly the buyer.

        “Churn analysis” sounds like reporting what happened after the fact. “Retention intelligence” feels closer to helping someone decide what customer-loss signal matters and what to test next.

        The reason I’d stop there is that the category choice quietly changes the trust level, first buyer, and positioning path more than it seems.

        If useful, drop your email and I’ll put the tighter reasoning in writing properly. This feels like one of those decisions that becomes much clearer in a clean pass than stretched across a thread.

        1. 1

          Yeah, buyer over scope makes sense, and that the category sets trust level and first buyer is the keeper for me.

          I'll leave the tighter read in the thread rather than email, the public version helps the next founder more than my inbox does, and honestly the positioning model isn't my constraint right now, distribution is. Good exchange though, the diagnosis framing earned its keep.

  5. 1

    Fix, but framed as a check-in.

    I don't lead with "noticed you've been quiet". I lead with the thing they got stuck on. If someone stopped after hitting the export step, my message isn't "we miss you", it's "you were exporting to CSV, I just shipped a one-click sync, want it turned on?"

    Same reach-out, but the first line removes a friction point instead of asking for attention. The 2-in-3 save rate only held when I had something concrete queued for their last blocker. Generic "how's it going" saved maybe 1 in 10.

  6. 1

    “Too expensive” means “I don’t get this much value”. The amount charged needs to be a no brainer for the buyer to minimize churn.

    1. 1

      Right, that's why "too expensive" is so hard to action straight. It's a value verdict wearing a price tag. Lowering the number rarely fixes it.

      What does is getting the value to land before renewal, so the price reads as a no-brainer. Founders who react by discounting keep the value gap and just shrink the revenue.

      What moved it for you, the price or the value framing?