Skip to content
All work

04Shared codebase

SLA clocks that stop when the clock should stop

An internal IT service desk used across the group.

The problem
SLA clocks kept running while tickets waited on the person who raised them, so reports blamed operators for delays they did not cause.
What I built
Pause-aware SLA tracking, recomputation when a category’s targets change, and most of the screens requesters use.
The result
A breach flag means an actual breach — on the backend and on the screen.

About 12% of the service backend — 1,452 of 11,579 lines — and 56% of the requester pages in the main platform, 1,372 of 2,433 lines. Sole author of the pause tracking and the recomputation path; the escalation command and the operator console are colleagues’ work, not mine.

An SLA clock that keeps running while a ticket is waiting on the person who raised it measures the wrong thing. Someone asks for a VPN account, the operator asks which system, the requester goes on leave for three days, and the resolution target breaches. The report then says the operator was slow, which is both false and the sort of number people stop trusting.

I built the pause and resume tracking: the clock stops when a request moves into a waiting state and starts again when it comes back, and the elapsed time is accumulated rather than recomputed from the creation stamp. I added priority-based overrides on top, so a P1 does not inherit a category's ordinary targets.

The part that turned out to matter most was recomputation. Targets live on the category, and when someone edits a category's first-response or resolution time, the tickets already open under it have to move too. Without that, the matrix on screen and the deadlines in the database quietly disagree, and only the database is enforced. I also made cancel and reopen comments typed, so reopening adjusts the resolution due-date — a reopened ticket that keeps its original deadline is already breached the moment it reopens.

On the requester's side I wrote most of what people see: cancelling or reopening a request with a required reason, rating a resolved one, attachments, and half of the chat front door, including messages that mix Arabic and Latin script in one line. The client-side breach check follows one rule from the backend: while the clock is paused, an open target cannot show as breached, so the breach highlight never contradicts the "paused" chip next to it.

Screens

  • Service-desk category table with columns for department, priority, first-response target, resolution target, mode and status. Rows are grouped under Account & Access and Network & Connectivity, with targets ranging from 30 minutes to 24 hours.
    The category taxonomy and its SLA targets. Editing a row here has to move the deadlines on every ticket already open under it, which is the recomputation path.
  • Chat front door titled "How can we help?", with four suggested requests — VPN or system access, a CRM bug, a new report, shared-drive access — above a message box.
    Where a request starts: a conversation that gets classified into a ticket. Product name blurred.
  • My Requests list with status filters and a "Breached only" toggle. Several open tickets carry a red "SLA breached" badge and a red edge; cancelled ones do not.
    The requester’s list. A cancelled ticket is never marked breached, and one waiting on its requester would not be either — the check follows the paused clock.

Need something like this built?

Taking freelance work · ~20h/week.

Start a project