2 answers
The app calculates range based on average energy consumption data, but actual consumption depends on a bunch of factors: how you drive, what route you take, the weather, battery condition. Plus the algorithms tend to be optimistic and don't account for the fact that batteries lose capacity as they age. I've checked these predictions myself more than once and often seen discrepancies of 10-20%, especially if you drive more aggressively than usual.
Battery calibration - that's what people often overlook. When a battery degrades (and lithium batteries lose capacity just from sitting there over time), the app can keep estimating range based on old parameters for a long time, because it relies on information the battery reports about itself. If the sensor isn't calibrated properly, it lies about the remaining percentage, and the whole math behind the app goes out the window.
Another important thing is ambient temperature. In winter, the battery delivers energy less efficiently - lithium gets lazy, let's say. The app might account for this, but usually not enough. I've noticed that even during hard running in the cold, energy consumption jumps around, because your body needs more energy for thermoregulation, and the device doesn't catch that right away. Same story with a smartphone - the battery dies faster than the forecast predicts.
Plus there's your usage style. If you suddenly speed up, keep maximum performance running for a while, the app doesn't have time to recalculate the forecast - it assumes average user behavior. So if you drive aggressively, it's better to budget in some extra margin than trust the readings completely.
Your answer
Log into answer.