Every staffing desk I have looked at has the same quiet problem somewhere in it. Somebody turns up for a shift and the card in their wallet expired last Tuesday. The client sends them home. That week does not get invoiced, the client remembers it for longer than you would like, and the worker is annoyed with you rather than with the calendar.
Nobody was careless. The date was in the system. It was just in a column that nothing reads.
Why the spreadsheet always loses this one
A spreadsheet is a good place to put a date and a bad place to remember one. It is passive. It answers when you open it, and the whole problem is that on the day it mattered, nobody opened it.
The usual fix is a person. Someone runs the sheet every Monday, sorts by the expiry column, sends the emails. That works, and it keeps working right until the week they are on holiday, or the week the desk is slammed. Which is the same week placements are highest and a lapse costs the most. A process that only survives on the quiet weeks was never built for the busy ones.
The second usual fix is a calendar reminder per person. That scales badly in a specific way: fine at forty workers, unusable at four hundred, and nobody notices the tipping point until they are well past it.
What watching properly looks like
The version I build rests on three ideas, and none of them are clever.
Warn more than once, at spacings that mean different things. On the system running at the staffing firm in my case study, permits and certificates flag at 180 days, 90 days and 30 days. Those are not arbitrary. Six months out is when a renewal can still be booked calmly. Three months out is when it needs to be in someone's week. Thirty days out is when it stops being admin and becomes a placement at risk. A single warning would have to pick one of those jobs and would do the other two badly.
Put it where the work already happens. A flag on a screen nobody opens has just moved the spreadsheet problem somewhere more expensive. It belongs in the list the person opens anyway: the daily queue, the worker's own record, the client's shortlist.
Let the worker see their own clock. On that build, every worker has a private link showing where their own permit stands, counting down, on their phone. It sounds like a small thing. It moves a surprising amount of chasing off your desk, because the person with the strongest reason to renew on time is the one whose job depends on it.
The design decision that actually matters
Here is the part most trackers get wrong, and it is not a feature. It is what happens when the data is missing.
Most systems read a field to decide whether somebody needs watching at all. Does this person need a permit? If the field is blank, the obvious behaviour is to skip them. That is the wrong read. A blank field usually means nobody has asked the question yet, not that nothing needs checking.
So on that build, a blank field gets flagged anyway. Yes, that produces some warnings you did not need. It also produced something more useful. When it went in, it turned out that just over half the firm's active workers had no answer recorded either way. Nobody had hidden that. It had simply never been asked in a way that anything checked afterwards. A tracker built the tidy way would have reported a clean board while being wrong about more than half the people on it.
A test you can run this week: find the field that decides whether someone needs a compliance check. Count how many active workers have it blank. If your system would quietly skip every one of them, it is not tracking anything, it is just storing it.
What this does not do
It will not stop somebody letting a ticket lapse. People do that. What it changes is when you find out: twelve weeks early, when a renewal is still a phone call, instead of on the morning of, when it is a cancelled shift and an awkward call to a client.
It is also not a reason to replace software that works. If the tool you run today tracks expiry properly and puts it in front of the right person, you are done, and I would tell you to stay on it. Plenty do not, and that is usually not a hole in the product. It is a gap between the product and how your particular desk works. That gap is the thing worth building into, and it is normally a small piece of work rather than a new platform.
The short version
- The date was never the issue. Nothing was reading it in time.
- Warn at 180, 90 and 30 days. Each one does a different job.
- Put the flag in a screen someone already opens, and give the worker their own countdown.
- When the field is blank, flag it anyway. Blank means nobody knows, and that is exactly the person you want to hear about.
Tell me what you run today and I will tell you whether this is worth building for you →