← Back to Blog
Quantitative MarketingGamificationRetentionFinancial Engineering

Leaderboards That Do Not Drive Off 95% of Your Players

On a global leaderboard of 1,000 players with 10 prizes, 5% have a realistic shot at winning. Split the same field into brackets of 10 and it becomes 48.7%, with no change to the prize budget. Simulated across 4,000 seasons.

SPSantosh Paudel· July 26, 2026· 8 min read
Table of contents

Tournament theory has known since the 1980s that effort collapses when a competitor's probability of winning approaches zero. A player who cannot win does not try harder. They stop playing.

Most leaderboards are built as a single global ranking, which guarantees that outcome for almost everyone in the field.

The short answer

On a global leaderboard of 1,000 players where the top 10 win, only 5% of players have at least a 5% chance of winning. The median player's win probability is 0.05%. Split the same 1,000 players into 100 brackets of 10 with one winner each, keeping the prize count identical, and 48.7% of players clear that same 5% threshold. The median player's chance rises from 0.05% to 4.73%.

Why a global leaderboard is a churn mechanic

A leaderboard is a contest, and a contest allocates effort according to the marginal return on that effort. If you are ranked 640th and the prize goes to the top 10, no plausible amount of additional effort changes your outcome. The rational response is to disengage, and the leaderboard has spent every day since launch reminding you of that.

The design is a daily, personalised notification of futility delivered to the majority of your users. It is difficult to think of another product surface that would survive that description.

The simulation

Give 1,000 players a latent skill drawn from a standard normal. Each season, observed score is skill plus noise, so outcomes are neither pure skill nor pure luck. Run 4,000 seasons under two structures with identical prize counts.

import numpy as np

def leaderboard_sim(n_players=1000, noise=1.0, trials=4000,
                    global_winners=10, bracket_size=10, seed=42):
    rng = np.random.default_rng(seed)
    skill = np.sort(rng.normal(0, 1, n_players))

    wins_global = np.zeros(n_players)
    wins_bracket = np.zeros(n_players)
    n_brackets = n_players // bracket_size

    for _ in range(trials):
        score = skill + rng.normal(0, noise, n_players)
        top = np.argpartition(-score, global_winners)[:global_winners]
        wins_global[top] += 1

        score = skill + rng.normal(0, noise, n_players)
        order = rng.permutation(n_players)
        for b in range(n_brackets):
            idx = order[b * bracket_size:(b + 1) * bracket_size]
            wins_bracket[idx[np.argmax(score[idx])]] += 1

    return wins_global / trials, wins_bracket / trials


p_global, p_bracket = leaderboard_sim()

print(f"{'decile':>8} {'global':>10} {'bracketed':>12}")
for i in range(10):
    lo, hi = i * 100, (i + 1) * 100
    print(f"{i+1:>8} {p_global[lo:hi].mean():>10.4f} {p_bracket[lo:hi].mean():>12.4f}")

for label, p in (("global", p_global), ("bracketed", p_bracket)):
    print(f"{label:>10}: {(p >= 0.05).sum():>4}/1000 players above 5%, "
          f"median {np.median(p):.4f}")

Output:

  decile     global    bracketed
       1     0.0000       0.0019
       2     0.0000       0.0069
       3     0.0000       0.0147
       4     0.0001       0.0253
       5     0.0002       0.0389
       6     0.0006       0.0598
       7     0.0015       0.0884
       8     0.0039       0.1350
       9     0.0118       0.2140
      10     0.0817       0.4151
    global:   50/1000 players above 5%, median 0.0005
 bracketed:  487/1000 players above 5%, median 0.0473

Reading the deciles

On the global board, deciles 1 through 5 have win probabilities that round to zero. Half the field has no measurable chance across 4,000 simulated seasons. Decile 7, which is well above average, sits at 0.15%.

Bracketed, the bottom decile has a 0.19% chance, which is small but no longer zero. The median player sits at 4.73%. Decile 7 is at 8.84%, roughly a one-in-eleven shot at winning something, which is a live proposition rather than a rounding error.

The top decile drops from 8.17% to 41.51%, which looks like the strong players gained. They did, in the sense that a strong player now reliably wins their bracket. What actually happened is that the same number of prizes got distributed across a far wider set of plausible winners.

Prize budget is unchanged. Ten winners globally, 100 bracket winners, so if you want identical spend the bracket prizes are a tenth the size. Whether that trade is right depends on whether you are trying to create ten highly motivated players or five hundred moderately motivated ones.

Brackets are one option among several

Random bracketing is the simplest fix and it is what the simulation tests. Others work on the same principle of shortening the distance between a player and a plausible win.

DesignHow it shortens the distanceMain cost
Random bracketsField size drops from 1,000 to 10Winners are less impressive
Skill-matched bracketsOpponents are near your levelNeeds a rating system, and sandbagging
Relative-improvement rankingCompete against your own pastWeak players can win by starting low
Percentile tiersRewards for top 10% of each tierTier boundaries become gameable
Time-boxed seasonsEveryone resets to zeroLong-run progress feels erased

The one design that reliably fails is the permanent, global, all-time leaderboard. It maximises the number of players who can see, precisely, that they will never win, and it never resets.

What to measure if you already have one

You do not need a simulation to check your own board. Take last season's results and compute, per player, the probability they would have finished in a winning position given their observed score distribution across previous seasons. If more than half your active players are under 1%, the leaderboard is functioning as a disengagement surface for the majority of the people who see it.

Then check the correlation between leaderboard rank and subsequent churn among players outside the prize positions. In most implementations it is the wrong sign, and nobody has looked.

The general principle

Every competitive mechanic allocates motivation according to perceived win probability. That probability is computable before you ship, from nothing more than field size, prize count, and how much of your outcome is skill versus variance. A design that leaves the median player at 0.05% is not a motivational tool. It is a very efficient way of telling most of your users that this part of the product is not for them.

Loyalty tiers have a similar structural flaw, and it hides better. A tier threshold looks like a target the customer is chasing, and the incremental spend it generates is real and measurable. What almost nobody measures is what the perk costs on the other side of the line.

Free resource

Get the Promo & Bonus Economics Workbook

Every formula for pricing a promo before you launch it: expected value, wagering cost, breakage, breakeven conversion. Worked examples with real executed numbers.

No spam. Unsubscribe anytime.

Browse all free guides →

Run this on your own numbers

Promo Expected-Value Calculator — free, no signup, runs in your browser.

Open the calculator →

Want to implement this with guidance?

Santosh helps founders turn insights like this into real systems.

Promo Economics Audit

External Resources

Further Reading & Tools

Related Posts

01
8 min
Behavioral EconomicsMarketing Psychology
1mo agoQuantitative Marketing

Loss Aversion Is a Number: Pricing a Streak Freeze With Prospect Theory

Prospect theory puts the loss aversion coefficient at about 2.25. That turns a streak into a computable liability in the user mind, and it says flat-priced streak freezes leave most of their value uncollected.

Read article
02
9 min
Risk ManagementPromo Economics
1mo agoQuantitative Marketing

Value at Risk and Kill Switches for Live Promotions

A spend cap set at expected payout shuts down 46% of perfectly healthy campaigns. The right multiple is 1.52x. Sizing exposure limits and automated kill switches against a real payout distribution.

Read article
03
8 min
FloatBreakage
1mo agoQuantitative Marketing

Float, Breakage and the Stored-Value Balance Sheet

Starbucks held $2.12 billion in customer-loaded accounts as of Q1 FY2026 and recognised $207.6 million of breakage revenue in 2024. Prepaid balances are interest-free working capital. Here is how to model your own.

Read article