Cohort analysis and retention curves

Track each sign-up month on its own, and a blurry “retention is down” turns into a shape that names its own cause.

The idea

A single retention number blends everyone together and hides why it moved. A cohort is just one group frozen by when they signed up — the January joiners, the February joiners — each followed separately as they age inside the product.

Lay those groups in a grid and anomalies take a shape. A bad row means one sign-up month was off (acquisition or onboarding that month). A bad column means a lifecycle stage is off for everyone (an aging effect). A bad diagonal means a dated event hit every cohort at once (an outage, a price change). And when the curves flatten instead of sliding to zero, you’ve found product-market fit.

the cohort triangle — each cell is % of that cohort still active

Inject:
below the healthy curve (a stain) tracking normally better than expected
Highlight cohort:

retention curves — % retained by product age

Hover a triangle cell (or tap a cohort) to light up its curve. Then inject a scenario and read the shape.

How it works

Read the grid by holding one thing fixed and scanning the other. The colour here is the cell’s deviation from the healthy aging curve — so a normal fade with age stays neutral, and only true anomalies stain warm.

rows    = sign-up month   (WHO joined)      -> a bad row  = a bad cohort
columns = product age     (WHICH lifecycle stage) -> a bad col = an aging issue
diagonal= calendar month  (WHEN in real time)     -> a bad diag = a dated event

why the diagonal?   calendar_month = signup_month + age
  Jan cohort at age 4  |
  Feb cohort at age 3  |  all sat in the SAME calendar month (May)
  Mar cohort at age 2  |  -> a May price change hits them on a diagonal
  Apr cohort at age 1  |

flattening test (is it product-market fit?)
  month:   0    1    2    3    4    5
  healthy: 100  60   48   42   39   37   -> slope: -40 -12 -6 -3 -2  (settling)
  leaky:   100  55   34   21   13    8   -> slope keeps steep  (no floor)
  a curve that flattens to a floor has a core that keeps coming back.

When to use it

SituationWhat the cohort view gives you
“Retention dropped” and nobody knows why.Splits the drop into cohort vs. aging vs. calendar — the shape points at the cause.
You shipped an onboarding or product change.New (later rows) move while old ones don’t — a clean before/after.
Judging product-market fit.Flattening curves, not a single-month number, are the real signal.
The trade-offLater cohorts have little history (the short rows), so recent months are noisy — don’t over-read a two-week-old cohort.

Watch out for

Worked example

An interviewer says: “Overall 30-day retention fell three points last quarter. Walk me through diagnosing it.” A strong answer reaches for the triangle. You’d pull cohorts by sign-up month and look for a shape. If one row (say the March cohort) is low at every age, you suspect the March acquisition mix — maybe a discount campaign pulled in low-intent users; the fix is upstream in marketing, not the product. If instead a diagonal is dented, you look for something that happened on a date — a pricing test, an incident — that hit everyone at once. And if the recent cohorts’ curves are flattening higher than older ones, your onboarding change is working, even before the blended number catches up.

Check yourself

In the triangle, the cells for one sign-up month are low at every age, while neighbouring months look normal. Most likely cause?

Two cohorts’ curves both settle around 22% and stop falling by month 4. A stakeholder calls 22% “a disaster.” Your read?