1594. Lesson identity
This lesson turns a design question into a small, reviewable telemetry specification. It does not implement a tracker or produce a dashboard.
1595. Learning objective
After this lesson, you can write a minimal gameplay telemetry specification that connects each event to a decision, defines an unambiguous schema, minimizes and classifies identifying data, and states usable sampling and interpretation constraints.
1596. Why this matters
Telemetry is useful only when its data can support a bounded design decision. An event name without a clear meaning creates false confidence: two people may collect the same event and interpret it differently. Excessive collection also increases privacy exposure and maintenance cost without improving the decision.
Identifiers require particular care. A run or session identifier is not automatically anonymous. It may be pseudonymous or linkable depending on how it is generated, how long it persists, which other fields accompany it, and who can access it. A precise specification therefore defines identifier scope, rotation, linkage, retention, and access rather than relying on an absolute claim that no personal data is present.
A precise specification gives an AI coding assistant something testable to implement later while keeping the developer responsible for what the data means and whether collecting it is justified.
1597. Prior knowledge
You should already be able to:
- State a gameplay decision and the evidence that could inform it.
- Distinguish a player action from an interpretation of player intent.
- Use the previous lesson's decision-first approach to reject metrics that have no actionable purpose.
- Describe relevant gameplay state without implementing a tracker.
The previous lesson, 4.4 L1 — Measure a decision, not a fantasy dashboard, established that telemetry begins with a decision rather than a list of interesting numbers.
1598. Core concept
A telemetry event is a measurement contract, not merely a log message.
A useful event specification answers five questions:
- What happened? Define the observable gameplay occurrence.
- When did it happen? Define the accepted state transition or other semantic trigger, including whether repeated occurrences are valid.
- What context is necessary? Include only fields needed to interpret the event or support the stated decision.
- How reliable and representative is it? State sampling, missing-data, and duplicate-event assumptions.
- What should not be inferred? Record ambiguity and interpretation limits.
A minimal event set is not the smallest number of event names at any cost. It is the smallest set that can answer the current decision without hidden assumptions.
Use this event record:
Event name
Decision supported
Trigger
Required fields and allowed values
Identifier classification, scope, and rotation
Linkage prohibition or permitted linkage
Retention and access limits
Sampling rule
Duplicate and retry behavior
Missing-data handling
Known ambiguity
Out-of-scope interpretations
1599. Mental model
Use the Decision → Event → Context → Limits chain:
| Stage | Question | Test |
|---|---|---|
| Decision | What might change because of this evidence? | Name a concrete design choice. |
| Event | What observable occurrence supplies evidence? | Describe a semantic trigger, not a motive or an unaccepted input. |
| Context | Which fields make the occurrence interpretable? | Remove fields that do not affect the decision. |
| Limits | What could make the evidence incomplete or misleading? | State sampling, missing data, duplicates, identifier handling, and ambiguity. |
If a proposed field cannot be justified by the chain, remove it or mark it as intentionally out of scope. If the decision cannot be named, do not create the event yet.
1600. Sampling rules that can be reviewed
Writing “sampled” or naming a percentage is not enough. A usable sampling rule specifies:
- Eligible population: Which runs, sessions, builds, or occurrences can enter the sample?
- Sampling unit: Is the decision made per run, per session, per player, or per individual event?
- Inclusion method or rate: How is the unit selected, and at what stable rate?
- Consistency across linked events: Once a unit is included, are all events needed for the comparison captured together?
- Interpretation limits: Which populations or behaviors may be overrepresented, absent, or too uncertain to compare?
Use this compact template:
Eligible population:
Sampling unit:
Inclusion method or rate:
Consistency across linked events:
Interpretation limits:
Full capture records every eligible occurrence, subject to delivery and retention limits. It can be appropriate for an infrequent event central to the current decision, but it does not remove missingness or ambiguity.
A stable run-level sample selects an eligible run once, using a documented random inclusion rule, and then records all linked events required for that run's comparison. For example, a selected run records both route reveal and route selection when either occurs.
Do not independently sample linked reveal and selection events. If each event is sampled separately, a reveal may be retained while its corresponding selection is dropped, or the reverse. The resulting ratio would mix gameplay behavior with sampling loss and could not support the intended comparison without additional correction.
1601. Concrete example
Suppose the design question is: Should the first optional route be signposted more clearly? The team needs to compare exposure to the route with route selection. It does not need a complete map of every player action, and it does not claim to measure abandonment without defining an observable abandonment outcome.
A restrained specification might contain these events:
Event: optional_route_revealed
Decision supported: Decide whether the route's discoverability needs adjustment.
Trigger: During an active eligible run, the game transitions route_alpha from unrevealed to revealed for the first time.
Fields: run_id, route_id, progress_band, reveal_source
Allowed values:
route_id = route_alpha
progress_band = early | middle | late
reveal_source = environmental_cue | interaction | unknown
Identifier classification: run_id is a pseudonymous, randomly generated, session-scoped identifier.
Scope and rotation: Generate a new run_id for each run; do not reuse it across runs.
Linkage: Do not link run_id to an account, device fingerprint, location, or another persistent identifier.
Retention and access: Retain run-level records only for the documented analysis period, then delete them; restrict access to the people conducting the stated analysis.
Data minimization: Do not collect account names, free text, device fingerprints, location, or fields unrelated to the decision.
Sampling: Full capture of eligible events because the event is infrequent and central to the decision.
Duplicates: At most one event per route_id per run_id.
Missing data: If the event is not received, classify exposure as unknown; do not treat absence as evidence that the route was not revealed.
Ambiguity: The event shows that the route became observable, not that the player noticed or understood it.
Out of scope: Do not infer player motivation from this event.
Event: optional_route_selected
Decision supported: Compare route selection after exposure.
Trigger: During the same eligible run, the game accepts the route transition and changes the active route to route_alpha.
Fields: run_id, route_id, progress_band, selection_order
Allowed values:
route_id = route_alpha
progress_band = early | middle | late
selection_order = first_choice | later_choice
Identifier handling: Apply the same run_id classification, scope, rotation, linkage, retention, and access limits.
Sampling: Full capture for the same eligible population as optional_route_revealed.
Consistency: Reveal and selection use the same run-level inclusion decision; they are never sampled independently.
Duplicates: At most one selection event for route_alpha per route attempt.
Missing data: If exposure or selection data is absent, exclude that run from a completed comparison or report it as incomplete; do not silently count it as non-selection.
Ambiguity: Selection does not prove that the route was selected because of the reveal.
Out of scope: Do not treat non-selection as confusion without additional evidence.
Notice what is absent: raw input, mouse movement, free-text explanations, account identifiers, persistent device fingerprints, and claims about player intention. The events support a comparison but do not prove causation. The identifier is still classified and governed even though it is temporary and not linked to an account.
1602. AI-native workflow
Use AI as a specification reviewer, not as the authority on what should be measured.
- Write the decision and a first event draft yourself.
- Ask the AI to identify undefined triggers, unnecessary fields, identifier or linkage risks, duplicate cases, missing-data cases, incomplete sampling rules, and claims that exceed the evidence.
- Compare the critique against the actual gameplay rules and reject suggestions that add collection without decision value.
- Revise the specification manually.
- Ask the AI to restate the final contract as a checklist. Verify that it preserves the trigger, fields, identifier limits, sampling unit, linked-event consistency, missing-data rule, and ambiguity notes.
Useful prompt:
Review this telemetry specification as a schema reviewer. Do not add events unless a stated design decision requires them. Identify ambiguous triggers, unnecessary fields, identifier classification or linkage risks, missing retention or access limits, duplicate cases, incomplete sampling rules, missing-data handling, and interpretations the data cannot support. Return findings grouped by event.
Do not ask the AI to implement a tracker in this lesson. The deliverable is the measurement contract, not code.
1603. Common mistakes
Treating context as harmless
Fields such as raw input, free-text responses, precise timestamps, account identifiers, or persistent device identifiers can create privacy and interpretation problems without answering the current decision. Classify every identifier, constrain its scope and rotation, prohibit unnecessary cross-run linkage, and state retention and access limits.
Sampling linked events independently
A reveal and its later selection form a comparison within the same run. Sampling them independently can create unmatched records and distort the apparent relationship. Select a stable unit first, then capture the linked events consistently for that unit.
Treating absence as an outcome
An absent event may indicate failed delivery, an interrupted session, exclusion by the sampling rule, or an unobserved case. Define whether absence is unknown, incomplete, or excluded. Do not silently convert it into success, failure, cancellation, or non-occurrence.
Logging an input instead of the gameplay occurrence
A button press may be remapped, rejected, blocked, or ignored. If the event is intended to measure cancellation, trigger it when the game accepts cancellation and transitions the attempt to the canceled state.
1604. Guided practice
Create a specification for this decision:
Should the cost of a failed attempt be adjusted, or is the failure rate being misread because players are canceling before completing the attempt?
Use a small invented gameplay context: a player begins a risky interaction, may complete or cancel it, and may receive a failure result. Do not implement anything.
Draft no more than three events. For each event, complete this template:
Event name:
Decision supported:
Trigger:
Required fields and allowed values:
Identifier classification:
Identifier scope and rotation:
Linkage limits:
Retention and access limits:
Eligible population:
Sampling unit:
Inclusion method or rate:
Consistency across linked events:
Sampling interpretation limits:
Duplicate or retry behavior:
Missing-data handling:
Known ambiguity:
Unsupported interpretation:
Your specification must include an event that distinguishes beginning an attempt from receiving its result. Decide whether a cancellation event is necessary; include it only if it changes the decision. If included, trigger cancellation on the accepted transition to the canceled state rather than on a raw input press.
Then perform a minimization and completeness pass:
- Remove at least one candidate field or event that is merely interesting, and record why it was rejected.
- Replace inferred motives with observable states or sequences.
- Classify every identifier and define its scope, rotation, linkage, retention, and access limits.
- State whether eligible occurrences are captured fully or sampled.
- If linked events are sampled, use one stable sampling decision for the whole comparison unit.
- Define what happens when an event is retried, duplicated, delayed, or missing.
- Never silently count missing data as success, failure, cancellation, or non-occurrence.
1605. Practical assessment
Submit the one-page specification through the attached practical assessment. This artifact is the principal assessed evidence for the lesson. The quiz is a supporting knowledge check.
1606. Validation / evidence
The specification meets the lesson standard when:
- Every included event supports the same named design decision.
- Each trigger describes an observable semantic gameplay condition.
- Required fields have bounded meanings or allowed values.
- At least one candidate field or event is explicitly rejected with a decision-based justification.
- Every identifier is classified, with scope, rotation, linkage, retention, and access limits.
- The sampling rule identifies the eligible population, sampling unit, inclusion method or rate, consistency across linked events, and interpretation limits.
- Duplicate, retry, delay, and missing-data behavior are explicit.
- Event occurrence is distinguished from player intent.
- At least one ambiguity or unsupported interpretation is documented for each event.
- No tracker, dashboard, or claim about player motivation is required.
A peer or AI reviewer should be able to determine when each event fires, which records can be compared, how identifiers are governed, and how incomplete evidence is treated without asking what the author meant.
1607. Knowledge check
Use the attached quiz to check your recognition of semantic triggers, necessary schema context, coherent sampling, and missing-data limits. Use the practical assessment to demonstrate that you can write and minimize the complete specification.
1608. Key takeaways
- Telemetry is a measurement contract connected to a specific design decision.
- Define accepted gameplay transitions rather than motives or raw inputs when the transition is what matters.
- A temporary identifier may still be pseudonymous or linkable; classify and govern it.
- A usable sampling rule names the population, unit, inclusion method, linked-event consistency, and interpretation limits.
- Sample linked events consistently so sampling loss is not mistaken for gameplay behavior.
- Minimal telemetry requires justified removal as well as justified collection.
1609. Next lesson
Continue to 4.5 — Balancing with data. The next lesson evaluates what a collected dataset can and cannot support after its sampling, missingness, and ambiguity limits have been documented.
1610. Knowledge check
Answer these items for yourself before reading the answers.
Which description is the strongest trigger for an event intended to measure cancellation?
Show answer and feedback
Answer: While an attempt is active, the game accepts the cancel action and transitions the attempt to the canceled state.
Why: The accepted transition to the canceled state is the observable semantic occurrence being measured. A raw input may be ignored, blocked, or remapped, while the other options infer an internal state.
When should a field be included in a minimal event schema?
Show answer and feedback
Answer: When it is necessary to interpret the event or support the stated decision.
Why: A minimal schema includes only context needed for interpretation or the stated decision. Future curiosity, AI suggestions, and precise identification do not justify collection.
Which sampling rule best preserves a comparison between route reveal and route selection?
Show answer and feedback
Answer: Select eligible runs using one documented random rule, then capture both linked events for every selected run.
Why: A stable run-level inclusion decision keeps linked events comparable. Independent event sampling can create unmatched reveals and selections, mixing sampling loss with gameplay behavior.
Why should duplicate, retry, and missing-data behavior be documented?
Show answer and feedback
Answer: To prevent delivery problems or absent records from being mistaken for additional gameplay occurrences or outcomes.
Why: Without duplicate, retry, and missing-data rules, delivery behavior or absent records can distort counts and make gameplay evidence ambiguous.