1
0 Comments

Churn isn't a "health score" problem. It's decided in two moments most tools never look at.

I've spent the last several months building a customer success platform solo, which means I've spent the last several months staring at churn data instead of doing marketing. Here is the thing that changed how I think about retention, and that I wish someone had told me before I wrote a single line of code.

Almost every CS tool, mine included at the start, treats churn as a continuous quantity. You compute a health score, you watch it drift, you alert when it crosses a line. It feels rigorous. It demos well.

But when I actually traced churned accounts backwards, the picture was different. Churn wasn't a slow drift. It was decided in two narrow windows, and the "health score" was often calm during both.

Window one: the first 90 days. If a customer never reaches their first real outcome with your product, the renewal decision is already made, eleven months before anyone makes it. The account looks fine in the dashboard the whole time. Logins happen. Nobody files tickets, because people don't file tickets about a product they've quietly stopped caring about. The silence that looks like health is the disease.

Window two: the renewal window itself. The strongest churn signal I have ever seen in data is embarrassingly simple: the customer switched auto-renew off. That is not a "risk indicator." That is a person who already clicked the button. And most scoring models I studied, again including my own first version, gave it literally zero weight, because it doesn't look like "engagement data."

So the rebuild boiled down to three rules:
1. A stalled onboarding should be the loudest alarm in the product. Days-since-last-milestone beats almost every fancy signal during the first 90 days.

2. Score the renewal window explicitly. Contract end date and the auto-renew flag are sitting in your billing data. Read them. A mid-risk account 30 days from a lapsing contract is a different species from the same account mid-contract.

3. Absence of data is never risk. If you don't track NPS, that's a data gap, not a detractor. Scoring silence as danger trains your team to ignore the score. Every signal in my scorecard now abstains when its data doesn't exist, and the score renormalizes over what's actually known.


One more uncomfortable lesson: seat utilization. A 200-seat contract with 12 active users renews exactly once more, at 12 seats, if you're lucky. Aggregate usage graphs hide this completely because those 12 users can be very active. You need per-user identity in your tracking events to see it at all.

None of this needs machine learning, despite every tool in the category now marketing itself as AI churn prediction. It's deterministic arithmetic over data most SaaS companies already have in Stripe and their own event stream. The ML can come later, once you have enough labeled outcomes to calibrate against. Starting with a transparent scorecard also means every score comes with its reasons attached, which is the only way a one-person CS team (i.e., the founder) will ever trust it enough to act.

The tool I built around these ideas is Exeechain (https://exeechain.com). It predicts churn with explained drivers, drafts the save outreach for human approval, and only counts revenue as "saved" after the renewal actually happens, because I got tired of retention tools grading their own homework.

But honestly, even if you never touch my tool: go check how many of your churned accounts flipped auto-renew off weeks before anyone noticed, and how many never finished onboarding. I'd bet money it's most of them. Happy to share more of the scoring logic in the comments if anyone's building something similar.

posted toAvatar for product Exeechain
Exeechain