Education › Site Reliability › Stage 1: The reliability mindset

What SRE is (and how it relates to DevOps)

Reliability as a feature, engineering approaches to operations, shared ownership.

Intermediate ~20 min read Module 1 of 16

Shipping software is half the job. The other half is keeping it running when traffic triples, a dependency slows down, a disk fills or a deploy goes wrong at the worst moment. Site Reliability Engineering is the discipline Google developed for that problem, built on one idea: treat operations as a software engineering problem. This module explains what SRE is, how it relates to the DevOps practices you may already know, and the handful of principles the rest of this track is built on.

After this module you can
  • Define SRE and explain the idea of applying software engineering to operations work
  • Describe how SRE relates to DevOps and where the two differ in emphasis
  • Explain why reliability is a product feature, and why more is not always better
  • List the core SRE principles: SLOs, error budgets, toil reduction, monitoring, blameless learning
  • Compare the common ways organisations structure SRE teams and share ownership of production

What SRE is

Ben Treynor Sloss, who founded the first SRE team at Google, described it as what happens when you ask a software engineer to design an operations function. Traditional operations scales with headcount: more services and more traffic mean more people performing more manual procedures. SRE refuses that model. Work that a machine can do is automated, and engineers spend their time making the system need less human attention.

In practice an SRE's work falls into two kinds. Operational work is being on call, responding to incidents, handling tickets and doing manual releases. Engineering work is writing software and designing systems that improve reliability or remove future operational work: automation, better monitoring, capacity models, safer rollout tooling. A defining SRE rule is that operational work is capped at about half of a team's time, so that there is always capacity to fix the causes and not only the symptoms. When operations exceed the cap, that is treated as a signal that something is wrong, not as the normal state.

The other defining feature is that reliability is expressed as numbers agreed in advance, not as an aspiration. "The site should be fast and always up" cannot be engineered. "99.9% of checkout requests succeed within 500 ms, measured over 28 days" can, and it tells you when to stop as well as when to act.

SRE and DevOps

The two grew up separately around the same time and address the same root problem: the wall between the people who change systems and the people who keep them stable. Developers are rewarded for shipping, operators for stability, and because most outages are caused by change, the two incentives collide.

DevOps is a broad cultural and professional movement. It describes outcomes and values: break down silos, accept failure as normal, change gradually, automate, and measure everything. It is deliberately not prescriptive about how. SRE is one specific, opinionated way of doing it. Google's own summary is that SRE implements DevOps, in the way a class implements an interface.

DevOps principleHow SRE implements it
Reduce organisational silosShared ownership of production; developers and SREs use the same tools and share on-call
Accept failure as normalError budgets make an acceptable amount of failure explicit; postmortems are blameless
Implement gradual changeSmall, frequent releases; canaries; automated rollback
Leverage tooling and automationToil is measured and capped; repetitive work is engineered away
Measure everythingSLIs and SLOs define reliability; toil and on-call load are measured too

If you have worked through the DevOps track, you have the delivery side: pipelines, infrastructure as code, Kubernetes, GitOps. SRE picks up where that ends, with the questions of how reliable the running system should be, how you know, and what you do when it is not.

Note

Job titles are not a reliable guide. Many "DevOps engineer" roles are platform or operations roles, and many "SRE" roles are renamed operations teams. What matters is whether the practices are present: measured reliability targets, a cap on operational work, and engineering time spent removing causes.

Reliability is a feature, and it has a price

Reliability is arguably the most important feature of any product, because no other feature works when the system is down. Users do not distinguish between "the payment feature has a bug" and "the payment service is unavailable"; both mean they could not pay.

But reliability is not free, and it is not unlimited. Each additional "nine" of availability costs far more than the last: redundancy across zones, then regions, slower and more careful releases, more testing, more people on call. At some point the extra reliability is invisible to users, because their own phone, Wi-Fi and network are less reliable than your service. Money and engineering time spent beyond that point would have produced more value as features.

AvailabilityAllowed downtime per 30 daysAllowed downtime per year
99% (two nines)7.2 hours3.65 days
99.9% (three nines)43.2 minutes8.76 hours
99.95%21.6 minutes4.38 hours
99.99% (four nines)4.32 minutes52.6 minutes
99.999% (five nines)26 seconds5.26 minutes

Look at what the table implies for how you operate. At three nines a human can be paged, wake up, and fix a problem within the monthly allowance. At four nines, four minutes a month leaves no time for a human at all: detection and recovery must be automatic. The target you choose determines the architecture, the process and the cost, which is why choosing it is a business decision and not a purely technical one.

python
def allowed_downtime_minutes(slo_percent: float, days: int = 30) -> float:
    """Minutes of full outage permitted by an availability target."""
    total_minutes = days * 24 * 60
    return total_minutes * (1 - slo_percent / 100)


for slo in (99.0, 99.9, 99.95, 99.99):
    print(f"{slo}% -> {allowed_downtime_minutes(slo):.1f} minutes per 30 days")
# 99.0% -> 432.0, 99.9% -> 43.2, 99.95% -> 21.6, 99.99% -> 4.3

The core principles

The rest of this track expands each of these. Together they form a system: each one makes the others work.

  • Service level objectives. Define reliability as a measurable target for what users experience. Everything else hangs from this.
  • Error budgets. The gap between the target and 100% is a budget that may be spent on releases, experiments and risk. While budget remains, ship. When it is gone, the priority shifts to reliability. This replaces arguments between development and operations with a shared number.
  • Eliminating toil. Manual, repetitive, automatable work is measured and engineered away, so that operational load does not grow with the service.
  • Monitoring and alerting on symptoms. Page a human only when users are affected and a human needs to act. Everything else is a ticket or a dashboard.
  • Release engineering. Most outages are caused by changes, so changes are made small, gradual, observable and reversible.
  • Blameless postmortems. Incidents are studied for systemic causes, without blaming individuals, so that people report problems honestly and the organisation learns.
  • Simplicity. Every line of code and every component is a liability as well as an asset. Boring, well-understood systems are easier to keep reliable.
Tip

If you adopt only one practice from SRE, make it SLOs with error budgets. It is the one that changes conversations: reliability work gets prioritised by data, and teams stop arguing about whether the system is "reliable enough".

Team models and shared ownership

There is no single correct way to organise SRE. Common models include the following.

ModelHow it worksRisk
EmbeddedSREs sit inside product teamsIsolated individuals; inconsistent practice across teams
Centralised / product SREA dedicated SRE team supports a set of critical servicesBecomes the team that problems are thrown to
Platform / infrastructureSREs build the shared platform and tooling everyone deploys onDrifts away from the services' real problems
Consulting / enablementA small group coaches product teams, who run their own servicesAdvice without authority is easily ignored
You build it, you run itNo separate SRE team; developers own production, using SRE practicesNeeds real investment in tooling and on-call health

Whatever the structure, one rule prevents SRE from turning back into traditional operations: ownership is shared, and support is conditional. Developers stay involved in production, commonly by taking part in the on-call rotation and handling a share of tickets. A service must meet a bar before an SRE team takes it on, checked in a production readiness review. And if a service keeps exceeding its error budget or generating excessive operational load, SRE can hand the pager back to the developers until it is fixed. That last mechanism is what keeps the incentive to build reliable software where it belongs, with the people who write it.

For a small company, none of this needs a team with SRE in its name. Two or three engineers can define SLOs for their main user journeys, put symptom-based alerts on them, run blameless reviews after incidents, and track how much time goes on repetitive operations. That is SRE.

Hands-on practice

Assess a service you know against SRE practice

  1. Pick a service you work on or use daily. Write one sentence describing what "working" means for its users, without mentioning servers or CPUs.
  2. Find out whether the service has a written reliability target. If it has, note where it is recorded and who agreed to it. If not, note who would need to agree.
  3. Using the downtime table, decide which availability level its users truly need, and write down what would have to be true operationally to achieve it: can a human respond in time, or must recovery be automatic?
  4. Estimate how your team's last two weeks were split between operational work (on-call, tickets, manual releases, interruptions) and engineering work. Compare it with the 50% cap.
  5. List the last three incidents. For each one, note whether there was a written review, whether it named systemic causes or individuals, and whether the action items were completed.
  6. Identify which team model from the table describes your organisation, and one risk from that row that you recognise.
  7. Write down the single SRE practice that would help your service most right now, and the first concrete step towards it.
Cheat sheet

What SRE is (and how it relates to DevOps) — at a glance

Main things to focus on

  • SRE applies software engineering to operations: automate what machines can do, and engineer away the causes of operational work.
  • Cap operational work at about 50% of team time, so there is always capacity to fix causes.
  • SRE is a specific implementation of DevOps principles: class SRE implements DevOps.
  • Reliability is a feature with a cost. Each extra nine costs far more than the last, and 100% is the wrong target.
  • The target determines the architecture: past about 99.95%, recovery cannot depend on a human.
  • SLOs and error budgets turn the conflict between speed and stability into a shared number.
  • Ownership of production is shared, and SRE support is conditional on the service staying healthy.

Availability and allowed downtime

99%7.2 hours per 30 days; 3.65 days per year
99.9%43.2 minutes per 30 days; 8.76 hours per year
99.95%21.6 minutes per 30 days; 4.38 hours per year
99.99%4.32 minutes per 30 days; 52.6 minutes per year
99.999%26 seconds per 30 days; 5.26 minutes per year
downtime = period x (1 - SLO)43,200 minutes in 30 days

Vocabulary

SLIService level indicator: a measurement of user-facing behaviour
SLOService level objective: the target for an SLI over a time window
SLAService level agreement: a contract with consequences if missed
Error budget1 minus the SLO: the unreliability you are allowed to spend
ToilManual, repetitive, automatable work that scales with the service
PostmortemBlameless written review of an incident and its systemic causes
PRRProduction readiness review before SRE takes on a service

DevOps principle to SRE practice

Reduce silosShared ownership and shared on-call
Accept failureError budgets and blameless postmortems
Gradual changeCanaries, small releases, automatic rollback
AutomationMeasured toil with a 50% cap
Measure everythingSLIs, SLOs, toil and on-call load

Health checks for an SRE practice

ops work <= 50%Measured, not guessed; excess is escalated
written SLOsAgreed with product owners, reviewed periodically
error budget policyStates what happens when the budget runs out
pages are actionableEvery page needs a human and relates to user impact
postmortems done and closedAction items have owners and get completed
developers carry some on-callThose who write the code feel its operational cost

Common pitfalls

  • Renaming the operations team to SRE without changing how it works or capping its operational load.
  • Aiming for 100% availability, which is impossible, unaffordable, and blocks all change.
  • Letting SRE become the team that developers hand problems to, removing the incentive to build reliable software.
  • Defining reliability in terms of servers and CPU instead of what users experience.
  • Treating SRE as a tooling purchase instead of a change in how decisions are made.
  • Running postmortems that look for someone to blame, which teaches people to hide problems.
Quiz

Check your understanding

5 questions · 4 to pass · answers are explained as you go. Your best score is saved on this device only.

Progress and quiz scores are saved in this browser only. Back up or restore on the hub.

Was this lesson useful? Tell me what to improve →