Cohort Retention Curves
Visualize how each weekly signup cohort retains over time — the definitive health metric for any subscription product.
Why Cohort Curves Matter
Aggregate retention masks churn patterns. A flat DAU line can hide a decaying early cohort propped up by fresh signups. Cohort curves expose whether your product actually gets stickier over time or simply acquires faster than it bleeds.
Data Model
Each row is a signup week. Columns are relative weeks since signup. Cell value is the percentage of that cohort still active at week N. Active means at least one heartbeat event in that calendar week.
| Cohort | W0 | W1 | W2 | W3 | W4 |
|---|---|---|---|---|---|
| 2026-01-05 | 100% | 72% | 58% | 49% | 44% |
| 2026-01-12 | 100% | 68% | 55% | 47% | — |
| 2026-01-19 | 100% | 74% | 61% | — | — |
Reading the Curve
- Slope steepness — a sharp drop in weeks 0–2 signals onboarding friction or misaligned expectations.
- Curve flattening — when retention plateaus around week 6–8, you have found your core retained base.
- Cohort lift — newer cohorts retaining better than older ones at the same relative week means product improvements are working.
Implementation Notes
Compute cohort assignment from the user.created_at truncated to week start. For each cohort-week cell, count distinct users with a heartbeat event in that calendar week divided by the cohort size. Cache results aggressively — this query is expensive on large event tables. A materialized view refreshed hourly is the pragmatic choice.