
Saturday is your busiest service and you end up with three people on the floor. You find that out on Friday evening, because the file counts hours per person and nobody ever counts heads per day. An employee shift schedule template earns its keep only if it does both at once, so what follows is one filled in over two weeks, with the cost arithmetic and the notice rules beside it.
Four shapes cover almost every team we meet, and picking the wrong one wastes more time than filling in the right one. The question is not how many people you employ. It is how much your opening hours move, and whether anyone is shared between sites.
| Your situation | Shape of the template | Cycle | Where it breaks first |
| One site, fixed opening hours, under 10 people | One row per person, one column per day | 1 week | The first swap between two people |
| Fixed hours, part-timers with variable hours | Same, plus an hours column per person | 2 weeks | Notice periods, see further down |
| Continuous 24/7 cover, teams rotating | One row per team, not per person | 3 to 8 weeks | Headcount arithmetic, see the rotating shift schedule template |
| Several sites, staff shared between them | One tab per site plus an availability sheet | 1 week | The moment somebody is booked twice |
Most managers reach for the weekly grid because it fits on one screen. It stops working as soon as a part-timer’s hours move, since a single week gives you nowhere to balance a short week against a long one. That is the case for two weeks, and it is the shape below.
Here is the grid for a 24-cover bistro in Ghent, closed Sunday and Monday, five people on the payroll. Shift codes first, because the codes are what keep the cells narrow enough to read on a phone.
Week 1:
| Person | Contract | Tue | Wed | Thu | Fri | Sat | Hours | Variance |
| Sofie, head chef | 38 h | C | C | C | C | off | 38.0 | 0 |
| Bram, chef de partie | 38 h | off | C | C | C | C | 38.0 | 0 |
| Lina, floor | 30 h | B | B | D | B | B | 30.0 | 0 |
| Tom, floor | 19 h | A | off | off | B | B | 19.0 | 0 |
| Yusuf, student | variable | D | off | off | D | B | 14.5 | quota |
| People on shift | 4 | 3 | 3 | 5 | 4 | 139.5 |
Week 2:
| Person | Contract | Tue | Wed | Thu | Fri | Sat | Hours | Variance |
| Sofie, head chef | 38 h | off | C | C | C | C | 38.0 | 0 |
| Bram, chef de partie | 38 h | C | C | C | C | off | 38.0 | 0 |
| Lina, floor | 30 h | B | D | B | B | B | 30.0 | 0 |
| Tom, floor | 19 h | A | off | B | off | B | 19.0 | 0 |
| Yusuf, student | variable | off | off | D | B | B | 17.0 | quota |
| People on shift | 3 | 3 | 5 | 4 | 4 | 142.0 |
Two things are worth noticing before you copy it. The rest day rotates, so Sofie and Bram alternate the Saturday rather than one of them owning it forever. And the two weeks are not identical: week 1 puts three people on Thursday and five on Friday, week 2 flips it. Whether that is right depends on your covers, not on the template. Laying the two weeks side by side simply means you see it before your team does.
Now read the grid sideways instead of downwards. Sofie’s C shift ends at 23:30 and her next one starts at 11:00, which leaves 11.5 hours of rest. The Working Time Directive 2003/88/EC asks for 11 consecutive hours in every 24, plus 24 uninterrupted hours of weekly rest on top of that. She clears it by thirty minutes. Move her start to 10:00 because a delivery is coming, which any manager would do without thinking twice, and the schedule breaks.
That is the trap in every template built column by column: it hides the overnight gap. Close on Friday at 23:30, open on Saturday at 10:00, and you have quietly written 10.5 hours of rest into a grid that looks perfectly legal on the page.
A Carrefour Express in Namur runs this same shape with eight rows rather than five and one extra column: which till the person opens. Same template, one column of local knowledge. That is usually all the customisation a good grid needs.
Hours per person are the easy half. The number that decides whether Saturday was worth opening is the loaded cost, and it is the column almost every template leaves out. Take the two-week totals above, put a gross hourly rate against each row, and add the employer charge. The rates below are illustrative, not a sector scale; substitute your own.
| Person | Hours, 2 weeks | Gross per hour | Gross cost | Employer charge | Loaded cost |
| Sofie, head chef | 76.0 | 19.00 | 1,444.00 | 25% ONSS | 1,805.00 |
| Bram, chef de partie | 76.0 | 15.50 | 1,178.00 | 25% ONSS | 1,472.50 |
| Lina, floor | 60.0 | 14.00 | 840.00 | 25% ONSS | 1,050.00 |
| Tom, floor | 38.0 | 13.50 | 513.00 | 25% ONSS | 641.25 |
| Yusuf, student | 31.5 | 12.00 | 378.00 | 5.42% solidarity | 398.49 |
| Total | 281.5 | 4,353.00 | 5,367.24 |
Amounts in euro. The 25% is the basic ONSS employer contribution rate for a private-sector employee in Belgium; the student row carries the solidarity contribution instead, 8.14% in total of which 5.42% falls on the employer, and only while the student stays inside the annual quota of 650 hours that has applied since 2025.
Divide 5,367.24 by 281.5 and you get 19.07 euro of loaded cost for every hour written on the grid. That single figure belongs at the top of the sheet, because it turns any staffing question into arithmetic you can do in your head. One extra evening shift of 6.5 hours costs roughly 124 euro before it has sold a thing.
The student row is where it gets interesting. At the same 12.00 euro gross, Yusuf costs 12.65 an hour loaded while a standard contract at that rate would cost 15.00, a gap of just under 19%. Multiply that across a full season of Saturdays and you can see why the quota counter deserves a cell of its own rather than a mental note.
At Shyfter, we see this cost column left empty more often than any other, and it is the one that answers the only question an owner really asks. If you want the ratio rather than the euros, the labour cost percentage calculation sits directly on top of these two totals.
A template that is legal on Monday can be illegal on Wednesday, purely because of when you sent it. Notice periods for schedules and schedule changes are national, they differ by more than most managers expect, and they are the rule most often broken by a grid that lives on one laptop.
| Country | Who it binds | Minimum notice | Shortened by agreement? |
| Belgium | Part-time staff on a variable schedule | 7 working days before the period starts | Yes, down to a floor of 3 working days by sectoral CCT |
| France | Part-time contracts, any change of hours | 7 days, article L3123-24 Code du travail | Yes, down to 3 days by branch agreement |
| Netherlands | On-call contracts under the WAB | 4 days, in writing | Yes, down to 24 hours by CAO |
| Spain | Irregular distribution of working time | 5 days, article 34.2 Estatuto de los Trabajadores | No, that is the statutory floor |
Belgium is the one that catches people out. The seven working days run before the period the schedule covers, not before the individual shift. Publish a two-week grid on a Friday afternoon and the second week is comfortably fine while the first is already late.
Which is a second argument for the two-week shape, quite apart from balancing part-time hours: it gives you a publication rhythm that clears the notice in all four countries above without you having to think about it. None of this replaces your own sector agreement, though. In Belgian horeca under joint committee 302, read the CCT before assuming the three-day floor is yours to use.
A spreadsheet template is the right tool up to a point, and we say that as a company selling the alternative. Under ten people, one site, stable opening hours: fill in the grid, it does the job.
The point where it stops is not headcount. It is the first swap. The moment Tom asks Lina to take his Saturday, four things have to change at once: his hours column, her hours column, the people-on-shift row, and the copy of the schedule already sitting on five phones. A spreadsheet updates the first two and lies about the other two. That gap is where the Saturday with three people on the floor comes from.
That is what staff scheduling in Shyfter does differently: hours, rest checks and loaded cost recalculate as the shift moves, and the version on the phone is the version you just changed. If swaps are your particular headache, it pays to write the rules down before automating them, and our shift swap policy guide covers what belongs in that document.
For the grids themselves, the two neighbours of this page are more specific than it is. Want the Excel formulas rather than the shape? The shift schedule template in Excel gives you three grids and the four formulas behind them. Running continuous cover across rotating teams instead? Start from the rotation patterns.
Bring your current grid to a free demo and we will rebuild these two weeks in it with you. Thirty minutes is enough to see where the rest checks fire and what your real cost per hour is.
Two, in most cases. A single week gives you nowhere to balance a short week against a long one, so a part-timer’s hours never land exactly on contract. Go beyond two weeks only when your cover is continuous and rotates between teams, because there the cycle length is set by the pattern rather than by you.
Yes, and per day as well. A column of totals per person tells you whether contracts are respected; a row of totals per day tells you whether the service is actually covered. Templates carrying only one of the two are what produce a Saturday with three people on the floor.
It can, provided the student rows carry their own cost rate. In Belgium a student inside the annual quota of 650 hours is charged the solidarity contribution rather than full employer contributions, so an identical gross hourly rate produces a different loaded cost. Keep the quota counter in the same file, otherwise you discover the overrun in December.
Read it sideways rather than downwards. For each person, take the end time of one shift and the start time of the next; anything less than 11 hours breaches the daily rest rule. By hand that takes about ten minutes for a team of five, which is precisely why it stops being done at fifteen.