One line or many: which queue makes you wait less?
One snaking line, or a line at each counter. Set how many counters there are, and how busy. Nobody serves faster either way. So why can one layout add half an hour to a bad visit?
Planimeter · Model grade A — arithmetic and probability — exact while transaction times keep their default spread; the page says where changing that spread makes it an approximation · Reviewed 2026-09-25
You pick a line. It stops. The line beside you moves three people while yours moves none. Someone who arrived after you walks out before you do.
One snaking line feeding several counters takes that choice away. In 2010 Supermarket News called it a common sight at airports and banks, and said most supermarkets kept one line per cashier.
In this model nobody picks a fast line — every arrival takes one at random. Both layouts get the same counters and the same customers. The sliders below say what a layout can still move.
In this model, both layouts get the same counters and the same arrivals.
Longer transactions do not change the gap. More counters do.
Counters sets how many people are serving. How busy the counters are sets each counter's share of busy time. Minutes at the counter sets how long one transaction takes.
Start at 4 counters, 80% busy, 3 minutes each. For a line per counter the model puts the mean wait at 12.0 minutes. For one line it puts it at 2.2. Both layouts serve the same customers per hour. Both leave every counter idle 20% of the time. Nobody sped up.
What one line removes is a counter standing empty while somebody waits.
A hand-built case, not drawn from the model's random arrivals, run under this model's two queue rules: the same four people, all there at minute 0 and lined up A, B, C, D, bring the same four transactions to the same two counters, and each line serves first come, first served. With a line each, A and C join counter 1 and B and D counter 2. Every transaction takes as long in both charts; what moves is the waiting and which counter is left standing empty.
Minutes at the counter moves neither layout ahead. The model multiplies both waits by it. The gap holds at 5.4× from end to end. How much the transaction time varies does the same inside this model's two-moment approximation: both layouts take the same factor.
Counters is the slider that moves the gap. At two counters the model puts one line 2.3× below the separate lines. At four it puts 5.4×, at eight 14.0×. Same load, same transaction, more empty counters to reach.
The tail moves further still. The model puts the 95th percentile at 41.6 minutes for a line per counter. For one line it puts 9.3. That is 32.3 minutes off a bad visit, against 9.8 off the mean.
In this model the gap is set by how many counters share the work. How long any one of them takes does not enter it. The widget draws all of this. Here is how to read it.
How to read what you are looking at
The two strips at the top get the same arrivals from the same seed. Any difference between them is the layout, not luck. The upper strip is one line into every counter. The lower strip is a line each. Filled boxes are counters with someone at them. Empty boxes are counters standing free.
The four cards are the model's answer and they read nothing from the animation. Each card names its layout and what it reports: two give the mean wait, the other two the 95th percentile. Nineteen visits in twenty come in under it.
The curve underneath sweeps how busy the counters are. Solid curves are means, dashed curves 95th percentiles; the dashed vertical line marks where the busy slider sits. Blue is one line, orange a line per counter. Check the up-and-down axis before comparing two settings. It is a log scale and it rescales to the data. Where a dashed curve stops, the model puts that percentile at zero. There is nothing left to draw.
The table at the bottom runs the counter count from one to eight. Its first row is the model's own check. With one counter the two layouts are the same layout, and the numbers match. The formula behind them comes next.
Why the gap is cρ / C(c, a)
Only the queue rule separates the two layouts. These are the symbols the sliders stand for.
c
how many counters are open, 1 to 8
E[S]
the mean time one customer spends at a counter
μ
1/E[S] — how many customers one counter finishes per minute
a
the offered load, λ·E[S], where λ is how many customers walk up per minute. It counts how many customers' worth of work arrive at once.
ρ
a/c — the share of the time a counter is busy, 0.10 to 0.95
One line, c counters. With Poisson arrivals and exponential service this is the M/M/c queue. The share of arrivals that find every counter busy is the Erlang C formula:
C(c, a)=(ac / (c!(1 − ρ))) over (Σk=0…c−1 ak/k! + ac / (c!(1 − ρ)))
The left sum in the denominator gathers the states with a counter still free. The term beside it gathers every state from c customers upward. So C(c, a) is the share of arrivals landing in that second group. Everyone who waits is then served at rate cμ. What is left of the wait is exponential:
Wq=(C(c, a) · E[S]) over (c(1 − ρ))
t₉₅=(E[S]) over (c(1 − ρ))·ln(C(c, a)/0.05)
Many lines. Each counter is its own M/M/1 queue fed λ/c. Setting c = 1 above gives C(1, ρ) = ρ, so Wq = ρ·E[S]/(1 − ρ). Divide the separate-line wait by the one-line wait and E[S] cancels, leaving cρ / C(c, a). That is the gap, and only c and ρ are in it.
Variable service times. For CV ≠ 1 the model multiplies both mean waits by (1 + CV²)/2, so that cancels too. At CV = 1 the factor is 1 and both formulas are exact. At one counter the same expression is the Pollaczek–Khinchine mean-wait formula, exact for any CV. A small case counted by hand makes the rest easier to trust.
Two counters, counted by hand
Take 2 counters, 4 minutes each, busy half the time. This one comes out in whole fractions.
The offered load is a = c·ρ = 2 × 0.5 = 1. The sum in the denominator runs k = 0 and k = 1, giving 1 + 1 = 2. The term that appears twice is a²/(2!(1 − ρ)) = 1/(2 × 0.5) = 1. So the Erlang C value is 1/(2 + 1) = 1/3. In this model one arrival in three finds both counters busy.
In this model, counting the states and running the Erlang B recursion are separate routes. Both land on one arrival in three.
The scale factor for one line is E[S]/(c(1 − ρ)) = 4/(2 × 0.5) = 4 minutes. The mean wait is a third of that, 1.3 minutes. The 95th percentile is 4 × ln((1/3)/0.05) = 7.6 minutes.
Now a line per counter. Each counter is its own queue, so the Erlang C value is ρ = 0.5. One customer in two waits, not one in three. The scale factor is E[S]/(1 − ρ) = 8 minutes. The mean wait is 4.0 minutes and the 95th percentile is 8 × ln(0.5/0.05) = 18.4 minutes.
That is 3.0× on the mean wait and 10.8 more minutes on the bad visit. One arrival in three against one in two is a modest gap. It arrives multiplied by four minutes against eight, and the two effects compound. All of it rests on four rules.
Four rules carry every card, curve and table row here, and no simulation does
Arrivals are Poisson. Customers arrive on their own at a steady average rate. The gaps between them are exponential. This is the load-bearing rule on the page.
Service is exponential, at CV = 1. Every counter draws from the same distribution. How long a transaction has already run says nothing about what is left of it. The CV slider moves off that rule through a two-moment approximation. For the single line its mean wait is exact at one counter and an approximation above it; a line per counter stays exact, because each of those lines is a one-counter queue. The 95th percentile is fitted at any counter count.
Everything else is idealised. Waiting room is infinite, so nobody is turned away. Nobody leaves or changes lines. All counters are equally fast and none takes a break. Each arrival picks one of the separate lines at random, with equal odds. Every figure is the steady state, not the first minutes after opening.
The 95th percentile keeps one shape. For one line it comes from the exact waiting time distribution. That is P(W > t) = C(c, a)·exp(−c(1 − ρ)t/E[S]). At CV ≠ 1 the model scales the mean and keeps that tail shape fitted to it. That is a stated convenience, not a result. The widget says so under the table.
No simulation stands behind the numbers. The animation runs one seeded arrival stream through both layouts. No card, curve or table row reads anything from it. Every figure is a closed form, evaluated directly. Each of those rules has its own way of failing.
Real arrivals clump, and real customers move
Real arrivals clump. Poisson arrivals are independent and evenly paced on average. Shops get a bus, a film letting out, a lunch hour. Bunched arrivals generally make real waits longer than the figures here. The model has no term for them.
Real customers move. Nobody here switches lines, gives up, or comes back later. Switching lines wins back part of what the separate layout loses. Switching lines would shrink the gap the model reports; the model leaves it out.
Real counters differ. Equal speeds, no breaks, no express lanes. No counter is restricted to one kind of transaction. Under one line, no counter stands empty while somebody waits. Any of these changes the answer.
The two savings do not keep a fixed ratio. The tail saves more minutes than the mean everywhere the sliders reach beyond one counter. Compared as ratios the two trade places inside a narrow band. Under one line, sometimes fewer than one arrival in ten waits at all. Its 95th percentile then sits near zero, and the ratio runs away. Below one in twenty the model puts that percentile at exactly zero. The ratio stops being defined there. The band belongs to this model's percentile, not to shops.
Outside the formulas. ρ ≥ 1 has no steady state and the slider stops short of it. The CV slider leaves the exact model. And one line needs floor space, sightlines and signage to work at all. The model prices none of that.
The exchange came before the checkout
None of this arithmetic was written for shops. A. K. Erlang worked for the Copenhagen Telephone Company. In 1909 he published a paper on telephone conversations and probability. An exchange had a fixed number of circuits and callers arriving at random.
That is the same model with different furniture. Counters become circuits and customers become calls. A caller who finds every circuit busy is the customer who finds every counter busy. The delay formula Erlang published in 1917 is the C(c, a) above.
His name stayed on the unit. The offered load a is counted in erlangs. One erlang is one circuit's worth of traffic arriving. On this page it counts the work that walks up at once. The exchange and the checkout read the same table.
About this page
The Erlang C implementation is the Erlang B recursion. The test file computes the same quantity from the closed form, as a separate route. It also pins seven reference values to six decimal places. The animation is checked for the one thing it claims. Both strips see the same arrivals. How I check things.
Sources.
M. Garry, "The Queuing Question", Supermarket News, 17 May 2010, for the airport, bank and supermarket layouts the lead reports for that year.
A. K. Erlang, "The Theory of Probabilities and Telephone Conversations", Nyt Tidsskrift for Matematik B 20 (1909), pp. 33–39. The journal predates DOIs and the paper could not be consulted; these details follow secondary sources rather than the original.
A. K. Erlang, "Solution of some Problems in the Theory of Probabilities of Significance in Automatic Telephone Exchanges", Elektroteknikeren 13 (1917), pp. 5–13, for the delay formula used here. That place of publication follows secondary sources rather than the original.
D. R. Smith and W. Whitt, "Resource Sharing for Efficiency in Traffic Systems", Bell System Technical Journal 60(1), 1981, pp. 39–55, on sharing servers between queues. The bibliographic record was checked; the contents are reported here rather than verified.
A. O. Allen, Probability, Statistics, and Queueing Theory, 2nd ed. (Academic Press, 1990), for the two-moment approximation used when CV ≠ 1. The approximation is commonly credited jointly to Allen and Cunneen; that joint attribution is reported here rather than verified against an original.
Seven standard Erlang C values, pinned by the unit tests to six decimal places — among them C(2, 1.0) = 0.333333 and C(4, 3.2) = 0.596432. No particular published table is cited for them; they were reproduced from the closed form above. That second implementation agrees with the recursion to twelve decimal places across the whole slider range.
Move the door count and the number of doors the host opens. The model puts switching ahead of staying by the doors you did not pick, divided by the doors you could still swap to — two to one at three doors. Opening more doors raises that edge; adding doors without opening more lowers it.