In Search of the "Perfect" Pager Rotation?
jSpectre asks: "At my new job the Unix SA team has increased from 5 to 7. We're trying to work out a new, rotating on-call schedule and everyone has 'perfect' but conflicting ideas. Twelve weeks on and 6 off, 25 weeks on and 10 off. I thought someone out there must have come up with the perfect formula given N number of people you could rotate through the weekdays and weekend most efficiently. My google and web searches have come up with nothing. Does anyone know of a good formula/solution? The requirements are this, we have 7 people (but the forumla should ideally apply to N people) who should rotate through the weekdays (a 24 hour period) and the weekend (a 48 hour period). There is a desginated primary and a secondary person. They should be on for a few weeks and off entirely for a few. Sound like a good thesis/research problem for someone? By the way, Google comes up with a lot of people's schedules if you search for pager rotation. Tisk tisk."
Give everyone points per week, either same for everybody or based on seniority. Then set up a schedule in advance, whoever has the most points gets the duty. When duty is taken, points are removed. People can of course volunteer for duty, and if multiple ones do, low points get first choice. Allow points to go negative.
Or something like that. I'm sure it could be an interesting exercise designing the points system and implementing a web page to handle it.
One more thing, you need some kind of deadline, no changing your mind within a week of duty. But if you get someone to swap, allow that.
Now if you are going to pay for the duty, you want the weekly points awarded based on how much different shifts cost. Maybe factor in seniority also.
Infuriate left and right
Let's start with the assumption that you don't care if you're on-call, so long as you never get paged to do something during non-business hours.
...)
A simple system that would work for N people might be the following:
1. Number the people 1..N (or 0..N-1 if you're feeling geeky).
2. The pager starts with person 1. If you need a secondary or tertiary (sp?), then assign to persons 2, 3,
3. If person j takes the call passes the pager on to the next unallocated person in the list, who takes on j's priority (i.e., primary, secondary, etc.); if the primary takes the call and you have secondaries, etc., the secondary becomes the primary and the next unallocated person on the list becomes secondary.
4. Goto 3 (couldn't resist)
Assuming that calls are evenly distributed, then you only have to take a call every N*(call inter-arrival time) units of time.
You could change around the "who gets primary next" rule in various ways.
Assuming that you don't get more than one call on a weekday or over a weekend, this system should be reasonably fair.
This is really easy! The length of the period of rotation is exactly x (number of persons) weeks long. At week 1, person 1 (primary) and person 2 (secondary) are on for Monday through Sunday. At week n, person n (primary) and person n+1 (secondary) are on. At week x, person x (primary) and person 1 (secondary) are on.
The length of a week is used so everyone gets an equal amount of time. Everyone is on call 2/x number of weeks. Shifts can be swapped easily, just be careful that primary and secondary aren't the same pserson! Primary and Secondary can be swapped -- the system can work with people being primary then secondary just as easy. Also, when deciding the order of rotation, you may wish to take skill/competence into account. Have it so the Junior guys are spaced out, so if junior person (primary that week) can't figure it out, he can call the secondary (more experience person).
He who laughs last is stuck in a time dilation bubble.
We all carry nextel phones or pagers and get text messages from our alerting system when things go down. When I see something go down and I'm somewhere I can vpn in I'll usually do so and check to see if any of my coworkers on actively vpn-ed in and give them a beep to see if they are already working on the problem and see if they need any help. If there isn't anyone looking at it and I'll usually jump on in and get to work and the next person who takes a peek will see me and we'll talk they'll get a feel for what's going on, the extent of the problem, etc. This works pretty well for us (we are small, 10 person group and pretty much know where each other are the evenings/weekends). We also have an answering service that has a formal 'on call' list, so if a customer calls with a problem they'll just call down the list until someone answers. We rotate the list around every quarter, or therabouts, so the 'primary' person changes. I often volunteer for the top spot on the list because I'm pretty flexible and don't have a wife/kids and don't mind being called. This works out well because if I'm not able to fix it we have a list they can call down and everybody pulls their weight so no one really feels bad if they have to hand it off down the list now and then. I'm guessing that since you are looking for a more formal schedule that this sort of 'loose' system may not be the right answer for you, but it may be the right answer for others. We have separate call out lists for some more specialized systems (oracle, router folks, mainframe, telecomm) so that when there is a problem with a specialized system you get the more experianced people first. Our managers are also at the bottom of the list, so if all else fails the call will go to a person who has a complete phone list and a good idea of where people are so they can start call people's alternate numbers and what not. This system also allows for quite a bit of flexiblity people. Our 'tradespeople' (aka union) side of the house where there are MOU's or something relating to off hours support has a more formal policy, but they also have financial incentive (time and a half type stuff) for being on call, so there isn't usually a lack of people willing to be on call. One thing that we have considered, that may work for you, is dumping our answering service for a PBX based application. That way customers could be routed through a menu tree (yeah, people just love those...) that would identify the area of the their problem and then page out the people on call for that area. You can tie something like that in with your calandering/scheduling system so that only people who have time marked as free are paged. You would have to incorperate some sort of checking to ensure that you had at least a primary and alternate for any given time, but it should be doable. I am coming from a shop where people are generally will to be on call when possible, so we don't often run into a situation where someone has to give up something just to be on call, so YMMV with this type of system.
Low bidder gets stuck with the job, and second lowest bidder gets secondary. All the rest have to pay the third lowest bid to the person stuck with the job.
In my team which has 5 people, we do one week of on-call, rotated around the team each week.
It means you go on call 1 week in 5.
Simple to understand, simple to implement and no hassles. People swap individual days with other SA if they have some pressing engagement which they need to attend.