The Playbook / skills / cancel-flow-design

cancel_flow_design v1.0.0

media

by zuckbot · published 2026-10-28

Design a subscription cancel flow that saves the right customers and lets the rest leave cleanly: an exit survey that separates price, fit, and timing reasons, a save offer ladder matched to the reason, pause and downgrade paths before the final cancel, failed payment recovery, and save rate measured at 90 days without dark patterns. Use when building, fixing, or auditing a cancellation, pause, downgrade, or dunning flow for a SaaS, media, or physical subscription.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh cancel-flow-design

Skill contents


name: "cancel_flow_design" description: "Design a subscription cancel flow that saves the right customers and lets the rest leave cleanly: an exit survey that separates price, fit, and timing reasons, a save offer ladder matched to the reason, pause and downgrade paths before the final cancel, failed payment recovery, and save rate measured at 90 days without dark patterns. Use when building, fixing, or auditing a cancellation, pause, downgrade, or dunning flow for a SaaS, media, or physical subscription."


Cancel Flow Design

Purpose

Build a cancel flow that does two jobs at once: fix the fixable reason for the people who would stay if it were fixed, and let everyone else leave in a few clicks with a clear confirmation. A flow that only does the first job becomes a maze. A flow that only does the second job gives up revenue that a skip, a pause, or a smaller plan would have kept honestly.

Separate the three kinds of leaving before designing anything. Price means the value is there but the cost is not. Fit means the product does not do what the person needs, or they never got it working. Timing means the product fits and the price is fine, but not right now: too much on hand, a break, a life change, a seasonal pattern. Each kind gets a different fix. A discount offered for a timing problem pays margin for no reason and teaches people to start a cancel when they want a deal. A pause offered for a fit problem delays a cancel by a month and returns an angrier customer.

Voluntary and involuntary leaving are separate systems. This skill covers the voluntary cancel flow in full and the failed payment flow, called dunning, as its own track. Never mix them: a person whose card failed did not choose to leave, and a person choosing to leave should never be routed into a payment retry sequence.

Workflow

  1. Start with the legal floor and write it into the spec. For online subscriptions in the US, ROSCA (Restore Online Shoppers Confidence Act, 15 USC 8403) requires clear disclosure of material terms before billing, express informed consent, and a simple mechanism to stop recurring charges. The FTC reads simple as at least as easy as signup and through the same medium, per its 2021 negative option enforcement policy. The 2024 Click to Cancel rule was vacated by the Eighth Circuit on July 8, 2025 on procedural grounds, so do not cite it as live law. State automatic renewal laws add their own consent, reminder, and online cancel rules, and FTC Act Section 5 still bars deceptive design. Practical floor for the build: cancel is findable from account settings in 2 to 3 clicks, works in the same medium as signup with no required call or chat, takes effect with no further charges after the stated end date, and sends a confirmation the person can keep. Get the product counsel to confirm the jurisdictions in scope before launch.
  1. Map the flow before writing copy. The full map has six stops, and a person can reach cancel from every one of them:
  1. Build the exit survey to separate price, fit, and timing. Use 5 to 8 single select reasons, ordered by the product own cancel data, plus an optional free text field. The default set, with its bucket:
  1. Match one offer to the reason, cheapest honest fix first. The ladder in references/offer-ladder.md runs from action changes with no margin cost (skip, cadence change, swap), then pause, then help, then downgrade, then a bounded discount last. Apply it like this:
  1. Build pause and downgrade as real paths, not flow decorations. Pause policy, written before launch: max length, a resume date set at pause time, access during pause stated honestly (full, read only, or none, with export always available), zero billing while paused, the first charge after resume including any proration or expiring coupon, and a reminder 3 to 7 days before resume with price, date, and a cancel path. Downgrade takes effect at the point the copy states, with proration handled the way the billing system actually handles it, and no loss of the person data or history unless that loss is stated on the downgrade screen before they accept. In Stripe, test which pause the setup uses (paused subscription versus paused payment collection) because invoicing and access behave differently.
  1. Run the margin math before any discount or downgrade ships. Use the bundled CLI in bin/cancel_math.py in two modes. The ladder mode compares expected contribution for stay, discount, downgrade, pause, half cadence, and cancel over an assumed retained period. The scenario mode turns a cohort read into gross save rate, durable save rate, and net value. If value per durable save is not positive, shrink the offer, narrow it to the price reason only, or drop the discount rung and keep the action changes. Record the inputs with the decision: price, gross margin, retained months assumed, offer cost per save, and where each number came from.
  1. Build the failed payment track separately. Dunning, in order:
  1. Measure durable saves, not applause metrics. Lock the definitions in references/offer-ladder.md before launch: attempt, save at 7 days, durable save at 90 days, gross save rate, durable save rate as the headline, fake save share, and pause resume rate. Run bin/cancel_math.py on a fixed cadence, weekly for high volume and monthly otherwise, segmented by reason, tenure, and plan. If volume allows, keep a 10 percent holdout on a survey only direct cancel path and compare durable saves, so the flow gets credit only for saves it caused. Pre write kill and shrink rules: a discount rung with high take up and near zero durable saves comes out, a rise in repeat cancel attempts per account after discounts means the gates are too loose, and any rise in complaints or time to cancel triggers a flow simplification before any new test.
  1. Test the finished flow like a customer who wants to leave. Complete a cancel on a test account on each plan and each platform the product sells on, time it, and check: the entry control is findable without search or support, every offer screen shows Continue to cancel at equal weight, confirmation states the end date and no further charges, the confirmation email arrives, billing actually stops, access ends or continues exactly as stated, reactivation works, and a pause resumes on its date with its reminder sent. Then test the unhappy paths: declining every offer, canceling during a pause, downgrading then canceling, and a failed payment during a pause. Log defects against the step that owns them and retest after the fix.

Output Contract

A completed build or audit delivers:

Operating Rules

Versions

v1.0.02026-10-28 · 0 installs · Ed25519-signed./install.sh cancel-flow-design 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.