top of page

Quantifying Uphill Effort

Updated: Oct 22

In our data-driven age, we have no shortage of metrics for running — but hills remain a thorny wrinkle. If you run at 6:00/km on 6% uphill, how do you know if that’s getting harder over time? Or whether your 2-minute hill reps are consistent?

Heart rate and RPE (Rate of Perceived Exertion) are still valuable in real time — they can shift with fatigue, hydration, sleep, heat, etc. — but for post-session analysis, we want something more standardized.

Bringing in Normalized Metrics

A promising approach comes from cycling: Normalized Power (NP). The idea: instead of average power, weight harder efforts more, giving a number that better reflects physiological stress. The running analog is Normalized Graded Pace (NGP).

NGP adjusts your raw pace data by accounting for gradient, so that steeper uphill portions count for more weight. Thus, a hilly run “feels like” a flat run at NGP. Once you have NGP, you can generate a running Training Stress Score (rTSS) by comparing NGP to your Functional Threshold Pace (FTP). If you run harder than FTP (on average) for longer, you accrue more stress. TrainingPeaks+2TrainingPeaks+2

For example, suppose you run a 2 km uphill section at 8:52/km on ~20 % grade. The flat equivalent (via NGP) might be ~3:44/km — meaning the metabolic effect is as though you ran nearly 5× the distance on flat ground.

From NGP → rTSS, you can fold hilly runs into your performance modelling (PMC / fitness-fatigue curves). But note: these metrics depend on accurate threshold paces, good GPS/elevation data, and stable modelling assumptions.

Blending Metrics: HR, RPE, NGP, and Context

These tools are powerful, but not fool proof. Because running (especially uphill) involves biomechanical, neuromuscular, and terrain factors, it’s wise to use multiple lenses:

  • Heart rate drift / decoupling can show you that physiological cost is rising even if pace is constant.

  • RPE / sRPE (subjective) gives you how your body felt — useful to correct for anomalies (bad sleep, nutrition, soreness).

  • Terrain, surfaces, footwear, wind, and fatigue must always be considered qualitatively.

Together, HR + RPE + NGP/rTSS + consistent thresholds provide a clearer picture.


Practical Tips & Recommendations

  1. Calibrate Your FTP / Threshold Pace Your performance modelling is only as good as your threshold. Use a reliable 45–60 min test (or multiple tests), and update it as you improve.

  2. Be Careful with GPS & Elevation Errors Elevation data tends to be noisy. On steep or technical terrain, errors magnify. Use smoothed data, known control points, or barometric altimeters when possible.

  3. Don’t Oversimplify Very Steep / Technical Terrain On extreme gradients, the assumptions of constant “running economy” weaken — you may break into power-walking, scrambling, or change biomechanics. Treat those segments with caution in modelling.

  4. Record RPE / sRPE Always Even if you’re using NGP/rTSS, log a rating of perceived exertion. If a session “feels hard” relative to what rTSS says, that’s signal, not noise.

  5. Use Long-Term Trends, Not Single Workout Comparisons The strength of NGP/rTSS lies in monitoring fitness vs fatigue over weeks/months — not expecting perfect match between two uphill runs.

  6. Balance Load & Recovery Carefully Even modest increases in pace or volume can disproportionately stress the body, especially on hills. Monitor signs of fatigue, and avoid too steep ramp-ups.

  7. Consider Strength & Technique Work Improving your climbing economy (through hill repeats, strength training, plyometrics) may reduce the pace “penalty” of gradient over time.

 
 
 

2 Comments


High Peak Running
High Peak Running
Dec 06, 2020

Hi Andrew, yes NGP is a similar calculation to GAP from Garmin and Strava. Normalised Graded Pace is the metric we use through training peaks to analyse and quantify efforts from our athletes hill running and runs with varied elevation.

Like

Andrew Seabright
Andrew Seabright
Dec 06, 2020

Is NGP the same as GAP that Garmin devices calculate?

Like
bottom of page