
- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on ‎08-20-2019 09:04 AM
I have come across a business requirement at one of my large enterprise customers which is somehow special to the ServiceNow platform, but still something I bet most larger customers working with outsourced IT teams should encounter - one way or another.
As a primer to this article you might want to read the excellent blogs from Ed on similar topics:
- Service Level Agreements: Business Hours, Schedules & Time Zones
- Service Level Agreements - Overriding TaskSLAController Functions
As good as they are, they are not covering my case. So let's explain.
Business Statement
Vendor specific Underpinning Contracts provide service to the customer leveraging support teams across multiple time zones and different working hours. There is no 24/7 support agreement defined in the Vendor Underpinning Contracts.
The end user SLA (end 2 end Service Commitment) already takes into account the impact of the timescales to support the Underpinning Contracts. For example an Underpinning Contract of 8 hours may well define an end 2 end SLA of 24 hours towards the end user once the potential periods where the current support team is not active (out of hours or out of time zone) are taken into account.
Customer requires the ability to measure a single SLA clock per Underpinning Contract, taking into account the time spent with different support teams, across different time zones, taking into account different working hours. Only hours worked across the teams during their allotted Time Zone and hours of service count towards the Underpinning Contract service measurement.
Example of single UC measurement for same Contract
Example of multiple UC measurement for different Contracts
Technical Challenge
ServiceNow SLA clocks (task_sla) set the Timezone and Schedule on initial creation of the task_sla record. Changes to the Timezone and Schedule, by updating the values directly on the task_sla, result in the complete measurement being recalculated on the new Timezone and Schedule.
There is no exiting mechanism to capture the business time spent across different Timezones or Schedules other than creating multiple task_sla records per Timezone or Schedule change. Separate task_sla records work on same SLA definition and do not record time already ‘spent’ across other task_sla records; hence 4 hour UC at Timezone 1 would result in a new 4 hour UC at Timezone 2.
Multiple task_sla records do not provide a single pane of glass view of how the vendor is performing. Multiple task_sla records do not provide a mechanism to notify or alert vendor surpport teams on UC progression/breach.
Options
- Utilize metrics to calculate time spent on UC, based on Timezone and Schedule changes.
-
- Would need to provide display on Incident of UC metric
- Would need to provide mechanism for alerting based on UC thresholds (50%, 75%, etc)
- Would need to remove visibility of UC task_sla to avoid confusion
- Provide reporting capability, based on rollup of multiple UC task_sla records.
- Custom solution generating parent SLA Rollup record automatically calculating the combined UC task_sla usage
-
- New table and business rules
- Minor changes to task_sla
- Would need to provide display on Incident of UC metric
- Would need to provide workflow for alerting based on UC thresholds (50%, 75%, etc)
- Would need to remove visibility of UC task_sla to avoid confusion
Proposed Design SLA Rollup
New SLA Rollup mechanism where one parent UC measurement is maintained.
Service Contracts for each Underpinning Contract.
Service Offerings linked to Service Contracts.
OOTB SLA Definitions which generate multiple task_sla records based on time zone and/or schedule change per single Service Contract.
Child task_sla records are linked to the SLA Rollup record.
Parent UC Measurement is maintained in the SLA Rollup record using the linked child task_sla data to generate the relevant sla clock usage.
Presentation of the UC measurement at record level.
Change to ootb KPI reports and PA where needed.
Technical steps to build out SLA Rollup Design
- Create new scoped application SLA Rollup
-
- This will hold single parent UC record for all task_sla records per contract per task
- Create new task_sla_rollup table based on attributes in task_sla (do not extend task_sla)
-
- Add contract reference field
- Create Service Contracts for all Underpinning Contracts i.e. HCL, Wipro
- Create Service Offerings and link to relevant Underpinning Contracts
- Create new SLA Workflow to run against the parent UC record for threshold notifications
- Create SLA Definitions to generate UC clock each time group changes (or TZ/Schedule changes)
-
- Some custom work may be required to capture the group schedule
- If Kingston not used, custom work to capture when TZ or Schedule changes
- SLA Type set to Underpinning Contract (do we need a new SLA Type for this?)
- Do not use default SLA workflow for these definitions
- Add parent field to task_sla table
- On creation of task_sla record; create new ‘parent’ task_sla_rollup table record
-
- If UC record exists in SLA Rollup for contract and task, set parent in task_sla
- If UC record does not exist in SLA Rollup create new ‘parent’ task_sla_rollup table record and copy across initial data set
- Create BR on task_sla on insert to check if existing vendor task_sla exists for task (incident)
-
- Correlation rule Service Offering Contract = Contract and task exists as SLA Rollup record
- Create and populate new task_sla_rollup table with required fields from task_sla
- Link task_sla to parent task_sla_rollup record
- Create BR on task_sla on update to refresh UC data set
-
- Data set attributes to be confirmed
- Consider Continuation and Inheritance (move to UC record?)
- Calculate breach time, Actual time left and Business Time left
- Amend existing views for task_sla to display SLA type (end2end) task_sla records
- Add new view to display OLA/UC type task_sla_rollup records
- Amend existing task_sla related lists to display SLA type (end2end) task_sla records only
- Create new OLA/UC related lists to display task_sla_rollup related records
- Review and Replace/Rework all existing ootb SLA KPI reports
- Review and Replace/Rework all Performance Analytics SLA specific elements
- Verify Mobile apps and potential impact on Service Portal
I hope this is useful for others, and to be frankly honest, it is not designed and build by me. One of my fellow TC colleagues was the brain behind it and socialised it with our product management teams as a good solution design which will serve the customer needs and at the same time does not impact future upgrades as it has very limited impact to existing functionality.
- 4,856 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi Daniel -
It was very nice meeting you at the Now at work event in Frankfurt today and thank you for sharing this article with me. However, I have a few questions.
1) What type of field is the new parent field in the task_sla table; true/ false?
2) In the below statement, what does the parent field need to be set to?
If UC record exists in SLA Rollup for contract and task, set parent in task_sla
3) Should the below if/else conditions be added to any of the 2 BRs you speak about later or a separate BR needs to be created?
- On creation of task_sla record; create new ‘parent’ task_sla_rollup table record
-
- If UC record exists in SLA Rollup for contract and task, set parent in task_sla
- If UC record does not exist in SLA Rollup create new ‘parent’ task_sla_rollup table record and copy across initial data set
4) It would be of great help if you could also share the two BRs as I am afraid there isn't enough information for me to create the BRs based on the explanation of the BRs.

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi Varun,
1) What type of field is the new parent field in the task_sla table; true/ false?
--> We used a reference field to our new roll up table
2) In the below statement, what does the parent field need to be set to?
If UC record exists in SLA Rollup for contract and task, set parent in task_sla
It needs to point the the appropriate roll up records that already exists.
3) Should the below if/else conditions be added to any of the 2 BRs you speak about later or a separate BR needs to be created?
Yes, this is on new insert of a regular task_sla record. It either needs to link to the existing rollup if there, or create a new rollup record.
4) It would be of great help if you could also share the two BRs as I am afraid there isn't enough information for me to create the BRs based on the explanation of the BRs.
I do not have the script in front of right now. But in a nut-shell (hope that helps 🙂 😞
BR 1: On Insert of new task_sla record
Create a new roll-up record if required for this task (you might want some conditions like only for incidents or so)
Populate all required start time stamps in that new record
Populate new parent field from above with sys_id of new created roll up record
BR 2: On update of task_sla record (if it has a parent info from BR 1)
If current task_sla records changed to resolved (complete / canceled etc) update the timestamp and calculations on the roll up based on your rules. You might need to check all other runing task_sla records for current task to see if all SLAs are closed or not
To give you an idea on what we created on the rollup records, these are some fields we use:
- Link to task (incident)
- Service Offering and BUsiness Service (cc'd from task for easier reporting)
- Start time
- Breach time
- Stop time
- Schedule and Timezone (taken from assignment group mainly)
- Actual elapsed time
- Actual elapsed percentage
- Actual time left
- Actual pause duration
- Busines elapsed time
- Busines elapsed percentage
- Busines time left
You see, we pretty much copied the structure and logic from a normal task_sla record.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi Daniel -
Thanks for the above response. However, there is still one thing I don't understand in this solution.
If the new master UC record created/ updated in the task_sla_rollup table is the result from the BR conditions we define, how does the below work? SLA Workflows are connected to SLA/UC definitions in the contract_SLA table. And since we are not defining any separate SLA definition for the master UC, how will the workflow attach to the master UC?
Create new SLA Workflow to run against the parent UC record for threshold notifications

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
well, as the management of Service Levels moves to the roll up record we also use that one for notification / escalation. Basically we cc'd the workflow on task_sla to our new table. We do not need the UC notifications if there is a rollup record.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
This is what I dont understand. The Workflow is attached to the contract_sla table and not the task_sla table. Then how do you cc the workflow from task_sla to task_sla_rollup table?

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
The workflow I mean is 'Default SLA Workflow' in our baseline. This runs on task_sla. Contract_sla has no default workflow. Is this something already customized in your environment?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Let me try and rephrase.
1) If I create the workflow field on the task_sla_rollup table with dictionary attributes and other aspects exactly the same as the workflow field on the contract_sla table,
2) Create a custom workflow(e.g. SLA notification and escalation workflow) for the task_sla_rollup record and set this workflow as part of the BR(insert or update),
3) Will this custom workflow still create events that can trigger notifications based on the progress of SLA duration of the master UC record in the task_sla_rolliup table??

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Sorry for the late reply ... completely missed your post.
Part of your new workflow is triggering events, so yes, your workflow can do that. Triggering events and thus sending notifications.