Published: Mon Sep 28 2026

Endurance Training Load

Following on from my Recovery Tracking post, something I've always been frustrated by is measuring endurance training load. Basically, a workout has a recovery cost and it'd be nice to quantify the cost of the workout in a way that roughly maps to reality.

There are many attempts to do this and pretty much every run tracking platform (Strava, Garmin, Runalayze, etc) will give you a number that supposedly approximates your training load. The most basic one is TRIMP (Training Impulse), which, roughly, is average heart rate (HR) multiplied by time. There are many variations that add exponential multipliers so that the cost increases super-linearly with time.

These approaches all give a basic approximation of a useful output but suffer some clear problems. Mainly, they don't fully capture intensity. The inputs are generally average HR and time, and in terms of those inputs a 60 minute easy run might look very similar to a 30 minute threshold effort with 15 minute warm up and cooldown, but those two runs have very different physiological demands, with the former being relatively easy and the latter being very hard.

The second problem is that HR is a noisy measurement. HR can vary surprisingly much day to day for no obvious reason and it also tends to lag on intensity. For example a well conditioned athlete could complete an intense interval workout without ever seeing zone 5 because they didn't run for long enough at a time for the HR to come up sufficiently and their periods were long enough to bring it all the way back down. (Similarly if a well conditioned endurance athlete does a heavy weights workout they'll probably barely make it into Z1, but they're clearly working very hard and incurring a recovery debt). But those kinds of interval workouts are extremely hard, so the HR isn't capturing the recovery cost at all. Then there is also the problem of accurately measuring HR in the first place. Every entry level sports watch has an optical HR sensor, but those don't produce accurate measurements for everyone. Even chest straps aren't perfect.

There are two obvious alternatives to HR: Pace and power. Running power is increasingly a part of sports watches but I'm sceptical that a watch can really measure it accurately as it's largely affected by wind and watches can't measure this (although perhaps a Stryd is accurate enough). Pace, or at least, grade adjusted pace, is a much better fit. The only obviously lacking aspect of pace is that it doesn't include wind conditions. There is also the question of whether grade adjustment formulas really reflect reality. We'll have to live with those two things.


So I tried instead to use grade adjusted pace instead of HR, and use an exponential weighting on the pace. I analyse each run (via the .fit file) to build a 30s rolling pace average (grade adjusted) at 1s intervals over the duration of the run. The 30s rolling average hopefully smooths out GPS inconsistencies.

Then I look at the last N weeks of training and estimate 5 pace zones from it. This only works if you do sufficiently varied runs - if every run is a 10km z3 run then you won't be able to estimate pace zones with much success and you'd have to determine some other way of establishing zones. For me, my runs are very varied so it's fine. The pace zones this method comes up with do look fairly accurate to my perceived ability so I'm happy with its output. Using this I put each 1s reading into a zone bucket and sum them up for the run. Then I multiply each bucket by a zone weighting, which currently I have as (1.0, 1.3, 2.0, 4.0, 8.0) for the five zones. The total of that is my total training load for the run.

How well does it work? It's not bad. In fact, the numbers it comes up with track my overall perceived fatigue better than any estimates I've had from Garmin, Strava or Runalyze. But it's still not as good as I want.

I'm in the process of coming back from a 3 month long viral/post-viral condition and I'm just about starting to hit a normal training load again. That means I'm starting to do harder sessions which I'm not adapted to and I'm getting fatigue as a result. It's a good time to be looking very carefully at training load so as not to increase it too quickly.

Training load

In the last few weeks, there are two runs that have caused a lot of fatigue:

  • 15th September: An interval session which had me spending around 7 minutes in Z4 and 10 minutes in Z5 (which is the first post viral session that I've really ventured into Z5 properly).
  • 27th September: A 90 minute long run at a z2 effort (which is a progression from 70 minutes Z1 -> 90 minutes Z1 -> 90 minutes Z2).

On the chart, the 15th stands out as being a big training load, which is great. The 27th shows as lower than the day before (a z4 Parkrun), which is interesting and not accurate to how I felt. Other big jumps on the chart are the 5th, which was a high effort Parkrun so its value is justified, and the 3rd and 23rd, both of which were 60 minute mixed pace run with some fast intervals, which I think are probably overvalued.

The thing the 15th and 27th sessions have in common is they were both quite a big step up over anything else I've done recently. The 90 minute Z2 session also came the day after a solid Z4 Parkrun, so I was accumulating fatigue from that as well.

The rolling pace zones of the last N weeks captures the 15th's Z5 interval pace demands reasonably well because it knows Z5 is unusual by virtue of the way Z5 is calculated and it weights Z5 heavily. But it doesn't really capture that the 90 minute Z2 run was a significant jump because Z2 is weighted low and doing 90 minutes of Z2 is only like doing 2x 45 minutes of Z2, which I do a few times a week anyway.


This isn't a problem I come across in my daily training because I don't live near any huge hills, but using grade adjusted pace makes downhill running easier, which is correct but also incorrect. Downhill running has heavy eccentric demands on your muscles, which implies longer recovery time, especially if you're not trained for it. Bombing fast down a short hill on a 5k? Great, your pace will come up nicely and we need to not consider that a massive spike in anaerobic effort. Racing a downhill half marathon? Your time will be fantastic but your quads are going to need a lot more recovery than they would for the equivalent effort on a flat course.

A good model would also consider this, but it's not something I have personal motivation to solve at the moment.


So, thus far, I'm doing better than Garmin at estimating my training load but I am failing to produce a more interesting or useful number than just logging how tired I am. I need a more intelligent way of capturing novel stimulus, and perhaps training load should accumulate quicker the higher the acute load is to simulate the accumulating fatigue of back to back high effort sessions.

To be continued…