How the offer loop works
There are two obvious ways to run an offer loop and both are wrong. Sending to everybody at once produces a race that the person with notifications on always wins. Sending to one person at a time is fair and takes three days. This post is about the middle.
Key takeaways
- Batches of two or three, in list order, with a time limit per batch.
- The time limit shrinks as the shift gets closer, from hours to minutes.
- First to accept wins within a batch, and a conditional write makes that safe.
- Nobody is told they were in a later batch, or that somebody declined.
- When the list runs out, the manager is told with the reason each person was excluded.
Batches with a clock
- App integration
- Machine learning
- Management
- Analytics
- Front-end & mobile
- People
Why two or three
One at a time is fairest and far too slow: three people with a four-hour window each is half a day before the fourth is even asked. Everybody at once is instant and gives every shift to whoever happens to be looking at their phone, which over a year is a real and unfair distribution of money.
Two or three at a time keeps the loop moving while preserving most of the ordering’s effect. The people at the top of the list still get first refusal; they just get it alongside one or two others rather than alone.
The shrinking clock
| Days to the shift | Window per batch | Why |
|---|---|---|
| 7 or more | 8 hours | No urgency; let people see it when they wake up |
| 3 to 6 | 4 hours | Still comfortable, but the loop needs to finish |
| 2 | 90 minutes | Two batches will fit into a day |
| 1 | 30 minutes | Effectively the last chance before it becomes the manager’s |
A fixed window fails at both ends: eight hours per batch a day before the shift means the loop is still running when the shift starts, and thirty minutes a week out is needlessly aggressive about a Thursday that is seven days away.
Winning a race safely
Two people in the same batch can accept within the same second, and exactly one has to win. That is a conditional write on the offer’s state: the first accept sets it from open to taken, and the second finds it already taken and is shown that plainly rather than being told it succeeded.
The message the loser sees matters: “Rae got there first” is honest and fine. “You were not selected” is not what happened and reads badly. It is one sentence and it is the difference between a system people use and one they resent.
When nobody takes it
That breakdown is genuinely actionable. Two people excluded for overtime is a decision a manager can take — approve the overtime, or not. Two untrained on the station is a training gap that this exact situation will produce again next month. “No cover found” contains none of that.
Next: what approval actually does.
All posts