Why this skill matters for Product Analysts
Event tracking and instrumentation turn user actions into trustworthy data. As a Product Analyst, you depend on clean, consistent events to answer core questions like: What features drive activation? Where do users drop off? Which cohorts retain or churn? Strong instrumentation unlocks reliable funnels, experiments, growth analyses, and product strategy.
Who this is for
- Product Analysts who interpret behavioral data and partner with PMs/Engineers.
- Data/Business Analysts transitioning into product analytics.
- PMs who need to specify analytics requirements precisely.
Prerequisites
- Basic SQL (SELECT, WHERE, GROUP BY, JOIN, COUNT DISTINCT).
- Familiarity with product metrics: activation, retention, conversion.
- Comfort reading JSON payloads and basic event schemas.
Learning path
-
Define event naming and taxonomy
- Choose a consistent naming style (e.g., verb_noun: "added_to_cart").
- Decide required vs optional properties per event.
- Definition of Done: a written taxonomy with examples and rules.
-
Design event properties
- Include identifiers, context (source, platform), and business parameters.
- Normalize types (strings, numbers, booleans, enums) and units (currency, time).
- Definition of Done: property schema with clear types and allowed values.
-
Create a tracking plan
- Map events to user journeys and product goals.
- Specify trigger, properties, identity, and ownership for each event.
- Definition of Done: a versioned tracking plan document shared with engineering.
-
Set up user identity resolution
- Define how anonymous and authenticated users are tied (anonymousId to userId).
- Plan for cross-device and workspace/account contexts.
- Definition of Done: documented identity rules and merge logic.
-
Ensure client–server event consistency
- Decide which events fire client-side vs server-side and how to deduplicate.
- Align timestamps, session logic, and idempotency keys.
- Definition of Done: a consistency policy with examples.
-
Instrumentation QA
- Validate payloads in dev/stage, then in production.
- Check naming, properties, types, and identity are as specified.
- Definition of Done: QA checklist completed with screenshots or logs.
-
Detect missing and broken events
- Set up volume baselines and anomaly checks.
- Build coverage tests for required properties and schemas.
- Definition of Done: monitoring queries or dashboards plus alert thresholds.
-
Document and maintain
- Keep a changelog and deprecation policy.
- Publish a usage guide for analysts and PMs.
- Definition of Done: documentation accessible to the product team.
Worked examples
Example 1: Event schema for "Added to Cart"
Goal: Capture a standardized e-commerce add-to-cart action that supports pricing, merchandising, and funnel analysis.
{
"event": "added_to_cart",
"userId": "u_12345", // null if anonymous; then use anonymousId
"anonymousId": null,
"timestamp": "2025-01-10T12:34:56.789Z",
"properties": {
"product_id": "sku_987",
"product_name": "Trail Shoes XT",
"category": "footwear",
"price": 89.99, // in USD
"currency": "USD",
"quantity": 1,
"referrer": "search",
"campaign": "spring_launch", // optional
"platform": "web", // web|ios|android
"experiment": {
"exp_key": "cart_btn_color",
"variant": "green"
}
},
"context": {
"page": {"url": "https://example.com/product/sku_987"},
"user_agent": "...",
"ip": "203.0.113.10"
}
}
Checks: consistent naming, required properties present, types correct, currency standardized.
Example 2: Identity resolution from anonymous to logged-in
Scenario: A user browses anonymously, then signs up. We need to unify their events.
// Before sign-up
{
"event": "viewed_product",
"userId": null,
"anonymousId": "anon_abc123",
"timestamp": "2025-01-10T10:00:00Z"
}
// On sign-up (identify)
{
"event": "identify",
"userId": "u_12345",
"anonymousId": "anon_abc123",
"traits": {"email": "user@example.com"},
"timestamp": "2025-01-10T10:05:00Z"
}
// After sign-up
{
"event": "added_to_cart",
"userId": "u_12345",
"anonymousId": null,
"timestamp": "2025-01-10T10:06:00Z"
}
Rule: When an identify event links anonymousId to userId, downstream models merge the session history. Document this behavior clearly.
Example 3: SQL to validate event volumes and properties
Goal: Detect missing events or malformed payloads after a release.
-- Daily counts by platform
SELECT
DATE_TRUNC('day', timestamp) AS d,
properties:platform::string AS platform,
COUNT(*) AS events
FROM events
WHERE event = 'added_to_cart'
AND timestamp >= CURRENT_DATE - INTERVAL '14 days'
GROUP BY 1, 2
ORDER BY 1, 2;
-- Property coverage for required keys
SELECT
COUNT_IF(properties:product_id IS NULL) AS missing_product_id,
COUNT_IF(properties:price IS NULL) AS missing_price,
COUNT(*) AS total
FROM events
WHERE event = 'added_to_cart'
AND timestamp >= CURRENT_DATE - INTERVAL '7 days';
Investigate sudden drops, platform gaps, or rising nulls immediately.
Example 4: Client vs server events and deduplication
Problem: A purchase gets tracked both client-side and server-side, causing double counts.
// Client
{
"event": "completed_purchase",
"userId": "u_12345",
"properties": {"order_id": "o_555", "total": 129.00},
"context": {"source": "client"},
"messageId": "uuid-client-o_555"
}
// Server (source of truth)
{
"event": "completed_purchase",
"userId": "u_12345",
"properties": {"order_id": "o_555", "total": 129.00},
"context": {"source": "server"},
"messageId": "uuid-server-o_555"
}
Policy: Prefer server as authoritative and suppress client fire, or apply idempotency using order_id so only one record survives. Document the rule in the tracking plan.
Example 5: QA checklist snippet for a new event
- Event name matches taxonomy exactly.
- Required properties present with correct types and allowed values.
- Timestamps in ISO 8601 UTC; no future dates.
- Identity fields populated (userId or anonymousId); identify merge tested.
- Client vs server policy respected; no duplicates under expected flows.
Drills and exercises
- List 10 core events for your product’s activation funnel. Write names using your taxonomy.
- For each event, specify 3–5 required properties with types and allowed values.
- Draft a one-page identity resolution policy: anonymous, logged-in, workspace/account contexts.
- Create SQL to monitor daily counts and property coverage for two key events.
- Run a QA of a recent release: capture payload screenshots/logs and note any mismatches.
Common mistakes and debugging tips
Mistake: Inconsistent event names
Impact: Hard-to-join data and broken dashboards.
Fix: Enforce taxonomy and review PRs/changes against the tracking plan.
Mistake: Missing required properties
Impact: Unusable funnels and experiment reads.
Fix: Add schema validation in QA; monitor null rates; fail builds in stage when critical fields are missing.
Mistake: Double-counting due to client and server events
Impact: Inflated conversions and revenue.
Fix: Pick a source of truth per event, implement idempotency keys (e.g., order_id), and deduplicate downstream.
Mistake: Weak identity merge rules
Impact: Split user history and wrong cohort assignments.
Fix: Always send identify with both anonymousId and userId at auth moments; document merge precedence.
Mistake: No monitoring after release
Impact: Silent data loss.
Fix: Set baselines, alerts, and weekly data health reviews.
Mini project: Instrument an activation funnel
- Pick a 3–5 step funnel (e.g., sign_up → completed_onboarding → used_core_feature).
- Write the tracking plan: event names, triggers, required properties, identity rules, source (client/server), owners.
- Define QA steps and acceptance checks.
- Implement a monitoring query for volumes and property coverage per step.
- Run a post-release validation and produce a one-page report with findings and fixes.
Acceptance criteria
- All events logged with correct names and properties.
- Identity merges confirmed for anonymous → signed-up users.
- No double-counting across client/server.
- Monitoring shows stable daily volumes with expected ratios between steps.
Practical projects
- Design and ship a feature-specific tracking spec (search, share, or payments) with QA evidence.
- Create a data health dashboard: event volumes, null property rates, and platform splits.
- Refactor legacy events: deprecate, alias, and migrate dashboards to the new taxonomy.
Subskills
- Event Naming And Taxonomy — Build a clear, consistent naming system and style guide.
- Event Properties Design — Choose required/optional fields, types, units, and enums that support analysis.
- Tracking Plan Creation — Specify trigger, payload, identity, and ownership for each event.
- User Identity Resolution — Merge anonymous and authenticated activity correctly across devices.
- Client Server Event Consistency — Prevent double counts; define authoritative sources and idempotency keys.
- Instrumentation QA — Validate payloads in stage/prod with a repeatable checklist.
- Detecting Missing And Broken Events — Monitor volumes, nulls, and schema drift to catch issues early.
- Analytics Documentation — Keep a versioned, searchable record of events and changes.
Next steps
- Complete the drills, then attempt the skill exam below. Anyone can take it for free; sign in to save progress.
- Apply the mini project to a real feature. Share your tracking plan and QA outcomes with your team.
- Move on to deeper analysis topics like experimentation and retention once your instrumentation is stable.