I wonder if they consider how reliable the official schedule is. For example if a bus is supposed to come once an hour on the hour. It would be a bad plan to arrive just 1 minute before the top if the hour since the schedule is probably an approximation.
In my city the transit authority considers five minutes early to 1 minute late to be on-time. I don't know how normal this is, but it's actually pretty infuriating to have transit apps seem to treat it as the inverse.
A lot of issues like this tend to get glossed over in transit planning apps. Another issue is transfer timings, where the more transfers you do getting to your destination the more likely one of the transfers goes awry and throws off the whole schedule. For that reason I, as a person who exclusively uses transit in a city where it's not terribly good, almost always avoid a trip with 2 or more transfers if there's a 1 or less transfer option with more walking. Convincing transit apps to give you these kinds of options can be difficult (though google does have some knobs for controlling these things).
What city is that? That is a rider-hostile definition of "on-time". In my city if the bus arrives at a stop early it will just stand there until the scheduled time.
There are stops (outside transit centres) where the bus will wait for the scheduled time, called "timing stops". There tend to be maybe 5 or 6 of them on a given cross-city route, but there's no public information about where they are. It's pretty easy to figure them out, though.
Note that at non-timing stops they don't even wait if they're five minutes ahead of schedule most of the time.
That's good, because it means that your transit agency(ies) respect timing points.
It's difficult to always know when the bus will pass a certain place, even with Bus Rapid Transit systems that have dedicated lanes. Timing points are points on the schedule where the bus is guaranteed to leave on time or late at that point.
So I presume that in your case, if the bus is late, it doesn't wait, but if it's early it waits.