10. April 2023

Progressor, Programming the Training Program

How to plan the training sessions for the weeks ahead? I hacked together a web app which allows me to do just that. The app helps me to plan the training progression according to established training principles, supporting modes such as running, hiking, cycling. Apps for the purpose exist commercially, but it was fun and instructional to roll out my own.

There are various apps/platforms around these days to track and analyze training history, such as Strava or Garmin Connect in order to mention a couple of the more well-known ones. I use both to record completed training sessions, and mostly use my own reporting tools to look at the collected data, incorporating some objective feedback.

On the aspect of planning training, there are apps such as TrainingPeaks (never tested, but seems very popular) or Azum (tested for a few weeks, left a positive impression). These apps provide an integrated platform for looking at training history and schedule future training, with visibility to athletes and their coaches, if not self-coached.

Azum, in fact, inspired me: it allows coaches and athletes “to program” training sessions using a text editor. This of course, appeals to a computer scientist dabbling in trail running as a hobby. But more on this later.

Let’s briefly provide the context. In 2021, I started taking a structured approach to training, following the training principles [1] of (1) overload, (2) specificity, (3) reversibility, and (4) individuality. When creating my training plan, it’s important to me to find the right amount of load, but avoiding strain on the body (see Load, Stress, Strain: Understanding the difference can make you fitter and faster! by Dr. Stephen Seiler).

In the above screenshot, you can see estimates of the upcoming training load, broken down by mode (running, hiking, cycling, and workout, which currently includes cardio and strength). The table shows a complete plan for (ISO) calendar weeks 14, 15, 16, and 17, and partial plans for weeks 18, 19, 20, 21, 22. For each week, the estimated aggregate load is shown. For example, for running, I want to know the elevation gain and distance. Clearly this table does not show very important aspects such as intensity. But being aware of such limitations, it’s way better than nothing. This table updates immediately when scheduling a new sessions, altering an existing session, or removing a session from the plan.

In order to train with purpose, I think of the specific system or aspect in the body to train when scheduling the training sessions. To get into this habit, the app allows me to tag each session with a purpose, whether it is “aerobic base” (keep the pace easy, heart rate down), “lactate threshold” (think: tempo runs), “strength”, or “durability” (think: long runs). This also keeps me honest: I can look at the plan of a week, and see whether I stuffed it with “favorites” rather than purposefully scheduling sessions which I enjoy less, even though I know that they are good for me.

As already mentioned, the idea that you could describe a session in text form is something that the Azum platform inspired me (although I never tried it myself, I just observed a coach using the platform). Killer feature? I can clone a past session with one click, and alter the parameters by editing the text, in order to progress the load (and save time on planning).

The text editing is also convenient: I can keep notes this way. For example, I will be able to select appropriate weights from the start in the next strength session. Sometimes, I have no clue: I find out that box step ups with 12 kg are “trivial”, whereas in other exercises I might find that bodyweight is totally sufficient (or too much, hence bending the knees when performing “windshield wipers”). A little notebook made from paper would also do, but that would force me to search for the pen (and the notebook).

The app also supports execution of workouts, at least to a certain extent. By clicking “Go”, everything else but the workout instructions disappear from the screen, making it compatible for display on a mobile phone rather than the wide external monitor that I have grown so fond of. This is particularly important for the more complex strength sessions, although I have used it for running interval sessions as well in the past. Importantly, the workout also links to videos and/or detailed instructions on how to perform certain exercises.

In conclusion, I am surprised that I was able to write this web app and use it for many months, adjusting it to my needs as I go. For the computer geeks among us, I learnt more about writing programs in Go, writing more modular web apps using Vue.js and Firebase as storage, as well as making effective use of Cloud Run, all in a way that satisfies the rather demanding user I am (in terms of usability!). For the running geeks among us, I learnt much about the benefit of having some way of programming the training sessions around other important things in life. I am happy that I found a way that works for me. I hope that this may also inspire you as a hobby athlete to find something out there that works for you.


1. Mazzeo, Robert. n.d. “Science of Exercise | Coursera.” Coursera. Accessed May 23, 2020. https://www.coursera.org/learn/science-exercise.

2. Seiler, Stephen. 2020. “Load, Stress, Strain: Understanding the Difference Can Make You Fitter and Faster!” Youtube. December 17, 2020. https://www.youtube.com/watch?v=BwL9ehjgCsQ.