Journal · 12 March 2026

An event taxonomy that survives a product rewrite

Helena Crowe · Event Taxonomy Studio

Hands writing in a notebook beside a laptop

Most App Analytics catalogues are maps of the last navigation. home_viewed, profile_tab_opened, new_checkout_v2_seen. The day the product moves a button, those names become historical fiction. The tracker still fires; the story it tells is about a building that was demolished.

A taxonomy that survives a rewrite is organised around verbs a person performs, not around the containers a designer currently uses. item_saved, checkout_started, consent_updated. The screen can change. The verb should not, unless the behaviour itself changed.

The spoken test

In the studio we read the catalogue aloud to someone who does not work in product. If the list sounds like a sitemap, it will rot. If it sounds like a diary of actions, it can travel. This is not poetry. It is a way of noticing that onboarding_screen_3 cannot be implemented on a new Flutter client without a meeting.

Verbs still need properties. checkout_started without plan_name or item_count is a shrug. Properties should be enums where the world is finite, and they should be allowed to be empty only when the memo will say so. A property that exists “in case marketing needs it” is how catalogues bloat until nobody trusts the export.

Platforms are dialects, not new languages

When a team adds Android a year after iOS, the temptation is to prefix everything: android_checkout_started. Resist it. The platform is a property, or it is implicit in the app ID. Splitting the verb by client guarantees two funnels and a quarterly argument about which one is “real.”

The same rule applies when you leave a vendor. If the catalogue is a list of Mixpanel-shaped names with spaces and punctuation, the migration will be a second product. If it is a tight verb list with documented types, the new tracker is an implementation detail. That is the only sense in which we are “tool agnostic”: the language has to be portable or it is not a language.

What to do with the old names

Do not hide them. Give each retired event a burial date and a reason. Duplicate of X. Never observed. PII risk. Then stop implementing them. Teams that “quietly stop firing” without a note spend the next year explaining a cliff in a dashboard tile that someone still screenshots for the board.

A rewrite is the cheapest moment to do this work, because the client is already being touched. It is also the moment when someone will ask for auto-tracked screens “just to have coverage.” Coverage of what? If you cannot name the decision the screen view supports, it is not coverage. It is insulation against a future question you have not earned.

The Event Taxonomy Studio spends two weeks on this problem with a live, redacted export. If you only want the stance without the room, the governance page is the shorter public version. For empty properties and quiet PII, see the later note on property hygiene.