Quick answer: Instrument every progression milestone in your game as a telemetry event. Build a funnel that shows the percentage of players reaching each milestone. The largest drops between consecutive milestones reveal your worst bottlenecks. Use cohort analysis by platform, version, and acquisition source to determine whether each bottleneck is a design problem, a performance issue, or a bug.
Every game has a place where players stop playing. Not because the game is bad overall, but because something — a difficulty spike, a confusing puzzle, an unmarked objective, a performance dip on low-end hardware — breaks the momentum. Without telemetry, you find out about these bottlenecks from reviews and refund requests, long after the damage is done. With telemetry, you can see exactly where the drop-off happens, how severe it is, which players it affects, and whether your design changes are making it better or worse.
Designing Your Progression Events
The foundation of progression tracking is a set of well-designed telemetry events. Each event represents a milestone that a player reaches during their playthrough. The goal is to capture every meaningful transition in the game’s progression without drowning in noise. Too few events and you cannot see where problems are. Too many and you cannot distinguish signal from noise.
Start by mapping your game’s critical path: the sequence of milestones that every player must pass through to complete the game. For a level-based platformer, this is straightforward: tutorial complete, level 1 complete, level 2 complete, and so on. For an open-world RPG, it is more complex: main quest milestones, area discoveries, key NPC encounters. For a roguelike, track run starts, floor completions, boss encounters, and run endings (with outcome).
# Progression event schema
class ProgressionEvent:
player_id: str # Anonymous unique ID
session_id: str # Current play session
milestone: str # e.g. "level_03_complete"
milestone_order: int # Sequential position in critical path
timestamp: float # Unix epoch
time_since_last: float # Seconds since previous milestone
attempt_count: int # How many attempts at this milestone
platform: str # "windows", "macos", "switch", etc.
version: str # Game build version
hardware_tier: str # "low", "mid", "high" based on specs
The time_since_last field is crucial. It tells you not just that players drop off at level 5, but that they spent an average of 45 minutes on level 5 compared to 12 minutes on level 4. That ratio is a design signal: the level is either too long, too hard, or too confusing. The attempt_count field distinguishes between “players quit after one try” (frustration or confusion) and “players tried ten times and then quit” (difficulty wall).
Building the Progression Funnel
A progression funnel is a visualization that shows the percentage of players who reached each milestone. Start with 100% at the first milestone (game launched) and track the percentage at each subsequent milestone. The drop between any two consecutive milestones is the drop-off rate for that transition.
A healthy funnel has gradual, even drop-off. Players naturally stop playing over time — not everyone finishes every game — so some drop-off at every stage is normal. What you are looking for is uneven drop-off: a stage where the percentage drops dramatically compared to the stages before and after it. If 78% of players complete level 4 and only 41% complete level 5, but 39% complete level 6, level 5 is clearly the bottleneck. The drop-off from level 5 to level 6 is only 2%, meaning that players who survive level 5 continue playing. The problem is level 5 itself.
Visualize the funnel as a bar chart with one bar per milestone, sorted by critical path order. Color-code bars based on drop-off severity: green for normal (less than 10% drop-off), yellow for elevated (10-20%), red for critical (more than 20%). This gives the design team an instant visual map of where the game is losing players.
Cohort Analysis: Why Are Players Dropping Off?
Knowing where players drop off is the first step. Understanding why requires cohort analysis — segmenting the drop-off data by player characteristics. The most useful segmentation dimensions for games are platform, hardware tier, game version, acquisition source, and play pattern.
Platform segmentation reveals performance-related bottlenecks. If the drop-off at level 5 is 40% on Nintendo Switch but only 15% on PC, the problem is likely performance: level 5 has a scene that runs poorly on Switch hardware, and players quit because of frame rate drops or load times, not because of design. Hardware tier segmentation within a single platform can narrow this further: if the drop-off correlates with GPU tier, it is almost certainly a performance issue.
Version segmentation is essential for measuring the impact of design changes. If you reduce the difficulty of level 5 in version 1.2, compare the drop-off rate between version 1.1 players and version 1.2 players. If the drop-off decreased, the change worked. If it stayed the same, the difficulty was not the problem — look at other factors like clarity of objectives, visual guidance, or bug reports from that level.
Cross-reference progression drop-offs with crash reports. Pull crash data from Bugnet or your crash reporting tool for the same time period and the same game version. If crash frequency spikes at level 5, the drop-off may not be a design problem at all — players are crashing, not quitting. This distinction is critical because the fix for a crash is an engineering task, while the fix for a difficulty spike is a design task.
Connecting Data to Design Decisions
Telemetry data is only valuable if it changes decisions. Establish a process where the design team reviews the progression funnel weekly, identifies the worst bottleneck, and proposes a change. The change goes into the next release, and the funnel is re-evaluated after enough players have played the new version to produce statistically significant data (typically 1,000-5,000 players per milestone).
Be disciplined about changing one thing at a time. If you reduce the difficulty of level 5, extend the checkpoint in level 7, and add a new tutorial hint in level 3 all in the same patch, you cannot attribute any funnel improvement to a specific change. Prioritize the worst bottleneck, ship a targeted fix, measure the result, and then move to the next bottleneck.
“Telemetry does not tell you what to design. It tells you where your current design is failing. The difference matters: data identifies problems, but solutions still require creative judgment and playtesting.”
Privacy and Data Minimization
Progression telemetry can be implemented with minimal privacy impact. Use anonymous player IDs (a random UUID generated on first launch, not linked to any account or personal information). Do not log IP addresses, device serial numbers, or any personally identifiable information. Batch events and send them periodically rather than in real time. Provide a clear opt-out in your settings menu, and respect it immediately by stopping all event collection.
Store telemetry data with a retention policy. You do not need player-level event data from two years ago — aggregate it into daily or weekly cohort summaries and delete the raw events. This reduces your storage costs, simplifies compliance with privacy regulations, and limits the damage if your telemetry database is ever compromised. The funnel only needs aggregate percentages per milestone per version, not individual player journeys.
Be transparent with your players. A brief sentence in your privacy policy or in-game disclosure (“We collect anonymous gameplay progression data to improve game balance”) builds trust and preempts community backlash. Players generally accept anonymous telemetry that improves the game; they do not accept opaque data collection that benefits only the marketing team.
Related Issues
For tracking frame-time performance alongside progression data, see how to track frame-time percentiles in production. For connecting crash data to player sessions, read how to track player session crashes across versions.
The most dangerous bottleneck is the one you do not know about. Telemetry turns invisible player frustration into visible data points you can act on.