

How Handicaps Are Calculated
A transparent, end-to-end breakdown of the methodology behind every handicap number. Nothing is hidden.
Every player starts at a base rating of 1000. Each completed match adjusts this rating using five weighted factors (below). The raw rating is then shrunk toward 1000 based on how many matches the player has — a 10-match debutant is not trusted like a 100-match veteran. The final rating maps to a handicap via a fixed lookup table (1300+ → 0, down to 800 → 10, capped at 15).
Each factor produces a score from −1 to +1. The weighted average (weights normalised to sum to 1.0) is scaled to a rating deviation from 1000.
| Factor | What it measures |
|---|---|
| Win Percentage | How often a player wins. The strongest single signal of ability. |
| Average Winning Margin | Dominant winners (21-10) score higher than squeakers (21-19). |
| Average Losing Margin | Players who lose close are rated higher than those routed heavily. |
| Recent Form | The last 20 games — rewards players in current good nick. |
| Opponent Strength | Beating strong opponents counts more; losing to weak ones hurts more. |
Loading league weights…
Ratings are Bayesian-shrunk toward 1000 until a player reaches the confidence threshold (the point of full trust). Below that, a player's rating is pulled back toward average — so a hot start doesn't produce an extreme handicap. A separate confidence floor protects genuinely strong Division 1 players (65%+ win rate over enough matches) and genuinely weak players (35% or below) from being over-shrunk toward average.
A player's status depends on how many matches they've played. The qualified threshold is the league's Minimum Matches setting; below it a player is provisional, and below a fixed floor of 5 they're inactive (no handicap at all).
Lower divisions are weaker on average, so players there carry a rating offset — weighted by where each match was actually played, so a career top-division bowler who drops down a division isn't unfairly re-penalised. That lower rating flows through into the handicap, giving lower-division players more shots and a fairer chance when they meet higher-division opposition. Three offsets are applied:
- Division offset — a rating penalty per division below 1st (configurable per league).
- Team-letter offset — B, C and D teams within a club get an additional penalty, stacking with the division offset.
- League offset — shifts a whole league uniformly to normalise different overall skill levels.
A player's all-time rating is blended with a last-two-seasons rating at up to 40% weight (scaling with how many recent matches they have). This keeps current form relevant without throwing away career history — a player who was great three years ago but struggles now drifts toward their recent level.
When two teams play, the base handicap total (sum of selected players) is topped up by structural bonuses so the playing field is genuinely level:
- Table position bonus — when two teams from the same division meet, the side in the bottom half of the live league table gets a per-man bonus against a top-half side. It's prioritised over the B-team bonus (which switches off when it's in use), because rewarding actual league position is fairer than rewarding team letters — a struggling A team deserves the same help as a struggling B team.
- Adaptive B-team bonus — scales linearly with the B-team's average handicap: a weak B-team (avg ≥6) gets the full per-man bonus; a B-team full of low-handicap ringers (avg ≤3) gets none.
- Division bonus — when teams from different divisions meet, the lower division gets a per-man top-up per division of gap.
- Cross-division ringer top-up — when same-division teams meet but one has fielded players from a higher division, the opponent gets a per-ringer top-up scaled by how much stronger each ringer is than the opposition.
- C / D team bonus — applies when no division bonus already covers the team.
Only the final handicap difference between the two team totals is rounded to the nearest 5. Team totals are kept as whole numbers. Rounding each team independently used to introduce step noise — two near-equal teams could land 5 points apart purely from which side of a 5-boundary each total fell. Rounding just the difference keeps a clean 5-step handicap to play for without that artificial gap.
The system only counts real, played games. Walkovers are excluded from all stats. Duplicate player records (same person under different website codes) are detected and merged during syncing. Every sync run is logged with a before/after diff of every changed player, so any shift is traceable to its cause.

