Designing a ranking system sounds simple until you actually sit down to build one: reward speed, but not so much that accuracy stops mattering; let people climb, but not so easily that rank means nothing; punish quitting, but not so harshly that a bad match ruins your week. TypeClash's Solo Ranked mode went through a few iterations before landing on the version live today. Here's the reasoning, not just the formula.
The obvious version - just rank everyone by their best WPM - fails immediately. It rewards a small number of lucky fast runs over consistent skill, gives no reason to care about accuracy, and gives new players nothing to chase except a number that experienced typists already own. It's also gameable: spam attempts until one outlier run lands.
Chess-style ELO works when every match has a clear win/loss against another rated player. Typing matches in TypeClash are largely solo - you're not head-to-head against an opponent's live input, you're being scored against a target. So the more useful comparison isn't "who's better than whom," it's "how does your performance compare to what's expected at your current level."
Every rank tier has an expected WPM band. Your points change based on how far you beat (or miss) that expectation:
points change = (your WPM − expected WPM for your tier) × 2 × accuracy modifier
The accuracy modifier is where most of the interesting behavior comes from:
| Accuracy | Modifier |
|---|---|
| ≥95% | ×1.0 |
| ≥90% | ×0.8 |
| ≥85% | ×0.6 |
| ≥80% | ×0.4 |
| <80% | ×−0.5 |
That last row is the important one. Below 80% accuracy, the modifier goes negative - meaning even if your raw WPM beat the tier's expectation, you still lose points. This was a deliberate call: without it, a "fast and sloppy" playstyle beats "fast and clean" on pure point efficiency, which is exactly backwards from what a typing platform should reward.
A few flat rules sit on top of the formula:
The floors matter more than they look. Without a minimum gain, a player performing right at their tier's expected WPM earns close to nothing per match, which feels bad even when it's "correct" by the formula. Without a real abandon penalty, quitting a match you're about to lose is strictly better than finishing it - which quietly rots the whole point of ranked play.
Streak bonuses (+5 at 3 wins, +10 at 5, +20 at 10) exist on top of the base formula, not instead of it. They reward consistency without becoming the dominant scoring mechanism - the core formula still does the actual work of separating skill levels; streaks just make a good session feel a little better than the raw math alone would.
Tiers scale from Rookie (5–15 WPM) up through Mythical (151+ WPM) across eleven bands, each with its own expected-WPM window. The scaling isn't linear - the WPM range widens at the top (Godlike, Transcendent, and Mythical span much wider bands than the early tiers) because the population of players thins out fast at high speeds, and a tight band up there would mean too few matches landing in-range to feel meaningful.
Full tier table's in the docs repo if you want the exact numbers.
If you want to see how it actually feels to climb, TypeClash is live at typeclash.versatiletechnology.in.