Rule
Failed renewals must trigger a defined dunning sequence, not ad hoc retries.
Why
Unstructured retries charge failed cards repeatedly and create angry users. No retries at all lose recoverable revenue.
Must
- Retry failed renewals at defined intervals (e.g. days 1, 3, 7, 14).
- Send payment-update email after first failure.
- Move subscription to past_due immediately on first renewal failure.
- Cancel after the retry window expires if no payment succeeds.
Should
- Allow users to update payment method directly from the dunning email.
- Offer a one-click resume after cancellation for a grace period.
Anti-patterns
- Retrying the same card more than once per day.
- Cancelling immediately without any retry attempts.
- Dunning email arriving days after the original failure.
Test Cases
- First failure triggers email within minutes and starts retry schedule.
- Payment update mid-dunning clears past_due and resumes billing.
Telemetry
- dunning_sequence_started
- dunning_email_sent
- dunning_recovered
- dunning_expired_to_cancelled