If you are into fitness, I hope you’ll find this interesting.
I’ve been building a fitness app around a question that ordinary activity summaries and fitness apps don’t answer particularly well:
“How hard did this session ask my body to work?”
Imagine two friends running a 5K together at 5:30/km. Same route, same distance and the same 27:30 finish time.
In the synthetic example linked here, they even have the same average heart rate. Most fitness apps would treat those runs as virtually identical. However, relative to their individual profiles, Alex is working at 69% of his current maximum heart rate—Zone 2—while Sam is at 82%, which places him in Zone 4.
I built a quick interactive page based on that thought experiment. Move the pace control between 3:00 and 7:00/km and watch the same external output place each runner in different personal heart-rate zones.
I’m not suggesting that training raises maximum heart rate, (that is a far more nuanced debate). What is clear is that each person has their own maximum heart rate and corresponding heart-rate zones.
The actual MOTRA app does not calculate effort from pace or a single average-heart-rate value. It begins with the age-based estimate:
211 − 0.64 × age
It then quickly adapts that profile using the user’s workout history.
Without going into the full detail, the algorithm analyses every heart-rate sample alongside pace, distance, elevation, duration, activity type and the user’s historical baseline. Rather than comparing the user against a standardised baseline, it attempts to determine how hard that individual is actually working at each moment and estimate their true maximum heart rate.
In testing, our algorithm has been quicker and more accurate than competitors at identifying a user’s actual maximum heart rate, verified through maximum-heart-rate testing.
Once we have established the user’s zones, every recorded heart-rate sample can be placed within their personal zones. Time spent in each zone is then weighted and converted into Effort Points.
The current weights are:
Z1: 0 EP/min Z2: 1 EP/min Z3: 1.5 EP/min Z4: 3 EP/min Z5: 5 EP/min
This is intended to provide a more accurate estimate of cardiovascular load, which MOTRA uses as its primary metric for recognising and rewarding a user’s effort.
I’m mainly looking for discussion, criticism and input that could help us improve it. I’ll be around and happy to share more implementation details.
arda-koc•58m ago
timmonty•27m ago