Event Taxonomy Pitfalls in In-App Conversion Tracking
Architectural rules for maintaining rigorous, unambiguous event tracking plans across distributed engineering teams.
The Chaos of Ungoverned Telemetry
As software development teams grow and ship features rapidly across independent sprints, event tracking dictionaries frequently degrade into a tangled collection of inconsistent event names and disparate payload properties.
One engineer logs tap_checkout_button, another implements checkout_screen_viewed, while the Android team dispatches Order_Initiated.
The consequence is that a single logical business conversion funnel becomes impossible to query accurately without complex SQL unions, resulting in reporting errors and misallocated engineering capacity.
4 Rules for Clean Event Taxonomy
1. Adopt a Strict Object-Action Naming Hierarchy
All events should follow a standardized semantic structure: [noun]_[verb_past_tense].
- Correct:
cart_item_added,payment_method_selected,kyc_document_uploaded - Incorrect:
clickCart,SubmitPayment,user_did_kyc_step_2
This structure ensures that events sort logically in your data warehouse and are immediately comprehensible to any analyst or developer without consulting external documentation.
┌──────────────┐ ┌──────────────┐ ┌────────────────────────────────────┐
│ [OBJECT] │ + │ [ACTION] │ = │ EVENT NAME │
├──────────────┼─────┼──────────────┼─────┼────────────────────────────────────┤
│ account │ │ created │ │ account_created │
│ subscription │ │ upgraded │ │ subscription_upgraded │
│ promo_code │ │ applied │ │ promo_code_applied │
└──────────────┴─────┴──────────────┴─────┴────────────────────────────────────┘
2. Distinguish Between UI Interactions and State Mutations
A critical flaw in many tracking implementations is confusing a button tap with a completed state transition.
For example, when a user taps “Complete Order”, the client should dispatch:
checkout_submit_clicked(Capturing the user interaction and intent)order_transaction_completed(Dispatched only upon receiving a verified 200 OK server response)
Conflating these two events makes it impossible to distinguish between UI friction and backend payment gateway timeouts.
3. Maintain Property Typing Consistency
Ensure that properties maintain identical data types across iOS, Android, and Web clients:
order_amount: Always floating-point numeric (e.g.,129.50), never a formatted string with currency symbols ("$129.50").currency_iso: Standard 3-letter ISO code ("THB","USD"), uppercase.step_index: Integer (1,2,3), never spelled-out words ("one","two").
Inconsistent types cause schema evolution conflicts in data warehouses such as BigQuery and Snowflake, often dropping unparseable rows silently.
Facing Unexplained Drop-Offs in Your App?
Our Bangkok-based analytics specialists analyze complex mobile/web conversion funnels and provide step-by-step diagnostic blueprints.