Category: Data Analytics

What’s New in the Lactate Threshold App: Anaerobic Speed Reserve, Flexible Training Zones, Maximum Speed and More

The Lactate Threshold app started as a simple tool to turn a step test into a clean set of threshold values. Over the past few development cycles it has grown into something closer to a complete profiling and prescription workspace. This post walks through the most significant additions — anaerobic speed reserve, maximum speed determination, switchable 3- and 5-zone models — and the smaller refinements that came with them.

Anaerobic Speed Reserve (ASR)

The headline feature is the ability to determine an athlete’s anaerobic speed reserve — the velocity range that sits between the speed at maximal oxygen uptake (vVO2max, or maximal aerobic speed) and maximal sprinting speed (MSS). Everything an athlete does above their aerobic ceiling happens inside this band, which is exactly why it matters for events decided by surges, kicks and repeated high-intensity efforts.

The concept owes much to the work of Dr Gareth Sandford and colleagues, who showed that ASR and maximal sprint speed are “untapped tools” for differentiating the world’s best middle-distance runners and for understanding the complexity of athlete profiles that traditional aerobic categories miss. Two athletes with an identical vVO2max can have very different reserves above it — and therefore very different tolerances to supramaximal work — information that is invisible if you only look at threshold and VO2max.

Dr. Martin Buchheit’s research extends this directly into programming. Prescribing high-intensity work as a percentage of maximal aerobic speed alone ignores the differing mechanical ceilings between individuals, so the same session can impose very different relative stress on two athletes. Anchoring supramaximal efforts to a percentage of the ASR instead normalises that stress, and the evidence shows it reduces the inter-individual variability of physiological adaptation. The app now makes that calculation a single step rather than a spreadsheet exercise.

Maximum Speed Determination

Because ASR depends on having a reliable upper anchor, the app now supports maximum sprint speed (MSS) determination as a first-class input. Enter the result of a short maximal sprint and the app uses it as the top of the reserve, pairing it with the aerobic anchor derived from the step test. This closes the loop: from a single profiling session you get the threshold values, the aerobic speed, the sprint ceiling, and the reserve that connects them.

Flexible Training Zones: 3 or 5

Training-zone prescription is now configurable. You can choose between a 3-zone model — the classic below-LT1, between-thresholds, above-LT2 structure favoured in polarised approaches — and a more granular 5-zone model for coaches who want finer resolution across the intensity spectrum. Zones are generated directly from the athlete’s own threshold and speed anchors rather than from generic percentages, so the prescription reflects the individual profile the test produced.

Switching between the two models takes a tap, which makes it easy to align the output with whichever periodisation philosophy a given athlete or training block calls for.

Other Improvements

Alongside the marquee features, this round of work brought a number of refinements: cleaner presentation of the threshold detection results, a more consistent workflow from data entry through to zone output, and better handling of the speed-based inputs that the ASR and MSS features rely on. The aim throughout has been to keep the app fast to use rink-side or track-side while quietly adding depth for those who want it.

Development is ongoing, and I’ll keep posting updates here as new capabilities land. If you’re using the app and have feedback or feature requests, I’d be glad to hear them. If you use it for any purposes make sure you reference it:

A note for team-sport coaches: if you are specifically after a tool to plan HIIT sessions with change-of-direction (COD) prescriptions, I’d recommend Dr Martin Buchheit’s dedicated COD shuttle prescription app, available here. It is purpose-built for that use case and complements the profiling work the Lactate Threshold app is designed for. A screenshot is below.

Key References

  • Sandford GN, Allen SV, Kilding AE, Ross A, Laursen PB. Maximal Sprint Speed and the Anaerobic Speed Reserve Domain: The Untapped Tools that Differentiate the World’s Best Male 800 m Runners. Sports Medicine, 2019.
  • Sandford GN, Laursen PB, Buchheit M. Anaerobic Speed/Power Reserve and Sport Performance: Scientific Basis, Current Applications and Future Directions. Sports Medicine, 2021.
  • Buchheit M, Laursen PB. High-Intensity Interval Training, Solutions to the Programming Puzzle. Part II: Anaerobic Energy, Neuromuscular Load and Practical Applications. Sports Medicine, 2013.

Protecting Young Athletes: reflections from my talk at the 1st CYSM Conference in London

Last Friday I had the pleasure of speaking in London at the Centre for Youth Sports Medicine (CYSM) Annual Conference 2026, on a topic close to my heart: how we protect young athletes while helping them develop. My talk was titled “Protecting young athletes: performance progressions, realistic expectations and injury prevention,” and what follows is a short summary of what I covered, the science behind it, and a new project I shared at the end

Young athletes are not mini-adults

The starting point of the talk is a simple but frequently ignored idea: a young athlete is not a scaled-down version of a senior one. Youth development sits on an individually unique and constantly changing base of physical growth, biological maturation and behavioural development. Because of this, success at an early age does not guarantee success at senior level, and selection systems in most sports quietly favour early maturers — children who happen to be bigger and stronger sooner, not necessarily those with the most long-term potential.

This matters because the way we coach, test and select needs to account for where a child actually is in their development, not simply how many years have passed since their birth.

Age is not just a number

A large part of the talk dealt with the difference between three kinds of age:

  • Chronological age — years since birth.
  • Training age — how many years a young person has spent in structured training.
  • Biological age — where the individual actually sits on the maturation curve, based on physiological markers.

Two children of the same chronological age can be years apart biologically. Around the growth spurt — the period of Peak Height Velocity (PHV) — this gap becomes especially important for training and injury risk. I walked through the methods we use to assess maturity status and timing, from skeletal age estimation (Tanner–Whitehouse, Greulich–Pyle, Fels) to anthropometric approaches based on height, leg length and body mass. I also flagged an important caution from our own work: prediction methods developed on one population can systematically over- or under-predict in another, so the difference between skeletal and chronological age should be used to put test results into context rather than as an absolute truth (for some recent work on this, read this paper from Dr Lorenzo Lolli here).

Talent, the relative age effect, and the road from youth to senior

I then turned to talent identification and the relative age effect — the well-documented bias in which athletes born early in the selection year are over-represented in youth squads and ranking lists. Across athletics and team sports such as Italian football, the data show how strongly birth-quarter skews youth selection. Yet relatively younger or later-maturing athletes often progress better when they transition to senior level — the so-called “underdog hypothesis.”

This connects to one of the central findings I shared, drawn from analyses of tens of thousands of athletes’ careers: early success is not a prerequisite for success as an adult. In jumping events in track and field, only around 8% of males and 16% of females ranked in the world top 50 at age 16 went on to reach the top 50 as seniors. In sprints, on average only about 17% of men and 21% of women were in the top 50 both as under-18s and as seniors. Different pathways can lead to similar outcomes, and many talented juniors never make the transition — for reasons ranging from maturation and selection bias to injury, burnout, loss of funding, or simply moving to another sport.

Injuries and load in young athletes

The final scientific section focused on injury. Young athletes face a distinct set of growth-related conditions — Osgood-Schlatter disease at the knee, Sever’s disease at the heel, gymnast’s wrist, Little League shoulder and elbow, apophysitis around the hip, and more. Our own prospective work in a full-time athletics academy was, to our knowledge, the first to examine growth rates and skeletal maturation as injury risk factors in a large adolescent cohort engaged in full time athletics. We found that rapid growth in stature and leg length, a younger skeletal age and a faster maturity tempo were all associated with an increased risk of bone and growth-plate injuries.

This raises hard questions about how we manage load. Most studies still quantify training simply as “time,” without accounting for what athletes actually do in that time — two athletes can train for the same number of hours doing completely different work. Better load monitoring, including the thoughtful use of wearables and AI, is one of the areas where I think we can genuinely improve.

The book chapter: The Young Athlete

Much of this material is drawn together in a chapter I co-authored with Gennaro Boccia, Paolo Riccardo Brustio, James Baker and Eirik Halvorsen Wik — Chapter 9, “The Young Athlete,” in the Sports Physician Handbook (Fourth Edition of the FIMS Team Physician Manual), edited by Pitsiladis, Yung, Hutchinson and Pigozzi (Academic Press, 2026, pp. 199–235, the link the book is here).

The chapter brings together the themes of the talk into a single reference for clinicians and practitioners: defining the elite young athlete, understanding growth and maturation and why they matter, the relative age effect and the junior-to-senior transition, performance progression and realistic expectations, and the prevention and management of youth injuries and illness — including data from recent Youth Olympic Games.

A thank you to the CYSM, ISEH and the audience

I want to thank the Center for Youth Sports Medicine and the Institute of Sport, Exercise and Health for hosting me and for the care they put into convening this event. The ISEH has been a genuine centre of excellence for sport and exercise medicine since its creation as a legacy of the 2012 London Olympic Games, and its commitment to the health of young athletes is exactly the kind of leadership this field needs. I was equally grateful for the audience — the questions, the engagement and the obvious dedication of so many practitioners to getting this right. Youth sport sits at the intersection of health, development and performance, and it is genuinely encouraging to see so much interest in protecting the young people at the centre of it.

Bringing athletics data to life: a new (experimental) project

One recurring frustration in this area is that the data needed to put a young athlete’s results into context — how the best in the world actually developed over time — is hard to access and harder to compare against. So I have been building something to help coaches interested in Athletics.

I am sharing here an early look at the Athletics Performance Tracker, an AI-assisted project that brings athletics results databases to life and makes them accessible to everyone. The aim is to let coaches, athletes, parents and researchers explore how performance develops with age and compare a young athlete’s results against those of top-ranked athletes.

It currently covers around 30 World Athletics events with thousands of athletes and tens of thousands of performances, and includes:

  • Development curves showing how the world’s best progress from age 12 to 40, with mean values and confidence intervals across the top 10, 20, 50 or 100 athletes.
  • Year-on-year analysis of absolute and percentage improvements for individual athletes or whole cohorts.
  • World top lists for every event, with comparisons to the previous year.

You can explore it here: athletics-tracker.fly.dev.

An important caveat: this is very much an experimental project and still under active development. It is intended for research and exploration, it is not affiliated with World Athletics, and features and data will continue to change. I would welcome feedback as it evolves.

In summary

Early success is not a requirement for success as an adult. Assessing maturity status is key to interpreting training and test results. Training should be progressive, varied and developmentally appropriate, and we need to understand injury patterns — and load — far better than we currently do, with more work needed on young female athletes in particular. Above all, health and longevity in sport should always come before performance at a young age. If we get that balance right, we give more young athletes the chance to fulfil their potential — and to stay healthy doing it.

Pointing the AI toolkit at the Giro d’Italia 2026

In my last post I shared my first proper experiment with AI tools — scraping publicly available muscle-injury data from the major football leagues and pulling it into a dashboard that I could update and share with almost no manual work. I promised I would do more, and it did not take me long to find an excuse. With the Giro d’Italia in full swing, I could not resist pointing the same toolkit at a race I have been following obsessively for weeks.

So this time I used ClaudeClaude Cowork and GitHub to build a live dashboard for the 2026 Giro d’Italia. It scrapes publicly available race data, pulls it together, and refreshes itself — and you can explore it directly at the bottom of this post or on its own GitHub page.

How the GIRO finished

And what a Giro it turned out to be. Jonas Vingegaard (Visma–Lease a Bike) rode with a control that bordered on the imperious, lighting up the brutal Piancavallo stage to put the result beyond any doubt and then rolling into Rome in the maglia rosa. For a rider who has already won the Tour de France and the Vuelta, this maiden Giro completes the set of all three Grand Tours — a milestone worth pausing on, whatever you make of the strength of the opposition this May.

Behind him, Felix Gall (Decathlon CMA CGM) took second, a little over five minutes back, with Jai Hindley (Red Bull–Bora–hansgrohe) completing a fine return to the podium in third. Thymen Arensman (Netcompany–Ineos) ended up just off the box in fourth.

The minor jerseys produced their own subplots. Paul Magnier (Soudal Quick-Step) was the sprinter of the race and took the cyclamen points jersey, while Giulio Ciccone (Lidl-Trek) went hunting for mountain points with real appetite and claimed the blue. The young riders’ classification went right down to the wire between Afonso Eulálio (Bahrain Victorious) and Davide Piganzoli — I’ll let the dashboard below tell you who held the white jersey in the end, and who took the bunch sprint on the streets of Rome. That, really, is the whole point of the exercise: the numbers update themselves, so I don’t have to.

How I built the data source and dashboard

The workflow was remarkably similar to the football injuries project, which is exactly what I find so interesting about these tools — once you understand the pattern, you can reuse it for almost anything.

I asked Claude and Claude Cowork to gather the publicly available race data — general classification, stage results, the points and mountains battles, rider profiles — and to organise it into something I could actually look at rather than squint at across a dozen browser tabs. The agents then built the dashboard itself, and I hosted the whole thing on GitHub using GitHub Pages, which is free and gives me a clean public link. Because the page lives on GitHub and reads the underlying data, I can refresh it whenever I like, or automate the update entirely, and then simply embed it back here on the blog with a single line of code.

The dashboard is organised into a few tabs: an overview, the stages, the evolution of the GC over the three weeks, the points battle, the individual rider profiles, and — for the data nerds among us — a set of estimated power figures.

All of this took me a fraction of the time it would have done even a year ago, and with effectively no programming on my part. That is genuinely new, and worth pausing on.

The usual health warning

As I wrote last time, I will keep being honest about the limitations. The data here are scraped from publicly available sources, so their veracity and accuracy are only ever as good as the source — and in cycling, numbers move and get corrected constantly. The estimated power values deserve a particularly large pinch of salt: these are modelled figures derived from public information, not measurements from a calibrated power meter, and anyone who has worked in performance physiology knows how much can hide behind a single wattage number. Treat them as a bit of fun and a conversation starter, not as evidence.

With those caveats firmly in place, I have mostly used this as another chance to learn what these tools can and cannot do — how to gather, share and visualise data quickly, and where the human still very much needs to stay in the loop. Critical thinking, as ever, is key.

Have a play

Here is the dashboard, embedded live. It updates itself, so it should already be showing the final classifications from Rome.

Update

I updated some views and with each individual rider now you can see the summary of their participation and what they did in each stage.