SLA Management

Promises with a clock behind them

First-response and resolution targets per priority, business calendars that know about your holidays, pauses that stop an on-hold ticket burning its clock, and five breach actions that fire exactly once. Included at every tier.

Included

The whole engine, at every tier

  • First-response and resolution targets
  • Per-priority targets inside one policy
  • Business calendars with timezone and holidays
  • Pause conditions by status category
  • Five breach actions, each idempotent
  • SLA fields queryable in TQL
  • Compliance, breach list, analytics and heatmap
Consequences

Wired into everything else

  • Inbound mail initialises the clock on a new ticket
  • Workflow transitions handle pause and resume
  • Moving a ticket restarts timers under the target policy
  • A breach writes to the activity feed and the audit trail
  • Reports export and schedule like every other report
Boundaries

Where the model stops

  • Two targets — first response and resolution
  • Pause is by status category, not by individual status
  • A resolution target in days converts at 8 business hours
  • Timers restart, not transfer, on a cross-project move

What a policy holds

  • Enabled The policy can be parked without being deleted
  • First-response target In minutes
  • Resolution target In minutes, or in days
  • Days conversion 8 business hours to the day
  • Per-priority targets Different clocks for different severities
  • Pause conditions A set of status categories
  • Breach actions Escalate, reassign, notify

A policy is owned by a project or by the organisation, and the organisation's policy is the inherited default for every project that has not taken over. SLA is one of the configuration areas a project can override wholesale and later revert to inheriting — the same mechanism that governs ticket types, priorities, incident flags and services.

Per-priority targets are what stop the usual compromise. Without them you either promise a four-hour resolution to everything, which you will not keep, or promise a five-day resolution to everything, which makes the critical ticket indistinguishable from the cosmetic one.

Setting
DefaultOut of the boxChange per calendar
Why it exists
Timezone
UTC
A desk in Brussels and a desk in Lisbon can carry different calendars against the same policy set.
Work start
09:00
Minutes before the day opens are not counted against you.
Work end
17:00
The remainder of a target rolls into the next working morning.
Work days
Mon–Fri
Working-minute arithmetic skips non-work days entirely.
Holidays
Date + name
Named, so the compliance report explains itself in December and at Easter.
Always-on calendar
24×7
For desks that genuinely run around the clock — one calendar, no exceptions to maintain.
Ownership
Org or project
One calendar carries the organisation-default flag; a project can own its own.
01 / Pause

On hold should not burn the clock

Pause conditions are a set of status categories — typically ON_HOLD. Entering a status in that set pauses the clock; the ticket accrues parked minutes instead of elapsed ones.

Waiting on the customer, on a supplier, on a change window: none of it should count against a promise you made about your own response time.

02 / Resume

Only the pending deadlines move

Leaving a paused status accumulates the parked minutes and pushes out only the pending deadlines. A first-response target that was already met is not moved.

That asymmetry is the whole point: met deadlines are historical facts. A system that recalculates them retroactively is a system whose compliance figure means nothing.

03 / The timer

Every ticket carries its own record

The per-ticket timer holds first-response due, at, breached and breach-processed; the same four for resolution; paused-at and elapsed-paused-minutes — and the policy the ticket started under.

Deadlines are facts about what was promised. Storing the originating policy is what lets you answer "what were we actually committed to on this ticket, in March" a year later, without archaeology.

04 / Self-healing

Fix the policy, the queue corrects itself

Editing a policy recomputes deadlines for still-open tickets from each ticket's own creation time, and clears breach flags on the pending side.

So a mistyped target is a five-minute correction rather than a permanent cohort of tickets measured against a number nobody meant. Closed tickets are untouched — their history stands.

Action
What it does
Activity entry
An SLA_BREACHED entry is written to the ticket's activity feed, alongside every other change — so the breach sits in the same timeline as the work, queryable by ticket, user, project and organisation.
In-app notification
An SLA_BREACH notification to the assignee, the project lead and any named users — deduplicated, so the person who is all three gets one notification, not three.
Email
The same recipients are emailed through the SLA breach template, which is editable at organisation, tenant or platform scope with a live preview and a test send. Free-text addresses can be named on the policy alongside real accounts.
Priority escalation
The ticket's priority is escalated, using your organisation's own priority ranking — so it also moves up every list sorted by priority, without anyone re-triaging.
Backup reassignment
The ticket is reassigned to the policy's backup assignee. The most useful of the five, because the common cause of a breach is that the assignee is unavailable and nobody noticed.
Guarantee Breach handling is idempotent per side — a re-run never re-notifies, re-escalates or re-assigns

The fields

  • slaStatus Where the ticket stands against its policy
  • slaDue The next deadline
  • firstResponseBreached Did we answer in time
  • resolutionBreached Did we finish in time
# the standing "what is on fire" filter
firstResponseBreached = true AND statusCategory != DONE ORDER BY slaDue ASC

# about to breach, still unassigned — the ones worth interrupting someone for
slaDue < +2h AND assignee IS EMPTY ORDER BY priority DESC

# last quarter's misses on one service, for the review meeting
service = "Payments" AND resolutionBreached = true AND resolved > -1q

Because these are ordinary TQL fields, a query like the first one can be saved and shared organisation-wide, pinned to a dashboard widget, used as the selection filter for an automation rule, or scheduled as a report with its figures in the mail body.

01 / Compliance

The number you report upward

Compliance rates overall and per project. This is the figure that goes in the board pack, which is exactly why the pause and resume semantics above have to be defensible.

02 / Breach list

Named tickets, not a count

A percentage tells you there is a problem. The breach list names the tickets, so the review meeting is about specific work rather than about the metric.

03 / Response-time analytics

The distribution, not just the mean

Response-time analytics across the period, alongside the resolution-metrics report's MTTR and trend, first-contact-resolution rate and reopen trend when you want the fuller picture.

04 / Heatmap

Volume against response time

A heatmap of volume and response time. It is the fastest way to see that Monday 09:00 is not a staffing problem in general — it is a staffing problem for ninety minutes.

Getting it out of the product

  • Export formats PDF · CSV · JSON · XML · XLSX
  • Schedule Daily, weekly or monthly, at an hour
  • Window Rolling 7 / 30 / 90 days, 6 / 12 months, this or previous month
  • Recipients Internal accounts and external addresses
  • The mail itself Carries the figures in the body, not an attachment

Recipients are re-resolved on every run, so someone who left the company stops receiving your SLA figures. A scheduled run never calls AI — an unattended report that quietly costs money and varies between runs is not a report.

Per-organisation policy governs whether scheduling is enabled at all, whether external recipients are allowed, and how many there may be, with an organisation-wide view of every schedule and the ability to disable any of them.

Do SLA clocks run overnight and at weekends?

Only if you say so. Every policy runs against a business calendar with a timezone (UTC by default), a work start of 09:00, a work end of 17:00, work days of Monday to Friday, and holidays given as a date and a name. Working-minute arithmetic skips non-work days and holidays entirely.

An always-on 24×7 calendar is available for desks that genuinely run around the clock, and calendars can be owned by the organisation or by a single project.

What happens to the clock when a ticket goes on hold?

A policy carries pause conditions as a set of status categories — typically ON_HOLD. Entering a status in that set pauses the clock.

Leaving it accumulates the parked minutes and pushes out only the pending deadlines: a first-response target that was already met is a historical fact and is not moved. Waiting on the customer does not burn the time you promised to spend on them.

If I edit a policy, what happens to tickets already running under it?

Editing a policy recomputes deadlines for still-open tickets from each ticket's own creation time, and clears breach flags on the pending side. The recomputation is self-healing: you fix the policy once and the queue corrects itself.

Each ticket's timer also records the policy it started under, because a deadline is a fact about what was promised at the time — not about what the policy says today.

What actually happens when an SLA is breached?

Five things, each idempotent per side so a re-run never doubles them: an SLA_BREACHED entry is written to the activity feed; an in-app notification goes to the assignee, the project lead and any named users, deduplicated; those people are emailed through the SLA breach template; the ticket's priority is escalated; and the ticket is reassigned to the policy's backup assignee.

Which of the five apply is configured on the policy, and named recipients can include free-text addresses as well as real accounts.

Can I search for tickets by their SLA state?

Yes. SLA state is a first-class query target in TQL: slaStatus, slaDue, firstResponseBreached and resolutionBreached.

So firstResponseBreached = true AND slaDue < now() ORDER BY slaDue ASC is an ordinary query that can be saved, shared organisation-wide, pinned to a dashboard widget, used as an automation rule's selection filter, or scheduled as a report.

What SLA reporting is included?

Compliance rates, a named breach list, response-time analytics, a volume and response-time heatmap, and per-project compliance.

Every one of them exports to PDF, CSV, JSON, XML or XLSX, and the SLA report can be scheduled daily, weekly or monthly with a rolling window. Scheduled mail carries the figures in the body rather than as an attachment, and never calls AI on a scheduled run.

Make the promise. Then keep it.

SLA policies, calendars, breach actions and reporting are included at every Trakr tier. Self-hostable, made in Belgium.