Every summer the same thing happens on a small team: three people ask for the second and third weeks of July, the rota only works with two of the five in the kitchen, and whoever the manager answers first gets the week. The decision feels personal because it is made one email at a time. Making it once, against written rules, with all the requests in front of you, is fairer and usually approves more of them.
"We need two cooks and one cashier on every working day" is a rule you can check. "We can't have too many people off" is not. Count by role, because a team of nine can still be one sick day from having nobody who can run the till.
Seniority, first to ask, who missed out last year, or a mix. Turn it into a number from 1 to 5 per request and write the rule down where people can see it. A rule chosen after you have seen who asked for what is not a rule.
The requests that clash are rarely the pairs you notice. A long trip in week two can block a short one in week three that overlaps by a single day. Check every working day against the minimums, and treat days nobody works as free.
Going in the order the emails arrived is simple, and it is not always best: one early three-week request can block three people who each wanted four days. Compare the set that maximises priority with the first-come set and see what the shortcut would have cost.
"No" is easier to accept as "Tuesday the 15th is the day we drop to one cook; the 20th to the 24th works". Name the day that breaks the rule and offer the nearest dates that fit.
An invented café has four baristas, three cooks and two cashiers, minimums of two, two and one, and eleven requests across July and early August. Approving in the order the requests arrived says yes to seven, but they are mostly low-priority long trips. The planner approves seven too, and every one of them is a higher-priority request: the priority score goes from 16 to 20, and two baristas who asked for a week each get it instead of two long low-priority trips. For each of the four it cannot approve, it names the first day that breaks a minimum and who is already off that day, for example Ana's request clashes on Wednesday 15 July because two of the four baristas are already off. It also suggests the nearest dates that fit.
Either can be fair if it is written down before the busy season and applied the same way to everyone. The cost of first come, first served is that an early request for a long stretch can block several shorter ones in the same weeks. Whatever rule you use, decide it first, then enter it as the priority column and let the arithmetic check the cover.
As many as leave the minimum on duty for every role on every working day. Four baristas with a minimum of two on duty means two can be off at the same time, not three. Check each role separately, because a team can have plenty of people overall and still have only one person who can do a given job.
Only days the person would otherwise work do. A request that spans a weekend nobody works uses cover for the weekdays only, and a request that falls entirely on days off never affects cover. Set the working days to match your rota if you open on weekends.