Instrumentation & Event Dictionary Template
A practical, fillable template and guidance for defining tracked events and telemetry so analytics are reliable, discoverable, and actionable. Includes clear column definitions, naming conventions, validation rules, sample entries, and a lightweight governance checklist for maintaining the dictionary as the single source of truth.
Purpose
This template captures a consistent, discoverable, and maintainable definition for each tracked event and its fields. Use it to ensure instrumentation matches business intent, supports reliable metrics, and prevents common telemetry mistakes such as duplicated events, ambiguous fields, or undocumented transformations.
When to use
- Before adding a new analytics/telemetry event or property.
- When onboarding teams to a shared analytics schema.
- To review existing events for drift, duplication, or missing ownership.
How this template helps
- Makes event intent explicit so downstream analysts and BI tools produce trustworthy metrics.
- Provides a single source of truth for event semantics, owners, and privacy/retention rules.
- Supports automated validation and schema checks when combined with tooling.
Required columns (and how to fill them)
-
Event name (string)
Canonical, dot-delimited name following your naming convention (example: user.signup.completed or checkout.purchase.completed). Prefer lower_snake or dot.delimited consistently; avoid embedding implementation details.
-
Description (plain language)
Business meaning and intended analytic use. Explain who cares about the event, what question it answers, and how it differs from similar events.
-
Owner (team/person)
Primary owner responsible for correctness, schema changes, and consumer communication. Include team name, role, and contact (email or Slack handle).
-
Properties (fields) — schema
List each property with name, type, allowed values, nullable/required, example value, and short description. Indicate semantic types (e.g., currency, ISO-8601 timestamp, user_id).
-
Version
Semantic version or integer for the event schema. Use versioning policy (major for breaking changes, minor for additions) and track migration notes.
-
Provenance / Source
System or service that emits the event (e.g., web-client-v2, payments-service). Helps trace back to the emitting code for debugging.
-
Trusted source (boolean)
Is this event considered a canonical record for the underlying business fact? If false, indicate why and where a trusted source exists.
-
Transformation notes
Any downstream ETL, normalization, enrichment, or aggregation steps applied to the event or its fields (e.g., "user_id anonymized for PII, currency converted to USD").
-
Upstream systems / dependencies
Other systems or events that feed this event or that this event depends on (helpful for lineage).
-
Retention
How long raw and aggregated data are stored (e.g., 365 days raw, 5 years aggregated). Include archival rules.
-
Privacy flags / compliance
Indicate PII/PHI presence, GDPR/CCPA considerations, masking required, user consent dependencies, and any opt-out behavior.
-
Validation rules and SLAs
List automatic checks (presence, type checks, allowed value constraints, cardinality, reasonable ranges) and expected data freshness / SLA for event arrival and pipeline processing.
-
Example entry(s)
Provide at least one realistic JSON-like example of the emitted event with values for properties.
-
Change log / last updated
Record schema changes, why they were made, who approved them, and the date.
Naming conventions — practical rules
- Use consistent separators (dot, underscore). Pick one and stick to it.
- Start names with a domain or product area: checkout., user., system.
- Prefer verbs for events that represent actions (e.g., user.login.success), nouns for records (e.g., order.recorded).
- Avoid embedding environment or implementation detail (e.g., don’t include "v1" unless it’s part of deliberate schema versioning).
Example event definitions
Example 1 — user.signup.completed
Description: User completed signup flow (used to measure signup conversion). Owner: Growth Team (growth@acme). Version: 1. Properties: user_id (string, required), signup_method (enum: email|oauth, required), created_at (ISO-8601 timestamp, required). Trusted source: true. Retention: 2 years. Privacy: contains user_id (PII) — must be masked for analytics exports.
Example 2 — checkout.purchase.completed
Description: Completed purchase capturing order totals and payment method. Owner: Commerce Team. Version: 2. Properties include order_id (string), user_id (string nullable), total_amount (decimal, currency), currency (ISO-4217), items_count (int). Transformations: currency normalized to USD for aggregates. Validation: total_amount > 0, items_count >=1. Retention: raw 5 years.
Example 3 — system.alert.cpu_high
Description: Monitoring event emitted by infra when CPU exceeds threshold. Owner: Platform Team. Trusted source: true. Properties: host_id, cpu_percent, measured_at.
Validation checklist (for each new or changed event)
- Does the description explain the analytic question this event answers?
- Is there a clear owner and an acceptance process for changes?
- Are property names and types specified with examples?
- Are privacy, retention, and compliance requirements recorded?
- Are automated validation rules defined for type, cardinality, and reasonable ranges?
- Is the trusted source boolean set correctly, and is lineage documented?
- Is at least one concrete example payload included?
Maintenance & governance — keep this dictionary the source of truth
- Designate a schema steward role (per product area) responsible for approvals and breaking-change communication.
- Require a short review period and changelog entry before making breaking changes.
- Automate schema checks in CI where possible (type checks, required fields, allowed values).
- Publish a lightweight change policy: how to deprecate, how long consumers have to migrate, and how version bumps are signaled.
- Schedule periodic audits to find duplicate events, unused events, or inconsistent property naming.
Common pitfalls and how to avoid them
- Ad-hoc naming by different teams — mitigate with templates, linters, and onboarding docs.
- Too many optional properties that obscure required signals — prefer focused required fields and a separate enrichment pipeline for optional data.
- Coupling analytic semantics to implementation details — keep names and semantics stable even if implementation changes.
- Missing ownership — require an owner before an event is accepted into production.
Next steps and optional enhancements
Start by copying this template into your shared schema registry or a central spreadsheet. For faster adoption consider these capability enhancements (implementation notes below):
- Render this template as an interactive form to create and validate entries (captures structured schema fields and example payloads).
- Connect entries to automated CI checks and a schema registry so breaking changes fail builds unless approved.
- Expose the dictionary as a versioned API so analytics tools can read canonical schemas programmatically.
Quick governance checklist (one-page)
- Owner assigned and reachable.
- Business description clearly written.
- Properties documented with types and examples.
- Privacy & retention set.
- Validation rules defined.
- Example payload included.
- Change log updated.
Use this template as the foundation for a living event dictionary. Preserve the examples and the validation checklist as your schema and tooling mature.
Discussion
Comments and conversation will live here.