Subscription retention

Saving the users who still see the value

Our cancel flow was a one-way door: 72% of people who entered it left. I rebuilt it to ask why, check the answer against how they actually used the app, and route each person to an offer that fits. Completion dropped to 54%.

Company
Sportstech
Role
Product Manager
Timeline
2025–26
Team
Design, Engineering, Growth
North-star
Cancellation completion rate

At a glance

01 Problem

72% of users who entered the cancel flow completed it. There was little effort to understand why they were leaving, or to keep them.

02 Insight

Not everyone leaving disliked the product. Some weren't using it enough, some found it too expensive, some just wanted a break.

03 Solution

Ask for the reason, check it against real usage, then route: a limited-time discount, an extra free month, or a pause.

04 Result

Cancellation completion went from 72% to 54%, about 25% fewer cancellations among users entering the flow.

You're in the 30-second version. The full story covers the research, how the metric is defined, and why wrong answers cost nothing.
01 Context

The cancel button was a one-way door.

Churn was one of my KRAs, and the cancellation flow is where churn becomes final. It's the last screen a paying user sees before they stop paying.

The old flow didn't try. Once someone entered it, they usually finished: 72% of people who opened it went on to cancel. We weren't learning why, and we weren't offering a reason to stay.

02 Problem

We treated every cancellation as the same cancellation.

No question asked

The flow made little effort to find out why. Someone who wanted a month off went through the same flow as someone who was done with us.

Nothing to offer

Leaving was effectively the only option, even for people who still liked the product.

Nothing learned

Every cancellation was a lost lesson. The reasons weren't reaching the roadmap.

03 Insight

Most people leaving didn't dislike the product.

I started with the cancellation reasons and user feedback we already had. Three groups stood out, and only one of them was really about money.

Value

“I'm not using it enough”

They hadn't fit it into their routine yet. That's a habit problem, not a verdict on the product.

Price

“It's too expensive”

Sometimes true. Sometimes it really meant "not worth it to me", which is a value problem again.

Timing

“I need a break”

A busy stretch, time away. They meant to come back. Cancelling was just the only button we offered.

“I like it. I'm just not using it enough to justify paying right now.”
— Synthesis from cancellation reasons & user feedback
04 Solution

Ask why, then make an offer that fits the why.

The new flow asks for the reason first, then shows an offer that matches it. Price-sensitive users get a limited-time discount. Low-usage users get an extra free month to rediscover the value. People who want a break can pause instead of cancelling.

We tested the messaging, the offer timing and the incentive structure to see what actually worked. Every reason also fed back into the roadmap.

Manage subscription
Cancel premium

Before you go, what's the main reason?

Your answer decides what we show next, and what we build next.

Limited-time offer

Stay for less

Keep premium at a reduced price for a limited time.

You're staying

Nice. Your plan and progress are right where you left them.

Routing table

Pick a reason on the phone. The flow looks up the matching offer.

Stated reasonOfferBecause
Too expensiveLimited-time discountThey value it. Price is the friction.
Not using it enoughAn extra free monthTime to rediscover the value.
Need a breakPause, not cancelThey plan to come back.

Plus a usage check — before a discount goes out, the stated reason is checked against real behaviour. See Fig. 02.

Fig. 01The reason-routed cancel flow. Try each reason and accept or decline the offer. Illustrative UI: no real prices or discount levels are shown.
Stated reason × actual usage

What should a user who says “too expensive” get?

Route on
Said “too expensive” · barely opened the app

Value problem

…

“I need a break” routes straight to a pause.

Fig. 02Switch between routing on the stated reason alone and routing on reason plus usage. Then select a cell. The cells show how I reasoned about routing; they aren't measured segments.
“I treated the reason picker as a routing signal, not research.”
— The principle behind the flow
05 Measurement

I measured the one moment the flow can change.

Metric definitionCancellation completion rate
Definition
% of users entering the cancellation journey who went on to complete cancellation.
Denominator
Every user who entered the cancellation flow, whatever reason they picked.
Numerator
Those who completed cancellation, after seeing (and declining) any offer.
Comparison
The old flow vs the redesigned, reason-routed flow.

Why this metric, not overall churnOverall churn includes people who never open the flow. Completion rate isolates the users the flow can actually reach: people already looking for the exit. And the relative read matters: 72% → 54% is 18 points, and 18 ÷ 72 ≈ 25% fewer cancellations.

06 Results

About a quarter of at-risk cancellations, recovered.

Of every 100 users who open the cancel flow…

Fig. 03The arithmetic behind the headline. 72 → 54 completions per 100 entrants is 18 fewer, and 18 is a quarter of 72. Endpoints are measured; the dots are just a per-100 view.
54%Cancellation completion rate, down from 72%Users entering the flow
−25%Fewer cancellations among users entering the flowRelative · 18 ÷ 72
3Reason routes: discount, extra free month, pause. Every reason also feeds the roadmap.One flow, three offers
07 Guardrails

A save flow can easily turn into a trap. I designed against that.

Principle

Not saving at all costs

The goal was never to stop cancellations at any price. It was to make sure people who still saw value had a reason to stay. If someone is done with us, they should be able to leave.

Margin

Discounts only for price problems

"Too expensive" from someone who barely opened the app in a month is a value problem. A discount there wastes margin, so the flow treats it as a value problem instead.

Noise

Wrong answers cost nothing extra

If a low-usage user picks "too expensive" at random, they decline a discount they don't want and churn anyway. A wrong reason means a failed save, not extra spend. The picker never needed to be a perfect survey.

08 What I learned

A cancel flow is the last conversation you get with a user. Route on what they say, decide on what they do, and send every reason to the roadmap.

Next case study Black Friday, feature-led GTM · Revenue2.4× subscription revenue