← Back to Field Notes
Taxonomy & Governance July 2, 2026 7 min read

Designing Multi-Platform Event Taxonomies: From Free-Text to JSON Schemas

Designing Multi-Platform Event Taxonomies: From Free-Text to JSON Schemas

The Chaos of Unregulated Event Names

In early-stage development, engineering teams often pass arbitrary string literals into analytics trackers:

  • Analytics.track("user_clicked_checkout")
  • Tracker.log("PurchaseButtonTapped", {"val": 49.99})
  • window.gtag("event", "buy_now_press", { order_total: "49.99" })

Within twelve months, your data warehouse contains three different names for the identical conversion event, incompatible parameter data types (float vs string), and missing metadata. Data analysts spend 60% of their time writing SQL COALESCE and regex cleanup scripts instead of generating actionable insights.


The Object-Action Standard

A clean taxonomy begins with the Object-Action Syntax. Every event is phrased as a noun (the object acted upon) followed by a past-tense verb (the action that occurred).

Examples of Object-Action Parity:

  • Account Created (not signup, user_registered, or new_account_btn)
  • Document Exported (not export_click, pdf_saved, or download_doc)
  • Order Placed (not purchase, checkout_complete, or buy_now)
+-------------------------------------------------------------+
| Event: "Order Placed"                                       |
| - Object: Order                                             |
| - Action: Placed                                            |
|                                                             |
| Properties:                                                 |
| - order_id: string (UUID)                                   |
| - total_amount_cents: integer (> 0)                         |
| - currency_code: string (ISO 4217)                          |
| - payment_method: string ("card" | "qr" | "bank_transfer")  |
+-------------------------------------------------------------+

Automated CI/CD Schema Validation

To ensure developers cannot ship non-compliant telemetry code, store your event definitions as formal JSON Schemas in a centralized repository or shared submodule:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "OrderPlacedEvent",
  "type": "object",
  "properties": {
    "event_name": { "type": "string", "const": "Order Placed" },
    "properties": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string", "pattern": "^[0-9a-fA-F-]{36}$" },
        "total_amount_cents": { "type": "integer", "minimum": 1 },
        "currency_code": { "type": "string", "pattern": "^[A-Z]{3}$" }
      },
      "required": ["order_id", "total_amount_cents", "currency_code"],
      "additionalProperties": false
    }
  },
  "required": ["event_name", "properties"]
}

In your build pipeline, generate type-safe wrapper classes directly from these JSON schemas using code generators for Swift, Kotlin, and TypeScript. When a developer invokes OrderPlacedEvent, the compiler enforces all required attributes at build time.


The Governance Lifecycle

  1. RFC Proposal: When a new product feature is designed, the product manager submits a pull request proposing new event schemas.
  2. Automated Schema Linting: CI verifies schema syntax and prevents collision with existing event names.
  3. Engineering Integration: Both iOS and Android teams generate their SDK wrappers simultaneously, guaranteeing platform parity before production release.
Lead Telemetry Consultant
Dev Cascade Base Engineering Team
Nakhon Ratchasima, Thailand

Specialized cross-platform telemetry engineers auditing behavioral pipelines across native iOS, Android, and Web clients.