Resume.io · B2C SaaS · Subscription & Retention

Transforming a cancellation flow into a retention system

ROLE

Product Designer

DATE

2024

PLATFORM

Web

Cancellation was one transactional screen — the product lost the user and learned nothing. I rebuilt it into a system that routes each person by intent and captures why they leave.

Resume.io is a subscription resume builder with the post-conversion churn typical of B2C SaaS. The old flow confirmed the exit and moved on. I redesigned it into a segmented system: each leaving user is routed to a cohort-specific path, their reason is captured as structured data, and every path is built to be tested. The concept was validated with users before any build.

Context

Every cancellation is a revenue event, but the flow treated all of them the same.

Resume.io runs on recurring subscriptions, so each cancel is a direct revenue loss. The old flow was a checkout in reverse — one confirmation, the same exit for everyone, no reason captured. Around 5% of full subscribers dropped off here, and the business couldn't tell why any of them left.

I owned the segmentation model, the four scenarios, and how cancellation reasons were sorted and routed. The lead set the brief and reviewed for brand consistency — the behavioral and structural decisions were mine.

The original flow: confirm and exit, with no reason capture and no segmentation.

Discovery

A user clicking "cancel" is at peak honesty — so I turned the screen from a wall into a diagnostic.

A user clicking "cancel" is at peak honesty — so I turned the screen from a wall into a diagnostic.

The instinct is to stop the user. But cancellation is a rare moment of high intent and unguarded feedback, and the old flow threw all of it away. I reframed the goal:

from "prevent the user from leaving" to "understand why they're leaving — and offer the alternative that fits."

Design

The same cancellation reason means different things from a power user and a dormant one — so I segmented before responding.

Three signals place each user into a behavioral segment: engagement level, subscription history, and stated reason. The flow stops treating every exit identically and starts responding to context.

Three signals resolve each user into a behavioral segment.

Design

Each segment gets the path that fits its reason — pause, discount, reminders, or reinforcement.

Three signals place a user into a cohort, and each cohort sees a different Step 2:

  • Goal achieved → Pause, a flexible off-ramp instead of a hard exit

  • High engagement → value reinforcement and progress framing

  • Low engagement → feature reminders and contextual guidance

Users who don't match a cohort see a neutral "what you'll lose" summary — no manipulation, just the facts.

The "goal achieved" path — a pause option replaces the hard exit. The "cost concern" path — a targeted offer with transparent terms.

Design

A discount inside the flow trains people to cancel — so I moved it to a post-lapse email for one cohort.

Offering money the moment someone hesitates teaches users to cancel for a coupon. Instead, the discount lives in an email sent after the trial lapses, to a small cohort only. The timing does three jobs at once:


  • Filters out discount-gamers — people who exploit cancel-flows for offers don't get one here.

  • Reads as sincere, not desperate — "you're one of a small group we want to hear from" only works if it's true.

  • Barters fairly — feedback for a discount, a trade both sides see clearly.

Two framings of the same win-back offer, built to be A/B tested — one softer, one an explicit "you give, we give" trade.

Design

Cancellation stopped being a single screen and became a branching system: capture the reason, sort it, route it.

Each path is an independent lever the team could later test and tune. The screen became the front door to a system, not the whole interaction.

One entry point routing into four independently testable paths.

System

The old flow produced one fact — who left; the new one is built to capture why.

Every exit now produces structured input: a reason, a segment, a path taken. I designed each path to run as a controlled experiment once live — so churn could move from a blind loss to something the team could read and act on.

Each exit is designed to generate structured, segmentable churn input.

Constraints

A retention flow is one bad decision from a dark pattern — so I designed against my own incentives.

The brief explicitly required preserving trust. The lines I held:

  • Cancel is always one step away — no buried buttons, no detours.

  • Discounts with honest terms — no fake countdowns, no hidden renewal traps.

  • Pause is a real off-ramp — a genuine option, not a trap.

  • No guilt-tripping copy — the flow asks, it doesn't shame.

Validation

Not shipped — so instead of inventing metrics, I tested the concept with real users.

With no production data, I tested with colleagues and resume-building community volunteers: could users find the path that fit their reason, and did their reasons map cleanly onto the four segments?
Directional signals — small sample, not production metrics:

  • 14 of testers routed into a path matching their stated reason

  • churn reasons captured in testing for the first time, vs. zero in the old flow

  • testers read the pause and discount options as fair, not pushy

Reflection

The real shift was treating cancellation as a decision system, not a UI screen.

Instrument before launch. The value is the data the system produces — analytics should ship with the flow, not after.


  • Validate against real churn, not a test group. The sample proved the model is legible; only production data proves how large each segment is. "Goal achieved → pause" is the biggest assumption.

  • Shipping this is organizational, not visual. Next round I'd propose a phased rollout — one path live first — to de-risk the build and get real numbers fast.