Have you ever been waiting way too long for a bus on a major line and then out of nowhere two or three buses come by one after another? Inevitably, the one you get on is completely stuffed with people. “What the hell is SORTA up to??” you wonder.
The drivers aren’t just being ridiculous. In fact, this behaviour of buses can be explained by statistics and a little algebra. And it’s really hard to avoid in a transit system set up the way ours is.
On transit lines that are frequent enough that people don’t tend to look at schedules, people will arrive at their stops in a fairly steady, predictable way. We have a few such routes, a fuzzy distinction to be sure, but including the main corridors of the 33, 17/19, 43, and 4 at least.
Since people won’t try to arrive at any particular time because of the schedule, and because there are a lot of people, their arrivals are more or less random and can reasonably be predicted for any given stop in similar circumstances.
Let’s say that stops along line X accumulate on average 1 person each minute. Let’s also say that during the day, a bus will come by every 10 minutes, and that it takes 7 seconds for each person to board. They have to line up single file, pay the fare, then move to their seat. In our hypothetical world, this bus will come by a given stop every ten minutes, spend 70 seconds loading 10 passengers and then move along to the next stop where it will do the same and so on. It will spend 20 seconds travelling between each stop.
What happens if one bus is delayed by just one minute?
A single bus gets delayed by one minute between stops; say a squirrel was in the way. When it arrives at it’s next stop 11 minutes will have elapsed since the last bus came by and there are likely to be 11 people waiting at the stop. The bus will spend 77 seconds loading these passengers before moving on. When it gets to the next stop, it is now one minute and seven seconds late and has 11.0833 (in reality, 11 or sometimes 12) passengers to board, taking 77.82 seconds, putting it then one minute and 14.82 seconds behind. Remember that while this is happening, the bus immediately before it has not slowed down. It’s still on schedule, picking up it’s average ten people per stop and taking the expected time to do so.
As our hypothetical late bus progresses, needing to board more passengers than normal and taking longer than the normal 70 seconds to do so, the the gap between it and the bus ahead of it is slowly widening. This delay grows logarithmicly; the further behind the bus gets the longer it has to take to board passengers at each stop since each stop has had more time to accumulate passengers in the interval.
And here’s the math(in PHP) in case anyone is interested:
$time_between_stops = 20; // time between stops in seconds
$initial_span = 600; // time between buses in seconds
$delay = 60; // initial delay in seconds
$board = 7; // boarding time of passengers
$pass = 1/60; // passengers per second at each stop
$time_elapsed = 0; // total time from start
$span = $initial_span - 60;
while($span > 0){ // IE, the bus behind moving at scheduled speed hasn't caught up yet
$stops++;
$passengers_at_stop = ($initial_span + $delay) * $pass;
$additional_delay = ($passengers_at_stop * $board) - ($initial_span * $pass * $board);
$delay += $additional_delay;
$time_elapsed += $delay + $time_between_stops;
$span -= $additional_delay;
}
Meanwhile, if the bus behind our late bus isn’t careful, it will speed up once it passes the squirrel-point. The nearest stop, as the squirrel will observe, is likely to have 9 passengers, taking only 63 seconds boarding time.
The time between it and the late bus decreases, such that once it has caught up to the point at which the first bus became late it will be picking up less and less people and spending less time dwelling at a stop while people pay fare and find their seats.

A one minute delay can hypothetically lead to infinite delay for all buses some distance after the point of initial delay.
The above chart shows the impact of a bus delayed by one minute on an infinitely long line with buses coming every ten minutes forever. It’s assumed that buses can’t pass and thus the first bus will dictate the speed of all. The chart doesn’t take into account the possibility for coordinated efforts of buses running the exact same route to pass one another and individually skip stops, such coordinated action as would be needed to avoid eventually infinite delay. But as all of our high-frequency trunk lines spread out into sub-routes once they get further from Downtown, such coordination would only even be theoretically possible in one direction anyway!
There are a few things we can do about vehicle bunching.
- Decrease the time it takes the average passenger to board. This makes the biggest improvement. This is why subways are rarely bunched even though trains often run close together. When your vehicle has 20 doors and all your passengers have already paid to enter the system, boarding 3 people or 300 people takes about the same amount of time. This is also one reason exact-change cash payment systems like ours are less good than a stored value card systems like most other major cities have. We could also solve this problem by eliminating the fare and allowing people to board at both doors, or allow people to board at both doors and trust them to pay the fare(one driver at the front would be hard pressed to monitor fare evaders entering at the back door.)
- Decrease the number of passengers per stop. To do so we would have to make transit substantially less useful or more expensive. This isn’t really a realistic option.
- Make sure we don’t have an infinitely long transit line. In fact, the shorter a route is, the less chance there is for bunching if you assume that either all vehicles aren’t operating in a loop, or that there is some scheduled delay at the end.
- Stop all transit at night. We do this and it forcibly breaks up any bunches that might have been going on.
- Have some system for coordinating the skipping of stops when buses are bunched and heading toward Downtown. But of course this only works in one direction.
- Build some delay points into the schedule throughout long trips. This is what you’ve experienced if you’ve ever seen the bus driver innexplicably stop on the side of the road. Make drivers wait a bit to be right on time to allow for unexpected ‘squirrels’.
- Make sure drivers running earlier than they should hold back, though this can only delay the bunching. After all, nothing can stop the logarithmic deceleration of the first late bus.
- Have buses run infrequently enough that people always feel the need to check a schedule. This will make it necessary for them to arrive only when the bus is expected to come and breaks up our hypothetical average accumulation of passengers.
- Make the late bus skip some stops completely to make up time. This is enormously frustrating for the people being skipped, but could lead to a decrease in total passenger delay.
- Eliminate all sources of possible delay.
This isn’t necessarily as hard as it sounds. Squirrels aside, things like putting transit underground, or letting it bypass stop-lights can go quite a long way toward avoiding random delays.








I’m sure you’ve seen this report on bus bunching out of Portland?
your post reminds me of a book, “why do busses come in threes;” it is all about mathematics in every day life.
i’m still scratching my head about the new fareboxes. they were designed, iirc, to accept any amount of money, subtract the fare, and issue a card for whatever excess amount of money was paid. so on monday, could put $20 in, get a card back with $18.25 in value and have enough transit money to get through the week.
but that isn’t happening. a year later, the best they’ve got is that we have to trudge to one of two tiny offices and buy store value cards. this really is no improvement over tokens as far as the speed of loading passengers. tokens are very fast. what is slow is cash.
TANK sells ten-ride cards online that come super quick. Last time I ordered one, it came in less than a day, which was a little scary. If you bought in bulk, it may as well be a stored value card if you kept a couple with you.
SORTA, yeah, still selling only in person downtown as far as I can tell :-/
Though they have the shop set up to sell them online, the ten-rides don’t appear to be there yet.