Skip to content

Dev Notes

—Short notes on software, systems, and things I learn while building—

Menu
Menu

Reliability Notes: SLI, SLO, and SLA

Posted on July 4, 2026July 4, 2026 by isleyen

Traditional monitoring focus “is the infrastructure healthy?”
SRE reliability focus “is the user experience healthy?”

Infrastructure metrics such as CPU, memory, disk usage
confirm that servers are running and allow us to do capacity planning. But metrics don’t provide insight into user workflows.

Distinguishing between SLIs, SLOs and SLAs

SLI – Service Level IndicatorSLO – Service Level ObjectiveSLA – Service Level Agreement
a quantitative measurementtarget value or range of valuesan explicit contract
as users experience itmeasured by an SLIguaranteeing a level of service
Example:
Latency: 9985 / 10000 -> 99.85%
Example:
Latency: 99.9% within 300ms
Rolling 28-day window
Example:
99.9% uptime
internal commitments

set by engineering team,
agree with product team,
drive operational decisions
When the SLAs decreased, providers may give extra credits for bills
SLIs tell us what’s happeningSLOs tell us whether it’s good enoughSLAs tell our customers what we guarantee

Critical User Journey (CUJ)

Critical user journeys define where to focus. It is a flow through our product that users depend on. There may be multiple steps touching multiple services. Any step failing or running slowly means the journey fails.

Selecting SLIs based on Service Type:

Service Type categories determine how to measure

Request-drivenData processingStorage
APIs, web frontends, mobile backendsBatch jobs, ETL, message queuesDatabases, object stores, file systems
Availability: successful responses
Latency: successful responses within threshold
Freshness: currency of the data
Correctness: completeness and accuracy
Throughput: processing volume
Durability: data preserved without loss or corruption
Availability: access requests processed

Good Events Ratio:
Formula: Good events divided by total events, multiplied by a hundred

Request ServiceData pipelineDatabase
Total Event DefinitionThe number of HTTP requests receivedThe number of records processedThe number of write operations
Good Event DefinitionSuccessful response code from the serviceProcessing output verified correctdata persisted permanently to the store

Choosing the event unit

APIAsync ServiceWebsite
RequestJobs, messages, or pipeline runsPage Loads, user journeys

Percentiles

DefinitionRepresentsTypical Use Case
p50 (median)50% of requests are faster than this valueThe average or typical user experienceGeneral health check of the system
p9595% of requests are faster than this value, slowest 5% start hereThe start of the tail
– borderline acceptable performance
SLA targets, day-to-day performance monitoring
p9999% of requests are faster than this value, slowest 1% start herebeyond acceptable
– edge-case degraded experience
Detecting timeouts, GC pauses, overloaded servers, network issues

Avoiding common measurement mistakes

MistakeDescriptionImpact
Measuring at the wrong layerRelying solely on server-side metrics ignores everything that happens before a request even reaches the serverMisses DNS failures, TLS handshake errors, and dropped connections — parts of the journey where users silently fail
Treating all errors as the sameNot every failure carries the same weightTransient failures with automatic retry vs uncaught exceptions which bubble up to the user
The streetlight effectTeams tend to look where measurement is easiest, not where the problem actually isWithout a user-centric lens, dashboards can look “healthy” while real issues go undetected
Goodhart’s lawThe metric becomes the targetTeams optimize to improve the number instead of the underlying user experience
Including noise in the signalAutomated health checks run constantly and usually succeedMixing them with real traffic dilutes and distorts the true user-facing success rate
Undocumented SLIsIf the choice of metric, thresholds, and filtering logic isn’t written downNo one can trace how or why the SLI has changed over time
Carving SLIs in stoneUser expectations and service implementations keep evolvingSLIs should not remain static

The cost of extra nines in SLO

downtime allowed per 28-day window (40,320minutes)

99%6 hours, 43 minutes1% downtime allowed
40320 * 0.01= 403.2 minutes
99.9%40.3 minutes0.1% downtime allowed
40320 * 0.001 = 40.32 minutes
99.99%4 minutes0.01% downtime allowed
40320 * 0.0001 = 4.032 minutes
99.999%24.2 seconds0.001% downtime allowed
40320 * 0.00001 = 0.4032 minutes

Less room for risk – more time on process and ceremony.
(change board, Go/no go, War-room watch, rollback plan… organizational cost increase)

Dependency Ceiling:

SLO ceiling is the combined availability of all critical dependencies — not just our weakest link, but the product of all of them.

Let’s say we have 4 APIs dependent each other, each API has 99.9% availability.
What is the system availability SLO?
99.9 * 99.9 * 99.9 * 99.9 ≈ 0.996006

Availability -> 99.6%

Dashboard Design


Instead of overcrowding dashboards with every metric, we must be selective and design dedicated dashboards for each target audience.

EngineersManagersExecutives
Current operational detail and debugging context for incidentsTrend analysis showing improvement or degradation over timeBusiness impact, commitments met, and investment priorities
Current SLI, detail to check incidentweekly or sprint-wised reportquarterly report, they need to see status of commitment and requirement of investment.

SLO adoption roadmap

01-Measure02-Target03-Visualize04-Act
Define SLIs that reflect actual user experienceSet SLOs the team can defend with dataDashboards by audience-engineers, managers, leadershipBurn-rate alerts, sprint planning & postmortems by impact
Pick a critical user journey, define its SLIs, instrument the good-events ratioMine historical data, remove genuine outliers, set an SLO below current performance with headroomDeploy burn-rate alerts, build role-specific dashboards (engineers / managers / execs)Activate the error budget policy, set review cadence, close the feedback loop

SRE adoption is an iterative practice, not a one-time project

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • C# Benchmarking & Profiling – I (BenchmarkDotNet)
  • Reliability Notes: SLI, SLO, and SLA
  • Developing Inside Container – II (Notes)
  • Developing Inside a Container – (Notes)
  • Conda – Cheat Sheet

Categories

  • Azure
  • C#
  • claude
  • devcontainer
  • docker
  • python
  • SRE
© 2026 Dev Notes | Powered by Superbs Personal Blog theme