Week 2 · The Canvas
Define it before you compute it
Build the metric tree and the logical model behind it.
The brief
Tuesday, 14:30, a whiteboard. Three people, three conversion rates.
- Dana: won ÷ (won + lost). "Open deals haven't converted or failed yet."
- Lena: won ÷ created. "That's what the CRM report has always shown."
- Tomás: won amount ÷ closed amount. "I don't care how many deals. I care how many dollars."
All three are legitimate. All three will produce a different chart. The Data PM's job is not to pick the winner in the meeting; it is to put every definition on the Metric Dependency Tree with a name, a formula, and an owner, so the fight happens once instead of every month.
Raj shows you something else: deal stages are overwritten in the CRM, but there is an append-only deal_stage_history log. That changes what you can measure. Stage-to-stage conversion, time in stage, funnel drop-off: none of it exists on the deals table alone.
This week: draft the logical model (entities, dimensions, measures, relationships, SLOs) and compute the funnel from the history log. The SQL gets real: CTEs, self-joins on the history, and your first window function.
Lessons
Read
The Canvas: Data Product Design (Week 2)
Build a Metric Dependency Tree and the logical data model (entities, dimensions, measures, relationships, SLOs, semantics) that powers it.
North Star, Functional, and Granular Metrics
North Star = the domain's leading business metric. Functional = the leading metric for a sub-area. Granular = an indicator of effectiveness.
Funnel Analysis: Overall vs. Stage-to-Stage, Cohorts, Velocity
Three different funnel questions need three different queries: overall conversion (by cohort), stage-to-stage conversion (from the history log), and time in stage (velocity).
The SQL a Data PM Actually Uses
CTEs for readable steps, window functions for per-row context, date bucketing for trends, and the four bugs that silently corrupt metrics.
Lab
- Won value by account (JOIN + GROUP BY)core
- Won value by repcore
- conversion_rate by regioncore
- Where are we losing deals?core
- Two conversion rates, one query (CTE)core
- The funnel from the history logcore
- Stage-to-stage conversion (self-join on a CTE)advanced
- Average days in each stage (LEAD window)advanced
- Created-month cohortscore