Quick answer: Record session start and session end as separate events, store them per player, and analyze the distribution rather than the average. Bimodal peaks reveal player rituals, short sessions correlate with crashes and confusion, and platform differences expose UX mismatches. The metric is not “how long” but “what shape.”

Session length sounds like a vanity metric — the kind of number you show in a pitch deck without really knowing what it means. In practice it is one of the most diagnostic signals an indie game has, because it correlates directly with bugs, with churn, and with moments where the game is working or failing to keep players engaged. You do not need a data team to read it. You need a histogram and a habit of looking at the distribution instead of the average.

Record Sessions Honestly

Start the session on the first playable frame, not on app launch. A 30-second splash screen artificially inflates session length for crashes on boot, which hides them. End the session on clean exit. When the game crashes, estimate end time from the last heartbeat the client sent, because the exit event never fires.

// Heartbeat every 30s, server estimates end if none received for 90s
func StartSession(playerID string) Session {
    s := Session{
        ID:        uuid.New(),
        PlayerID:  playerID,
        StartedAt: time.Now(),
        Platform:  DetectPlatform(),
        Build:     buildID,
    }
    Insert(s)
    return s
}

func EndSession(s Session, reason string) {
    s.EndedAt = time.Now()
    s.EndReason = reason // "exit", "crash", "timeout", "idle"
    Update(s)
}

Track an end reason. “Crash” sessions should not be averaged with “exit” sessions, because a crash at 90 seconds tells you something very different from a clean 90-second session.

Plot the Distribution

Average session length is almost useless. A game with a half of sessions at 30 seconds (bootup, check-in) and half at 45 minutes (real play) has the same average as a game with every session at 23 minutes, but they are very different products. Plot a histogram with log-scale bins: 10s, 30s, 1min, 2min, 5min, 15min, 45min, 2h, 8h. The shape of this histogram is the shape of your player experience.

A single peak around your target play length means the game is pulling players into a consistent groove. Two peaks (bimodal) usually means there are two player behaviors: quick check-ins and deep sessions. In games with daily tasks, seasonal resets, or streak mechanics, bimodal is common and healthy. Watch the ratio of short-peak to long-peak over time; if it shifts toward short, your hardcore players are cooling off.

Short Sessions Are Where the Bugs Hide

Sessions under two minutes are suspicious. For a single-player adventure, a 90-second session means the player either bounced (UX problem) or crashed (engineering problem). Join your sessions table with your crashes table and see how many of those sessions ended with an error event. The results often expose a bug you did not know existed.

SELECT build, platform,
       COUNT(*) AS short_sessions,
       SUM(CASE WHEN crashes.session_id IS NOT NULL
               THEN 1 ELSE 0 END) AS crashed
FROM sessions
LEFT JOIN crashes ON crashes.session_id = sessions.id
WHERE ended_at - started_at < INTERVAL 2 MINUTE
GROUP BY build, platform
ORDER BY short_sessions DESC;

If a particular build shows a spike in short sessions relative to its install count, that build has a regression. If a platform shows a spike relative to others, something broke on that platform specifically. Short sessions are an early warning system that catches issues before crash reports accumulate.

Platform Differences Are Real

Mobile session length is almost always shorter than desktop session length, even for the same game. Players pick up a phone for a quick moment; they sit down at a PC with intent. Compare platforms against their own baselines, not against each other. A 6-minute mobile session is healthy. A 6-minute desktop session is suspicious.

Console sits in between and is more volatile because of controller-only dashboards and the friction of starting a game. Pay attention when console session length drops suddenly; it often indicates a UI or performance regression that feels normal on keyboard/mouse testing.

Use Session Length as a Churn Signal

Before a player churns, their sessions usually get shorter. The game stops grabbing them; they sign in, play for ten minutes, log off. Track per-player average over a rolling window and watch for individuals whose sessions drop by more than 50% over two weeks. These are the players you can still save with a re-engagement push, a balance change, or a personal outreach on Discord.

Aggregate this into a cohort metric. For last week’s active players, what percentage saw shortening sessions? That number, tracked over months, is a leading indicator for retention. If it climbs, retention will drop 4–6 weeks later, and you have time to act.

Do Not Optimize the Metric

The last trap is Goodhart’s Law: once session length becomes a target, people find ways to inflate it that do not improve the game. Adding forced cutscenes, slow menus, or interstitial loading screens will push session time up without making anyone happier. The metric is a diagnostic, not a goal. Use it to find problems, not to declare victory.

“We saw session length climb 20% in a patch and were about to celebrate. Then we noticed the climb was driven by one scene where players were stuck behind a collision bug for an average of twelve minutes. Our great number was our worst bug report.”

Related Issues

For the metrics that pair with session length, see bug reporting metrics every game studio should track. To fix the bugs that surface in short-session cohorts, read how to debug render pipeline stalls.

Pull a histogram of your session lengths this week. The first suspicious peak you notice will lead you to a bug or a drop-off you did not know existed.