| name | product-analytics |
| description | Expert product analytics advisor for Senior PMs. Use when defining success metrics for a PRD, designing an A/B experiment, setting up an analytics tracking plan, analyzing post-launch impact, or when data exists but there's no clarity on what to measure. Produces structured metrics frameworks that connect to product decisions, not dashboards. |
Product Analytics
This skill turns the vague intent to "be data-driven" into specific, decision-ready metrics frameworks. It covers pre-PRD metric definition, experiment design, tracking plans, and post-launch impact analysis.
Core Philosophy
Metrics without decisions are vanity. Every metric needs an owner and a threshold.
"We'll track engagement" is not a success criterion. "D30 retention โฅ55%, measured 30 days post-launch, with a kill switch if D7 drops below 40%" is a success criterion.
Great product analytics:
- Defines metrics before building, not after
- Ties every metric to a decision it will inform
- Names guardrails (what cannot degrade) alongside success criteria
- Makes experiment design boring and rigorous, not exciting and sloppy
The fatal flaw of bad product analytics: Beautiful dashboards that nobody uses to make decisions.
When to use this skill
- Pre-PRD: To define success criteria before writing specs (feeds into prd-writer's "Success Measurement" section)
- Pre-build: To design an A/B test before writing the first line of code
- Pre-launch: To build the analytics tracking plan and instrument events
- Post-launch: To analyze impact and decide to iterate, scale, or kill
- Ad hoc: When metrics exist but there's no clarity on which ones matter and why
Key Principles
- Decision first โ Every metric answers a decision. "Should we ship this?" "Should we iterate or kill?" "Which variant wins?"
- North Star alignment โ Every metric has a clear causal link to the North Star. Metrics that don't tie to value creation are noise.
- Guardrails are non-negotiable โ Define what cannot degrade. Ship nothing that violates a guardrail.
- Specificity wins โ "โฅ10% improvement" not "improve." "D30 retention" not "retention."
- Fewer metrics, used well โ 3 great metrics > 15 metrics that sit in a dashboard nobody reads.
Workflow
Step 1: Goal Clarification
Before defining any metric, answer:
Decision to make: [What choice will these metrics help us make?]
Time horizon: [When will we have enough data to decide?]
Stakes: [What's the cost of a false positive? Of a false negative?]
Ask the user:
"When you have the data from this, what decision will you make? And what threshold would change your mind?"
Step 2: Metric Tree
Build a causal tree from North Star down to measurable signals.
Format:
North Star: [Metric โ measures user value]
โ
โโโ Input Metric 1: [Leading indicator โ what drives North Star]
โ โโโ Sub-metric A: [More specific signal]
โ โโโ Sub-metric B: [More specific signal]
โ
โโโ Input Metric 2: [Another leading indicator]
โ โโโ Sub-metric C: [Specific signal]
โ
โโโ Input Metric 3: [Another leading indicator]
Example:
North Star: Weekly users completing โฅ1 core workflow
โ
โโโ Activation: Users completing first workflow within day 1 (D1 activation)
โ โโโ Onboarding completion rate
โ โโโ Time to first action (median, in minutes)
โ
โโโ Retention: Users returning in week 2 (D7 retention)
โ โโโ Notification click-through rate
โ โโโ Session frequency per user per week
โ
โโโ Engagement: Workflows completed per active user per week
โโโ Feature adoption rate (% of active users using feature X)
Step 2b: Cohort Analysis (Optional โ use for retention and lifecycle analysis)
Use when you need to understand how behavior changes over time across user groups โ or when diagnosing why retention is declining.
When to run cohort analysis:
- Retention is dropping โ is it all cohorts or a specific one?
- Measuring whether a product change improved long-term retention
- Comparing behavior by acquisition channel, pricing tier, or onboarding variant
Define the cohort:
Cohort dimension: [Time: signup week/month | Behavior: completed X | Attribute: from source Y]
Metric: [What you're tracking per cohort over time]
Time periods: [D1 / D7 / D30 / D90 โ based on product's natural frequency]
Retention table format:
| Cohort | Size | D1 | D7 | D30 | D90 |
|------------|-------|-----|-----|-----|-----|
| Jan 2025 | 1,200 | 68% | 45% | 32% | 21% |
| Feb 2025 | 980 | 71% | 48% | 35% | โ |
| Mar 2025 | 1,450 | 74% | 51% | โ | โ |
Reading the table:
- Columns trending up across cohorts โ product improvements are working
- One cohort underperforms the rest โ investigate what was different about that acquisition batch or onboarding period
- All cohorts drop at the same time period โ structural drop-off problem at that stage โ fix the product moment, not the cohort
Diagnostic questions:
- Which cohort performs best? What was different about its acquisition or onboarding?
- At which period does the biggest drop-off occur? What product experience does that correspond to?
- Are recent cohorts trending better or worse than older ones? (Leading indicator of product health trajectory)
Output block:
## Cohort Analysis: [Feature / Time Period]
Cohort dimension: [What defines each cohort]
Metric: [What we're tracking]
| Cohort | Size | [Period 1] | [Period 2] | [Period 3] | [Period 4] |
|---|---|---|---|---|---|
| [Cohort 1] | | | | | |
| [Cohort 2] | | | | | |
### Key Findings
1. [Finding โ specific]
2. [Finding]
### Decision Implication
[What this tells us and what action it drives]
Step 3: Define Success + Guardrail Metrics
For each initiative or experiment:
## Success Metrics (what must improve)
| Metric | Current baseline | Target | By when | Owner |
|---|---|---|---|---|
| [Primary metric] | [X] | [Y โ specific threshold] | [Date] | [Name] |
| [Secondary metric] | [X] | [Y] | [Date] | [Name] |
## Guardrail Metrics (what cannot degrade)
| Metric | Current | Threshold | Action if violated |
|---|---|---|---|
| [Guardrail 1] | [X] | Must stay โฅ [Y] | Stop and investigate |
| [Guardrail 2] | [X] | Must stay โค [Y] | Rollback immediately |
## OEC (Overall Evaluation Criterion)
[If metrics conflict, which one wins? Define the hierarchy.]
"Primary metric takes precedence. If primary improves but [guardrail] is violated, we rollback."
Step 4: Experiment Design (A/B Test)
Use this when testing a specific hypothesis with a control and variant.
Hypothesis format:
If we [change], then [metric] will [improve/decrease] by [amount],
because [causal mechanism].
Experiment spec:
## Experiment: [Name]
Hypothesis: [Full hypothesis statement]
Primary metric: [Metric โ this is what determines winner/loser]
Guardrails: [Metrics that cannot degrade]
Control: [What users see today]
Variant(s): [What we're testing โ be specific]
Traffic split: [50/50 / 80/20 / other โ and why]
Randomization unit: [User-level / session-level / device-level]
Why this unit: [Prevents contamination because...]
## Sample Size Calculation
Baseline rate: [Current conversion/metric value]
Minimum Detectable Effect (MDE): [Smallest improvement worth detecting โ e.g., +5%]
Statistical power: 80% (standard)
Significance level: 5% (p < 0.05)
Required sample: [N users per variant]
Estimated duration: [X days at current traffic levels]
## Decision Criteria
Ship if: Primary metric improves โฅ MDE, p < 0.05, no guardrail violations
Iterate if: Results are directionally positive but underpowered
Kill if: Primary metric doesn't improve, or guardrail violated
Power calculation reference:
Sample size (per variant) โ (16 ร ฯยฒ) / ฮดยฒ
Where:
ฯ = standard deviation of the metric
ฮด = minimum detectable effect (absolute, not relative)
For binary metrics (conversion rates):
n โ (2 ร pฬ(1-pฬ)) / ฮดยฒ ร 8 [for 80% power, 5% significance]
Where pฬ = average conversion rate and ฮด = MDE
Step 5: Analytics Tracking Plan
Define what to instrument before writing a single line of code.
Event taxonomy:
[Action]_[Object]_[Context]
Examples:
- button_click_upgrade_pricing_page
- form_submit_onboarding_step2
- feature_activate_dashboard_first_time
- error_display_api_call_failed
Tracking plan format:
## Tracking Plan: [Feature/Experiment Name]
### Events to Instrument
| Event Name | Trigger | Properties | Priority |
|---|---|---|---|
| [event_name] | [When it fires] | [Key properties to capture] | Required/Nice |
| [event_name] | [When it fires] | [Properties] | Required/Nice |
### Properties Reference
User properties (capture once, reuse):
- user_id: [Stable identifier]
- user_segment: [e.g., free / pro / enterprise]
- signup_date: [For cohort analysis]
- [Other stable user attributes]
Event properties (capture per event):
- timestamp: [Always]
- session_id: [For funnel analysis]
- variant: [For A/B tests โ always include]
- [Relevant context for this specific event]
### Funnel Definition
Step 1: [Event] โ Step 2: [Event] โ Step 3: [Event]
Success = reaching Step [N] within [X days/sessions]
Step 6: Post-Launch Analysis
After enough time has passed:
Analysis checklist:
โก Primary metric: [actual result] vs target [Y] โ [Hit / Miss / Underpowered]
โก Statistical significance: p = [value] โ [Significant / Not significant]
โก Guardrails: [Status of each guardrail metric]
โก Segment breakdown: [Did results differ by user segment, platform, cohort?]
โก Unexpected signals: [Any metrics that moved that we didn't expect?]
Decision:
## Ship / Iterate / Kill
Decision: [Ship / Iterate / Kill]
Rationale: [2-3 sentences on why, referencing the data]
If shipping:
- Rollout plan: [% โ %, timeline, who monitors]
- Monitoring: [What we'll watch for the first 2 weeks post full-ship]
If iterating:
- Hypothesis update: [What we now believe, based on results]
- Next experiment: [What we'll test next]
If killing:
- What we learned: [1-2 key learnings to carry forward]
- What this tells us about the opportunity: [Should we pursue it differently?]
Step 7: Output
Save the metrics framework:
docs/analytics/YYYY-MM-DD-[feature-or-topic]-metrics.md
Output Format
# Metrics Framework: [Feature / Initiative]
**Owner:** [Name]
**Date:** [YYYY-MM-DD]
**Status:** Pre-launch / Active experiment / Post-launch analysis
## Decision to Make
[What choice will these metrics inform?]
## Metric Tree
[North Star โ Input Metrics โ Sub-metrics โ causal tree]
## Success Metrics
[Table: metric, baseline, target, date, owner]
## Guardrail Metrics
[Table: metric, baseline, threshold, action if violated]
## Experiment Design (if applicable)
[Hypothesis, control, variant, traffic split, sample size, duration, decision criteria]
## Tracking Plan
[Events, properties, funnel definition]
## Post-Launch Analysis (to fill after launch)
[Results vs targets, decision, learnings]
Quality Checklist
Before shipping metrics framework:
Clarity
Rigor
Actionability
Tracking
Common Antipatterns
Antipattern 1: Metric Theater
Symptom: "We'll track engagement, satisfaction, retention, and revenue" โ tracking everything, deciding nothing
Fix: Name the ONE primary metric that determines success. Secondary metrics are context, not decision drivers.
Antipattern 2: Post-hoc Metric Selection
Symptom: Running an experiment, then choosing metrics that show positive results
Fix: Lock metrics and decision criteria before data collection. Write them down with a timestamp.
Antipattern 3: Statistical Significance Without Practical Significance
Symptom: "We got p=0.03! Shipping it!" โ even though the effect size is tiny
Fix: Define MDE (Minimum Detectable Effect) before the experiment. If the detected effect is smaller than MDE, it's not practically significant regardless of p-value.
Antipattern 4: Ignoring Guardrails
Symptom: Primary metric improved, but support tickets spiked โ ship anyway
Fix: Guardrails are non-negotiable. If violated, stop. Define them first so you can't rationalize around them later.
Antipattern 5: Dashboard Without Decisions
Symptom: Beautiful Amplitude/Mixpanel dashboard, no product decisions ever made from it
Fix: For every metric on the dashboard, write the decision it informs and the threshold that would trigger action. If you can't, remove it from the dashboard.
Reference Resources
references/metrics-template.md โ Metrics framework template (copy-paste ready)
references/tracking-plan-template.md โ Analytics tracking plan with event taxonomy