Field Notes // Event Architecture

Five Event Taxonomy Anti-Patterns That Ruin Downstream Funnel Audits

Published February 28, 2026 Author: Elena Rostova 2 min read
Five Event Taxonomy Anti-Patterns That Ruin Downstream Funnel Audits

When engineering teams add telemetry events organically over multiple years without a central taxonomy schema, the resulting data stream quickly becomes unmanageable. Downstream analytics pipelines fill with redundant events, conflicting property names, and orphan metrics that make funnel drop-off investigations unnecessarily painful.

Here are the five most common event taxonomy anti-patterns our practice uncovers during client audits—and how to fix them.


Anti-Pattern 1: The Verb-Noun Inversion Dilemma

Teams without strict tracking guidelines inevitably mix grammatical structures:

  • user_clicked_button
  • button_click_submit
  • submit_btn_pressed
  • formSubmitted

The Fix: Standardize on [Object] [Action] Casing:
Adopt a strict, predictable syntax across all platforms. We recommend [Entity] [Past-Tense Action] in snake_case:

  • onboarding_step_completed
  • payment_method_selected
  • workspace_member_invited

Anti-Pattern 2: Overloading a Single Generic Event

A frequent shortcut is firing a single generic ui_interaction event with dozens of conditional payload properties:

{
  "event": "ui_interaction",
  "properties": {
    "type": "click",
    "element": "sidebar_nav_link",
    "target": "/billing",
    "section": "account_settings"
  }
}

This makes building funnel visualizations in tools like Mixpanel or PostHog extremely cumbersome, requiring nested property filters on every step.

The Fix: Use explicit domain-level events for business-critical milestones (billing_viewed), reserving generic telemetry only for automated low-level DOM captures.


Anti-Pattern 3: Casing Inconsistencies in Payload Keys

When web developers send userId (camelCase) and iOS developers send user_id (snake_case) or UserId (PascalCase), data warehouses treat these as three distinct columns. Downstream queries require endless COALESCE() wrappers to produce accurate metrics.

The Fix: Automated Schema Validation:
Maintain a single TypeScript schema or JSON Schema repository. Generate client-side SDK wrappers that enforce compile-time payload linting before events ever leave the browser or mobile client.


Anti-Pattern 4: Bundling Volatile DOM Selectors into Event Names

Naming events after transient CSS classes (e.g., btn_blue_large_clicked) causes tracking schemas to break whenever the UI undergoes a visual refresh.

The Fix: Semantic Data Attributes:
Anchor client-side analytics listeners exclusively to dedicated attributes such as data-analytics-id="checkout-confirm" rather than presentation classes or dynamic DOM hierarchy paths.


Anti-Pattern 5: Unsanitized State Leaking into Event Payloads

Developers frequently dump raw component state into tracking payloads, inadvertently transmitting email addresses, phone numbers, or authentication tokens into third-party analytics dashboards.

The Fix: DOM Edge Scrubbing:
Enforce strict client-side allowlists for event properties. Any payload property not explicitly defined in the approved taxonomy schema must be stripped before network transmission.

Need an objective audit of your session telemetry?

Our practice isolates interaction bottlenecks and reconstructs user drops across complex multi-step web applications.

Request Technical Scoping Review