Guides · ForceDecks · 8 min read
Building an athlete readiness score from CMJ data: z-scores, smallest worthwhile change and traffic lights
A step-by-step method for turning weekly countermovement jump data into a defensible readiness score — baselines, z-scores, smallest worthwhile change, and traffic-light thresholds coaches can act on.
By Vikas Kashyap · Updated 25 September 2026
A readiness score is a promise to a coach: one number, every morning, that says whether the athlete is where they normally are. To keep that promise it has to be built from the athlete's own history, it has to separate real change from noise, and the coach has to be able to ask 'why is it red?' and get an answer. Here is a method that does those three things.
Step 1 — choose few metrics, and choose them for sensitivity
Jump height is the metric coaches know and the one least sensitive to fatigue, because athletes protect it by changing strategy. The metrics that move first are the strategy ones. A defensible set for a CMJ-based score:
- RSI-modified — the efficiency of the jump; falls under fatigue even when height holds.
- Eccentric (braking) duration — lengthens with neuromuscular fatigue.
- Jump height (impulse-momentum) — included because a coach will ask for it, weighted lower.
- Relative peak propulsive force — a strength-side marker.
Four is enough. More metrics do not make the score more accurate; they make it harder to explain.
Step 2 — build each athlete's baseline
For each athlete and each metric, take the last 6–10 sessions where the athlete was not flagged, injured or returning from a break, and compute the mean and standard deviation. This is the baseline. Update it on a rolling basis so it tracks the athlete's real level through the season rather than a pre-season snapshot. Until an athlete has at least five clean sessions, do not score them; show 'baseline building' instead.
Step 3 — express today as a z-score
z = (today − baseline mean) ÷ baseline SD, per metric. Flip the sign for metrics where higher is worse (eccentric duration) so that negative always means 'worse than usual'. A z-score of −1 means today is one standard deviation below the athlete's normal. That is the language the whole score is built in.
Step 4 — decide what counts as real
Two guards stop the score reacting to noise. First, the smallest worthwhile change: a change smaller than the SWC (a common estimate is 0.2 × the between-athlete SD for the metric, or 1.5 × the metric's typical error if you have measured it) is treated as zero. Second, require agreement: one metric at −1.5 with the other three at zero is more likely a bad trial than fatigue.
Step 5 — combine and colour
Average the four z-scores (weight RSI-mod and eccentric duration at 1.5 if you want the score to lean toward the sensitive metrics). Then apply one rule the coach can repeat back to you:
| Colour | Rule | What the coach does |
|---|---|---|
| Green | Composite z above −0.5, and no single metric below −1.5 | Nothing. Train as planned. |
| Amber | Composite between −0.5 and −1.0, or any single metric between −1.5 and −2.0 | Ask the athlete. Consider volume, not intensity. |
| Red | Composite below −1.0, or any single metric below −2.0, or amber three sessions running | Conversation with the sports scientist or physio before the session. |
Step 6 — always show the why
The score is the headline. Underneath it, always show the four metrics with their z-scores and a one-line explanation: 'Red — RSI-mod −2.1 and eccentric duration −1.6 versus 8-session baseline; jump height stable.' A score without a reason is a score coaches stop trusting within a month.
What this does not do
- It does not replace wellness, load or sleep data. It is one input. A CMJ-only score with a wellness overlay is a better readiness system than either alone.
- It does not diagnose. Red means 'different from usual', not 'injured'.
- It does not work for an athlete without a baseline. Resist the urge to score against squad averages; that is profiling, not readiness.
How Kinexis handles this
Kinexis runs exactly this method on every ForceDecks session: per-athlete rolling baselines, z-scores with a smallest-worthwhile-change guard, a composite with your thresholds and your colours, and the written reason underneath — and it can fold in NordBord, ForceFrame and PhotonSport data so the readiness view is the whole athlete, not one jump.