Journal · 18 August 2025
The quiet cost of too many properties
Event properties look free. They are not. Each one is a promise that a future engineer will populate it, a future analyst will trust it, and a future privacy review will still allow it.
In the Taxonomy Lab we run a petty audit: for every property on a live event, someone must name the last decision that used it. If the room cannot, the property is a souvenir. Souvenirs are expensive because they rot. Nulls spread. Then a join treats null as a segment called “unknown,” and a board chart acquires a mysterious third colour.
A budget, not a ban
We suggest a working budget of seven properties on a core event: identity of the object, a coarse source, a boolean for success or failure, a version of the surface, and three that the current quarter actually needs. The rest wait in a backlog with an owner. Backlogs without owners are how experiment_bucket_old lives forever.
PII is not a property type, it is a legal event. If a field could identify a person in the United Kingdom under UK GDPR, it does not belong on an analytics event “for later.” Later is how incidents start.
Cardinality is a heating bill
High-cardinality strings — raw search queries, full URLs, message bodies — feel like insight and behave like a warehouse tax. Hash or bucket them at source, or do not send them. Amplitude and Mixpanel will accept the firehose. Your future self will not thank you for the query times, or for the discovery that a customer pasted an email into a search box.
Retirement is part of design
Write a sunset date next to any property added for a campaign. When the date arrives, delete it in code, not only in a wiki. Instrumentation that only lives in Notion is a bedtime story.
If your plan already resembles a parts catalogue, bring it to a Workshop Seat. We are less interested in how many fields you have than in which ones you are willing to defend.