11:00 - 17:00
Mon - Fri
Comprehensive list of KPIs, formulas, examples, and sample reports (Project Status, MSR, QBR, Risk Assessment).
KPIs (Key Performance Indicators) are measurable values that show how effectively your IT service organization is achieving its objectives. Good KPIs are actionable, tied to business / service outcomes, and lead to decisions: improve staffing, change process, automate, or escalate to leadership.
Below are the most important KPIs you should track. Each entry includes: definition, formula, recommended target (typical), and a short example.
| KPI | Definition & Formula | Recommended target | Example / Calculation |
|---|---|---|---|
| Ticket Inflow (Volume) | Total number of tickets opened in a reporting period. Formula: Count(tickets_opened) |
Track trend month-over-month; stable or predictable growth | 1200 tickets opened this month (compare to previous month to detect spike) |
| Ticket Outflow (Resolved) | Total number of tickets closed/resolved in the period. Formula: Count(tickets_closed) |
Close >= inflow long-term (or backlog controlled) | 1100 tickets closed. If inflow (1200) > closed → backlog increases. |
| Backlog / Open Tickets | Tickets that are still open at period end. Formula: Open = Inflow - Outflow (plus carried) |
Depends on SLA; < 7-day aging for priority tickets | Open backlog = 100 tickets. |
| Mean Time To Resolve (MTTR) | Average time taken to resolve incidents. Formula: MTTR = Total resolution time / closed tickets |
Target depends on priority; e.g., P1: < 4 hours, P2: < 24 hours |
Calculation: Total resolution mins = 264000;
closed tickets = 1100. MTTR = 240 minutes (~4 hours). |
| Mean Time To Acknowledge (MTTA) / First Response Time | Average time to provide first meaningful response. Formula: MTTA = Total response minutes / tickets responded |
P1: < 15 mins, P2: < 1 hour (typical targets) | MTTA = 35 minutes. |
| SLA Compliance | Percentage of tickets resolved within SLA. Formula: SLA Compliance % = ((Total - SLA Breaches) / Total) * 100 |
> 95% (mature teams), 90% baseline | 95.42% compliance (55 breaches). |
| First Contact Resolution (FCR) | Tickets resolved at first contact without reopen. Formula: FCR % = (tickets resolved at first contact / total resolved) * 100 |
High-performing teams: 70%+; acceptable: 50%+ | FCR = 70%. |
| Customer Satisfaction (CSAT) | Average satisfaction score reported by customers — typical 1–5 scale or 1–10 scale. Formula: CSAT % = (sum(scores) / (responses * max_score)) * 100 |
CSAT > 85% (or avg score > 4.2/5) | Collect surveys after ticket close; example calculation uses submitted survey data. |
| Net Promoter Score (NPS) | Measures likelihood to recommend (Promoters - Detractors) / total responses *100. Range: -100 to +100 |
Good: +30+, Excellent: +50+ | Requires NPS survey question (0–10 scale) — bucket responses. |
| Change Success Rate | Share of changes implemented without causing incidents. Formula: Success % = (successful changes / total changes) * 100 |
> 95% success desirable; track emergency change rates separately | Example: 180/200 → 90% success. |
| Incidents Caused by Change | Count and percentage of incidents attributed to recent changes. Formula: (incidents_due_to_change / total_incidents) *100 |
As low as possible; investigate root cause | Sample: 8 incidents flagged as change-related. |
| Availability / Uptime | Percentage of time a service is available. Formula: Availability % = (uptime minutes / possible minutes) * 100 |
99.9% (three nines) or higher depending on SLA | 99.7222% availability this month. |
| Mean Time Between Failures (MTBF) | Average time between service failures. Use with MTTR to understand reliability. Formula: MTBF = (Total uptime) / number of failures |
Longer is better; target depends on system criticality | Combine with incident logs to compute. |
| Employee Utilization & Productivity | Percent of logged productive time to available time for agents. Formula: Utilization % = (productive hours / available hours) * 100 |
Target 70%-85% depending on context | Example: team logged 1500 productive hours. With 10 agents @ 160h each => available = 1600h. |
| Cost per Ticket | Average operational cost to handle a ticket. Formula: Cost per ticket = (Total support cost) / total tickets handled |
Use to justify investments in automation | Collect salary, tool, infra costs and divide by total tickets. |
| Automation Rate | Share of tickets handled or steps performed by automation (chatbot, scripts, runbooks). Formula: (Auto-handled tickets / total tickets)*100 |
Higher automation lowers cost per ticket but monitor CSAT | Start with simple flows (password reset) and measure savings. |
| Priority / Severity Distribution | Breakdown of tickets by priority and severity — helps staffing and on-call planning. | Fixed distribution depends on business | Report: P1: 2%, P2: 18%, P3: 60%, P4: 20% (example) |
| Reopen Rate | Share of tickets reopened after closure. Formula: (reopened tickets / closed tickets)*100 |
Lower is better; target < 5-8% | Example: reopened 50 → reopen rate 4.55%. |
| Customer Effort Score (CES) | Measures how much effort customer had to expend to get issue resolved (1–7 or 1–5 scale). | Lower effort is better | Survey after close to collect CES; track over time. |
| Resolution SLA by Priority | Track SLA attainment per priority level separately (P1/P2/P3...). | P1: 99% / P2: 95% / P3: 90% (example) | Helps reveal where breaches matter most. |
| Ticket Aging | Distribution of open tickets by age buckets (0-1d, 2-3d, 4-7d, 8-30d, >30d). | Keep critical buckets minimal | Use to prioritize backlog reduction. |
| Repeat Incidents / Problem Trend | Incidents repeated within time window for same CI or service; indicates need for problem management. | Lower is better | If a CI shows >5 repeats in a month, open a Problem Record. |
Note: Recommended targets vary by industry, SLA and customer expectations. Use historical baselines and then set improvement goals (e.g., reduce MTTR by 20% in 6 months, raise CSAT to 90%).
<?php
// Example: compute MTTR, MTTA, SLA compliance from arrays / DB
function compute_kpis(array $tickets) {
$closed = array_filter($tickets, fn($t)=>isset($t['resolved_at']));
$closed_count = count($closed);
$total_resolution = 0;
$total_response = 0;
$sla_breaches = 0;
foreach($closed as $t) {
$resMin = (strtotime($t['resolved_at']) - strtotime($t['created_at'])) / 60;
$respMin = (isset($t['first_response_at']) ? (strtotime($t['first_response_at'])-strtotime($t['created_at']))/60 : 0);
$total_resolution += $resMin;
$total_response += $respMin;
if(isset($t['sla_violation']) && $t['sla_violation']) $sla_breaches++;
}
$mttr = $closed_count?($total_resolution/$closed_count):null;
$mtta = $closed_count?($total_response/$closed_count):null;
$sla = count($tickets)?((count($tickets)-$sla_breaches)/count($tickets))*100:null;
return ['mttr'=>$mttr,'mtta'=>$mtta,'sla'=>$sla];
}
?>
Use this pattern but read tickets from your database instead of arrays; group results by priority, service, or team for deeper insights.
Reports translate KPIs into decisions. Below are recommended report types, contents and an example template.
Project: ServiceNow Incident Automation — Status: Amber — Progress: 62% — Risks: Delay in API contract (Owner: DevOps). Impact: expected 15% reduction in MTTA after go-live.
Risk management should be integrated into your QBR/MSR and project status reporting. Keep a live risk register.
If Likelihood = High (3) and Impact = High (3) → Risk Score = 9 (Critical). Escalate and assign plan.
When repeat incidents or P1 incidents occur, create a Problem Record, perform RCA using tools like 5-Why or Fishbone, capture root cause, permanent fix, and preventive actions. Track Time to Permanent Fix as a KPI for Problem Management.
<?php
// Minimal example: create an MSR summary from KPI variables (replace with DB reads)
$msr = [
'period' => 'September 2025',
'tickets_opened' => 1200,
'tickets_closed' => 1100,
'mttr_minutes' => 240,
'mtta_minutes' => 35,
'sla_pct' => 95.42,
'csat_pct' => 87.4 // sample survey
];
// Render a short summary block
echo "<div class='report'>";
echo "<strong>MSR: {$msr['period']}</strong><br>";
echo "Tickets opened: {$msr['tickets_opened']}, closed: {$msr['tickets_closed']} <br>";
echo "MTTR: ".round($msr['mttr_minutes']/60,1)." hrs, MTTA: ".round($msr['mtta_minutes'],1)." mins <br>";
echo "SLA: {$msr['sla_pct']}%, CSAT: {$msr['csat_pct']}% </div>";
?>
This code demonstrates simple assembly of an MSR. In production: fetch KPI aggregates from DB or analytics layer and render charts using a JS chart library.
If ticket inflow increases 2x after a release, track:
You deploy runbooks and automation for password resets and intake triage: automation rate rises from 5% to 30%; cost per ticket decreases; MTTR for low priority reduces significantly and agents can focus on P1/P2.
If you want, I can (A) adapt this file to read your ticket data from your database, (B) generate export-ready MSR/QBR templates (Word/PDF), or (C) add charts (Chart.js) to the page to show live trends. Tell me which option you'd like and I will extend this same page accordingly.