Quick answer: Emit a start/complete event per tutorial step with its duration. Build a funnel. The step with the largest absolute drop is the one to fix first. Validate the fix with A/B tests. A tutorial that loses 40% of players before the core loop has nothing to do with difficulty — it’s a UX problem hiding as a retention problem.
Your store page wishlist-to-install ratio is solid. Your D1 retention is a disaster. Somewhere between “player launched the game” and “player came back tomorrow,” 70% of them gave up. Most of that loss happens in the tutorial. This post is the playbook for finding where, why, and how to shrink the leak.
Define the Funnel
Your tutorial is a sequence of steps the player must complete to enter the core gameplay loop. List them. Each one is a node in the funnel:
- Game launched.
- Opening cinematic finished.
- Movement tutorial completed.
- Camera tutorial completed.
- Combat tutorial completed.
- Inventory tutorial completed.
- First real quest started.
- First real quest completed (tutorial ends).
Every step emits a start event and a complete event with the duration. A player who quits between step 4 and step 5 is a drop at step 5.
// Every tutorial step is instrumented:
analytics.Track("tutorial_step_start", new {
step_id = "movement",
step_index = 2,
session_id = currentSessionId,
});
// ... player does the thing ...
analytics.Track("tutorial_step_complete", new {
step_id = "movement",
step_index = 2,
duration_seconds = elapsed,
attempts = tryCount,
});
Build the Funnel Chart
For each cohort of new players, count how many reached each step. Divide by the total who started step 1. You get a stepped line chart that only goes down. The shape tells you where the leaks are.
Two healthy shapes exist: a gentle slope (small losses everywhere, good) and a sharp drop at a specific known-hard step (expected). Two unhealthy shapes: a cliff at a step you thought was easy (your signal to fix), and a slow bleed through many steps (the tutorial is too long).
Prioritize by Absolute Loss
A common mistake is to fix the step with the highest drop-off percentage. Don’t. A 50% drop on a step that only 500 players reach is a 250-player loss. A 10% drop on a step that 8,000 players reach is an 800-player loss. Fix the second one first.
Sort steps by absolute players lost: reach_at_step * drop_rate. The top of that list is your priority queue. The bottom can wait.
Confusion vs. Disinterest
For each high-loss step, compare duration between players who completed and players who quit. Three patterns:
- Quitters spent much longer: confusion. They tried and failed. Clarify the instruction, reduce the required precision, or add a skip option.
- Quitters spent similar time: disinterest. They didn’t want to finish. Cut the step, make it shorter, or let players opt out.
- Quitters spent much less time: they skipped or the game crashed. Check crash rates at that step before changing design.
Look at Attempts and Sub-Steps
“Combat tutorial” as a single step hides information. Split it into: draw weapon, first successful block, first successful attack, kill the practice dummy. Each is its own funnel node. You’ll often find that 80% of the combat-tutorial drop happens on one specific sub-step — usually an input that isn’t clearly telegraphed (the block button is the same as interact but the UI shows interact).
Track attempts per step. A player who needs 7 attempts at “successful block” and eventually passes is a candidate for future frustration even if they completed. Flag steps where median attempts exceed 3 as investigation targets.
A/B Test the Fixes
You have a hypothesis about what will help. Don’t ship it blind. Route new players into two buckets by user hash: 50% get the old tutorial, 50% get the new one. Measure completion rates for both. Keep the new version only if it wins by a statistically meaningful margin over a sample large enough to matter.
For most indie games, 2,000 new players per bucket is enough to detect a 5% absolute improvement in completion rate. Fewer than that and the numbers are noisy. If your daily new-player count is 100, expect an A/B test to take 20 days. Plan accordingly.
Common Tutorial Fixes
- Controls hidden behind a specific input: show the control prompt immediately, not after a time delay.
- Too much reading: split long explainer boxes into multiple shorter ones. Players read less than you think.
- Failure has no recovery: if a player can fail a tutorial challenge, let them retry without restarting the whole step.
- Mandatory cinematics: make them skippable after the first playthrough. Returning players bounce hard on unskippable cutscenes.
- Frustrating precision: loosen the input window in tutorial-only contexts. The skill check can happen later.
Keep Measuring After Launch
Tutorial drop-off can change with every patch. A balance change to movement speed affects the movement tutorial’s completion rate. A UI restyle changes where buttons live. Keep the funnel on a dashboard everyone looks at weekly. Alert on significant regressions.
Also watch for cohort differences. Players from a TikTok campaign have different expectations than players from a Steam wishlist email. If one acquisition source drops off disproportionately at a specific step, that step is either poorly aligned with their expectations or the source is miscategorizing players.
“The tutorial isn’t the game’s first level. It’s the game’s first impression. Half your players never see anything else — make it count.”
Related Issues
For the analytics foundation this depends on, see how to instrument games for useful analytics. For the retention loop downstream of the tutorial, see how to analyze player drop-off with session data.
Every unexplained cliff in the tutorial funnel is a bug hiding as UX. Find it, name it, fix it.