5 karma · joined April 1, 2023
To make oncall scheduling work better for everybody, once you have at least 4 oncall engineers for a rotation, check out https://oncallscheduler.com. it doesn't solve Oncall compensation, but it makes planning for vacations, fairness about who works Oncall on holidays, and such, work well.
There's another problem (#8 to add to the list) I also felt pain from: how you're scheduled to work oncall. We had ad-hoc manual scheduling of who would work oncall when. A tool for solving that is https://oncallscheduler.com (which I am affiliated with). It automates the oncall scheduling, while making it fair, predictable, and gives all engineers self-service control over when and how they're scheduled. I'd love some feedback on it.
There are several aspects to it that aim to make it feel fair. First there's the credit system, and people who take less desirable shifts getting more credits, so they end up working fewer shifts in total. But there are also limitations on what the scheduling admin can do. E.g. they can't assign credits to themselves, or enter "block periods" (= a calendar time when someone is blocked from being assigned any shifts, e.g. because they're on parental leave or military leave, or something like that). There's also a "credit accounting log", which shows all the transactions in the system, and how those transactions changed the credit balances of all the rotation members. I hope (and think) that the kind of geeky game-prone people who work tech oncall jobs might appreciate the game-like nature of this system.
What I built now, is pretty simple, but I think it solves the problem pretty elegantly: * Each user has a set of credits. You get credits when you get a shift assigned. You pay credits to other people who are assigned shifts. * You can self-assign shifts (which makes you earn credits). * You can bid credits to avoid getting scheduled for certain dates/holidays(e.g. Memorial Day)/importantEvents(e.g. Super Bowl Sunday). * Shifts which nobody has self-assigned are auto-allocated up to a given time horizon in the future. The auto-allocation of the next shift, assigns it to the person with the lowest value of "currentCredits + bidsToAvoidThisShift * rotationMemberCount / 2". - The exact algorithm isn't that important. But what it does is: it gives a shift to the person with the least credits (and they'll then get a bunch of credits), but it avoids giving shifts to people who have bid to avoid that specific shift.
The real value is that there is an algorithm doing the assigning. That makes this feel FAIR to all involved. If you didn't bid to avoid working on Christmas, don't complain about working then. But you'll also get more credits to work on Christmas, because you get everything that others bid to avoid working on Christmas (which means you will work fewer shifts in total over the year).
What do you think? Is this a problem worth trying to solve for real? If you look into the tool, do you think it looks like a good solution, or does it miss the mark somehow?