A housekeeping dispatcher on AWS for a few dollars a month
The list is produced by priority: eleven rooms with guests arriving early, sorted by arrival time. It sends one housekeeper from the fourth floor to the first, back to the third, then the second, then the fourth again. About forty minutes of the morning disappears into a lift. This post walks through a small system that trades a little priority for a lot of walking.

Key takeaways
- Priority and route pull against each other; the answer is a compromise, not either one.
- Do-not-disturb is absolute. There is no override in the system.
- Share the difficult rooms out, or the same person gets them every week.
- Cleaned and inspected are different states and a person sets both.
- Designed on AWS for about $2 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Compute
- Management
- Analytics
- People
Three constraints that disagree
Priority says clean the room whose guest arrives at two o’clock. Route says clean the room next door to the one you have just finished. Fairness says the person who did all the checkouts yesterday should not do them all again today.
Any system that optimises one of these produces something the housekeeping team will quietly ignore, and the version that gets used is a compromise that is explicitly a compromise: mostly route, with priority overriding it where the timing genuinely requires, and fairness applied when the day’s work is allocated rather than within it.
What runs (the inside)
- Priority. Which rooms need to be ready and by when, which is not the same as which rooms are dirty. Part 2.
- Route. Ordering the work so the walking is manageable. Part 3.
- Fairness. Sharing the difficult and the easy over a period. Part 4.
One morning, end to end
- Compute
- Security & identity
- Management
In plain words
Thirty-four rooms need attention: eighteen are checkouts and need a full clean, sixteen are stayovers. Six guests are arriving before three o’clock and their rooms are prioritised over the rest.
Three rooms have do-not-disturb on. They are removed from the morning list entirely, re-offered at midday, and if they are still showing do-not-disturb at four, a person makes contact according to whatever the hotel’s policy is. The system’s involvement ends at flagging it.
The remaining rooms are allocated by floor, so each housekeeper works a contiguous block, with the early-arrival rooms pulled forward within their block. Over the week the allocation rotates, so the same person does not always get the floor with the family rooms.
Design rules that shaped every decision
- Route first, priority second, except where a genuine deadline requires otherwise.
- Do not disturb has no override anywhere in the system.
- Fairness is measured over weeks and includes room difficulty, not just room count.
- Cleaned and inspected are separate states, both set by a person.
- Record how long rooms actually take, so the difficult ones are known.
- Never allocate more than the day can hold; an impossible list is ignored entirely.
Why this shape
Housekeeping allocation is usually done on paper by a supervisor who knows the building, and it is generally done well. The reason to build anything is not that the supervisor is wrong; it is that the knowledge lives in one person’s head, the fairness is hard to track over weeks, and nobody has ever measured how long the rooms actually take.
So the system encodes what the good supervisor already does, makes the fairness visible over a longer period than anybody can hold, and collects timing data that turns “room 214 is a nightmare” into a number.
The next four posts walk through each piece: how rooms get prioritised, why the route matters as much as the order, how the work gets shared out fairly, and what ready actually means. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts