The first taxonomy an app ships is usually a tour of the screens that existed in the week the SDK was installed. Buttons get events. Screens get events. Someone adds misc_tap because a designer shipped a new chip and the sprint was ending. Eighteen months later the product has a wallet, a guest checkout, and a widget, and the taxonomy still thinks in 2024’s navigation.
We ask Signal Architecture rooms to name events as verbs plus objects: order_submitted, track_completed, seat_paused. Feature names rot when the feature is renamed. Verbs survive a redesign if the job survived. It feels pedantic in week one. It is cheaper than a warehouse rewrite in year three.
Ownership is the part most tracking plans skip. An event without a named human becomes a fossil: too dangerous to delete, too vague to trust. We print the owner next to the event, and we make the owner say the sentence the event is allowed to support. If they cannot, the event does not ship, even if the ticket is already in QA.
Cardinality is the other quiet invoice. A property that stores a free-text search string will make a vendor bill look like a novel. Put search behind a hashed bucket or keep it in a warehouse table that is not the product analytics stream. The Chart Room is unromantic about this because we have seen teams freeze dashboards to stop the overage.
Year-three taxonomies are boring on purpose. They have fewer events than a junior hire would like. They have a retirement date on the events that remain. And they have no misc. Misc is how you pay twice: once to collect it, once to explain why you cannot use it.