Why We Rebuilt Our Data Pipeline Around Cohorts
Cohort-first analytics changed how we forecast retention, CAC payback, and contribution margin. A look under the hood.
If your reporting tool cannot natively slice on cohort, every interesting question becomes a custom query, and custom queries don't scale with curiosity.
What broke in the old pipeline
Our first pipeline treated cohorts as something you reconstruct after the fact. Every retention question meant joining events back to a signup date, every join was slightly different, and no two analysts produced quite the same number.
The result was a slow tax on curiosity. The questions worth asking were exactly the ones that needed a new query, so most of them never got asked. The data was technically complete and practically useless.
If two people answer the same metric question with two different numbers, the problem is not the people. It is that the model makes the easy question hard.
Cohorts as a first-class dimension
We stopped treating cohorts as a report and started treating them as a dimension that every metric inherits. Retention, CAC payback, and contribution margin all became a single group-by away.
The principle is simple: anything you will want to slice by should be a dimension carried by the data, not a calculation bolted on later. Cohort was the obvious first candidate because nearly every interesting question about a subscription business is really a question about a cohort over time.
Every event carries its acquisition cohort at write time, so historical re-slicing never requires a backfill.
Stamp the cohort at write time
The key engineering decision was to resolve and store the acquisition cohort on the event as it is written, not to infer it at query time. It costs almost nothing on write and saves you from ever backfilling history when the next question arrives.
- Resolve the cohort once, at the moment the event is recorded
- Store it alongside the event so every downstream metric inherits it
- Never recompute history, the answer is already in the row
What it unlocked
Forecasting got sharper because we could finally see which cohorts behaved differently and why. The model stopped averaging away the signal.
- Retention by cohort, without a custom query each time
- CAC payback compared across acquisition channels honestly
- Contribution margin sliced by when a customer arrived, not just who they are
An average is just a place where good cohorts and bad cohorts agree to hide from you.
What we would tell our past selves
Decide your first-class dimensions before you write the first event, not after the dashboards start lying. Migrating a pipeline is expensive, stamping one extra field on a new event costs almost nothing.
If you take one thing from this: the shape of your data decides which questions are cheap to ask, and the cheap questions are the only ones a busy team will actually ask. Build the pipeline so the important questions are the easy ones.
Written by the Startup Suite team, drawing on what we hear from founders building their plans, illustrative until we publish named bylines.