Guides

How to write a tracking plan

A practical method for defining events, properties, naming conventions, ownership and QA before anyone ships an instrumentation line.

A tracking plan is the document that decides, before a line of instrumentation code is written, what events exist, what data travels with each one, and who is allowed to change either. Skip it and you get the usual result eighteen months in: three events that all mean "signed up," properties named plan, Plan and subscription_tier for the same field, and an analyst who spends more time reconciling event names than analyzing behavior. The plan is cheap to write and expensive to retrofit, which is exactly why it gets skipped.

Start from decisions, not from features

The instinct is to track everything a product does. Resist it. Start from the questions the business needs answered — activation, retention, conversion, feature adoption — and work backward to the smallest set of events that answers them. An event nobody queries in the first quarter is not neutral; it is a maintenance cost and a false sense of coverage.

A useful filter: for each candidate event, name the decision it will inform and the dashboard or analysis that will use it. If you cannot name either, leave it out of version one. You can always add an event later; you can rarely remove one without breaking a report someone built on top of it.

Design the event taxonomy

An event taxonomy is the naming system that keeps hundreds of events legible. The two conventions that matter most:

  • Object-action naming. order_completed, video_started, invite_sent — a noun and a past-tense verb, consistently ordered. Avoid mixing user_signed_up and signup_completed for the same action because two people wrote the spec on different days.
  • One event per meaningfully distinct action. Do not overload one event with a type property to mean three different things (button_clicked with type: checkout vs type: share vs type: settings) unless those really are one action with variants. If the downstream analysis will always filter and treat them separately, they are three events.

Keep a single source of truth — a spreadsheet or a data dictionary tool — listing every event, its trigger condition, its properties, and its owner. This is the artifact the tracking plan actually is; the rest of this guide is how to fill it in well.

Specify properties precisely

Each event carries properties: attributes of the action (amount, currency, payment_method) and, separately, user properties that describe the actor (plan_tier, signup_date, company_size) and usually update on a user profile rather than traveling with every event. Vague property specs cause more damage than vague event names, because the ambiguity is invisible until someone tries to aggregate.

For every property, specify:

Field Example
Name amount
Type number
Unit minor currency units (cents), not dollars
Required? yes, always present
Allowed values any positive integer
Source computed at checkout, not user input

The unit row is the one teams most often skip and most often regret — a mix of dollars and cents in the same field silently corrupts every sum downstream.

Assign ownership

A tracking plan without an owner decays the day it ships. Assign, per domain (checkout, onboarding, messaging), a person who reviews proposed changes, approves new events, and is the first call when a number looks wrong. Route change requests through a lightweight process — a pull request against the plan document, reviewed before the code ships, not after. The point is not bureaucracy; it is catching a renamed property before it breaks three dashboards simultaneously.

Build in QA before launch

Test each event against its own specification, not just against "did an event fire":

  1. Trigger the action in a staging environment and inspect the raw payload — event name, every required property, correct types.
  2. Check it against the spec field by field, including the unit and allowed-value checks above.
  3. Confirm it lands correctly in the destination — the customer data platform or analytics tool — with the right timestamp and user identity attached.
  4. Re-run the same check after any related code change; instrumentation regresses silently far more often than user-facing features do, because nobody notices a missing event the way they notice a missing button.

Tools such as Segment and RudderStack can validate events against a schema at collection time and block or warn on a mismatch before bad data reaches the warehouse or downstream tools such as Amplitude or Mixpanel; enabling that check is worth the setup cost once more than one team ships instrumentation.

Where a tracking plan lives

Two common designs:

  • In the data layer and a schema-enforcing collection layer. A CDP such as Segment, RudderStack or mParticle sits between the app and every destination, so the plan is enforced once, centrally, rather than trusted to be consistent across a dozen SDK integrations.
  • In each destination tool's own event definitions. Workable for a single product analytics tool and a small team, but every additional destination is another place the plan can drift.

The first design costs more to set up and pays for itself once you have more than two or three downstream destinations for the same events.

Common mistakes

  • Writing the plan after shipping the feature. The plan should gate the ship, not follow it — by the time you retrofit, real users have already been misrecorded.
  • No deprecation process. Old events accumulate forever because removing one risks breaking a report nobody remembers exists. Track last-queried dates and sunset unused events on a schedule.
  • Free-text properties where an enum would do. payment_method: "cc" next to payment_method: "credit_card" from a different code path turns a simple group-by into a cleanup project.
  • No plan owner, or an owner who is not on the engineering team. Someone who cannot review a pull request cannot actually enforce the plan.

Once the plan is in place, use it to run a full audit of your analytics implementation, and to support funnel and retention analysis on the events it defines. Tools in this space, including data pipeline and product analytics platforms, are browsable at event collection and tracking pipelines and product analytics tools.

Related tools

Terms used in this guide

Latest on this topic