Most product teams start tracking the same way. Someone installs an analytics tool, adds a handful of events while building a feature, and ships. Three months later there are four events that all sort of mean "user signed up", half of them carry a property called plan and the other half call it planName, and nobody can say with confidence how many people activated last week.
This is not a tooling problem. It is a planning problem. The fix is an analytics tracking plan: a written specification of what you measure, agreed before any instrumentation code is written. This guide shows how to build one that survives contact with a fast-moving team.
Events added opportunistically reflect whoever wrote them, on the day they wrote them. The result is a dataset where the structure encodes the history of your sprints rather than the structure of your product. Three predictable failures follow.
The practical cost is that leadership stops trusting the numbers. Once trust goes, decisions revert to opinion, and the whole investment in analytics is wasted.
Before naming a single event, write the questions the business needs answered. Good questions are specific and tied to a decision. For example:
Each question implies the events and properties you need. Working backwards this way keeps the plan small, because an event that answers no question on the list does not need to exist yet.
Pick one convention and document it on the first page of the plan. A widely used pattern is object_action in lowercase with underscores, where the action is past tense: project_created, invite_sent, subscription_cancelled. Decide and record:
The granularity rule deserves emphasis. If you create button_clicked_blue and button_clicked_green, you have pushed data into names, where it cannot be filtered or grouped. One event with a variant property is far more useful.
Properties are where most of the analytical value lives, and where most of the mess accumulates. For each event, list every property with its data type, whether it is required, and its allowed values if it is an enumeration.
Also define a small set of properties attached to every event, such as the user identifier, account identifier, plan tier, platform and app version. Consistent global properties mean any event can be segmented the same way, which is what makes cross-feature analysis possible at all.
Be deliberate about what you do not collect. Personal data in event properties creates compliance obligations and makes deletion requests harder to honour. Keep sensitive fields out of the analytics layer and respect the retention rules you have published, a topic we cover in our guide to data retention and deletion policies for SaaS.
A spreadsheet is enough to start. One row per event with columns for name, description in plain language, trigger location, properties, owner, status and the question it answers. The format matters less than two qualities: everyone can find it, and changes are visible.
Treat additions like code changes. A new event is proposed, reviewed by the owner, then implemented. This small amount of friction is what prevents the taxonomy from sprawling back into chaos.
Consider an illustrative scenario. A B2B scheduling tool wants to know why trial conversion feels inconsistent. The team has roughly sixty events, added over a year by four different engineers. Two events fire when a booking is made, depending on which part of the UI was used, and neither records whether the booking came from a shared link or the dashboard.
The team runs a two-week reset. They write down six core questions, which reduce to eighteen events. They define booking_created as the single event for a successful booking, with properties for source, duration, attendee count and whether a reminder was enabled. They map the two legacy events to the new one, run both for three weeks so dashboards can be rebuilt with comparable history, then retire the old names.
The payoff is not a prettier spreadsheet. With one well-propertied event, the team can finally compare trial cohorts by booking source and see that users who create bookings from shared links behave very differently from those who never leave the dashboard. That is a finding they could not have reached before, and it points directly at an onboarding change. Pairing that analysis with cohort retention analysis turns a single insight into a repeatable measurement habit.
Client-side tracking is easy to add but lossy. Ad blockers, closed tabs, flaky mobile networks and browser privacy features all remove data, and the loss is not evenly distributed, which quietly biases your numbers. Server-side tracking is more reliable for anything that touches money or compliance.
A reasonable default is to fire interface interactions from the client and business facts from the server. A click on an upgrade button is a client event. A completed payment is a server event, because the server is the only place that knows it truly succeeded. Our guide to server-side tracking and conversions APIs goes deeper on the implementation.
The value of product analytics is capped by the clarity of its definitions. No dashboard can rescue data that nobody can interpret the same way twice.
A tracking plan is one of the cheapest pieces of infrastructure a growing company can build. It takes a few focused days, needs no new tooling, and determines whether the next year of product data is an asset or a liability. Start from the questions, keep the event list small, specify properties carefully, give the document an owner, and review it on a schedule.
If you want help designing the measurement layer of a product, or rebuilding one that has drifted, see how we approach SaaS product development or get in touch through our contact page.