System Design Observability Interview Questions: SLOs, Metrics, Logs, Tracing
Reviewed by Mark Dickie · Last updated
8 questions on this page you can answer and see marked on the spot. Go to the first one
System design observability is the practice of inferring a running system's internal state from what it emits: metrics, logs, and traces. Interviewers use it to see whether you can tell a failing service from a noisy one before customers do. Expect to explain which signal answers which question, how you would set an SLO and its error budget, and why a page should fire on user-facing symptoms rather than internal causes. The quiz below covers these trade-offs in the order a design round usually raises them.
What does a system design observability interview test?
Each signal answers a different question, so name the one you would reach for first.
| Signal | Question it answers | Mechanism to name | Failure mode to raise |
|---|---|---|---|
| Metrics | Is the service healthy right now? | Counters and histograms in Prometheus, using the RED method (rate, errors, duration) | User IDs used as label values inflate time-series cardinality until the store slows down |
| Logs | What happened on this one request? | Structured JSON with a request ID and trace ID on every line | Verbose debug logging left on in production fills storage and buries the error line |
| Traces | Where did the latency go across services? | OpenTelemetry spans linked by the traceparent header, including across queues | Head sampling drops the rare slow request; tail sampling keeps it |
| Alerts | Does a human need to act now? | Burn-rate alerts measured against the SLO error budget | CPU-based pages wake engineers for healthy services that run hot |
How do you keep alerts from paging on noise?
- Name the user journey and pick one SLI for it, such as the share of checkout requests that return 2xx in under 300 ms.
- Set the SLO target, for example 99.9% over 30 days, work out the error budget it leaves, and state what the team does when that budget runs out.
- Instrument the critical path with RED metrics at the service edge, and propagate trace context through message queues, not only HTTP calls.
- Add two burn-rate alerts, a fast one over a short window and a slow one over a long window, so a sudden outage pages while a slow leak opens a ticket.
Key facts
- Tarmac has 11 System Design interview questions on this topic, 10 of them on this page, at difficulty 3–5 of 5.
- Tarmac tracked 3,204 job postings asking for System Design in October 2026.
- Roles asking for System Design advertise a median base salary of US$182,500, across 915 job postings as of October 2026.
- Tarmac last reviewed these System Design interview questions on 2 November 2026.
At a glance
| Questions | 10 shown · 11 in the bank |
|---|---|
| Difficulty | 3–5 of 5 |
| Formats | Multiple choice, Multiple answer, True / false, Short answer, Flashcard, Ordering |
What you'll review
- observability sd
- microservices
Practice questions
Try one before you open the answer. Pick an option and press Check; it's marked on the spot.
A platform team wants every microservice to emit distributed traces and structured logs without each team touching their application code. Which deployment pattern enables this uniformly?#
Options
Show answer
Use sidecar containers deployed alongside each service pod that intercept or collect telemetry via the network layer, injected automatically by a mutating admission webhook. This decouples telemetry infrastructure from application code — teams write their service, the platform team ships the sidecar — giving uniform traces and logs with zero code changes. A shared library or per-team /metrics endpoint pushes the work back onto application teams.
The sidecar pattern decouples telemetry infrastructure from application code: a proxy or collector container (e.g. an OpenTelemetry Collector sidecar or an Envoy proxy) is injected alongside each pod — typically via a Kubernetes mutating admission webhook — and handles trace propagation, log scraping, and metric collection transparently. Application teams write their service; the platform team ships the sidecar. This is how service meshes (Istio, Linkerd) and auto-instrumentation platforms achieve zero-code-change observability at scale. A shared library requires every team to adopt, upgrade, and initialise the library — no uniformity guarantee and direct code coupling. Polling log files on disk is fragile, adds latency, and misses structured in-process spans. Requiring each team to expose a /metrics endpoint shifts the work onto the application teams, exactly what the question wants to avoid.
You are setting up observability for a production microservices platform. Which signals and practices form a complete observability foundation?#
Options
Pick every one that applies.
Show answer
A complete foundation is the three pillars: RED or USE metrics per service surfaced in dashboards with SLO-burn alerting, structured correlated logs carrying a shared request/trace id so one request can be followed across services, and distributed traces showing the call graph and latency breakdown for a single request. Eyeballing CPU and memory over SSH once a day, or alerting on raw CPU thresholds per host, are not observability — they are noisy and miss real user pain.
The three pillars of observability are metrics, logs, and traces — and in a microservices system all three are necessary. RED/USE metrics with SLO-based alerting give you the service-level signal to know when users are affected. Correlated structured logs let you follow a request across services using a shared trace ID, essential for debugging distributed failures. Distributed traces give you the call graph and latency breakdown that individual service logs cannot — you can see which downstream hop is slow and where errors originate. Manual SSH checks are not observability: they are reactive, don't scale, and miss failures that resolve before someone looks. CPU-threshold alerts are notorious for both noisy false alarms (high CPU often means healthy load) and missed real user pain (a slow database doesn't spike your CPU); SLO-based alerts on error rate and latency are far more actionable and correlated with user experience.
In a well-instrumented microservices system, metrics dashboards (e.g. request rate, error rate, latency percentiles) are sufficient for diagnosing the root cause of a latency spike across multiple services.#
Options
Show answer
False. Metrics tell you that something is slow and which service is involved, but they aggregate across requests and lose per-request causality. To find why a specific request was slow across a chain of services you need distributed tracing — spans carrying a shared trace id that expose exactly where latency was spent. The three pillars — metrics, logs, and traces — are complementary; none substitutes for the others.
Metrics tell you that something is slow and which service is involved, but they aggregate across all requests and lose per-request causality. To identify why a specific request was slow across a chain of services you need distributed tracing — spans that carry a shared trace ID, capture cross-service call trees, and expose exactly where latency was spent. Logs add per-event context that metrics discard. The three pillars of observability — metrics, logs, and traces — are complementary; none substitutes for the others.
Your service has an SLO of 99.9% monthly availability. The oncall engineer wants to deploy a risky schema migration. Which concept from SRE gives the team a principled, quantified way to decide whether to proceed?#
Options
Show answer
The error budget gives the principled, quantified answer: a 99.9% SLO allows about 0.1% of the month — roughly 43 minutes — of downtime that can be spent on risk. If budget remains, the risky migration can proceed; if it is exhausted, the change is gated or requires mitigation. This is what gives the SLO teeth, unlike MTTR (recovery speed) or the SLA (a contractual threshold).
An error budget translates the SLO into a concrete allowance of acceptable unreliability — here, about 43 minutes of downtime per month. It creates a shared language between product and reliability teams: while budget remains, teams may take on risk (feature launches, risky migrations); when it is exhausted (either by incidents or planned work), reliability investment takes precedence and risky changes are gated. This is the mechanism that prevents the SLO from being aspirational — it has teeth. MTTR is a recovery speed metric, not a risk-tolerance budget; a fast recovery doesn't make the outage free if the budget is already spent. An SLA is the contractual consequence threshold, typically more lenient than the SLO — it does not tell you whether a given action is prudent. Deployment frequency is a DORA metric about change cadence, not about whether any particular risky change is safe to make when reliability headroom is low.
A platform team proposes adding a service mesh (e.g. Istio) on top of the existing API gateway. A developer argues they are redundant. Which statement correctly distinguishes their purposes?#
Options
Show answer
A service mesh and an API gateway are complementary, not redundant. The API gateway handles north-south traffic (external clients to services) with auth, rate limiting, and routing; the service mesh handles east-west traffic (service-to-service inside the cluster) with mTLS, retries, and telemetry injected via sidecar proxies. The gateway cannot see internal pod-to-pod calls, and the mesh is not designed as an external ingress, so each covers a boundary the other does not.
They operate at different traffic boundaries. The API gateway is the north-south edge: it handles the public API surface — authentication, TLS termination, routing, rate limiting, and request aggregation for external callers. The service mesh is east-west: it intercepts every inter-service call via sidecar proxies (e.g. Envoy) to provide mTLS between pods, circuit breaking, retries, load balancing, and per-call telemetry without any changes to application code. These two layers complement each other — the gateway cannot see internal pod-to-pod calls, and the mesh is not designed as an external ingress. A gateway does not subsume mesh features; they have different scopes. Sidecars handle inter-service calls, not external ingress. A service mesh has nothing to do with database connection pooling — that is managed by the application or a separate proxy like PgBouncer.
Your team is defining reliability targets using SLIs, SLOs, and SLAs. Which statements correctly describe these concepts and how to use them?#
Options
Pick every one that applies.
Show answer
The correct statements are that an SLI is a quantitative measurement of service behaviour (such as the fraction of requests succeeding under 200 ms), an SLO is an internal reliability target set on SLIs (such as 99.9% over a 28-day window), an SLA is an external customer contract whose violation carries business or financial consequences, and error budgets derive from SLOs and can be spent on risky releases until exhaustion triggers a freeze. Setting SLOs at 100% is an anti-pattern that leaves no error budget.
SLI/SLO/SLA form a hierarchy of reliability accountability. An SLI is the raw measurement — success rate, latency percentile, availability — that expresses what you actually observe. An SLO is your internal target: an aspirational but achievable bound on that measurement that defines what 'working well' means. An SLA is the external, legally or commercially binding commitment; SLOs are typically set stricter than SLAs to leave a buffer. Error budgets are the complement of SLOs (e.g. 0.1% of requests may fail over 28 days) and are the key SRE mechanism: you can spend them on velocity (risky deploys, experiments) and must freeze risky changes when the budget is gone. Setting SLOs at 100% is an anti-pattern: it leaves no error budget, incentivises no risky but valuable changes, is practically unachievable, and means any single failure is by definition an SLO violation.
Production observability is often described as metrics, logs, and traces. What is each one good at, and why do you need all three rather than just one?#
Show answer
Metrics are aggregated numeric time series (request rate, error rate, latency percentiles, CPU); they're cheap to store and ideal for dashboards and alerting because they tell you that something is wrong and how the system behaves in aggregate, but they lose per-request detail. Logs are timestamped discrete event records with rich context; they're great for the detail of what happened on a specific event or error, but they're high-volume, expensive at scale, and don't show how a request moved across services. Traces follow a single request across service boundaries via a propagated trace id, breaking it into spans so you can see where the time went and which hop failed. You need all three because they answer different questions at different altitudes: metrics surface and alert on the problem, traces localize it to a service/hop, and logs give the line-level detail to explain the root cause — together they take you from 'something's wrong' to 'here's exactly why.'
The three pillars answer different questions. Metrics are cheap aggregated time series (rates, error %, latency percentiles) — best for dashboards and alerting: they tell you that something is wrong but lose per-request detail. Logs are rich discrete event records — best for the what of a specific event/error, but high-volume and blind to cross-service flow. Traces stitch a single request's spans across services via a propagated trace id — best for where the latency/failure is. You need all three because they operate at different altitudes: metrics detect and alert, traces localize to a hop, logs explain the root cause. Relying on one leaves a blind spot — metrics alone can't tell you why; logs alone can't show the request's path.
In observability/SRE terms, what is an SLO and how does an error budget derive from it?#
Show answer
An SLO (Service Level Objective) is a target for a reliability metric over a window — e.g. 99.9% of requests succeed in 30 days. The error budget is the inverse: the allowed amount of failure — here 0.1% of requests (or, if the SLI is time-based uptime instead, ~43 minutes/month of unavailability; pick one SLI, don't equate the two). Teams spend the budget on risk — shipping features, running experiments — and when it is exhausted they freeze risky changes and prioritise reliability. It turns 'how reliable is reliable enough' into a measurable, negotiable contract instead of chasing unattainable 100%.
Error budgets reframe reliability as a resource to be managed rather than maximised, aligning product velocity and operational stability. They depend on good observability — the SLIs (latency, error rate, availability) must be measured from the user's perspective for the SLO and budget to mean anything.
Order the steps to bootstrap end-to-end observability for a new microservice, from code instrumentation to on-call alerting.#
Put these in order
Show answer
Bootstrap end-to-end observability in this order:
- Instrument the service to emit structured logs, metrics, and distributed traces.
- Ship telemetry to a centralised backend (e.g. Datadog, Grafana, Honeycomb).
- Build dashboards for golden signals: latency, error rate, throughput, saturation.
- Define SLOs based on business requirements.
- Configure alerts that fire when error-budget burn rate exceeds the SLO threshold.
Observability flows from collection to action. You must instrument the service before there is anything to ship; you must have data centralised before you can visualise it; you need dashboards to understand normal behaviour before you can set meaningful SLOs; and SLOs must be in place before you can write alerts that measure the right thing rather than arbitrary thresholds. Alerting on error-budget burn rate (step 5) rather than raw error counts ensures alerts are proportional to user impact.
A request that fans out across six microservices is intermittently slow, and per-service dashboards each look healthy in isolation. Which observability signal is purpose-built to locate where the latency is spent across that single request's path?#
Options
Show answer
Distributed tracing with a propagated trace/span context across all services. It stitches together the spans of one request as it crosses service boundaries, so you can see exactly which hop consumed the time — the precise need when each service looks healthy on its own. Aggregate metrics average away the slow request, and per-service logs can't reconstruct one request's journey without a shared trace id.
Distributed tracing stitches together the spans of one request as it crosses service boundaries via a propagated trace context, so you can see exactly which hop consumed the time — the precise need when each service looks fine on its own. Aggregate metrics tell you that p95 is high but average away the individual slow request and cannot attribute latency across the chain. Logs are per-service and unordered relative to each other; without a shared trace id you cannot reliably reconstruct one request's journey across all six. A health check only answers up/down liveness and says nothing about per-request latency distribution. Metrics, logs, and traces are complementary, but tracing is the one built for cross-service request attribution.
Related interview questions
Job market
See system-design salaries and hiring demand from live job postings.
The other 1 question
This page shows 10 and marks what you pick. That's as far as a page can go. A free account opens the other 1 and keeps every answer. What you miss comes back until it's right: after a day, then at longer gaps.
Free · the whole bank · 100 marked answers per 30 days · written feedback on the paid plan