Site Reliability Engineering Principles Questions
The core SRE practice model: service-level objectives and indicators, error budgets, toil reduction, and reliability as an engineering discipline. Covers the principles and trade-offs behind treating operations as a software problem and balancing reliability against feature velocity. The conceptual foundation questions specific to SRE-style roles.
What is Site Reliability Engineering, and how does it differ from traditional operations and from DevOps as a broader movement? Address team responsibilities, what gets measured, and how the two disciplines relate rather than compete.
Sample Answer
Site Reliability Engineering (SRE) is the practice of running production systems by applying software-engineering discipline to operations work: SREs write code to automate operational tasks that would otherwise be done by hand, and they use quantitative reliability targets, service-level objectives (SLOs), to decide how much operational risk is acceptable. DevOps is the broader cultural movement that pushes development and operations to collaborate closely and ship continuously. SRE is best understood as one concrete, opinionated implementation of DevOps's goals, with specific mechanisms that DevOps as a philosophy does not itself prescribe.
What SRE adds on top of DevOps culture
- A numeric target for reliability. SRE ties reliability to an explicit SLO tied to user-facing outcomes (for example, 99.9% successful requests over 30 days), and treats the gap between that target and perfect reliability, the error budget, as a resource that both feature work and operations spend from.
- A cap on manual operations work. Google's original SRE model caps "toil" (repetitive, manual, automatable operational work) at roughly half of an SRE's time; when toil creeps above that, the team's job is to automate it away, not just staff up.
- A defined engagement model. An SRE team does not silently inherit operational ownership of a service. It takes ownership only after a production readiness review confirms the service meets a reliability bar (monitoring, runbooks, capacity headroom).
- Specific incident and postmortem practices. Blameless postmortems, error-budget policies, and incident command roles are concrete SRE mechanisms, not general DevOps prescriptions.
Where they overlap
Both push for automation over manual toil, shared ownership of what happens in production, continuous delivery, and breaking down the wall between building software and running it.
The relationship
An organization can practice DevOps culture (developers carry their own pagers, ship continuously, collaborate closely with operations) without ever standing up a dedicated SRE function. SRE formalizes the operations side of that culture into a discipline with its own title, headcount, and measurable contract with the teams it serves.
Worked example
A payment API team moves from "everyone carries the pager" to a dedicated SRE model. They agree an SLO of 99.9% successful requests over a 30-day window. If the API serves 10,000,000 requests in that window, the error budget is 0.1% of 10,000,000 = 10,000 failed requests for the month. Once the API meets the production-readiness bar, SRE takes over the pager, and any month where actual failures exceed 10,000 triggers the error-budget policy (for example, freezing non-critical releases until reliability recovers).
Trade-offs and pitfalls
A common failure mode is renaming the existing operations or sysadmin team "SRE" without adopting the underlying practices (automation, a toil cap, blameless postmortems, an error-budget policy). That produces SRE in name only and loses the actual benefit. A second pitfall is assuming SRE replaces DevOps culture: SRE only works on top of a functioning collaborative relationship between development and operations; without that trust, an SRE team just becomes a new operations silo with better vocabulary. The trade-off of standing up a dedicated SRE function is real: it costs headcount and adds a hand-off interface (the readiness review) that a fully "you build it, you run it" model avoids, which is why many smaller organizations keep operational ownership with the feature teams instead of creating a separate SRE org.
Explain the differences between SLI, SLO, and SLA. Provide a concrete example for a customer-facing REST API: specify one SLI (metric and units), an SLO target (with measurement window), and a sample SLA clause suitable for a contract. Describe how you would operationalize the SLO (measurement, dashboards, alerting) and how error budget policies would influence release velocity and incident response.
Sample Answer
An SLI measures what is actually happening, an SLO is the internal target you hold yourself to, and an SLA is the external promise with consequences attached; the three form a strict hierarchy of increasing formality and decreasing strictness.
Structured elaboration
For a customer-facing REST API, a concrete SLI might be "proportion of HTTP requests to /orders that return within 300ms and a non-5xx status, measured over a 5-minute rolling window, numerator = good requests, denominator = total requests." The SLO built on that SLI would be a target like "99.9% of requests meet the SLI over a rolling 30-day window," which is an internal engineering commitment, not a contract. The SLA is the customer-facing document, typically looser than the SLO (e.g. 99.5% monthly uptime, with defined service credits for breaches), because the internal target needs headroom to absorb normal operational noise before ever risking the external promise. Ownership typically follows this same layering: engineering defines and owns the SLI's instrumentation, SRE/engineering leadership own the SLO target, and legal/business own the SLA's contractual language, though all three should be negotiated together, not handed off in sequence. Operationalizing the SLO requires measurement, dashboards, and alerting working together: measurement is the SLI's live computation described above; the dashboard should show the rolling SLI value, the remaining error-budget percentage, and the current burn rate side by side, not just a single pass/fail indicator against 99.9%, since a snapshot alone hides whether the trend is improving or actively degrading; and alerting should be tiered by burn rate (a fast, short-window check for a sudden severe spike, a slower, longer-window check for a sustained low-grade degradation), feeding both the on-call rotation and the release-management process that consults the same dashboard before approving a risky deploy.
Worked example
A team ships an SLO of 99.9% success rate over 30 days and signs an SLA of 99.5% monthly uptime with a service credit for anything below that. The 0.4 percentage-point buffer between the two is the team's safety margin: at 99.9% they are inside their own target and comfortable; if reliability degrades toward 99.6-99.7%, the SLO is already breached and internal error-budget policy should be triggering a release freeze, well before the customer-facing SLA is ever at risk. A common pitfall is mapping SLIs straight into an SLA with no such buffer (setting the SLA equal to, or tighter than, the SLO); that removes the internal early-warning function entirely, since an SLO breach and an SLA breach then happen simultaneously. In practice, this team's dashboard shows the 30-day SLI trending at 99.92%, remaining error budget at 60%, and a 1-hour burn rate of 1.2x, which is exactly the picture that lets an engineer distinguish "healthy and stable" from "healthy today but trending toward trouble" at a glance.
Trade-offs and pitfalls
Retries and asynchronous callbacks are the classic edge case in how the SLI's numerator/denominator get computed: does a request that fails once but succeeds on an automatic client retry count as "good" (from the end user's perspective, yes) or does it still reflect a real backend problem worth tracking separately? Most teams track both a client-observed success rate (post-retry, what the SLA should reference) and a raw backend error rate (pre-retry, what triggers internal alerting), because collapsing them into one number hides whether retries are quietly masking a growing problem. Operationally, when error budget starts burning, release velocity should slow (fewer risky deploys, more canary time) well before an SLA-level incident response is triggered; the SLO's own error-budget policy is what should catch problems early enough that the SLA-level contractual machinery never needs to engage.
A security team proposes a stricter authentication flow that increases latency and introduces some additional error rate. As SRE, propose how you would balance the security requirement against the reliability goal: what you would measure, negotiate, or mitigate.
Sample Answer
Balancing a security change that hurts reliability starts from the premise that this is not security versus reliability as opposing goals, it's finding the specific implementation of the security requirement that satisfies the actual threat model at the lowest reliability cost, since most security requirements have more than one way to be satisfied. The approach is to measure the actual reliability impact rather than estimate it, negotiate the requirement's specifics (not just accept or reject it wholesale), and mitigate the remaining cost with standard reliability techniques rather than treating it as unavoidable.
Working through the trade-off
- Measure, don't estimate, the actual impact. Before arguing about the change, load-test or canary it to get real numbers: how much latency does the added authentication step actually add, and what's the real error-rate increase, rather than debating a hypothetical.
- Understand what's actually required versus how it's currently proposed. A "stricter authentication flow" might be satisfiable with a cached, shorter-lived token validated locally most of the time and only re-validated against the identity provider periodically, instead of a synchronous round-trip on every single request; the security requirement and its most expensive possible implementation are not the same thing.
- Apply standard mitigations to the remaining cost. If some latency and error-rate increase is unavoidable, standard reliability techniques reduce its blast radius: caching validated tokens for their safe lifetime, adding a circuit breaker around the identity-provider dependency so its failure degrades gracefully rather than cascading, and rolling the change out as a canary to catch a worse-than-expected impact before it's fully live.
- Make the residual trade-off an explicit, owned decision, not an implicit one. If after mitigation there's still a real reliability cost, that's a decision for whoever owns both the security and the reliability target to make consciously, informed by real numbers, not something engineering absorbs silently.
Worked example
A security team proposes moving from long-lived session tokens to short-lived tokens re-validated against the identity provider on every request. A canary of the new flow on 5% of traffic shows p99 (99th-percentile) latency increasing by 45 milliseconds and error rate increasing by 0.3 percentage points, both driven by the identity provider's own latency and occasional timeouts under load. The negotiated alternative: cache validated tokens for 60 seconds (short enough to meet the security team's freshness requirement, since 60 seconds is well within their stated threat window) instead of re-validating on every request, plus a circuit breaker around the identity-provider call so a slow or failing identity provider degrades to the cached validation rather than failing every request. The re-canaried result: p99 latency increase drops to roughly 4 milliseconds and the error-rate increase becomes negligible, while still meeting the security team's actual requirement rather than their initial specific implementation of it.
Trade-offs and pitfalls
Accepting a security requirement's first proposed implementation without probing what it's actually protecting against risks paying a much larger reliability cost than necessary; conversely, resisting a legitimate security requirement purely on reliability grounds, without proposing a workable alternative, isn't a real answer either and tends to get overridden anyway once a real incident makes the security gap concrete. The right posture treats both reliability and security as real constraints with real owners, and looks for the specific implementation that satisfies both, rather than treating the trade-off as a fixed, zero-sum choice between the two.
Design SLIs/SLOs for a machine-learning prediction service where ground-truth labels arrive hours or days later. Propose proxy SLIs for near-real-time monitoring (e.g., prediction distribution drift, model confidence), explain how you would backfill true correctness when labels arrive, and how error budgets could be applied to model rollbacks.
Sample Answer
When ground truth arrives hours or days late, the SLI strategy needs a fast, imperfect PROXY for real-time monitoring and a slower, authoritative BACKFILL process for eventually confirming (or correcting) what the proxy suggested, with error-budget policy built around both.
Structured elaboration
Proxy SLIs for near-real-time monitoring: prediction-distribution drift (comparing the live distribution of model outputs against a known-healthy baseline distribution, detectable instantly without waiting for ground truth), and model confidence (if the model exposes a confidence/probability score, a sustained drop in average confidence can be an early, if imperfect, signal of degrading performance even before ground truth confirms it). Backfilling true correctness: once labels arrive (hours or days later), retroactively compute the TRUE accuracy for that historical window and reconcile it against what the proxy signals suggested at the time, both to correct the historical record and to continuously calibrate how well the proxy signals actually predict eventual ground-truth accuracy.
Worked example
Error budget applied to model rollbacks: if drift and confidence signals both cross a concerning threshold in near-real-time, that's enough evidence to trigger a PRECAUTIONARY rollback to the last validated model version, even before ground truth confirms the degradation, since waiting days for confirmation while a genuinely degraded model keeps serving live traffic is its own real cost; the rollback decision here is explicitly a risk-based bet on the proxy's reliability, not a certainty. When ground truth eventually arrives and CONFIRMS the degradation, that validates the rollback decision and should count against the model's error budget for the period the degraded model was actually live; if ground truth instead shows the proxy signal was a false alarm (the model was actually fine), that's valuable calibration data suggesting the proxy's threshold may need adjustment, not necessarily evidence the rollback itself was the wrong call given what was known at the time.
Trade-offs and pitfalls
The central tension here is that the proxy signals are, by design, imperfect early warnings, so acting on them (a precautionary rollback) always carries some risk of an unnecessary rollback on a model that would have turned out fine; the alternative, waiting for ground truth before ever acting, guarantees a real, if unquantified, exposure window where a genuinely bad model continues serving live traffic. The right calibration comes from tracking, over time, how often the proxy signals turn out (once ground truth confirms) to have been right versus false alarms, and tuning the proxy threshold based on that track record rather than treating the initial threshold choice as permanently correct.
Explain the four Golden Signals (latency, traffic/throughput, errors, and saturation) used to monitor a distributed service's health. For each signal, give one concrete metric you would collect and explain why that signal alone is not sufficient to judge system health.
Sample Answer
The four Golden Signals are the metrics Google's SRE practice recommends watching first to know whether a user-facing service is healthy: latency (how long requests take), traffic (how much demand the service is under), errors (the rate of requests that fail), and saturation (how full the service's most constrained resource is). The idea is that if you can only instrument four things for a new service, these four give you the fastest read on user-visible health.
The four signals, one metric each, and why each is insufficient alone
| Signal | Example metric | Why it alone is not enough |
|---|---|---|
| Latency | p50 (median) and p99 (99th-percentile) request duration in milliseconds, split by successful vs failed requests | A service can have great average latency while a subset of failed requests return instantly (for example, a fast 500), which hides the real problem if you only look at successful-request latency |
| Traffic | Requests per second, or for a data pipeline, rows or events processed per minute | Traffic alone says nothing about whether the requests are succeeding or how long they take; a stable request rate can mask a rising error rate underneath it |
| Errors | Fraction of requests returning a 5xx status, or for a background job, the failure rate of individual task attempts | A low error rate can still mean a critical error class (payments failing) is buried inside a much larger volume of harmless ones (retries succeeding on the second attempt) |
| Saturation | CPU (central processing unit) or memory utilization, queue depth, or connection-pool usage relative to its configured maximum | A resource can be under 100% and the service can still be failing (a downstream dependency is saturated, not this service); saturation on the wrong resource gives false confidence |
Why they're used together
Each signal answers a different question (is it slow, is it busy, is it failing, is it running out of room), and the same underlying incident often shows up differently in each: a memory leak first appears as rising saturation, then rising latency as garbage collection pressure builds, and only later as errors once requests start timing out. Watching all four catches the problem earlier than waiting for the error signal alone.
Worked example
A checkout service starts a slow memory leak after a deploy. Saturation (heap usage) climbs steadily from 40% to 85% over six hours with no visible impact on error rate. Latency's p99 begins rising around the 70% saturation mark as garbage-collection pauses lengthen, while errors stay near zero the whole time. An on-call engineer watching only the error-rate dashboard would see nothing wrong until the service hits an out-of-memory crash; watching saturation and latency together would have surfaced the leak roughly five hours earlier.
Trade-offs and pitfalls
The Golden Signals tell you that something is wrong and roughly where (which of four broad categories), but they do not replace deeper instrumentation (distributed tracing, structured logs) needed to find why. A common pitfall is picking a saturation metric that isn't actually the service's bottleneck (watching CPU when the real constraint is a database connection pool), which gives a false "all healthy" reading right up until the real resource runs out. For batch or streaming systems, the same four ideas apply but the concrete metrics differ: "traffic" becomes throughput (rows or events per minute), and "latency" becomes end-to-end freshness (how stale the data is), not per-request response time.
Unlock Full Question Bank
Get access to all 38 Site Reliability Engineering Principles interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.