A shift roster can be derived rather than copied. Take the covers expected in each hour, divide by how many covers one person serves in an hour, round up, then check the result against the legal frame on working hours and daily rest. The gap between the derived roster and the copied one is what the venue pays for habit.
The roster is usually copied, not calculated, and that costs money in both directions
Ask an owner how next week's roster was built and the honest answer is almost always the same: from last week's, with two names swapped because somebody asked for Friday off. Nobody decided that four people are needed on Thursday evening. Four are there because four were there a month ago, and nothing visibly broke.
That is not laziness but the absence of an arithmetic anyone believes. Food cost gets checked, because the invoice arrives; rent gets checked, because the landlord sends it; the roster gets checked when somebody quits.
Copying makes one silent assumption: that the shape of demand repeated. Not the total — the shape. Two Thursdays with the same number of covers can need completely different numbers of people, because one spread those covers over ten hours and the other pushed two thirds of them into three. The copied roster is right about the total and wrong about every hour.
The cost of being wrong is not symmetrical, and that is what keeps the habit alive. Overstaffing is visible: it lands in the labour cost line at month end and the owner can point at it. Understaffing is invisible: a table that waited nine minutes for a menu, an order taken wrong, a guest who looked at the queue and walked next door. None of that has a line in the accounts; it shows up months later as a slower Friday, and by then it is blamed on the weather.
So the venue fixes the visible loss first, even in months when the invisible one was bigger. That is what happens when one of two numbers is measured and the other is not. This page puts both on the same table and is honest about which is which.
Everything below is arithmetic you can do on paper — no model, nothing to install. A system helps in exactly two places: holding the hourly forecast, and doing the division for every hour without getting bored. Which parts of a restaurant's routine can be handed over at all is discussed in what a system can actually take over.
Three inputs of a roster: demand, capacity and the legal frame
A derived roster needs exactly three inputs, and the mistakes people make are almost always about one of the three.
Input one — the hour load. How many guests you expect to seat in each hour, not for the day as a whole. Where that forecast comes from and what makes it wrong belongs to demand forecasting for a restaurant; this page takes it as given. If you keep it in a system rather than a notebook, that is the forecast module.
Input two — how many covers one person handles in an hour. The divisor, and the only input you must measure inside your own venue.
Input three — the legal frame. Working hours and rest are set by the Polish Labour Code, and a roster that does not pass the frame is not a roster, however good the arithmetic. It is a filter applied after the division, and the whole of it — overtime, night work, time records — is held by overtime, night work and working time records. Two norms are named here because the arithmetic runs straight into them; the rest is referenced there, not restated.
What is not an input: the industry ratio
There is a fourth thing people reach for, and it does not belong on the list: the ratio you read somewhere. One waiter per fifteen covers. One cook per forty plates.
We looked for a published source, because if one existed this page would print it. On 28 August 2026 we went through the full plain-text catalogue of Eurostat datasets and the labour market section of the Polish statistical office. Both hold labour data — hours worked per employee by activity and region, productivity series, the wage structure, demand for workers by occupation. Not one states how many people a shift of a food service venue requires, or how many guests one person serves.
That absence is a property of the number itself. A capacity figure describes a specific room: how far the pass is from the furthest table, whether drinks are poured by the bar or the server, whether the card reader works first time. Whoever wrote the ratio you found had a different room, and a plausible number stops people measuring the real one.
Hour load — guests you expect to seat in one specific hour. From a forecast, never from the daily average.
Capacity per person — guests one employee serves in an hour on their position. Measured on your own shift; it depends on the menu, the room and the equipment.
Hour requirement — people needed in that hour. Always rounded up, and the price of the rounding is part of the answer.
Understaffing — an hour with fewer people than the requirement. Costs lost guests and mistakes, and its price is not visible in the labour cost report.
Overstaffing — an hour with more people than the requirement. Costs the full price of the hour and is visible immediately, which is why it gets fixed first even when understaffing was the more expensive of the two.
Covers per hour, not covers per day: why the daily average decides nothing
Here is a shift open from 12:00 to 22:00 with a forecast of 148 covers. Divided by ten open hours that is an average of 14.8 covers an hour, and at a capacity of 8 covers per person per hour the daily average says: two people, all day, done. Now put the same 148 covers into the hours they actually arrive in.
| Hour | Expected covers | Requirement at capacity 8 | Flat roster of 2 | Gap |
|---|---|---|---|---|
| 12:00 | 6 | 1 | 2 | +1 over |
| 13:00 | 10 | 2 | 2 | 0 |
| 14:00 | 26 | 4 | 2 | −2 short |
| 15:00 | 24 | 3 | 2 | −1 short |
| 16:00 | 12 | 2 | 2 | 0 |
| 17:00 | 8 | 1 | 2 | +1 over |
| 18:00 | 14 | 2 | 2 | 0 |
| 19:00 | 22 | 3 | 2 | −1 short |
| 20:00 | 18 | 3 | 2 | −1 short |
| 21:00 | 8 | 1 | 2 | +1 over |
| Day | 148 | 22 person-hours | 20 person-hours |
The numbers are illustrative: they exist so the arithmetic can be followed end to end. Substitute your own and the shape of the conclusion will not change.
Read the last column rather than the last row. The flat roster is two person-hours short over the day, which sounds like a rounding error. Hour by hour it is overstaffed in three hours and understaffed in four, and the two do not cancel: the person standing around at 17:00 cannot be moved to 14:00 afterwards. A day nearly correct in total can be wrong in seven hours out of ten. That is the denominator trap: the unit of the calculation is the hour, not the day.
Measuring how many covers one person serves, in a single shift
You need one shift, a clock and the honesty to write down what happened. Pick one position — servers, or the pass, or the bar; not "staff". For one hour, count the guests served on that position and the people who worked it for the whole hour. Divide.
Capacity per person = Covers served on the position in the hour ÷ People on the position in that hour
Covers served on the position in the hour— guests, counted, not estimated from the till at the end of the night;People on the position in that hour— people, whole hours only; someone who covered twenty minutes is a third of a person here.
Repeat in three different busy hours and take the lowest of the three, not the average. The lowest is the one you can promise; the average is the one you will explain afterwards.
Three ways this measurement lies
It lies when the hour was quiet. If two servers handled eleven guests because eleven guests came, you measured demand, not capacity. Only a continuously busy hour measures the ceiling at all.
It lies when there was a queue. People cut corners under a queue, so what you measured is a sprint, not a pace. A roster built on the sprint figure books your team to sprint every peak of every shift, and then wonders about the turnover. The window you want is the narrow one between the two: busy but not backed up.
It lies when positions are mixed. A runner and a server are not interchangeable, and neither are a grill cook and a cold station. Measure and roster each separately, then add the requirements. A single "we need five people" hides the fact that you need four in one place and one in another.
The number drifts. Change the menu, move the station, replace the terminal, and it changes with them. Re-measure on the event, not on a schedule.
The formula for how many people an hour needs
Hour requirement = ⌈Hour load ÷ Capacity per person⌉
Hour load— guests expected to be seated in that hour, guests;Capacity per person— guests one person serves in an hour on that position, guests per hour per person;⌈ ⌉— rounding up to a whole person;- result — people.
The dimensions come out: guests ÷ (guests per hour per person) = people. Nothing else divides into people, which is a useful check when a spreadsheet starts producing person-hours where you expected people. Apply the formula per position and per hour, then sum: the shift is not a unit anything happens in.
Worked, from the table above: at 14:00 the load is 26 guests and capacity is 8 guests an hour per person. 26 ÷ 8 = 3.25, which rounds up to 4 people. Three would be short in the busiest hour of every shift of the month — a permanent shortage produced by a rounding rule.
Rounding up, and what the rounding costs
Half a person does not come to work. That is the whole rule; the interesting part is what it costs. Rounding 3.25 up to 4 buys four people's worth of capacity — 4 × 8 = 32 covers — for 26 covers of work. Six covers' worth is slack: not waste, but the price of people being indivisible.
Rounding slack of the hour = Hour requirement × Capacity per person − Hour load
Hour requirement— people, from the formula above;Capacity per person— guests per hour per person;Hour load— guests;- result — guests' worth of unused capacity in that hour.
Across the shift in the table the slack adds up to 28 covers' worth, which at a capacity of 8 is 3.5 person-hours in a 22 person-hour shift. Roughly one hour in six is structurally idle, and no clever rostering removes it, because the alternative is to be short.
The hours where the slack is largest are the natural home for work that has no hour of its own: prep, the delivery, the stock count, the cleaning that otherwise happens after close.
What you must not do is fix the slack by lowering the requirement. Rounding down converts a visible, quantified slack into an invisible, unquantified shortage — and given how differently the two show up in the accounts, that trade looks like an improvement for a while. If you want the hourly calculation kept somewhere it can be repeated rather than redone, that is what the calculators are for.
Peaks and troughs: staffing in steps rather than a flat line
A flat roster is a brigade that starts together and ends together. It is simple, it is popular, and the table above shows what it costs. One number says how badly a flat roster fits a given shift.
Roster flatness = Highest hour requirement of the shift ÷ Mean hour requirement of the shift
Highest hour requirement— people;Mean hour requirement— people;- result — dimensionless.
In the shift above the highest requirement is 4 and the mean 2.2, so flatness is 4 ÷ 2.2 = 1.82. The further from 1, the worse a single flat brigade fits and the more there is to gain from staggering.
What the flatness ratio does not say
It does not say how many people to employ, and it does not say the shift is badly run. A shift near 1 has genuinely level demand; a shift at 2 has a real peak. Both are normal. The number compares the shape of your demand with the shape of your roster — not a benchmark. There is no published good value for it.
The practical answer to high flatness is steps: two or three start times instead of one. In the shift above, one person could cover the whole ten hours while a second starts at 13:00 and a third works only the 14:00–16:00 block. The immediate question is whether that is a shift a person may legally work — which is why the legal frame is the next section rather than an appendix.
Steps also carry a cost the arithmetic does not show: handover. Trying alternative shapes before committing to one is what the what-if module exists for.
The legal frame is a constraint, not a preference
The arithmetic above will happily produce a roster nobody is allowed to work. That is not a flaw in the arithmetic; it is why the frame is applied afterwards, as a filter.
The frame is set by the Polish Labour Code — Ustawa Kodeks pracy, consolidated text, Dz.U. 2025 poz. 277, read in full for this page on 28 August 2026 (Dziennik Ustaw, Dz.U. 2025 poz. 277, 1 232 319 bytes, the consolidated version with amendments applied, not the as-published text). Two provisions are named here because the roster arithmetic runs directly into them:
- art. 129 § 1 — working time may not exceed 8 hours a day and, on average, 40 hours in an average five-day working week within the adopted settlement period;
- art. 132 § 1 — in each 24 hours an employee is entitled to at least 11 hours of uninterrupted rest. The provision itself names exceptions; this page does not list them.
Everything else about working time — the settlement period, weekly rest, breaks, the overtime ceiling, night hours, the premiums, the obligation to keep working time records — is held article by article on overtime, night work and working time records. It is not repeated here on purpose: a norm restated in two places will eventually be stated differently in two places, and the second version is the one somebody will read.
The order of operations matters: compute the hour requirement from load and capacity; build a roster that covers it; check it against the frame; and if it does not pass, change the inputs, not the frame. That last step is the one that gets skipped. The answer is not to shorten the rest and think about it later, but that the demand of that shift cannot be served by the people you have under the rules that apply.
Understaffing and overstaffing are two different losses with two different prices
Both gaps are counted from the same table, and then they part company completely.
Cost of overstaffing = Σ over hours of max(0; People rostered − Hour requirement) × Full hourly cost
People rostered— people actually on the roster in that hour;Hour requirement— people, from the formula;Full hourly cost— the full cost of one hour of work, zloty per hour;- result — zloty.
The critical variable is the last one, and it is not the wage rate. The rate omits the contributions and everything else that turns a gross figure into what the hour actually costs the venue. How that figure is built, and why there is no ready multiplier from gross pay to full hourly cost — the accident insurance rate is set per payer rather than being one national number — is worked out on what one hour of work really costs. Take the figure from there. Do not use the wage rate as a stand-in: that understates every overstaffing hour by the whole size of the contributions.
Worked, with a made-up cost: three overstaffed hours per shift over 26 shifts gives 78 overstaffed person-hours. At a full hourly cost of 60 zl — a placeholder, chosen only so the multiplication can be followed — that is 78 × 60 = 4 680 zl a month.
Cost of understaffing ≈ Σ over hours of (Guests lost in the hour × Spend per guest)
Guests lost in the hour— guests who did not stay, from your own count;Spend per guest— zloty per guest;- result — zloty, as an estimate.
Why the second number is an estimate and the first is not
This is the most important paragraph on the page, and it is a warning about a number this page could easily have produced and deliberately does not.
The shift above is understaffed in four hours, by five person-hours in total. It is tempting to convert those into lost guests — five person-hours times a capacity of 8 is 40 guests, times a spend per guest is a large and satisfying figure — and it is wrong. The gap between requirement and roster is not the number of guests you lost. Most of them waited. Some waited and were fine. Some stayed and left a worse review. A few left. The arithmetic cannot tell you which, and multiplying the gap by anything produces a plausible large number out of a broken instrument.
Lost guests have to be counted, not derived: refused bookings, walkouts at the door, unanswered calls in the busy hour, tables that got up before ordering. If you cannot count them at all, an honest unknown is worth more than a confident fabrication.
Spend per guest is its own trap: the average bill and the average guest are not the same number, and swapping one for the other skews the result by an amount that depends on your party sizes. That distinction is worked out on average bill versus average guest.
Worked, with counted inputs: suppose the door count for the month shows 12 guests who left without being seated, and spend per guest works out at 70 zl — again, both placeholders. The counted part of the understaffing cost is then 12 × 70 = 840 zl.
| Type of gap | Hours per month | Price per hour | Total | Kind of number |
|---|---|---|---|---|
| Overstaffing | 78 person-hours | full hourly cost | 4 680 zl | measured |
| Understaffing | 130 person-hours short over 104 hours | not convertible | 840 zl from 12 counted guests | estimate, incomplete |
Now read the table the right way round. 840 is smaller than 4 680, and that does not mean overstaffing is your bigger problem: one column is a measurement and the other a partial count. Write both down, label which is which, and never add them together. Which numbers deserve a place on the owner's screen is discussed in reporting: the numbers an owner actually looks at; if they need to sit somewhere permanent, that is the dashboards module.
Checking the roster after the fact without fooling yourself
The arithmetic above is a forecast, and a forecast is worth what its back-check is worth. Take a shift that has already happened, recompute the requirement hour by hour, put the actual roster beside it, and total both gaps.
Three ways this check quietly agrees with you
Using served covers as if they were demand. The hour in which you turned people away shows a low cover count, a low count produces a low requirement, and the low requirement says that hour was staffed correctly. It is the worst hour of the shift and the check gives it a clean bill. Reconstruct demand instead: covers served plus whatever refusals you recorded.
Recomputing capacity from the shift you are checking. Then the requirement fits the roster by construction and the check says every time that the roster was perfect. A check whose input comes from its own output is not a check.
Checking the shift instead of the hours. Total person-hours rostered against total required is the daily-average error in a different hat: a gap of two, which looks like nothing, in a shift that was wrong in seven hours. Keep the check at hourly resolution or do not run it.
The cross-check that comes from outside the calculation
One number can contradict this whole exercise from the outside, and it is worth watching because it is not derived from the same inputs: sales per labour hour. If the roster is right, cutting the overstaffed hours should raise it. If it moves the other way, the capacity figure is too high, not the formula. That indicator and its traps are the subject of sales per labour hour: this page decides the roster, that one judges it.
Done once the check tells you little; run on twelve shifts it says whether your capacity number is stable or is really three numbers under one label. Which parts of that routine are worth keeping by hand is the question in restaurant automation: bookings, suppliers, reviews.
What to change first when there simply are not enough people
Sooner or later the arithmetic produces a requirement you cannot staff: the peak needs four and there are three in the building. Hiring is the obvious lever and the slow one; it does not answer "what about this Friday". Here is the order that does.
First, move the demand rather than the people. Spacing bookings, capping how many covers are seated in the same fifteen minutes, moving a large group half an hour, closing online orders during the peak — all change the hour load, the numerator. It is the only lever that works on the day you pull it. The thresholds at which a small business usually starts changing its process rather than adding people are laid out in the four thresholds a small company starts from.
Second, raise capacity per person. The divisor, and the only lever that lowers the requirement without touching demand. A shorter menu at peak, pre-portioning, moving the drinks station, a second card terminal, taking payment at the table. Each shows up directly in the next capacity measurement.
Third, move hours rather than headcount. Staggered starts, a short mid-shift, an earlier finish for whoever opened. The same people, differently placed, cover a peaky shift with materially fewer person-hours — subject, always, to the frame above.
Fourth, and deliberately, cut demand. Close a section, shorten the service window, stop taking bookings for the hour you cannot cover. It feels like defeat and it is the cheapest of the four, because a cut you choose is a cut in the hour you choose. The alternative is the same cut delivered involuntarily, in the hour with the most guests in it.
Only then, hiring — against the shape of the requirement rather than the total. A shift that needs four people for two hours and one for six does not need another full-time server; it needs two hours. Rostering, tasks and the people side of that sit in the team module.
This page does not tell you what your capacity per person is, and offers no number to start from: the number does not exist outside your own room. What it costs to keep this calculation running rather than redoing it by hand each week is covered in what process automation costs.
Frequently asked questions
How do I work out how many people a shift needs?
Take the covers you expect in each hour separately, divide each by how many covers one person serves in an hour on that position, and round up to a whole person. Add up the positions, draw a roster that covers the requirement, then check it against the working time rules. The hour is the unit of the calculation, never the shift.
Why use covers per hour instead of covers per day?
Because the daily average flattens the peak against the trough, and a roster built from it is wrong in both. In the example here, 148 covers over ten hours give an average of 14.8 an hour and a flat roster of two people. Hour by hour, the same day is overstaffed in three hours and understaffed in four: the daily total was almost right and described no hour that happened.
How do I measure how many guests one person can serve?
Pick one position and one hour in which it was continuously busy but not backed up. Count the guests actually served and divide by the people who worked it for the full hour. Repeat in three such hours and take the lowest result, not the average. A quiet hour measures demand rather than capacity; an hour under a queue measures a sprint rather than a sustainable pace.
Should the result be rounded up or down?
Up, always, because half a person does not come to work. Rounding down looks harmless — 3.25 becomes three — and produces a permanent shortage in the busiest hour of every shift. Rounding up has a cost too: the difference between the capacity you bought and the load you needed is slack, best filled with prep, deliveries and stock counts.
Which costs more, overstaffing or understaffing?
Usually understaffing, and it is almost always fixed second, because overstaffing arrives as a figure in the labour cost line and understaffing as a slower Friday. Be careful with the comparison: overstaffing costs a measurement, understaffing an estimate built on a count of lost guests. The gap between requirement and roster is not that count.
How does the legal frame limit the roster?
As a filter applied after the arithmetic, not an input to it. The Polish Labour Code sets a daily limit of 8 hours and an average of 40 hours a week within the settlement period (art. 129 § 1), and at least 11 hours of uninterrupted rest in each 24 hours (art. 132 § 1). When the arithmetic produces a roster that does not pass, the inputs have to change — not the frame.
What should change first when there simply are not enough people?
Move the demand first: space the bookings, cap how many covers are seated at once, pause online orders through the peak. Second, raise capacity per person — a shorter peak menu, pre-portioning, a second terminal — which lowers the requirement without touching demand. Third, move hours rather than headcount with staggered starts. Fourth, cut demand on purpose. Hiring comes after all four, sized against the shape of the requirement, not its total.
Take one shift that has already happened, compute the requirement hour by hour, and lay your actual roster beside it. The hour with the largest shortage is usually the one you have been explaining away. The rest of the restaurant economics series is collected in the restaurants hub.