Overtime is the work that happens outside the schedule. That sounds simple until you ask a tracking tool where the schedule is — because most of them do not actually know. They assume a 9-to-5, or they ask nobody at all and count every hour the same. Both answers are wrong in a way that costs somebody money.
Get the line in the wrong place and you land in one of two failure modes. Put it too late and real overtime disappears — people work past their hours and nothing records it, so it is never paid, never noticed, and never fixed. Put it too early, or nowhere, and ordinary hours get relabelled as overtime, which inflates payroll and quietly rewards padding. The fix is not a better guess. It is to stop guessing and read the line off an actual shift.
The question is never “is it after 5pm?” It is “is this outside the hours this person was scheduled to work?”
The line is a schedule, not a clock
A shift is just a window — a start time and an end time for a given person on a given day. Once that window exists, labelling time is mechanical: the same activity means different things depending on which side of the edge it falls on. Working inside the window is regular time; working outside it is overtime. The pauses follow the same rule.
Two things fall out of this table that are worth saying plainly. Your worked-time total is productive plus overtime — idle and break are recorded for an honest picture of the day, but they do not pad the number. And time spent idling outside the shift is not counted at all: nobody should be credited, in either direction, for pausing on their own time.
A single day, split the honest way
Take someone on a 09:00–17:00 shift who ends up working until roughly seven in the evening. The tool does not need to be told they stayed late. The shift already says where the edge is, so everything past 17:00 that was actual work becomes overtime, and the idling in between is simply dropped.
Notice what did not happen: nobody typed “stayed late” into a form, and nobody assumed a default day and back-filled the difference. The 1.5 hours of overtime exist because the work happened and the schedule said it was outside the window. That is the whole trick, and it is why the number can be trusted enough to pay against.
Why the guessed 9-to-5 fails so often
The reason a fixed daytime assumption is wrong is that almost nobody works a fixed daytime. The moment you have shift workers, part-timers, split schedules, or anyone in a different country, “after 5pm means overtime” stops describing reality — and the gap is not evenly distributed. It shows up as unrecorded overtime for the people whose real hours start at 6am or run overnight.
The two highlighted rows are exactly the people a clock-based rule mislabels. Their overtime is real, it is worked, and under a 9-to-5 assumption it never appears — which is how overtime becomes a burnout problem and a fairness problem at the same time, long before it becomes a payroll line.
The edge cases a real schedule handles
No shift does not mean 9-to-5
The most consequential default is what happens when there is no shift at all. A tool that invents a 09:00–18:00 day for an unscheduled worker will silently swallow their hours. The honest default is the opposite: a day with no shift is time outside any shift, so the work is credited as overtime rather than hidden inside a schedule nobody agreed to.
Overnight shifts are just a different window
If overtime is defined by the sun, a shift that runs 22:00 to 06:00 is nonsense — half of it is “after 5pm” and half is “before 9am”. If overtime is defined by the window, an overnight shift is not a special case at all. It is one contiguous span like any other, and work inside it is regular no matter what the wall clock says.
The window belongs to a timezone, not a laptop
A shift edge is only meaningful against a fixed timezone. Evaluate it against whatever the machine clock happens to say and the window moves the instant someone changes their system time — which is both a correctness bug and a tampering hole. The window has to be anchored to the person’s canonical timezone so the edge stays put.
How TimerOS draws the line
This is the model the tracker is built on, and it is worth being precise about which parts apply to which plan.
- Shifts define the window. You build shift templates — start and end times, optional breaks, overnight support — and assign them across dates. The desktop tracker then labels productive time inside the window as regular and outside it as overtime, with idle and break outside the window dropped as off-work. Shifts and the team schedule are a Startup-and-up capability.
- No shifts means everything is regular, not overtime. On a Freelancer or no-shifts workspace there is no window to be outside of, so productive time simply stays regular. A solo user is not accidentally accruing “overtime” against a schedule that does not exist.
- The window is timezone-anchored. Shift edges are evaluated against each person’s canonical timezone rather than their machine clock, so changing the system time does not move the line.
- The hours are captured, not remembered. The Windows desktop app records them as you work — classified on your own machine, no screenshots — so overtime lands in the record because it happened, not because someone filled in a form at the end of the week. The full state model is in the time-states documentation.
Overtime is not a hard number to get right. It is a number almost nobody bothers to define, because defining it means having an actual schedule to measure against instead of a convenient assumption about when the day ends. Draw the line where the shift really is, and the two expensive mistakes — the overtime you never paid and the overtime you paid for twice — both stop happening on their own.