SIXGP
The engine

How scoring works

Six raw numbers in. One score and a six-axis profile out. Here is everything the engine does between those two points - no marketing, just the math.

Step 1 · The six stations

One station per axis. No substitutions.

Every combine day tests the same six things, in the same units. Two stations are scored relative to your bodyweight; the rest are absolute. Three reward higher numbers, three reward lower numbers - the engine handles the orientation for you.

strength
Trap Bar Deadlift
kg · ↑ higher better
÷ bodyweight
power
Countermovement Vertical Jump
cm · ↑ higher better
speed
20m Sprint
s · ↓ lower better
endurance
2km Row
s · ↓ lower better
agility
5-10-5 Pro Agility
s · ↓ lower better
grip
Grip Dynamometer
kg · ↑ higher better
÷ bodyweight

Step 2 · From a raw number to a percentile

A 2.9s sprint means nothing in isolation. The engine asks: where does this sit compared to other adults like you? Three sub-steps run for every station:

2.1

Find your cohort

Each athlete sits in a cohort defined by age band × sex. Bands are 18–29, 30–39, 40–49, 50–59, 60+. You are compared only to people in your cohort - not to a 22-year-old when you are 47.

2.2

Blend the norm

On day one we use a seeded population distribution. As real results land, we blend them in proportional to sample size. Once your cohort has logged 40+ results for a station, the seed is dropped and the curve is fully empirical.

2.3

Read off the percentile

Your raw value is located on that blended curve via linear interpolation between known points. A faster sprint or a heavier lift sits further up the distribution. Lower-better stations are inverted at the end - fast time becomes high percentile.

Step 3 · From six axes to one score

Once every station has a percentile, the engine combines them into a single composite. Current scoring config v1 weights all six axes equally - none is favoured over the others.

The math

overall_pct = Σ axis_pct[a] × weight[a]
score       = round(overall_pct × 10)

Output is an integer from 0 to 1000. The same percentile that drives your score is also what you see plotted on the radar.

A worked example

strength
78
power
91
speed
86
endurance
73
agility
88
grip
81

Overall percentile 82.83
× 10, rounded 828

Step 4 · Two stations are bodyweight-relative

Trap-bar deadlift and grip dynamometer are normalised by your bodyweight on the day. A 200 kg deadlift at 120 kg bodyweight (1.67×) and a 150 kg deadlift at 80 kg bodyweight (1.88×) land in different places on the curve. This is why bodyweight is captured at check-in.

Frozen per season

When a season opens, the active scoring config - weights, age-band definitions, blend threshold - is locked. Every score published in that season is stamped with that config version. We can recompute against improved norms, but your published number does not drift under you.

Every event makes the next one sharper

The blended curve is recomputed continuously as new results land. The platform's own results gradually replace the seed, so your percentile becomes more accurate the more athletes compete. The leaderboard database is the moat.

Try it yourself

Want to see your number?

The estimator runs the same engine with no persistence - your inputs are not saved.

Estimate your score →