Chapter 1 · Intake, routing and roles
From a request to a ticket
People ask a business for help by email, on a website, by phone and in chat. A service desk turns every one of those into the same thing: a ticket with a number, an owner, a clock and a history. This chapter says what the desk replaces, how a request becomes a ticket and finds its way to a person, and who may do what.
22 min8 channels, 1 queue7 ticket types5 roles, 3 system logins
By the end of this chapter you can
- Say what M19 replaces, who it serves and what it leaves to other modules.
- Follow a request from any channel to a ticket, and say how an emailed reply finds the ticket it answers.
- Read an impact and urgency table, and name the five roles and three logins that act on tickets.
One desk, three kinds of people
M19 replaces help desk, IT service management and customer support software: Zendesk, Freshdesk and Freshservice, Jira Service Management, ServiceNow ITSM at small-business scale, Zoho Desk and Intercom [1][2]. It is one desk for three groups of people: customers who ask a business for help, employees who ask for a laptop or a password reset, and the people who look after plant IT and OT, the computers that run machines. Table names start with svc_.
The desk takes tickets from email, a portal, a chat widget, phone logging, Slack or Teams, and an API. It uses queues, groups and routing, SLA policies with business hours, a service catalogue with approvals, incident, problem and change handling per ITIL 4 [3], a knowledge base, satisfaction surveys, and a configuration database (CMDB) that includes PLCs, HMIs and SCADA servers linked to the plant's equipment list.
| In scope | Left to another module |
|---|---|
| Tickets from email, portal, chat, phone, Slack or Teams, API | Field visits to a customer or machine (M18) |
| Queues, groups, routing, macros, automation | Investigating a quality complaint (M08); the desk only raises the complaint |
| SLA policies, business hours, pause states, breach alerts | Writing public help-centre pages (M17) |
| Service catalogue, incident, major incident, problem, change enablement | |
| Knowledge base, deflection, CSAT, CMDB with IT and OT items |
The capabilities and their tiers
Each capability carries a tier. MVP must exist for a small business to cancel the old tool with confidence. STD is parity with mainstream tools. BIC is best-in-class work, here the AI assist, which is advanced.
| Capability | What it does | Tier |
|---|---|---|
| Omnichannel intake | Email-to-ticket with threading, portal, chat widget, phone logging, Slack or Teams, API; the requester is matched to a core_person or CRM contact | MVP |
| Ticket workflow | Types, statuses, priorities from impact and urgency, categories, groups, assignment (round robin, skills), internal notes, merge, parent and child | MVP |
| SLA management | Policies by conditions; first response, next response and resolution targets; business hours, holidays, pause statuses, breach warnings | MVP |
| Knowledge base | Internal and public articles with versions, suggestions while typing, deflection measurement | MVP |
| Service catalogue | Request items with forms (reusing the M01 engine), approvals and fulfilment tasks | STD |
| Incident and major incident | Major incident flag, communication templates, linked tickets, post-incident review | STD |
| Problem management | Problems linking incidents, root cause, workaround, known-error database | STD |
| Change enablement | Standard, normal and emergency changes; risk; implementation and back-out plans; approval; change calendar; conflict detection | STD |
| CMDB (IT and OT) | Configuration items including PLC, HMI, SCADA servers and network gear; relationships; link to equipment | STD |
| CSAT and reporting | Surveys on resolve; first response, time to resolution, backlog, SLA attainment, agent load | STD |
| AI assist | Triage (category and priority), summaries, suggested replies and articles, always with the agent's approval | BIC |
What a ticket holds
A ticket is a row in svc_ticket; every message on it, public reply or internal note, is a row in svc_ticket_message. Messages are never edited: a correction is a new message.
| Field | Allowed values |
|---|---|
| ticket_type | incident, service_request, question, problem, change, complaint, task |
| channel | email, portal, chat, phone, slack, teams, api, walk_in |
| status | new, open, pending_requester, pending_third_party, on_hold, resolved, closed |
| priority | p1, p2, p3, p4, worked out from impact and urgency (low, medium, high) |
| message author_type | agent, requester, system, ai; each message is public or internal (is_internal) |
Threading: a reply joins its ticket
An email has a Message-ID header. An answer to it carries In-Reply-To and References headers naming the message it answers [4]. The desk makes each outgoing message's ID before it is saved, stores it in channel_message_id and sends it in that header, so a reply can be matched exactly. If the headers do not match, the ticket number in the subject is the second try. The subject words and the sender address alone are never used, because one person has many tickets and subjects are reused.
- Two robots never answer each other. Mail marked Auto-Submitted, and mail from the desk's own addresses, is ignored.
- Sending twice adds nothing. channel_message_id is unique, so the same email cannot be stored twice.
- Unknown sender. The ticket is made with requester_person_id empty and the address kept for the lead to link or create.
- Mail from the host is authenticated. The web address the mail host forwards to carries a secret that the host sends with every request, kept in the host's environment variables; a request without it is refused.
Knowledge check
A customer replies to a notification, but the reply's subject has been rewritten and no ticket number is in it. What should find the ticket?
Routing, priority and macros
A ticket takes the default_group_id of its category. The next agent is the group member whose last assignment is oldest, which is worked out by reading svc_ticket, so routing never writes to the group row. Priority comes from impact and urgency. The module does not fix the table; you write your own down. The one below is an example.
Who may do what
Access is written once, in the Role and Exposure Matrix, and row-level security (the database rule that decides which rows each login may read or change) is generated from it. Five roles are people; three logins are not.
| Role or login | What it does | What it cannot do |
|---|---|---|
| Requester | Raises requests in the portal; reads own tickets and the public messages on them | See internal notes or anyone else's ticket; write directly (every write goes through the intake route) |
| Agent | Works tickets in own groups: replies, internal notes, macros, problems, changes, draft articles | Set is_major_incident, the due times, or the resolved and closed times; update another group's tickets |
| Support lead | Everything an agent does in every group; runs groups, SLA policies, categories, catalogue, macros; sets the major incident flag; publishes articles; reads the whole desk's numbers | Delete anything; nobody can delete |
| Change approver | Reads changes, items and linked tickets; moves a change from authorize to scheduled or rejected, with the board decision | Approve a change they wrote |
| CI owner | Keeps own configuration items current: status, firmware version, address, equipment link | Update another owner's item |
| Intake route | Receives email, portal, chat and API requests; writes the ticket and message for the requester; routes at creation | Write internal notes or the clock's columns |
| Service clock route | Works out due times, upserts SLA events, warns before a breach, closes resolved tickets, sends surveys | Reply to anyone |
| Import login | Brings in the old tool's history as the lead's script runs it | Write SLA events or change requests |
| Screen | For | Shows |
|---|---|---|
| /support, /support/new, /support/t/[ticket_no] | Requester | My requests; a form that offers published articles as the person types; one ticket with public messages and a reply box |
| /desk, /desk/t/[ticket_no] | Agent | Open tickets sorted by due time with a badge in words (due in 40 minutes, breached, paused), never colour alone; the thread with an internal-note switch and a macro menu |
| /desk/changes, /desk/cis | Agent, approver, CI owner | Changes and configuration items |
| /desk/lead | Lead | Tickets at risk, breached and unassigned; each group's load; the report panel |
You need: Your current help desk tool or shared inbox, a notebook, and the table of channels and statuses in this chapter
Use the last five requests that were solved in the tool you want to replace. Write down facts about each, not what the customer wrote: do not copy customer names or message text anywhere.
Outcome: A five-row table of channel, type, first reply time and role, with the unmatched channels and your own impact and urgency table. It is the start of the inventory you build from in Session 1.
Knowledge check
Which role or login sets requester_person_id on a portal request?
References
- Atlassian: Jira Service Management ITSM features. https://www.atlassian.com/software/jira/service-management/features/itsm
- Freshworks: Freshservice IT service desk. https://www.freshworks.com/freshservice/it-service-desk/
- Giva: IT service desk software guide (ITIL 4 practices). https://givainc.com/blog/it-service-desk-software
- RFC 5322: Internet Message Format (Message-ID, In-Reply-To, References). https://www.rfc-editor.org/rfc/rfc5322
Chapter 2 · SLA policies and the data model
The service-level clock and the tables
A service-level agreement is a promise about time: reply within so long, fix within so long. Keeping it needs a clock that counts only the hours the team works, skips holidays and stops while the team waits for the customer. This chapter shows that clock on four worked tickets and then lists every column of the fifteen tables the desk is built from.
28 min3 targets per policy4 worked tickets15 tables
By the end of this chapter you can
- Say what an SLA policy holds and why a clock on wall-clock time is wrong.
- Work out a first response and resolution due time across a weekend, a holiday and a pause.
- Find any column of the fifteen svc_ tables, its type, whether it is required, and which are soft links.
What an SLA policy holds
A policy in svc_sla_policy is chosen for a ticket by its conditions (for example priority p3) and its priority_order. It has up to three targets in minutes: first_response_min, next_response_min and resolution_min. It points at svc_business_hours (a time zone, the opening periods for each weekday, and a list of holidays) and lists pause_statuses, the ticket statuses during which the clock stops. ISO/IEC 20000-1:2018 sets the requirements for a service management system and expects service levels to be agreed and monitored [1]; ITIL 4 calls the practice service level management [2].
The numbers below are lab values used through this module to practise the arithmetic. They are not recommendations; use your own.
| Setting | Lab value |
|---|---|
| Business hours | Monday to Friday, 09:00 to 17:00, one time zone |
| Holiday | Monday 2026-05-25 |
| Policy for priority p3 | first response 240 minutes, next response 240, resolution 960 (16 business hours) |
| Pause statuses | pending_requester, pending_third_party, on_hold |
{"mon": [["09:00","17:00"]], "tue": [["09:00","17:00"]], "wed": [["09:00","17:00"]],
"thu": [["09:00","17:00"]], "fri": [["09:00","17:00"]], "sat": [], "sun": []}Counting business time
The rule is the same every time: start the clock at the ticket's creation or, if that is outside business hours or on a holiday, at the next opening; count only minutes inside the opening periods; stop counting during a pause. Times are stored in UTC, the one agreed reference time with no daylight saving, so a stored moment means the same instant wherever it is read, and the sums are done in the business hours' time zone using the language's own time-zone support, never hand-made offsets, so a day when the clocks change still comes out right.
| Ticket | Created | First reply due | Resolution due | Resolved | Result |
|---|---|---|---|---|---|
| A | Tue 10:00 | Tue 14:00 | Thu 10:00 | Thu 11:30 | Resolution breached by 90 minutes |
| B | Fri 15:00 | Tue 11:00 | Wed 15:00 | Wed 14:00 | Met |
| C | Sat 11:00 (starts Tue 09:00) | Tue 13:00 | Wed 17:00 | Wed 16:00 | Met |
| D | Tue 10:00 | Tue 14:00 | Thu 14:00 (after 240 paused minutes) | Thu 13:30 | Met |
Three of four tickets meet every target: an SLA attainment of 75 percent (tickets meeting all targets divided by tickets under an SLA). These four tickets are the seed the clock must reproduce exactly in a test.
Knowledge check
With the lab values, a ticket is created on Saturday at 11:00 and Monday is not a holiday. When is its first response due?
Events, warnings and attainment
- svc_sla_event holds one row per ticket and metric (first_response, next_response, resolution): target_at, met_at, breached and paused_minutes. This build computes first_response and resolution; next_response_min is stored in the policy but not computed, so no next_response event is written.
- Warning. At a share of the target's business minutes that you choose (80 percent is an example) the lead gets an action item and the ticket shows as at risk before it breaches. When the target passes, breached is set.
- Free way first. The clock can be run whenever an agent or the lead opens the queue. A scheduled job is optional; its limits are on your host's own pricing page.
The fifteen tables
Every table carries the standard columns id, tenant_id, created_at, created_by, updated_at, updated_by, row_version, archived_at and ext (extra data as JSON), and is keyed to the spine tables core_person, core_site and core_equipment, so the desk has no people list, site list or equipment list of its own. The table below shows the columns the module adds. Types: text, int, bool, ts (timestamp with time zone), uuid, json. An arrow is a foreign key; soft link means a plain uuid with no foreign key, so the desk works with it empty. req means required.
| Table | Holds | Columns: type, req = required |
|---|---|---|
| svc_support_group | A team or queue | name text req, unique per tenant; email_alias text; business_hours_id → svc_business_hours; manager_id → core_person. Members are kept in ext.members |
| svc_business_hours | Working hours and holidays | name text req; timezone text req; schedule json req; holidays json |
| svc_sla_policy | SLA targets and conditions | name text req; conditions json req; first_response_min int; next_response_min int; resolution_min int; business_hours_id → svc_business_hours; pause_statuses json; priority_order int |
| svc_category | The category tree | name text req; parent_id → svc_category; default_group_id → svc_support_group |
| svc_ticket | A ticket | ticket_no text req, unique per tenant; ticket_type text req (seven values); channel text req (eight); subject text req; description text; requester_person_id → core_person; requester_contact_ref soft link to crm_contact; account_ref soft link to crm_account; status text req (seven); priority text req (p1 to p4); impact and urgency text (low, medium, high); category_id → svc_category; group_id → svc_support_group; assignee_id → core_person; sla_policy_id → svc_sla_policy; first_response_due_at, resolution_due_at, first_responded_at, resolved_at, closed_at ts; parent_ticket_id → svc_ticket; problem_id → svc_problem; configuration_item_id → svc_configuration_item; is_major_incident bool |
| svc_ticket_message | A public reply or internal note | ticket_id → svc_ticket req; author_type text req (agent, requester, system, ai); author_person_id → core_person; body text req; is_internal bool req; channel_message_id text, unique per tenant when present; sent_at ts req |
| svc_sla_event | Metric tracking per ticket | ticket_id → svc_ticket req; metric text req (first_response, next_response, resolution), unique per ticket; target_at ts req; met_at ts; breached bool req; paused_minutes int |
| svc_catalog_item | A requestable service | name text req; description text; form_template_ref soft link to frm_template; approval_route json; fulfilment_group_id → svc_support_group; sla_policy_id → svc_sla_policy; active bool req |
| svc_problem | A problem or known error | problem_no text req, unique per tenant; title text req; root_cause text; workaround text; status text req (open, investigating, known_error, resolved, closed); owner_id → core_person |
| svc_change_request | An IT or OT change | cr_no text req, unique per tenant; title text req; change_type text req (standard, normal, emergency); risk text req (low, medium, high); impact_analysis text; implementation_plan text; backout_plan text; scheduled_start and scheduled_end ts; status text req (draft, assess, authorize, scheduled, implementing, review, closed, failed, rejected); cab_decision_at ts; configuration_item_id → svc_configuration_item |
| svc_configuration_item | An IT or OT configuration item | ci_no text req, unique per tenant; ci_class text req (server, workstation, laptop, network_device, application, database, plc, hmi, scada_server, historian, printer, mobile_device, cloud_service); name text req; status text req (planned, in_service, maintenance, retired); owner_id → core_person; equipment_id → core_equipment; site_id → core_site; firmware_version text; ip_address text; attributes json |
| svc_ci_relationship | A dependency between items | from_ci_id → svc_configuration_item req; to_ci_id → svc_configuration_item req; relation text req (depends_on, hosts, connects_to, part_of, backs_up). An item cannot relate to itself, and the same relation is stored once |
| svc_kb_article | A knowledge article | title text req; body text req; visibility text req (internal, public); status text req (draft, published, retired); category_id → svc_category; version int req; helpful_yes int; helpful_no int; cms_entry_ref soft link to cms_entry |
| svc_macro | A canned reply and set of actions | name text req; actions json req; group_id → svc_support_group; active bool req |
| svc_csat_response | A satisfaction answer | ticket_id → svc_ticket req, one per ticket; score int req; comment text; responded_at ts req |
Rules the database enforces
- Unique per tenant: ticket_no, problem_no, cr_no, ci_no, the group name, and channel_message_id when present.
- One row only: one svc_sla_event per ticket and metric; one svc_csat_response per ticket.
- Never wrong: a ticket cannot be its own parent; an item cannot relate to itself; a change cannot reach authorize without both an implementation plan and a back-out plan.
- Your choice, written down: the satisfaction scale. The specification leaves it open; 1 to 5 with 4 and 5 counted as positive is an example.
- Numbers: ticket and change numbers come from a numbering function that runs with its owner's rights, so no role needs a right to change the sequence table.
Knowledge check
Why is svc_ticket.requester_contact_ref a soft link and svc_ticket.group_id a foreign key?
You need: Paper or a text file, and the lab values in this chapter (or your own hours and holiday list)
Work the sums by hand before any code does, so the test in Session 4 has an answer you trust. Ticket E is created on Wednesday 2026-05-20 at 16:30, priority p3. A first reply was sent Wednesday 16:45. Use the lab policy, business hours of 09:00 to 17:00 on weekdays, and the holiday on Monday 2026-05-25.
Outcome: Ticket E with a first response due Thursday 2026-05-21 12:30, a resolution due Friday 2026-05-22 16:30 with no pause, and Tuesday 2026-05-26 10:30 with the two-hour pause. The first reply on Wednesday 16:45 meets the first response target, so the pause only moves the resolution target. If your answers differ, find which rule differs: start of the clock, the holiday, or the pause. Ticket E stays out of the seed: it is a separate case the Session 4 clock test must also match.
References
- ISO/IEC 20000-1:2018 Service management system requirements. https://www.iso.org/standard/70636.html
- Giva: IT service desk software guide (ITIL 4 practices). https://givainc.com/blog/it-service-desk-software
Chapter 3 · ITIL 4 practices for IT and OT
Incident, problem, change and the CMDB
A desk that only answers tickets keeps fixing the same fault. ITIL 4 separates the work into practices: restore service now (incident), find the cause (problem), change safely (change enablement), and know what you run (configuration). This chapter shows how the desk records each, and why a PLC change needs more care than a laptop change.
25 min3 change types13 item classes5 relationship types
By the end of this chapter you can
- Tell an incident, a major incident, a problem, a known error and a change apart.
- Walk a change through its statuses and name the rules that stop an unsafe one.
- Record a PLC or HMI as a configuration item with relationships, and list what a change would affect.
Incidents and major incidents
An incident is an unplanned interruption or reduction in the quality of a service; the aim is to restore service quickly. In the desk it is a ticket with ticket_type incident. When many people are affected the lead sets is_major_incident. Related tickets are linked with parent_ticket_id, one communication template posts one public update to each, and a post-incident review follows (it is held outside the desk in this build, and its outcome goes into the problem's root cause). Agents cannot set the flag themselves; a macro that tries is refused for an agent.
Problems and known errors
A problem is the underlying cause of one or more incidents. A row in svc_problem is linked from the incidents through problem_id, records the root_cause and a workaround, and moves open, investigating, known_error, resolved, closed. When a workaround is known the problem is a known error, and the workaround is written as an internal knowledge article so the next agent does not have to ask. In the lab, a problem links at least two incidents; a fault that keeps returning is the reason to open one.
Knowledge check
Four tickets about the same print server failing are linked to one svc_problem. What should that record hold beyond the links?
Change enablement
ITIL 4 describes change enablement as making as many changes succeed as possible by assessing risk, authorising them and managing the change schedule [1]. A row in svc_change_request has a type (standard, normal or emergency), a risk of low, medium or high, an impact analysis, an implementation plan, a back-out plan (how to undo it), a scheduled window, the board's decision time and the configuration item it touches. ISO/IEC 20000-1:2018, the requirements for a service management system, also includes change management and configuration management [3].
The three types, in ITIL 4 terms: a standard change is low risk, well understood and pre-authorised; a normal change is assessed and decided through the change board; an emergency change is urgent and is assessed and decided quickly. In this build all three types keep the same record and the same two gates, so the type is recorded but does not change the route.
- Refused: a move to authorize with no back-out plan.
- Refused: scheduled for a PLC or HMI item with no ext.moc_ref. The specification says change requests on PLC and HMI items need a link to the plant's management-of-change record (module M11) before authorisation. This build always asks for a reference for those two classes; with no M11 it can be the plant's own MOC document number. The agent who wrote the change records it in ext.moc_ref before moving the change to authorize, so the approver is not refused.
- Not by the author. Nobody approves a change they created. The approver records the decision with a core_approval row and the cab_decision_at time.
- Flagged: a second change on the same item in an overlapping window.
Knowledge check
A normal change on a PLC has an implementation plan and a back-out plan but no ext.moc_ref. What happens when the approver tries to schedule it?
The configuration database
A configuration item (CI) is anything that has to be managed to deliver a service. In svc_configuration_item there are thirteen classes, both IT (server, workstation, laptop, network_device, application, database, printer, mobile_device, cloud_service) and OT (plc, hmi, scada_server, historian). Each has an owner, a site, a status (planned, in_service, maintenance, retired), and, for firmware and addresses, firmware_version and ip_address. A CI can point at a core_equipment row through equipment_id, which links the IT view of a PLC to the maintenance view of the machine it runs.
svc_ci_relationship records dependencies with five relations: depends_on, hosts, connects_to, part_of and backs_up. This is the second pitfall: a CMDB without relationships cannot assess the impact of a change. A recursive query, one that follows links again and again, lists everything affected by an item and goes into the change's impact analysis. It follows depends_on and connects_to backwards, to the items that point at the one being changed, and hosts forwards, to the items the changed item hosts. That works because connects_to is always recorded from the item that uses the link to the item it talks to: the operator screen connects_to the PLC, never the PLC to the screen. Write the convention down; a row stored the other way round drops out of the impact list.
You need: Your plant's equipment list, network diagram or the engineer who looks after one machine, and paper or a text file
Pick one machine with a PLC. Record only what you can see on a drawing or a label; do not log in to any controller, and do not write passwords, addresses of live systems or anything on a safety function into a shared file.
Outcome: A one-page CI map for one machine with classes, owners and relationships, and a draft change with an impact list, a back-out plan and a management-of-change reference, or a clear note that none exists yet.
References
- Giva: IT service desk software guide (ITIL 4 practices). https://givainc.com/blog/it-service-desk-software
- ISA: ISA/IEC 62443 series of standards. https://www.isa.org/standards-and-publications/isa-standards/isa-iec-62443-series-of-standards
- ISO/IEC 20000-1:2018 Service management system requirements. https://www.iso.org/standard/70636.html
Chapter 4 · Deflection, KPIs and cutover
Knowledge, satisfaction and moving out
A good desk gets fewer tickets over time because the answers are published, and it can prove it with numbers. This chapter covers the knowledge base, the survey and complaints, the six measures with their definitions, and how to move out of the old tool and cancel it only when the new one has matched its figures.
20 min6 KPIs4 worked ticket results1 side-by-side week
By the end of this chapter you can
- Describe how a knowledge article is published, versioned and counted toward deflection.
- Calculate first response, time to resolution and SLA attainment from the four seed tickets, and say how a median is found.
- Plan an import, a side-by-side run and a cutover that ends with the old subscription cancelled.
Knowledge that deflects
An article in svc_kb_article is internal or public, and is a draft, published or retired. A change to a published article becomes a new row with the next version, and the old one is retired; nothing is edited in place. The portal's request form offers published public articles as the person types. If an article answers the question, no ticket is raised, and the visit counts toward the deflection rate: portal sessions with an article view and no ticket, divided by portal sessions. Agents see suggestions while they type, and each article keeps helpful_yes and helpful_no counts. ITIL 4 calls this practice knowledge management [4].
The specification names the event svc.kb_gap.detected and the deflection rate; the six sessions write them down but do not build them, because both need the portal's sessions to be recorded. The AI assist (tier BIC) can suggest a category and priority, summarise a long thread and propose a reply or an article. Every suggestion waits for the agent's approval, and a message from the assistant is recorded with author_type ai. Tickets hold personal data, so never paste ticket text into a chat or a prompt that you have not been cleared to use.
Satisfaction and complaints
When a ticket is resolved the desk prepares a survey link carrying a signed single-use token: a random value the server stamps with a secret key, so it cannot be guessed or altered and the requester can answer once without signing in. The intake route writes one svc_csat_response; a second answer is refused. CSAT is positive responses divided by responses, and you decide which scores are positive and write it down. If the email setting allows, the survey is emailed; otherwise the link shows on the ticket. Nothing emails a customer until you switch email on, and the sending provider's price is on its own price page.
A customer who is unhappy may be making a complaint, a ticket of type complaint. ISO 10002:2018 gives guidelines for handling complaints in an organisation [1]. The desk records it and publishes svc.ticket.complaint; investigating a quality complaint is the job of module M08.
Knowledge check
A customer answers the same survey link twice. What does the desk store?
The six measures
| KPI | Definition | Seed result |
|---|---|---|
| First response time | Median minutes to the first public reply | Replies took 60, 180, 180 and 60 business minutes: median 120 |
| Time to resolution | Median business hours to resolve (minus paused time) | 17.5, 15, 15 and 15.5 hours: median 15.25 |
| SLA attainment | Tickets meeting all targets ÷ tickets under an SLA | 3 of 4 = 75 percent |
| CSAT | Positive responses ÷ responses | From your own survey; positive is your definition |
| Deflection rate | Portal sessions with an article view and no ticket ÷ portal sessions | Needs portal sessions to be recorded |
| Change success rate | Changes without incident or rollback ÷ changes | From closed changes against failed ones |
A median is the middle value of the numbers sorted from least to most; with an even count it is the mean of the middle two. Count first response in business minutes or calendar minutes to match what the old tool counts, and write which.
Knowledge check
Ticket D was resolved 19.5 business hours after it was created and spent 4 of them paused. What time to resolution does the report show?
Moving out of the old tool
The old tool can export tickets with comments, users, organisations and articles through its API, as the specification notes for Zendesk, Freshdesk and Jira Service Management; check that your plan includes it on the vendor's own page instead of guessing. The vendors' pages show the words they use for tickets, requests and articles [2][3]. Closed tickets arrive as history and articles arrive as drafts for the lead to review. The goal is a cutover you can undo until a set date, and a cancellation only after the new desk matches the old one.
- Export everything and count it: tickets open and closed, comments, users, organisations, articles. Choose a date that separates history from live tickets. Keep the export in a private folder and decide how long you will hold it.
- Map old statuses, priorities, channels, types, groups and tags onto the desk's, and list anything unmapped in a report; never guess.
- Import with the import login. A unique legacy key on tickets, messages and articles (the old tool's name and id) makes the import idempotent: running it twice gives the same result.
- Run side by side for at least a week, importing each morning while the old tool stays live.
- Compare first response, time to resolution and SLA attainment with the old tool's own reports for the same days, and explain every difference. The usual causes are calendar time against business hours, another holiday list, another pause rule, another time zone, merged or spam tickets, and solved against closed.
- Cut over on a set date with a final import, a rollback plan and the date after which switching back is no longer possible. Then cancel the paid tool after the final export is stored and write the saving from real invoices.
You need: The old tool's report page for one past week, a notebook or spreadsheet, and the definitions in this chapter
This is the check that decides whether you can cancel. Use the old tool's own reports, not your estimates. Do not copy customer names or message text.
Outcome: A one-page reconciliation sheet: the old tool's own figures with their report names, the settings behind them, three hand-worked tickets, every difference explained, and a written condition for cutover.
References
- ISO 10002:2018 Quality management: customer satisfaction: guidelines for complaints handling in organizations. https://www.iso.org/standard/71580.html
- Freshworks: Freshservice IT service desk. https://www.freshworks.com/freshservice/it-service-desk/
- Atlassian: Jira Service Management ITSM features. https://www.atlassian.com/software/jira/service-management/features/itsm
- Giva: IT service desk software guide (ITIL 4 practices). https://givainc.com/blog/it-service-desk-software
Chapter 5 · 14 questions · 80% passes
Final assessment
Fourteen questions across the element. Score 80% (12 of 14) to pass. Your LMS records your score and each answer; you can review the chapters and try again.
15 min14 questions≈ 15 minutesRetake allowed
Your result
CivOps AI Academy
Help Desk and Service Management: Tickets, SLAs, Incidents, Changes and the CMDB
Element M19 complete · Learner
Your LMS records this completion. For the CivOps Foundation certificate, finish the Foundation Course at https://civops.io/learn.