Build the Week From Demand, Not From Last Week's Names
Hourly teams in restaurants, retail, and warehouses do not need a full headcount every hour. They need enough people in the peak and fewer people in the trough. Copying last week's names into this week's grid is how you pay for eight people at 15:00 in a cafe that only needs three, then scramble at 19:30 when the dinner wave arrives. Start with a demand curve, then fill it.
Write demand as required hours by interval, not as a vibe. Example for a 40-seat restaurant on Friday: (1) 10:00–12:00 prep, 3 people; (2) 12:00–15:30 lunch, 7 people; (3) 15:30–18:00 close-and-reset, 3 people; (4) 18:00–22:30 dinner, 8 people; (5) 22:30–23:30 close, 3 people. A warehouse might use inbound, pick-pack, and dispatch windows instead. A retail floor might use opening, mid-day, and late-evening coverage. The shape is the schedule. Names come second.
Demand should include skill mix, not only bodies. A Friday dinner that needs two people who can run the pass is not staffed if you have eight runners and no cook. Encode station or skill on the shift template so the labour-cost preview is counting qualified hours, not generic availability.
- Forecast required headcount and skills by time interval before assigning names
- Do not copy last week's roster until you have checked this week's demand
- Separate prep, peak, and close windows in restaurants, retail, and warehouses
- Treat skill mix as a coverage requirement, not a nice-to-have
Match Availability Without Hiding the Cost
Availability is a constraint, not a promise to fill every cell with whoever replied first. Collect weekly availability, approved leave, maximum hours, student or visa limits, and 'cannot close' or 'cannot open' flags before you drag names. If availability lives in a group chat, you will discover the constraint after you have already published overtime.
Fill the peak first with people who are actually available for that window, then fill the shoulders. A common failure is to give the most reliable closer every closing shift because it is easy, which burns them out and inflates their weekly hours while new staff sit on quiet weekday lunches. Rotate desirable and undesirable windows inside the availability you already have.
Show a running labour-cost preview while you assign. If Friday dinner is budgeted at 32 server-hours and you have already placed 41, the extra nine hours are not a surprise at payroll — they are a decision you made on Thursday afternoon. Cost preview needs scheduled hours × estimated wage rate, with overtime hours highlighted at the overtime rate, not at the base rate.
- Capture availability, leave, and hour caps in the scheduler, not in chat
- Fill peaks with qualified available people before filling quiet windows
- Rotate unpopular closes and opens instead of loading them on the same staff
- Keep a live labour-cost preview at the estimated wage and overtime rate
Preview Overtime Before You Publish
Unplanned overtime on hourly teams is usually scheduled overtime that nobody added up. Daily thresholds, weekly thresholds, and rest-day work all convert ordinary assignments into premium pay. If the roster tool cannot show 'this person is already at 38 hours and this extra close will cross 40,' supervisors will keep adding because the shift looks short.
Work a numbered check before publish: (1) hours already assigned this week per person; (2) hours this assignment would add; (3) whether the day already has another shift; (4) whether the day is a weekly off or public holiday; (5) whether the assignment creates a rest-rule break. Example: Priya is assigned 9:00–17:00 Monday to Thursday (32 hours) and you add Friday 10:00–22:00 with a 30-minute unpaid break. That is 11.5 paid hours and a weekly total of 43.5. If weekly overtime starts at 40, you just scheduled 3.5 overtime hours on purpose.
Do not treat a late close as free labour. If the scheduled end is 22:00 and the team routinely stays until 23:15 to finish closing, the roster is understating demand. Either extend the published shift and budget it, or staff a short closing overlap. A labour-cost preview that uses scheduled hours while actual hours always run long is not a preview. It is a wish.
- Show weekly and daily hour totals per person before the roster goes live
- Flag weekly-off and holiday assignments as premium, not as ordinary hours
- Count a second shift on the same day toward the same weekly cap
- Staff the close you actually run, not the close written on the old template
Kill Clopen and Other Rest Collisions
Clopen — closing one night and opening the next morning — is the most common rest-rule failure in restaurants and retail. A closer who leaves at 23:45 and is rostered to open at 07:00 has not had a legal or practical rest. They will be late, they will call out, or they will work impaired. The schedule created the absence.
Set a minimum rest between clock-out and the next clock-in, then refuse to publish a pair that violates it. Example: if rest must be 11 hours, a 23:00 end cannot sit next to a 08:00 start. The same rule catches warehouse night-to-inbound collisions and retail late-mall to early-stocking collisions. If the business truly needs both duties, they belong to two different people, or the opening time has to move.
Split shifts create a milder version of the same problem. A 10:00–15:00 lunch and 18:00–23:00 dinner on the same person may be legal and still be a 13-hour spread that nobody budgeted as fatigue. Show spread-of-hours as well as paid hours. A cheap-looking split can be more expensive in overtime, transport, and no-shows than one continuous shift.
- Define a minimum rest period between any two assignments
- Block clopen pairs at publish time instead of counselling them after the fact
- Show spread-of-hours on split duties, not only paid duration
- Give closing and opening to different people when rest cannot be met
Keep Drafts Draft, and Use Open Shifts on Purpose
Hourly rosters change until they are final. Demand moves, someone calls in leave, a banquet gets added. If every intermediate edit lands on employees' phones, they learn to ignore the schedule and wait for a WhatsApp confirmation. Keep the week in draft, run the cost and rest checks, then publish once. After publish, a change is a named event: who moved, from which shift, to which shift, and who was notified.
Open shifts are for genuine residual demand, not for a manager who did not want to finish the roster. Publish the core coverage with named people, then release leftover peak slots as open shifts with the skill, site, start, end, and overtime impact visible. The first qualified person who claims it should see whether accepting it pushes them into overtime. A blind 'who wants Friday dinner?' in a group chat cannot show that.
Unclaimed open shifts need an owner before the day starts. If Friday 18:00 still has two unfilled server slots at Thursday noon, that is a recruiting or availability problem, not a notification problem. Either pull from another site, trim the service, or approve the overtime cost of extending people already on. Hoping the slot fills at 17:30 is how surprises are born.
- Edit in draft; publish a complete week so staff see one stable roster
- Use open shifts for leftover demand with skill, time, and overtime impact visible
- Assign an owner to unfilled open shifts well before the duty starts
- Record post-publish changes with the old assignment, new assignment, and notification
Close the Week Against Actual Hours
A good hourly roster is a forecast. Actual hours are the result. Compare them on purpose: scheduled hours versus paid hours, budgeted labour cost versus actual, open shifts filled versus still empty, overtime that was previewed versus overtime that appeared after close. If actual always overruns scheduled by ten percent, the demand curve is wrong and the next roster should start from that fact.
Investigate the gaps that create payroll noise. Present but unscheduled usually means a manager added someone verbally. Scheduled but absent is a no-show or a leave overlay that was missed. Clock-out well after scheduled end is either genuine overtime or a forgotten punch. Each of those has a different fix, and none of them should reach payroll as an unexplained blob of hours.
Attend Mitra keeps the hourly staff roster, draft-to-publish workflow, and attendance in one place so the labour-cost preview has something true to compare against. Managers can see week-to-date hours while assigning, employees see the published roster on their phone, and payroll receives approved hours instead of a reconstructed week from chat screenshots. Fair cycles are in how to manage rotating rosters. Split days need how to track employees working multiple shifts. Cost surprises after publish are how to calculate overtime from timesheets. If the roster still lives in chat, replace it with a WhatsApp shift roster alternative.
- Compare scheduled hours and cost with approved actuals every week
- Separate verbal extras, no-shows, and forgotten punches before payroll
- Feed consistent overruns back into the next demand forecast
- Let week-to-date hours sit next to the assignment grid while you build next week

