Half Our Records Say Late. Almost None of Them Mean It

49.5 per cent of our attendance records carry a late flag, with a mean lateness of 271 minutes. Nobody is four and a half hours late half the time. Here is what that number is actually measuring.

**A late flag does not measure whether somebody was late. It measures the

distance between a punch and a number in a schedule**, and when half your records

are flagged, the schedule is the thing that is wrong.

We found this in our own production data. Of 40,970 attendance records, 20,296

carry a late flag. That is 49.5 per cent. The mean lateness across those flagged

records is 271 minutes.

Four and a half hours. Half the time. That is not a workforce problem.

What the number is really made of

A lateness calculation has two inputs: the time somebody punched, and the time

they were supposed to start. The first comes from a terminal and is close to

unarguable. The second comes from a roster, which somebody configured, possibly

months ago, possibly for a different shift pattern than the one currently being

worked.

The subtraction is trivial. The trouble is that all the uncertainty sits in the

second number and none of it in the first, so a system reports lateness with the

confidence of the terminal and the accuracy of the roster.

When a night-shift employee is attached to a day-shift schedule, the arithmetic

does its job perfectly and reports them as many hours late, every single day,

forever. Nothing is broken. The answer is just meaningless.

How to tell which kind you have

Real lateness and configuration lateness look completely different once you know

what to check.

Real lateness clusters in minutes. Traffic, school runs, a slow lift. The

distribution sits in the ten-to-forty minute band and has a long thin tail.

Real lateness varies. The same person is fine on Tuesday and twenty minutes

late on Wednesday.

Real lateness concentrates. A minority of people account for most of it, which

is why it is actionable at all.

Configuration lateness inverts all three. The gap is measured in hours rather

than minutes. It does not vary, because the same wrong offset applies every day.

And it spreads evenly across whole groups of people, because rosters are assigned

in groups.

If your exception list has a flat distribution around a large number, you are

looking at the second kind, and no amount of conversation with employees will

move it.

The diagnostic that takes five minutes

Sort your people by average flagged lateness, descending. Look at the top twenty.

For each one, ask a single question: is this person's average measured in minutes

or in hours? Anybody in hours is on the wrong roster. You have just found them

without investigating anyone.

Then look at whether the flagged individuals share a site, a shift or a start

date. Configuration errors arrive in batches, because that is how rosters are

applied. One wrong assignment usually explains a whole department.

We would expect most operations running this to find that a small number of

roster assignments explain the majority of their exceptions.

Why this matters more than it sounds

An exception report exists to tell a supervisor where to look. That only works if

the list is short enough to read and trustworthy enough to act on.

At 49.5 per cent, neither holds. Nobody reads twenty thousand exceptions, so the

report gets ignored, and once it is ignored the genuine lateness inside it is

invisible too. A system that flags half of everything has the same practical

value as a system that flags nothing, with the added cost of having taught

everybody to dismiss it.

There is a second cost that shows up later. Lateness flags feed deduction

policies and performance conversations in a lot of companies. A flag that is

actually a roster artefact, used in either, is a real unfairness applied to a

real person. And if it ever reaches a labour dispute, the employer is holding a

record that is provably wrong half the time, which is worse than holding no

record at all.

What to fix, in order

Fix the rosters, not the flags. The temptation is to raise the tolerance

threshold until the list looks reasonable. That hides configuration errors

underneath a wider band and destroys the genuine signal at the same time.

Attach people to the shift they actually work. Including the ones who

swapped, the ones who moved site, and the ones whose pattern changed when a

contract changed. This is unglamorous and it is the whole job.

Then set a tolerance you can defend. Once the roster is right, a threshold is

a policy decision rather than a way of suppressing noise.

Check the rate quarterly. A roster is not a thing you configure once. People

move, and every move is a chance for the schedule and the reality to separate

again.

The three roster mistakes behind almost all of it

Having gone through this in our own data, the causes fall into three groups and

they are not equally common.

The night shift on a day roster. The biggest single producer of hours-long

lateness. Somebody works 22:00 to 06:00 and is scheduled against an 08:00 start,

so the system computes fourteen hours late every night. It is obvious once you

see it and invisible in a list of twenty thousand rows.

The person who moved and the roster that did not. Staff transfer between

sites far more often than schedules get revisited. The new site runs different

hours, the assignment still points at the old ones, and the flag appears the day

after the transfer with nothing in the record explaining why.

The rotation nobody modelled. Two-week rotations, four-on-four-off, alternate

weekends. These are extremely common in the multi-site operations that run

biometric terminals, and they are the hardest thing to represent in a scheduling

system. The usual outcome is that somebody picks the more common of the two

patterns, applies it permanently, and accepts that half the weeks will be wrong.

That third one is worth dwelling on, because it is where good intentions go

wrong. A rotation modelled as a fixed schedule is not slightly wrong, it is

exactly wrong half the time, and the flags it produces alternate in a pattern

that looks almost like real behaviour. It is the hardest of the three to spot and

the one most likely to end up in a performance conversation.

What a useful exception report looks like

Once the rosters are right, the report changes shape rather than just shrinking.

It should be short enough that a supervisor reads all of it. If it is not, the

threshold or the roster is still wrong.

It should say what the schedule was, not just that somebody was late. A flag

without the comparison is an accusation without evidence, and the first question

anybody sensible asks is "late against what?"

It should separate a first occurrence from a pattern. One late morning is

information for nobody. Six in a month is information for a manager.

And it should be possible to mark a flag as explained without deleting it. The

record of what happened and the record of what it meant are different things, and

a system that forces you to erase one to express the other is throwing away the

audit trail you will want later.

The uncomfortable version

We build attendance software and we shipped the thing that produces this flag.

The number above is from our own live data, which means our own product has been

reporting half its records as exceptions and we did not notice until we went

looking.

The lesson we took is that a metric which is almost always triggered is not a

metric. It is a background colour. Any system with an exception rate near half

should treat the rate itself as the first bug, before anybody looks at a single

employee.

See how rosters and attendance connect ·

The full dataset

Put the workflow into practice.

Start with every Wurxa feature for 14 days. No credit card required.

Start free trial

Frequently asked questions

Why does my attendance system flag so many employees as late?

Almost always because the schedule it compares against is wrong, not because people are late. A late flag is the gap between a punch and a scheduled start, so if the scheduled start is the wrong one, every single day for that person is flagged. In our own data 49.5 per cent of records carry the flag and the mean lateness is 271 minutes, which describes rosters rather than behaviour.

What does a late flag actually measure?

The distance between one timestamp and another timestamp somebody typed into a schedule. It carries no information about intent, traffic, handovers or whether the shift was swapped. Treating it as a measure of an employee is a category error; it is a measure of agreement between two records.

How do I fix false lateness in attendance reports?

Sort employees by their average flagged lateness and look at the top of the list. Anyone whose average is measured in hours is on the wrong roster, not chronically late. Fix those assignments first, and the exception list usually shrinks to something a supervisor can actually work through.

Should lateness be measured against a roster or a fixed start time?

A roster, if you run shifts at all. A fixed start time is only correct when everybody genuinely starts at the same hour every day. The moment a night shift, a rotation or a site handover exists, a fixed start produces false positives for every person it does not describe.

Is a high lateness rate ever real?

Yes, but it looks different. Real lateness clusters in minutes, varies by day, and concentrates in a minority of people. A flag rate near half the records, with an average in hours and no variation for the individuals concerned, is a configuration result rather than a behavioural one.

More from Wurxa

Continue reading