This happens pretty frequently in Berkeley. Buses on a given line are spaced 10 minutes apart. Bus A swings by a stop around 9:40AM. A large number of students with 10AM classes pile on. Because there are so many people getting on the bus, Bus A falls a little bit behind schedule. At 9:50, Bus B swings by the stop, which is now empty. B spends relative little time there and is now ahead of schedule.
The same thing happens at the next few stops. As more and more people hop on Bus A, it falls further and further behind schedule. As it falls further and further behind schedule, more and more people accumulate at stops ahead of Bus A. Feedback loop ensues.
Meanwhile, as Bus A is falling further behind schedule, Bus B is increasingly getting ahead of schedule. Since Bus A was late, the gap in time between Bus A and Bus B is now smaller than anticipated. That smaller gap in time means that fewer people have accumulated (i.e. people who normally ride Bus B now ride Bus A). Less people to pick up means less people to drop off means less time at any given stop. Bus B gets further ahead of schedule, narrowing the gap between it and Bus A. Another feedback loop.
Eventually, Bus B catches up to Bus A, and you get this very annoying scenario of a long wait-time followed by two back-to-back buses. Meanwhile, because B was so far ahead of schedule, the gap between it and Bus C starts to grow. Bus C starts taking on passengers that missed Bus B (because it came and left the stop earlier than the time listed) and starts to fall behind schedule. The cycle repeats.
There is a slight correction mechanism here. If the driver of Bus B is smart, she’ll drive ahead of Bus A and try to even out the load distribution by picking up those large masses of waiting passengers that otherwise would’ve hopped on Bus A. Still, it’s not ideal. The delays and unpredictability is frustrating as heck, but I’m not sure how’d you get around it. Thoughts?