A question from the bus stop
Why buses come in threes
You wait a quarter of an hour, then three turn up together. It isn’t just bad luck, and nobody needs to be doing anything wrong. Buses that set off evenly spaced drift into bunches, and the long gaps they leave are where most people do their waiting. Here is how it happens, what it costs on every frequent daytime London route, and what to do at the stop.
Scroll down: six buses are about to set off.
The loop
Start with a perfect service#
Six buses run round a loop of 20 stops, one every 6.4 minutes. People turn up at random, on average one a minute at each stop; the dots are people waiting.
While every bus keeps its place, nobody waits longer than 6.4 minutes, and the average wait is half that: 3.2 minutes.
Even here, with no delays at all, chance slowly knocks the spacing out of line: a few more people at one stop keep one bus there a few seconds longer.
One lost minute
Hold one bus up for a minute#
A ramp goes down for a wheelchair, a van blocks the lane, someone counts out coins. One bus falls a minute behind.
Its next stops have had a minute longer to fill up, so more people get on, which takes longer, so it falls further behind. The bus behind it reaches stops that were cleared more recently, picks up fewer people and gains on it.
Or tap any bus on the loop.
Nobody is doing anything wrong: the gap grows on its own. Researchers were already analysing this in 1964, and it is called bus bunching.
An hour later
An hour later, they travel in packs#
The late bus is now the full one: it does the work of two or three. The buses behind it carry far fewer people and follow close behind. Around the loop, long stretches open with no bus at all (shaded), and the crowds at those stops grow.
In the second hour, waits average 10 minutes instead of 3.2 (7 to 13 across eight runs of this model). Without the lost minute the loop ends up almost as bad, 9 minutes: the minute only speeds things up. Ordinary differences in driving time and in how many people turn up are enough.
Nobody controls this loop. On real routes, controllers step in, for example by making buses wait.
The planners’ view
The last 90 minutes, as planners draw them#
Transport planners draw a route as a chart: the stops run across, time runs down the page, and each bus is one stripe. Evenly spaced buses make parallel stripes.
Here the stripes start parallel, drift together and then run side by side: a bunch. The wide empty bands between them are the long waits.
One stop, one hour
Why you so often catch the long gap#
Now stand at one stop of that loop for an hour. Each red block is a bus leaving it. Turn up at a random moment, without checking an app, and see how long you wait.
Long gaps take up more of the hour, so a random moment is more likely to fall inside one. Say two buses come 2 minutes apart, then there is a 14-minute gap. They still come every 8 minutes on average, and at even intervals you would wait 4 minutes on average. Turn up at random and you land in the long gap 14 times out of 16, so the average wait is (2×2 + 14×14) ÷ (2×16) = 6.25 minutes.
This is why the bus always seems to have just left. Most of the people waiting at any moment are waiting inside a long gap.
The fix
The fix is to make buses wait#
Start the same loop again with the same lost minute, but this time a bus that is too close to the one in front waits at four timing stops (the green squares) until the scheduled gap has passed since the bus before it left.
The buses stay spread out. In the second hour the average wait is 4 minutes instead of 10, across the same eight runs. The price is paid on board: a held bus sits still for a while.
A related rule has been tested on real roads. On a Georgia Tech campus route, drivers dropped the timetable and waited at two control points for a time set by how far behind the next bus was. The closest any two buses came was 2 min 28 s; on a comparable day run to the timetable, two came 1 second apart.
London times its buses, and publishes the waits#
Transport for London logs buses at most timing points on its frequent routes (most run five or more buses an hour at the weekday peak), from 05:00 to midnight. From the gaps it works out two waits for each route: how long you would wait on average if the buses kept to the schedule, and how long you actually wait if you turn up at random. The difference is called excess waiting time. It counts uneven gaps and buses that never ran.
From 1 April to 26 June 2026 the scheduled wait across London’s frequent routes was 5.6 minutes and the actual wait 6.7 minutes, about 20% longer (TfL weights the network figure by how often each route runs). On the least regular daytime route, the 245, people waited 3.3 minutes longer than scheduled; on the most regular, the H20, 0.4.
Your route, right now
bus (ringed: in a bunch; faded: at either end of the route)gap longer than the average now
Every frequent daytime route, April–June 2026. Tap a dot to pick that route. Dots above the dashed line kept people waiting longer than scheduled.
One Friday evening on 30 London routes#
TfL’s figures are averages over three months. To see bunching as it happens, bus arrivals on 30 frequent routes were logged from TfL’s live feed on Friday 16 October 2026, from 18:11 to 21:12 London time: 32,535 gaps between one bus and the next at the same stop. The routes were chosen in three groups of ten: the most regular in TfL’s quarter, the middle and the least regular.
In 9% of the gaps recorded, a bus arrived less than a quarter of the usual gap behind the one in front, close enough to count as part of a bunch. Someone turning up at random would have waited 8.3 minutes on average, against 6.1 if the same buses had come evenly spaced through the evening: 34% longer. Buses usually run less often after the rush hour, so some of that difference may be planned; measured against even spacing within each hour instead, the figure is 25%. Depending on the baseline, then, uneven gaps added between a quarter and a third to the wait.
Grouped as TfL ranks them over the quarter, the routes kept the same order. On the ten TfL rates most regular, uneven gaps added 19% to the wait; on the middle ten, 35%; on the ten least regular, 49%.
Arrival times here come from TfL’s predictions, not roadside observations: an arrival was inferred when a prediction showing the bus due within two minutes disappeared from the feed. That rule caught the next stop along the route 93% of the time; when it missed one, the stop was filled in with a time between the two it did catch.
The same evening in Bucharest#
Bucharest–Ilfov’s transport authority (TPBI) publishes the position of its vehicles in real time. On the same Friday, from 20:27 to 23:27 Bucharest time, the feed was read every 20 seconds; the time each reporting bus, tram and trolleybus passed each stop was worked out from those positions and compared with the timetable: 26,468 gaps at 2,326 stops on 72 routes frequent enough to count.
By the timetable, someone turning up at random at those stops would have waited 6.1 minutes on average. With the vehicles recorded, the wait was 8.7 minutes, 44% longer.
Most of that difference comes from timetabled trips that were not recorded at those stops: about 30% of the trips never appear in the feed, and others appear on only part of their route. A missing trip either did not run or ran without reporting its position, and the data cannot tell which. So 8.7 minutes is probably an overestimate: if some of the missing trips ran without reporting, the real wait was shorter, by an amount these data cannot show.
Compared with the timetable of exactly the trips recorded at each stop, the wait worked out from the recorded passages was about the same (8.3 minutes against 8.5); that comparison cannot see passages missing from trips that were tracked only partway. In 5% to 9% of the gaps, a vehicle came less than a quarter of the timetabled gap behind the one in front, depending on how trip labels the feed reports for more than one vehicle are counted.
Wait by the timetableActual wait that evening
The twelve routes with the biggest difference that evening, in minutes: timetabled wait → wait with the vehicles recorded passing, for someone turning up at random. Under each, the share of the route’s timetabled trips that appeared in the feed at all: where it is low, much of the extra wait may be trips that ran without being tracked. TPBI data, 16 October 2026.
This is an estimate from one evening, not an official TPBI statistic. When a vehicle passed several stops between two readings, each stop gets a time spread evenly across that interval. Because the two cities were measured in different ways, the London and Bucharest percentages are not directly comparable.
What to do at the stop#
Look before you leave. The extra wait falls on people who turn up at random. If a live board or an app tells you when the bus is due, you can arrive just before it rather than somewhere inside a long gap.
If two or three come together and you can see the next one right behind, let the first go. The one in front is usually the late one and may have picked up most of the people waiting, so the ones following it can be much emptier: in the words of one study, “trailing buses may be nearly empty”.
When a bunch has just left, expect a long gap. A bunch is often followed by a long gap, so check when the next one is due. That is the moment to look at another route, or walk.
Be patient with a bus that waits at a stop with its doors open. It may be holding to even out the gap behind it. Holding like this can keep buses spread out and shorten the waits further along.
How this was worked out#
The loop is a teaching model, not a copy of any real route: 20 stops, 6 buses, 75 seconds of driving between stops with a 7% random spread, on average one person a minute arriving at random at each stop, 3.5 seconds for each person boarding and 1.5 for each person getting off, 8 seconds to pull in and close the doors, 80 places on each bus. The figures for waits are means of eight runs with different random seeds, measured in the second hour; the run you see is one of them. The comparison without the lost minute uses the same eight seeds. Holding: at four stops, a bus waits until the scheduled gap has passed since the previous bus left.
Waiting time for someone who turns up at random is the sum of each gap squared, divided by twice the sum of the gaps. This is the calculation the UK Department for Transport sets out for excess waiting time; TfL’s figures rest on the same assumption that people arrive at random.
London’s routes: TfL Quality of Service Indicators for quarter 1 of 2026/27 (1 April to 26 June 2026), 386 frequent routes, of which 383 run in the day; the explorer shows the daytime ones. The percentage for each route is the excess wait divided by the scheduled wait.
The two recordings: London, TfL Unified API arrival predictions polled every 30 seconds for 30 routes; Bucharest, TPBI GTFS-Realtime vehicle positions polled every 20 seconds and matched to TPBI’s static GTFS by trip. A gap counts only between two different vehicles; a stop counts only with at least six gaps. “Bunched” means a gap under a quarter of the reference gap: the mean gap at that stop that evening in London, the timetabled gap of the same trips in Bucharest. The gap, six-gap and quarter-gap rules were set before the recordings were analysed. Added after an independent check found passages missing from the raw logs: stops a bus passed between two detections are filled in with interpolated times; a Bucharest vehicle is followed across gaps in its reports and changes of trip label; and Bucharest is read against two timetables (all trips, and only the trips recorded at each stop).
The live view asks TfL’s public API, from your browser, where the buses on your route are, every 30 seconds while it is on screen. A bus is placed before the next stop it is due at; gaps are the difference in predicted arrival at the first stop ahead of both. The page asks for no personal details and keeps nothing about you. Bucharest has no live view because its feed is meant to be collected by a server, not read from readers’ browsers.
TPBI provides its data free of charge and for information only.
Sources#
- Transport for London, Quality of Service Indicators: route results for London bus services, quarter 1 2026/27. bus.data.tfl.gov.uk
- Transport for London, buses performance data: network performance summary, quarter 1 2026/27. tfl.gov.uk
- Transport for London Unified API, line arrivals and route sequences. Powered by TfL Open Data. Contains OS data © Crown copyright and database rights 2016. Geomni UK Map data © and database rights 2019. TfL’s licence does not imply TfL endorses this page. api.tfl.gov.uk
- Transport Public București–Ilfov (TPBI), GTFS-Realtime vehicle positions and static GTFS (gtfs.tpbi.ro), and the terms for using its open data. mo-bi.ro
- J. J. Bartholdi III and D. D. Eisenstein, “A self-coördinating bus route to resist bus bunching”, Transportation Research Part B 46 (2012) 481–491. Cites G. F. Newell and R. B. Potts, “Maintaining a bus schedule”, Proceedings of the 2nd Australian Road Research Board Conference (1964). doi.org
- C. Gershenson and L. A. Pineda, “Why does public transport not arrive on time? The pervasiveness of equal headway instability”, PLoS ONE 4(10): e7292 (2009). doi.org
- UK Department for Transport, measurement template: proportion of bus services running on time, with the excess waiting time calculation. assets.publishing.service.gov.uk