Measurement
Instrumentation standard
This is the normative reference an agent follows when instrumenting a product. The job isn't "add tracking" — it's to make a product's behaviour computable: every number traces back to a declared reason.
Naming
- Format
object.action, lower snake_case:checkout.completed. - Past tense for facts:
completed, notcomplete. - Name the intent, not the widget:
export.requested, notbutton.clicked. $is reserved for system events/properties.
Identity & properties
distinct_idmust be a stable user id — never per-session or random.- Money goes in a numeric
amountwith acurrency. Never bake it into the name. - Mutable state belongs on entities, not copied onto every event.
- Keep properties low-cardinality where you'll break down by them.
The north star
Pick one north-star metric the whole product optimises, and instrument the funnel from acquisition to that metric first.
Anti-patterns
- Vanity events with no metric or purpose behind them.
- Unstable
distinct_id— silently corrupts every per-user number. - State on events only — you lose "how many accounts are on Pro right now".
- Generic names (
click,action,event) — unqueryable six months later. - Tracking everything "just in case". Coverage is not the goal; decisions are.