Why Your Response SLA Might Never Start (And Why SLAConditionSimple Fixes It)
One of the lesser-known behaviours of ServiceNow Service Level Management is how SLA conditions are evaluated. This can lead to response SLAs silently failing to attach, resulting in inaccurate reporting and artificially high SLA performance.
Fortunately, ServiceNow provides an out-of-box alternative condition engine, SLAConditionSimple, specifically designed to address this scenario.
The Problem
Most response SLAs are configured similarly to this:
Start Condition
- Active = true
- Priority = 4
Stop Condition
- Assigned to is not empty
The example below is taken from a standard response SLA definition.
At first glance this appears perfectly reasonable:
- When an Incident is created, start the response SLA.
- When someone is assigned, stop the response SLA.
However, this is not what always happens.
Understanding the Default SLA Engine
The default SLA condition engine (SLAConditionBase) evaluates conditions in this order:
- Stop
- Pause
- Start
Importantly, the Start condition is continuously evaluated, not just when the SLA first attaches.
This means the Start condition is effectively a "keep running" condition rather than simply an entry point.
ServiceNow documents this evaluation order because overlapping conditions can prevent an SLA from ever attaching.
The Real World Example
Imagine a Service Desk analyst answers the phone.
They create the Incident and immediately assign it to themselves before saving.
At the point the record is inserted:
Active = true
Priority = 4
Assigned to = John DoeBoth conditions are already true.
Start Condition ✓
Stop Condition ✓Because the default engine evaluates Stop before Start, ServiceNow considers the SLA immediately complete before it has ever attached.
Result:
- No Task SLA record is created
- No response time is measured
- The interaction disappears from SLA reporting
The analyst responded instantly, but there is no evidence that the response SLA ever existed.
Why This Matters
This behaviour commonly affects:
- Phone calls
- Walk-up support
- Service Desk analysts who self-assign during logging
- Integrations that populate Assigned To immediately
The outcome is under-reporting of response SLAs.
From a reporting perspective it appears that fewer tickets required a response SLA than actually did.
This can inflate SLA compliance because successful responses are never counted.
Enter SLAConditionSimple
ServiceNow ships an alternative condition processor called SLAConditionSimple.
Rather than using the default transition logic, it interprets each condition independently.
The attach logic is extremely simple:
attach: function() {
return this._conditionMatches(this.sla.start_condition);
}It only evaluates the Start condition when deciding whether to attach the SLA. The Stop condition is ignored during attachment.
Once attached, normal lifecycle processing continues.
This means the previous example behaves as expected.
Incident Created
Start = True
Stop = True
↓
Task SLA is created
↓
Immediately completesInstead of missing the SLA entirely, you now have:
- A Task SLA record
- An accurate response duration (often a few seconds)
- Correct SLA reporting
Visual Comparison
Default SLAConditionBase
Incident Saved
│
▼
Check Stop?
│
├── Yes
│ │
│ ▼
│ No SLA Created
│
▼
Check Start?SLAConditionSimple
Incident Saved
│
▼
Check Start?
│
├── Yes
│
▼
Create Task SLA
│
▼
Evaluate Stop
│
▼
Complete SLAWhen Should You Consider Using It?
SLAConditionSimple is particularly useful for Response SLAs, where the completion event may already exist when the record is first saved.
Typical examples include:
- Assigned To
- First Response
- Work Notes Added
- State changes performed during creation
It is generally less useful for resolution SLAs, where the stop condition usually occurs much later in the ticket lifecycle.
How to Enable It
There are two approaches:
Per SLA
Set the Condition Type on an SLA Definition to Simple.
This allows individual SLAs to use the simplified transition logic without affecting others.
Instance Default
Set the system property:
com.snc.sla.default_conditionclass = SLAConditionSimpleThis causes new SLA definitions that do not specify a condition class to use SLAConditionSimple by default.
Things to Consider
SLAConditionSimple is not a replacement for the default engine in every scenario.
The default implementation provides more advanced transition behaviour for complex Start, Stop, Pause and Reset combinations. ServiceNow recommends using the supplied implementations as examples if further customisation is required.
For most response SLAs, however, SLAConditionSimple provides behaviour that better reflects user expectations by ensuring an SLA is attached whenever the Start condition is met, even if the Stop condition is already true.
Key Takeaway
If your response SLA uses a Stop condition such as Assigned To is not empty, State changes, or First Response, check whether records can satisfy both the Start and Stop conditions during creation.
If they can, the default SLA engine may never create a Task SLA.
Switching that SLA to use SLAConditionSimple ensures the SLA is attached first and then completed, resulting in accurate reporting without changing the underlying business process.