Erlang B: nobody is waiting, and some were turned away
Six cases an hour arrive at five positions that finish one and a half each, and there is nowhere to wait. The queue is empty every time anyone looks. Across eight hours either 8.1 or 5.1 of the 48 cases never got in, and which one depends only on how many of the turned away you think came back. That number was never measured, so the page shows both.
- Cases that wanted service48.0
- Positions in use66.5% to 71.5%
- Never got in, low assumption8.1
- Never got in, high assumption5.1
- Retry assumption, low30%
- Retry assumption, high70%
48.0 offered · 39.9 in and 8.1 out at 30% · 42.9 in and 5.1 out at 70%
Try a service
Different cases, not attempts; one case may try several times.
The share of refused demand that comes back.
The share of refused demand that comes back.
Changes the number waiting outside and nothing else on the page.
Turns rates into counts without running a clock.
The two readings
| Measure | 30% | 70% |
|---|---|---|
| Cases that wanted service | 48.0 | 48.0 |
| Admitted | 39.9 | 42.9 |
| Never got in | 8.1 | 5.1 |
| Never got in, share of demand | 16.9% | 10.7% |
| Attempts the service counted | 51.5 | 59.9 |
| Waiting outside to try again | 0.9 | 3.0 |
What the floor shows
| Measure | 30% | 70% |
|---|---|---|
| Visible queue | 0 | 0 |
| Positions in use | 66.5% | 71.5% |
The cases that wanted service
The attempts the service counted
- Horizontal
- Both boards, cases in the window.
- Vertical
- Both boards, one row per retry assumption, labelled with its per cent.
- Basis
- Board one splits offered demand into admitted and never served; board two splits attempts into admitted and turned away. The dashed rule marks offered demand on both.
- Units
- Cases to one decimal place, shares in per cent to one decimal place, hours as typed.
The number you have to invent
Every figure on this page except one comes out of arithmetic. The retry probability does not. It is the share of turned away demand that comes back to try again, and no service records it, because a refusal that walks off leaves no row anywhere. What gets recorded is attempts. An attempt cannot tell you whether it is a new case or the fourth call from one that has been trying since morning.
That is why the page shows two answers rather than one. A single figure for lost demand, quoted without the assumption underneath it, is not a measurement of the service; it is a measurement of the guess. Both columns here are honest and they disagree, and the distance between them is the size of what nobody knows.
The two figures move in a direction worth noticing. As the retry rate rises, blocked attempts rise with it and cases that never got served fall, because the same demand keeps coming back until it fits. Quote the blocked attempts and the service looks worse as retries increase. Quote the lost cases and it looks better. Same service, same day.
The queue you can see, and the population you cannot
A service with no waiting room has a queue of zero by construction, at every load, always. That number is a fact about the design rather than about the demand, and it reads zero whether the service is half idle or refusing a third of everything that arrives. Reading it as a service level reads a constraint as an achievement.
What replaces the visible queue is a population outside it. Everyone turned away who intends to come back is waiting somewhere, and the average size of that group is the rate of returning attempts multiplied by how long each waits before trying. On the figures this page loads, that is a fraction of a case at the low assumption and three cases at the high one. Neither appears on any screen the service owns.
The retry delay is the clearest demonstration available here. Change it alone and nothing moves except the number outside: the same demand is admitted, the same demand is lost, the positions run at the same occupancy, and the group waiting to come back is four times the size. A quantity that changes while every reported number holds still is exactly the quantity a report cannot see.
Here is the maths
- Assumptions
- Poisson arrivals and exponential service; identical positions and no waiting room at all; the returning stream behaves like the arriving one; steady state, so the window converts rates into counts and does not run a clock.
- Model version
- 1.0
The formula, in words
- A service with no waiting room blocks rather than queues. Offered load is the arrival rate divided by what one position finishes in an hour. The Erlang B recursion turns that load and the position count into the probability an arrival finds every position busy: start at one, then for each position in turn replace the running value with the load times it, divided by the position number plus the load times it. That form is stable where a factorial form overflows.
- Retries make the arrival stream depend on itself. A blocked attempt that returns is a new attempt, so the total attempt rate is the unique arrival rate divided by one minus the retry probability times the blocking probability. Blocking depends on the attempt rate and the attempt rate depends on blocking, so the page searches for the one attempt rate at which the demand served plus the demand abandoned adds back up to the demand that arrived, narrowing a bracket around it by halves a fixed number of times.
- A blocked attempt and a lost case are different counts. Every blocked attempt either returns, with the retry probability, or stops. The share of offered demand never served is the blocking probability times one minus the retry probability, all divided by one minus the retry probability times the blocking probability. Raising the retry probability raises the first count and lowers the second, and both are true at once.
- The population outside is a rate times a wait. The number of cases waiting to try again, averaged over time, is the rate of returning attempts multiplied by the retry delay. It is the only quantity the retry delay touches, and it is invisible to every other number on the page.
A worked example
The service, as it loads. cases an hour, cases per position hour, positions, no waiting room. hours, hours, where is the horizon and the retry delay. Offered load erlangs against 5 positions.
Blocking with no retries at all, by the recursion, five steps:
| n | ||
|---|---|---|
| 1 | 4.000000 | |
| 2 | 3.200000 | |
| 3 | 2.461538 | |
| 4 | 1.802817 | |
| 5 | 1.242718 |
19.9 per cent of arrivals find every position busy, before any retry behaviour is assumed. That figure is the anchor: it is what the page reports at a retry assumption of zero, and every retry assumption pulls the lost share below it.
The root at a 30 per cent retry assumption. Bisection on returns attempts an hour with . That is a root rather than an approximation and a reader can check it in one line without repeating the search:
, the offered rate recovered.
The eight hour window at 30 per cent, every step shown:
unique cases wanted service attempts blocked retries , check: admitted lost , check: share occupancy queue 0 outside
The same window at 70 per cent. The root moves to attempts an hour with , and it checks the same way: .
unique 48.0 unchanged, and it must be attempts blocked retries , check: admitted lost , check: share occupancy queue 0 outside
The comparison, which is the page.
| retry 30% | retry 70% | moves | |
|---|---|---|---|
| cases that wanted service | 48.0 | 48.0 | unchanged |
| admitted | 39.9 | 42.9 | up |
| never got in | 8.1 | 5.1 | down |
| share of demand never served | 16.9% | 10.7% | down |
| attempts counted | 51.5 | 59.9 | up |
| blocked attempts | 11.6 | 17.0 | up |
| positions in use | 66.5% | 71.5% | up |
| visible queue | 0 | 0 | unchanged |
| waiting outside | 0.9 | 3.0 | up |
The two readings are 6.2 percentage points apart, and the lower assumption returns 1.6 times the loss the higher one does. Nothing between them is measured. Blocked attempts and lost cases move in opposite directions across that range, so a report quoting the first gets worse as retries rise and a report quoting the second gets better, on one service, on one day, with the same 48 cases.
One more position does not close the gap. Chip 1 sets . Blocking with no retries falls from 19.9 to 11.7 per cent. The lost share falls to 9.4% at 30 per cent and 5.1% at 70 per cent, so both answers improve and the two are still 4.3 percentage points apart. Adding capacity moves the answer. It does not remove the assumption.
Only the delay changes. Chip 2 sets and touches nothing else. x, B, admitted, blocked, lost, the share and the occupancy are identical to the last printed digit in both columns, because the retry delay appears in exactly one line of the model. The population outside goes from 0.9 to 3.5 and from 3.0 to 11.9, four times in both columns. A quantity that quadruples while every reported figure holds still is the quantity a report cannot see.
The widest the guess can be. Chip 3 sets the two rates to 0 and 100 per cent. At zero, nobody comes back: attempts equal the 48 unique cases, 9.6 never get in, the share is 19.9%, occupancy is 64.1 per cent and nobody is outside. At one hundred, nobody gives up: the fixed point settles at an offered load of 6.84 erlangs with blocking at 41.5 per cent, 82.1 attempts deliver all 48.0 cases, nothing is lost, occupancy reaches 80.0%, and 8.5 cases are standing outside at any moment against a visible queue of zero. The full range of the assumption is 19.9 percentage points wide, and every point in it is consistent with a queue of zero.
Check it yourself
Leave everything alone and change only the retry delay, from 2 hours to 8. Admitted, blocked, never served, the share and the occupancy do not move by a single printed digit in either column. The number waiting outside goes from 0.9 to 3.5 at the low assumption and from 3.0 to 11.9 at the high one, four times in both.
What this does not model
The retry probability itself, which is a guess the page asks you to make twice and never estimates for you; retry behaviour that depends on how congested the service is, or on how many times a case has already tried, both of which are real and both of which make the returning stream something other than the simple fraction used here; a retry delay that varies from case to case rather than sitting at one figure; the edge of the window, meaning that a case turned away near the end of it cannot return inside it, which the steady state arithmetic does not see and which matters most when the window is short against the retry delay; anything a wait costs, since nothing waits inside this service and the page prices nothing that happens outside it; blocking that propagates upstream, which a real constrained service does and a single stage model cannot; arrivals that vary through the day, which Poisson at a constant rate does not represent; balking and abandonment as distinct behaviours from blocking, which remove demand in different ways and are not separated here; and any real service, queue, organisation or place, none of which these figures describe.
The queueing results on this page are described from Shortle, Thompson, Gross and Harris, Fundamentals of Queueing Theory, on a finite capacity system converting congestion into blocking and on retrial demand waiting outside the visible queue and returning; no wording is reproduced from it. The retry probability is yours: no service measures it, the page offers no default beyond a starting pair you are meant to move, and it never suggests which value is right. Nothing here calls any capacity adequate or inadequate, and the arithmetic is a steady state rather than a clock, so the window turns rates into counts and does not simulate a day. None of these figures describes any real service, queue, organisation or place.
Related
- Kingman's formula: one more job doubled the waitA bench running at 90% looks busy and behaves fine, right up until it does not. What sets the wait is how full it is, and how unevenly the work arrives.Interactive lesson · 3 min
- KPI definitions: the same data looks healthy while the operation degradesSupply chain KPIs that look healthy while the operation degrades. Same data, different definition.Interactive lesson · 4 min