Running Scores
Runners love numbers. We love to look at how much mileage we are putting week-by-week, or how much faster we are compared to the previous month. We love to look at our resting HR and how it’s improving as we get fitter. However, numbers on their own don’t paint the full picture. We need to make sense of them. As new companies show up, displaying raw values is not enough to stay competitive. An application that just displays the number of steps provides no advantage, versus the countless others t
Runners love numbers. We love to look at how much mileage we are putting week-by-week, or how much faster we are compared to the previous month. We love to look at our resting HR and how it’s improving as we get fitter. However, numbers on their own don’t paint the full picture. We need to make sense of them. As new companies show up, displaying raw values is not enough to stay competitive. An application that just displays the number of steps provides no advantage, versus the countless others that do the same. As a user, I am interested in two things: 1) how these numbers impact me and 2) what can I do about them. Great applications answer both questions.
Some companies do analysis on top of the data they already have. For example, Garmin is able to tell if we are improving, regressing, or plateauing with our training. It’s also capable of comparing our current running session, with our previous one. These metrics, or scores, help runners understand how they are progressing with our training. Since Vital’s inception, our focus is to provide data so our clients can create great experiences. We do this by integrating a wide range of providers abstracted behind a single API. Our clients shouldn’t care from which provider the data comes from. This creates a challenge since not all integrations provide the necessary data you would want. For example, Fitbit’s workout data is more limited compared to the likes of Garmin or Strava. This means that sometimes you might have to tailor the experience in your application, according to the data you get.
A running score is a useful metric for spotting trends and progress. They take into consideration many factors, that on their own might not mean a lot. The
Heart Rate-Running Speed Index is one example among many. It shows a runner’s adaptation to endurance training. It is a useful metric to see how effective a training regime is and how our body is reacting to it. It takes things like standing and max HR, max speed and the workout data to assess the progress. From the Vital API point of view, if you are using our Python client, it looks like this:
from vital import Client
client = Client(
api_key=<API_KEY>,
environment="sandbox",
region="us"
)
workouts = client.Workouts.get(user_id, start_date, end_date)
max_speed = 19 # km/h
standing_hr = 65 #bpm
max_hr = 190 #bpm
k = (max_hr - standing_hr) / max_speed
scores = []
for w in workouts:
if w["sport"]["name"] != "running":
continue
score = w["average_speed"] - (w["average_hr"] - standing_hr) / k
scores.append(score)
print(scores)
A running coach app could help the user improve their fitness level, by using the above scores. It could suggest specific exercises to maximise a user’s time and effectiveness. It wouldn’t take much to start generating a schedule of runs and dynamically change them, according to the score fluctuations. Like any other metric, consider them holistically. Fatigue, temperature, or even a bad night of sleep will influence performance. Nonetheless, with the right guidance for non-power users, this is still better than displaying raw numbers.
Let us know what we can do to take your app to the next level!