DoorDash Site Reliability Engineer (Mid-Level) Interview Preparation Guide
DoorDash's mid-level SRE interview process spans 4-6 weeks and includes an initial recruiter screening, a technical phone screen, and a full-day onsite with multiple rounds covering system design, monitoring/observability, infrastructure automation, incident response, and behavioral assessment. The process emphasizes practical problem-solving, operational thinking, reliability-focused design decisions, and cultural fit within DoorDash's fast-paced engineering environment.
Interview Rounds
Recruiter Screening
What to Expect
Initial conversation with the recruiter to confirm interest, discuss your background, and assess basic qualifications. This is a soft screening to ensure mutual fit before moving to technical evaluations. The recruiter will discuss the role, DoorDash's SRE team, compensation expectations, and timeline. They may ask about your willingness to work on-site if required and your interest in DoorDash's mission. This round is mainly informational but shows your communication skills and genuine interest in the role.
Tips & Advice
Be enthusiastic about SRE work, not just the company brand. Have thoughtful questions about the team size, current pain points, and what success looks like in the first 6 months. Mention specific reasons you're drawn to DoorDash (their scale, technical challenges, or reliability requirements). Discuss your SRE background concisely. This is your chance to build rapport—be conversational and authentic. Clarify any logistics (timeline, interview format) and confirm your availability for phone screens and onsite.
Focus Topics
Questions About DoorDash's SRE Team and Role
Prepare thoughtful questions: What are the team's current priorities? What systems do they own? What incidents have they handled recently? What does on-call look like? This demonstrates genuine interest and helps you assess fit.
Practice Interview
Study Questions
Career Motivation and SRE Interest
Articulate why SRE appeals to you beyond generic reasons. Discuss specific incidents you've handled, systems you've stabilized, or automation wins that shaped your interest in reliability engineering. Be prepared to explain the difference between SRE and other roles (DevOps, backend engineering) and why SRE resonates with your problem-solving style.
Practice Interview
Study Questions
Background Overview and Relevant Experience
Prepare a 2-3 minute summary of your engineering background, highlighting 2-3 SRE or reliability-focused projects you've owned. Mention technologies you've worked with (monitoring tools, orchestration platforms, incident response systems). At mid-level, emphasize projects where you took ownership, mentored others, or influenced team reliability decisions.
Practice Interview
Study Questions
Technical Phone Screen
What to Expect
A 60-minute screen with a DoorDash engineer (often a senior SRE or platform engineer) covering coding fundamentals and basic systems thinking. You'll be asked to solve 1-2 coding problems using an online editor (usually HackerRank or similar). Problems are typically medium-difficulty LeetCode-style questions, often with themes relevant to SRE work (job scheduling, queue management, rate limiting). The interviewer evaluates your problem-solving approach, code quality, communication, and ability to optimize solutions. They're assessing whether you can handle technical depth required for the role.
Tips & Advice
Think aloud throughout. Start by clarifying the problem, state assumptions, discuss brute-force approaches before optimizing. Write clean, readable code with proper variable names. Test edge cases mentally. If you get stuck, explain your thought process and ask clarifying questions. The interviewer is testing communication as much as raw coding ability. For mid-level SREs, efficiency and pragmatism matter—don't over-engineer trivial problems. Have a few LeetCode medium problems solved under your belt beforehand, particularly those involving queues, heaps, sorting, and string manipulation. Practice explaining trade-offs in time/space complexity. If asked about SRE-specific topics during this call (e.g., "How would you monitor this?"), provide concrete answers referencing tools like Prometheus or Datadog.
Focus Topics
SRE-Specific Problem Context
If problems relate to job scheduling, rate limiting, queue management, or caching, connect them to real SRE scenarios. For example, when solving a rate-limiting problem, mention that similar logic applies to protecting services during traffic spikes. This shows you think in systems terms, not just algorithms.
Practice Interview
Study Questions
Code Quality and Edge Case Handling
Write code that's readable and maintainable. Handle edge cases (empty inputs, single elements, null values). Write simple, not clever code. At mid-level, optimize when appropriate but don't over-optimize toy problems. Test your solution mentally against examples.
Practice Interview
Study Questions
Data Structures and Algorithms Fundamentals
Solid understanding of arrays, linked lists, hash tables, heaps, trees, and graphs. Be comfortable with sorting algorithms, searching, and basic dynamic programming. Focus on problems that appear in real systems: LRU caches (relevant to distributed caching), priority queues (relevant to job scheduling), and graph traversal (relevant to network topology).
Practice Interview
Study Questions
Problem-Solving Methodology and Communication
Practice verbalizing your approach: repeat the problem, clarify constraints, discuss brute-force solutions, then optimize. Ask for hints if stuck rather than going silent. Explain your reasoning for choosing specific data structures. Walk through examples to validate correctness.
Practice Interview
Study Questions
LeetCode Medium-Level Problem Categories
Focus on: (1) Arrays and Strings (Two Sum, Sliding Window), (2) Linked Lists, (3) Trees and Graphs (BFS, DFS), (4) Heaps and Priority Queues, (5) Hash Tables, (6) Basic DP (Climbing Stairs, Coin Change). Avoid spending time on hard problems; medium difficulty is the ceiling for this screen.
Practice Interview
Study Questions
System Design Interview
What to Expect
A 60-minute technical interview where you design a system relevant to DoorDash's SRE challenges. Common prompts include designing a monitoring system, a deployment pipeline, a distributed tracing solution, or reliability infrastructure for DoorDash's order placement and delivery tracking. You'll work through scoping, high-level architecture, component design, and trade-offs with a senior SRE or platform engineer. This is not about designing DoorDash's product features, but rather designing systems that enable reliability at scale. You'll be evaluated on your ability to identify key requirements, propose scalable solutions, and justify architectural choices.
Tips & Advice
Start by clarifying scope and constraints: Who are the users (engineers, customers, systems)? What are the scale requirements (daily events, latency, durability)? What are failure modes? For mid-level SREs, you're expected to design systems with awareness of real operational constraints (cost, maintenance, team size). Propose a high-level architecture first, then dive into key components. Be comfortable discussing databases (SQL vs. NoSQL trade-offs), caching layers, messaging systems, and monitoring strategies. DoorDash-specific: Think about real-time systems, geographic distribution, and handling massive throughput with low latency. Justify your choices: Why this database over that? Why this queuing system? What's the trade-off? If asked about resilience, discuss replication, failover, and graceful degradation. Be prepared for follow-up questions that introduce constraints (e.g., "Now reduce costs by 30%" or "Make this work for offline dashers"). Connect your design to operational impact: How would your team monitor this? What incidents should they prepare for? At mid-level, show you think about operability, not just technical correctness.
Focus Topics
DoorDash-Specific Architecture Considerations
DoorDash operates real-time, geographically distributed systems: order placement (consistency matters—can't double-charge), delivery tracking (low latency—dashers and customers need live updates), and dasher-customer matching (latency-sensitive, geo-partitioned). When designing systems, consider these operational realities. How would you handle an order that's stuck in an intermediate state? How do you ensure a dasher can always receive new deliveries?
Practice Interview
Study Questions
Container Orchestration and Deployment Systems
If designing deployment pipelines or infrastructure, be comfortable discussing Kubernetes (pod scheduling, rolling updates, resource limits), container runtimes, and deployment strategies (canary, blue-green, rolling). Understand how SREs automate deployments safely. Discuss monitoring and rollback mechanisms.
Practice Interview
Study Questions
Scalability and Performance Trade-Offs
Design systems that scale horizontally. Consider database scaling (sharding strategies, read replicas), caching layers, load balancing, and handling peak load (DoorDash has millions of orders daily). Discuss latency budgets: How do you meet sub-second tracking updates? Understand vertical vs. horizontal scaling trade-offs.
Practice Interview
Study Questions
Failure Modes and Resilience Patterns
Discuss how systems degrade under failure: What happens when a database replica fails? When a service is slow? How do circuit breakers help? Understand retry strategies, timeouts, bulkheads, and cascading failure prevention. Design for graceful degradation: which features remain available when resources are constrained?
Practice Interview
Study Questions
Monitoring, Observability, and Alerting Architecture
Design a monitoring system covering metrics collection, storage, visualization, and alerting. Understand time-series databases (Prometheus, InfluxDB), log aggregation (ELK stack, Datadog), distributed tracing (Jaeger, Zipkin), and alerting strategies (threshold-based, anomaly detection). Discuss SLO/SLI concepts and how monitoring enables them. At mid-level, propose specific tech stacks and justify scalability choices.
Practice Interview
Study Questions
Distributed Systems Fundamentals for SRE
Understand key distributed systems concepts: consistency (strong, eventual), availability, partitioning tolerance (CAP theorem), replication strategies, consensus algorithms (Raft, Paxos—basic understanding), and failure modes. For SREs, focus on practical implications: What happens when a service is unreachable? How do systems degrade? What consistency guarantees do we actually need?
Practice Interview
Study Questions
Monitoring and Observability Interview
What to Expect
A 60-minute focused interview on how you design and implement monitoring, alerting, and observability systems. You'll discuss your approach to instrumenting services, defining SLOs and error budgets, building dashboards, and structuring alerting policies. The interviewer might present a scenario: "A critical service is degrading. Walk me through how you'd detect it, alert on it, and debug it." Alternatively, you might be asked to design observability for a specific DoorDash system (order pipeline, delivery tracking). This round evaluates your operational maturity, understanding of observability best practices, and ability to build systems that SREs actually use in production.
Tips & Advice
Approach monitoring holistically: metrics (what), logs (why), traces (how). Discuss the RED method (Rate, Errors, Duration) and USE method (Utilization, Saturation, Errors) for structuring metrics. Define SLOs realistically—don't aim for 99.99% if business doesn't require it. Discuss error budgets and how to spend them wisely. Be specific about tools: What monitoring platform? Why that over alternatives? How would you structure Prometheus scrape configs or Datadog dashboards? At mid-level, show you've built and maintained monitoring systems, not just used pre-built ones. Discuss alerting fatigue and how you combat alert noise. Be prepared to talk about a production incident you detected and what monitoring gaps you discovered afterward. For DoorDash, discuss high-cardinality dimensions (order IDs, dasher IDs, restaurant IDs) and how you'd structure metrics without exploding cardinality. Mention concrete tools and configurations. For example, instead of saying "I'd use monitoring," say "I'd set up Prometheus with a 15-second scrape interval to track order latency p50, p95, p99, and alert when p95 exceeds 2 seconds."
Focus Topics
Dashboard Design and Visualization
Design dashboards that answer key questions: Is the system healthy? What's trending? What should I investigate? Discuss context-specific dashboards (on-call dashboard for incident response, team dashboard for capacity planning). At mid-level, be opinionated about dashboard design: What metrics matter? What's the right visualization (graph, heatmap, table)? How do you avoid dashboard clutter?
Practice Interview
Study Questions
High-Cardinality Metrics and DoorDash Scale
DoorDash tracks millions of orders, dashers, and restaurants. If you use high-cardinality labels (order_id, dasher_id, restaurant_id), you'll explode your metrics database. Discuss strategies: aggregate metrics by region or service tier, use trace sampling, or structure queries efficiently. At mid-level, show awareness of scale and willingness to design around constraints.
Practice Interview
Study Questions
Observability for Distributed Systems (Logs, Traces)
Beyond metrics, understand structured logging (JSON logs, correlation IDs) and distributed tracing (request flow across services). Know how to instrument services with OpenTelemetry or similar. Discuss log aggregation platforms (ELK stack, Datadog, Splunk). Understand trace sampling strategies (you can't store every trace at scale). At mid-level, be comfortable proposing trace architectures for multi-service systems and debugging production issues using trace data.
Practice Interview
Study Questions
Metrics Collection, Storage, and Querying
Understand time-series databases (Prometheus, InfluxDB, Thanos for long-term storage). Know the difference between counters, gauges, histograms, and summaries. Discuss cardinality management (don't create unlimited label combinations). Be comfortable writing PromQL queries or equivalent. Understand metric retention strategies and cost implications. At mid-level, show you've designed metrics schemas for production systems and handled cardinality explosions.
Practice Interview
Study Questions
Alerting Strategy and Fatigue Prevention
Design alerts that wake people up for actionable issues, not for every anomaly. Discuss threshold-based alerts (static thresholds for clear failures), anomaly detection (dynamic thresholds for unusual patterns), and composite alerts (combination of signals). Understand alert routing, escalation policies, and on-call schedules. Discuss alert tuning: How do you reduce false positives? What's the cost of missing a real alert? At mid-level, show you've tuned alerts in production and reduced noise.
Practice Interview
Study Questions
SLO/SLI/SLA Concepts and Implementation
Understand the hierarchy: SLA (business agreement), SLO (target), SLI (measured indicator). At mid-level, be able to propose realistic SLOs for services, define measurable SLIs, and calculate error budgets. For example: "This service SLO is 99.95% availability. Given 30 days, we have a 21-minute error budget. We've used 15 minutes in incidents; we have 6 minutes left." Discuss how error budgets inform decisions (should we deploy during risk? Should we invest in reliability improvements?).
Practice Interview
Study Questions
Infrastructure Automation and Tooling Interview
What to Expect
A 60-minute technical interview focused on how you automate operational tasks, build tools, and reduce toil. You might be asked to design a deployment automation system, write pseudocode for an infrastructure provisioning tool, or discuss how you'd automate incident response. The interviewer will assess your ability to identify toil (repetitive tasks), estimate effort to automate, and prioritize automation work. You'll discuss scripting languages, Infrastructure-as-Code frameworks, CI/CD pipelines, configuration management, and how you measure automation impact. This round evaluates your engineering mindset: SREs are expected to write software to reduce operational burden.
Tips & Advice
Think about the jobs SREs do repeatedly: deployments, incident response, service scaling, failover, maintenance. Which of these should be automated? For mid-level SREs, you should have concrete examples of toil you've eliminated: "Our team spent 8 hours per week rolling back failed deployments. I built an automated rollback system that detected failures and reverted within 2 minutes. Now we spend 30 minutes per week on manual reviews." Discuss Infrastructure-as-Code: Terraform, CloudFormation, Ansible. Know the philosophy (immutable infrastructure, version control for infra). Be comfortable writing pseudocode or actual code for automation tasks. Use real tools: Bash scripting, Python for higher-level tools, Go for performance-critical utilities. Discuss configuration management, secrets handling, and environment parity. For CI/CD, understand the pipeline: code push → test → build → deploy. Where are safety gates? How do you prevent bad deployments? Discuss canary deployments and rollback mechanisms. At mid-level, show you've designed automation that the team relies on and that improved reliability metrics.
Focus Topics
Monitoring and Testing Automation Tools
How do you automate testing of infrastructure? Discuss infrastructure testing (does the network topology work?), disaster recovery drills (can we failover?), and synthetic monitoring (can users use the service?). At mid-level, propose automation frameworks for reliability validation.
Practice Interview
Study Questions
Incident Response Automation
How would you automate common incident response tasks? Examples: automatic alerting escalation, automated remediation (restart service, trigger failover), automated rollback on deployment failures, runbook execution. Discuss when automation is safe (clear failure detection, safe operations) vs. when humans should decide.
Practice Interview
Study Questions
Toil Identification and Automation ROI
Understand how to quantify toil (hours spent on repetitive tasks per week). Estimate effort to automate. Calculate ROI: if automation takes 40 hours to build and saves 4 hours per week, breakeven is 10 weeks. At mid-level, be strategic about automation decisions: automate high-impact tasks first. Have examples of toil you've identified and eliminated.
Practice Interview
Study Questions
Scripting and Automation Languages
Proficiency in Bash for quick scripts and system administration. Ability to write higher-level automation in Python or Go. Understand when to use each: Bash for simple one-liners and pipeline scripts, Python for maintainability and libraries, Go for performance-critical tools. At mid-level, write clean, production-grade scripts with error handling, logging, and testing.
Practice Interview
Study Questions
Infrastructure-as-Code and Configuration Management
Hands-on experience with Terraform, CloudFormation, or similar for provisioning infrastructure. Understand the principles: define infrastructure in version control, enable reproducible deployments, support environments parity (dev, staging, production use identical templates). Discuss Ansible, Salt, or Chef for configuration management. At mid-level, design IaC structures for multiple services and environments.
Practice Interview
Study Questions
Deployment Automation and Safety
Design CI/CD pipelines that balance speed and safety. Understand testing gates (unit tests, integration tests, smoke tests), deployment strategies (blue-green, canary, rolling), and rollback mechanisms. Discuss preventing bad deployments: What checks run before production deployment? How quickly can you detect and rollback a failed deployment?
Practice Interview
Study Questions
Incident Response and Troubleshooting Interview
What to Expect
A 60-minute scenario-based interview where you handle a production incident. You'll be given a situation (e.g., "Order placement latency has increased to 5 seconds. Customers are seeing timeouts. It started 10 minutes ago. Walk me through your investigation.") and asked to troubleshoot methodically. The interviewer plays the role of a teammate providing information as you request it. You'll discuss how to gather data, form hypotheses, eliminate causes, and arrive at the root cause. You'll be evaluated on your troubleshooting methodology, use of observability tools, communication under pressure, and ability to handle ambiguity. This round is crucial for SRE roles because incident response is a core responsibility.
Tips & Advice
Approach incidents systematically: (1) Gather context (when did it start? how many users affected? what's the blast radius?), (2) form initial hypotheses, (3) collect data to test hypotheses, (4) eliminate causes, (5) identify root cause, (6) implement fix, (7) reflect on prevention. Use a methodical approach like the scientific method. Ask for specific data: "What's the error rate? Distribution across regions? Which service is slow?" Don't guess; let data guide you. For mid-level SREs, you're expected to handle ambiguity well: "I don't know yet, but here's how I'd investigate." Use observability tools you know: metrics dashboards, logs, traces, profiling. For example: "I'd check our metrics dashboard to see if CPU is high on the order service. Then I'd look at request latencies from traces to see if it's database queries or API calls that are slow. Then I'd check database metrics to see if there's lock contention." Discuss communication: keep the team updated, explain your findings clearly, propose solutions. At mid-level, you own the incident (not waiting for a senior to step in), but you collaborate and escalate when needed. Have a real incident story prepared: describe what you did, what you learned, and what you'd do differently. Be honest about mistakes.
Focus Topics
DoorDash-Specific Incident Patterns
DoorDash incidents often involve: (1) order pipeline issues (payment failures, delivery assignment delays), (2) geographic scaling (one region degraded while others are fine), (3) real-time systems (tracking data stale or incorrect), (4) peak load incidents (surge pricing, flash sales). When troubleshooting, consider these contexts. For example, if delivery matching is slow, check geo-partitioning and available dasher pools.
Practice Interview
Study Questions
Communication and Decision-Making During Incidents
Keep stakeholders informed: "Here's what I'm seeing. Here's my hypothesis. Here's what I'm testing next." For mid-level SREs, communicate findings clearly to both technical teammates and non-technical stakeholders. Make decisions: Should we rollback the recent deployment? Scale up resources? Take the service offline? Explain your reasoning. Escalate when needed: if you're stuck, ask for help without ego.
Practice Interview
Study Questions
Using Observability for Diagnosis
Know how to query metrics, search logs, and trace requests to find issues. For metrics: identify when the anomaly started, which services or regions are affected. For logs: find error messages and correlate with the timeline. For traces: see which request paths are slow, where the latency is concentrated. At mid-level, fluidly move between observability tools and extract insights quickly.
Practice Interview
Study Questions
Root Cause Analysis and Distinguishing Symptoms from Causes
Understand the difference: a symptom is "order latency is high." Possible causes: database is slow, cache is misconfigured, a bad deployment happened, resource limits were hit, network is congested. Don't stop at the first thing that looks wrong. Dig deeper: Why is the database slow? Is it a long-running query, too many connections, or hardware overload? At mid-level, get comfortable asking "why" iteratively.
Practice Interview
Study Questions
Common Failure Modes and Debugging Techniques
Know typical SRE incident categories: (1) resource exhaustion (CPU, memory, disk, connections), (2) traffic spikes (need scaling or rate limiting), (3) bad deployments (need rollback or fix), (4) cascading failures (service A is slow → affects service B → affects service C), (5) data corruption or consistency issues, (6) external dependency failures (database, third-party API). For each, know the symptoms and how to investigate.
Practice Interview
Study Questions
Systematic Troubleshooting Methodology
Master the incident troubleshooting process: (1) gather context and scope the problem, (2) understand normal behavior (what do metrics usually look like?), (3) form hypotheses about what changed, (4) collect data to test hypotheses efficiently, (5) eliminate causes methodically, (6) identify root cause, (7) implement fix, (8) verify fix, (9) post-incident reflection. At mid-level, execute this process confidently without constantly asking for guidance.
Practice Interview
Study Questions
Behavioral and Culture Fit Interview
What to Expect
A 60-minute conversation with a senior engineer or manager assessing cultural alignment, collaboration style, learning ability, and how you handle adversity. You'll be asked about past experiences: times you've mentored others, handled conflict, disagreed with a decision, failed at something, or adapted to change. The interviewer is evaluating: Do you align with DoorDash's values? Can you work effectively with teams? Are you coachable? How do you handle ambiguity and pressure? This round is crucial because technical skills alone don't guarantee success; culture and collaboration matter, especially for SREs who are on-call and respond to incidents with colleagues.
Tips & Advice
Use the STAR method (Situation, Task, Action, Result) to structure answers. Prepare 5-7 strong stories that cover: (1) a complex technical challenge you owned, (2) a time you mentored someone junior, (3) a time you disagreed with a decision and how you handled it, (4) a time you failed and what you learned, (5) a time you had to adapt quickly, (6) your approach to collaboration and communication, (7) a time you prioritized reliability/user impact over speed. At mid-level, your stories should show ownership, mentorship, and contributing to team decisions—not just executing tasks. Be specific about your contributions, not "the team did X." Say "I led X" or "I implemented Y and mentored Z on the approach." Discuss DoorDash specifics: "I'm excited about the scale and real-time challenges. I love the mission of connecting people with food, and reliability is how that trust is built." Ask thoughtful questions about the team, growth opportunities, and how they handle on-call culture. Be authentic: don't pretend to be someone you're not. If you're introverted, that's fine; emphasize clarity and written communication. If you're extroverted, emphasize bringing energy to collaborative troubleshooting. Be honest about growth areas. DoorDash values learning and improvement.
Focus Topics
Adapting to Change and Ambiguity
SREs work in fast-changing environments. Share a time when priorities shifted, new technologies emerged, or the team was reorganized. How did you adapt? Did you resist change or embrace it? At mid-level, show flexibility without losing sight of reliability goals.
Practice Interview
Study Questions
Communication with Non-Technical Stakeholders
SREs often explain technical incidents and reliability trade-offs to product, business, and customer-facing teams. Share a time you communicated technical concepts to a non-technical audience or explained why a reliability improvement was worth the effort. At mid-level, show you can bridge technical and business thinking.
Practice Interview
Study Questions
Mentorship and Developing Others
At mid-level, mentoring junior engineers is expected. Share a story about onboarding or mentoring someone: helping them debug their first production incident, reviewing their code, or teaching them a technology. Discuss your approach: do you ask questions to help them learn, or do you just give answers? How do you balance guidance with independence? Show you invest in others' growth.
Practice Interview
Study Questions
Handling Disagreements and Technical Debates
Describe a time you disagreed with a technical decision or approach. How did you handle it? Did you raise concerns respectfully? Did you provide data to support your position? Did you accept the decision once made? At mid-level, show you can advocate for your ideas while respecting leadership and team decisions. Avoid stories where you were right and everyone else was wrong (even if true). Focus on process and collaboration.
Practice Interview
Study Questions
Learning from Failure and Mistakes
Share a story about failing: a deployment that broke production, a monitoring gap that missed an incident, or a misguided reliability project. What did you do? How did you respond? What did you learn? What would you do differently? At mid-level, show you've made significant mistakes and extracted valuable lessons. Don't make light of failures; take responsibility.
Practice Interview
Study Questions
Ownership and Accountability for SRE Projects
Prepare a story about owning a reliability project end-to-end: identifying the need (monitoring gaps, repeated manual tasks, system reliability issue), proposing a solution, securing buy-in from stakeholders, implementing it, and measuring impact. At mid-level, emphasize that you didn't wait for permission or direction; you identified a problem and drove the solution. Quantify impact: "Reduced on-call pages from 20/week to 5/week by implementing automated remediation."
Practice Interview
Study Questions
Frequently Asked Site Reliability Engineer (SRE) Interview Questions
Walk me through blue-green versus canary deployment from an infrastructure perspective; when would you reach for each? Think about traffic routing, resource duplication, cost, and what gets harder when a database schema change is part of the rollout.
Sample Answer
Direct answer
Blue-green gives you a full, already-validated environment and an instant, simple rollback, at the cost of running two complete copies of your infrastructure during the change; canary gives you gradual, lower-risk validation at the cost of more routing and monitoring complexity, and it is harder to reason about while it is in flight. Pick blue-green when a clean, all-or-nothing cutover is affordable and rollback speed matters most; pick canary when the blast radius of being wrong needs to stay small and you can invest in the routing and monitoring to support gradual exposure.
Structured elaboration
Comparison
| Dimension | Blue-green | Canary |
|---|---|---|
| Traffic routing | Atomic cutover: DNS, listener swap, or weight flip to 100% | Gradual: weighted routing or service-mesh rules, ramped over time |
| Resource duplication / cost | Full duplicate environment while both are live, higher but short-lived cost | Only a fraction of the fleet runs the new version at any point, lower peak cost |
| Rollback | Instant, swap back to the known-good environment | Ramp weight back down; usually just as fast, but only a subset of traffic was ever exposed |
| Blast radius if wrong | All traffic hits the new version the moment you cut over | Bounded to the canary percentage until you choose to widen it |
| Operational complexity | Lower: mostly "which environment is live" | Higher: routing rules, staged thresholds, automated promote/rollback logic |
| Database schema changes | Blue and green must both work against the same schema at the moment of cutover, since there is no gradual overlap window; this forces backward and forward compatible migrations (expand, migrate, contract) or a maintenance window | Old and new versions coexist against the same schema for longer, so the compatibility window has to hold for however long the canary runs, not just for an instant |
Other strategies worth naming
Blue-green and canary are not the only tools:
- Progressive expansion: widen the set of inputs a change applies to in stages rather than widening a traffic percentage, for example rolling a new IAM policy or network ACL out to one account, then one region, then everywhere, independent of any single request's traffic path.
- Feature flags for infra: gate exposure to a new code or config path behind a flag rather than, or in addition to, a routing change, so the change can be turned off instantly without touching load-balancer configuration at all. This is especially useful when the change is a behavior toggle inside already-deployed infrastructure rather than a new fleet.
Why this gets harder for networking or storage than for a stateless app release
Blue-green and canary are easy to describe for a stateless app release because the unit being duplicated (a fleet of identical, disposable instances) and the unit being routed (an HTTP request) line up cleanly. That stops being true for infrastructure-level changes:
- Networking: a routing or firewall change often affects an entire connection or an entire flow, not a single request, so traffic cannot always be shifted 5% at a time the way it can with an HTTP load balancer. A stateful TCP connection, a VPN tunnel, or a peering change uses the old path or the new path for its whole lifetime; the workaround is to canary at the level of an entire subnet, account, or long-lived connection cohort rather than per request, and to accept a coarser blast radius.
- Storage: there is no cheap duplicate of a stateful data store the way there is for a stateless instance. Standing up a second, fully synced database is expensive and introduces replication lag as a new failure mode. The common workaround is to validate the new storage layer with shadow traffic or dual writes before anything reads from it in production, and to use expand-then-contract schema migrations so both the old and new consumers can run against the same underlying store during the transition instead of trying to canary the store itself.
Worked example
A schema change on a Postgres-backed service being rolled out with blue-green: adding a NOT NULL column safely requires an expand-then-contract sequence rather than a single migration, because both blue and green must work against the same schema during cutover.
- Expand: add the column as nullable, deploy it (both blue and green tolerate a nullable column).
- Backfill: populate the column for existing rows.
- Cut over blue-green as normal, both versions still tolerate the nullable column.
- Contract: once green is fully promoted and blue is decommissioned, add the
NOT NULLconstraint in a separate migration, since only green's code path needs to rely on it.
This is the same three-step compatibility pattern regardless of whether the deployment strategy is blue-green or canary; what changes is only how long the "both versions must tolerate the old and new shape" window needs to hold.
Trade-offs & pitfalls
- Choosing canary by default because it "sounds safer," without the routing and monitoring maturity to support it, is a common mistake; a canary that cannot actually be measured is worse than a blue-green cutover that can be instantly reversed.
- Forgetting that duplication cost for blue-green is temporal, not permanent, leads teams to avoid it for cost reasons when the actual bill is only for the cutover window.
- Assuming the app-release playbook (weighted HTTP routing) transfers directly to networking or storage changes is the single most common failure mode; check whether the thing being changed is even divisible at the granularity being planned for the canary.
Design a DaemonSet-based collection agent for a shared Kubernetes cluster: it needs to gather logs, metrics, and traces from every node, handle backpressure gracefully, support dynamic configuration (for example via CRDs), and remain safe to upgrade without dropping telemetry. What would you build in for multi-tenant isolation and failure handling?
Sample Answer
Direct answer
Run one agent pod per node via a DaemonSet, with a small in-memory ring buffer for burst absorption and a bounded on-disk queue for surviving a network partition, both sized from the node's actual telemetry volume rather than a guess. Handle dynamic configuration through a CRD that a controller validates and pushes to agents for hot-reload (no pod restart, no dropped telemetry mid-reload). For multi-tenant isolation, tag every event with the owning tenant at collection time, enforce per-tenant rate limits so one noisy tenant can't starve another's telemetry, and never let two tenants' data share an in-memory buffer.
Structured elaboration
Buffering and backpressure: an in-memory ring buffer absorbs short bursts (for example a log storm from a crash-looping pod); once it's full, the agent spills to a bounded on-disk queue rather than blocking the node's workloads or dropping data outright. A token-bucket rate limiter per tenant caps how fast any one tenant's telemetry can consume shared agent resources, with system/infra telemetry prioritized over tenant traffic when the two compete.
Dynamic configuration via CRDs: a cluster-level controller watches TenantConfig and AgentPolicy custom resources, validates them, and pushes signed configuration to each agent (via a local endpoint on the node, not a full pod restart). Agents apply the new config without dropping in-flight telemetry, which is the actual requirement behind "dynamic configuration" here: a config change that requires a restart isn't dynamic, it's just a faster redeploy.
Multi-tenant isolation:
- Data: every collected event is tagged with tenant identity at the point of collection; per-tenant buffers, not a shared one, so one tenant's backpressure can't block another's.
- Compute/resource: standard Kubernetes resource requests/limits on the DaemonSet pod bound how much CPU/memory the agent itself can consume on a shared node.
- Network: network policies restrict the agent's egress to only the tenant-authorized destinations, and short-lived, tenant-scoped credentials (issued by the controller) authenticate the agent's connection to each tenant's ingest endpoint.
Safe upgrades: rolling DaemonSet update with maxUnavailable bounded per zone, and a preStop hook that drains the on-disk queue (flushes buffered telemetry) before the old pod terminates, so an upgrade doesn't silently lose whatever was queued at that moment.
Failure handling: liveness probes restart a crashed agent, which then replays from its on-disk queue on startup; a corrupted on-disk queue file is rotated into a quarantine location and alerted on rather than silently discarded.
flowchart LR
N[Node: pods + kubelet] --> A[Agent, one per node]
A --> RB[In-memory ring buffer]
RB -- full --> DQ[(On-disk bounded queue)]
DQ -- network restored --> OUT[Tenant ingest endpoint]
CRD[TenantConfig / AgentPolicy CRD] --> CTRL[Controller: validate + sign]
CTRL -- push config, hot-reload --> A
PS[preStop hook] -- drain before upgrade --> DQ
Worked example
Sizing the on-disk buffer for a network partition. Assume 110 pods/node (a common Kubernetes per-node pod ceiling), each emitting 5 log lines/sec averaging 250 bytes/line:
nodeBytesPerSec=(110×5)×250=550×250=137,500 bytes/secFor a target of surviving a 10-minute network partition to the ingest endpoint without dropping data:
diskBufferBytes=137,500×(10×60)=82.5 MBWith 4x headroom for longer partitions or bursty traffic during the partition itself:
provisionedDisk=82.5×4=330 MBThat's a small, concrete disk request per node, roughly a third of a gigabyte, not the multi-gigabyte allocation teams often over-provision by default, because it's derived from the actual per-node telemetry rate rather than a round number.
In-memory burst buffer. If traffic spikes to 3x baseline for short periods (a log storm from a restart loop) and the agent needs 2 seconds of headroom before spilling to disk:
memBurstBytes=137,500×3×2=825,000 bytes≈825 KBA sub-megabyte in-memory buffer is enough to absorb a realistic burst at this node's telemetry rate before the disk-spill path takes over, which keeps the agent's steady-state memory footprint small and predictable across a large fleet of nodes.
Trade-offs & pitfalls
| Choice | Protects against | Cost |
|---|---|---|
| Per-node agent (DaemonSet) vs. per-pod sidecar | Lower resource overhead per node, one collector to operate | Less isolation than a sidecar; a single agent's bug affects every pod on that node |
| Bounded disk queue (330MB, 10-min target) | Data loss during short partitions | A partition longer than the target still drops data once the queue fills, so the target needs to match real observed outage durations, not a guess |
| Per-tenant rate limiting | Noisy-tenant starvation | A legitimately high-volume tenant gets throttled the same as a misbehaving one unless limits are tuned per tenant, not applied uniformly |
Common wrong turns: sizing the on-disk buffer as a fixed number (like "10GB, should be plenty") instead of deriving it from the node's actual telemetry rate and a stated outage-tolerance target, which either wastes disk on quiet nodes or under-provisions busy ones; treating a DaemonSet config change as safe to apply via full pod restart because "it's just a redeploy," which momentarily drops whatever was in the in-memory ring buffer at restart time, exactly the data loss the hot-reload CRD path exists to avoid; and sharing one rate-limit bucket across all tenants on a node instead of per-tenant buckets, which means a single noisy tenant can still starve every other tenant's telemetry even though "backpressure" was implemented.
You must brief the CTO and board about a critical incident in 30 minutes. How would you structure that briefing to balance transparency, technical detail, customer impact, and next steps? Provide a clear outline and explain which telemetry and recommendations you would surface to senior leadership.
Sample Answer
Opening (2 minutes)
- One-line summary: what happened, current status, and ETA for containment.
- Why this matters: impacted service, customer segments, and business/risk posture.
Five-section briefing (25 minutes total)
- Timeline & Scope (3 min)
- Short timeline from detection → key events (deployments, config changes, traffic spikes).
- Services/regions/components affected and number of customers/transactions impacted.
- Current Status & Actions Taken (5 min)
- What we've done (mitigations, rollbacks, circuit breakers, rate-limits).
- Who is on the incident war room and ETA for next checkpoint.
- Live status: degraded/partial outage/resolved.
- Measured Impact (6 min)
- Customer-facing metrics: %requests failed, p95/p99 latency, successful transactions/sec, sessions dropped.
- Business metrics: active customers affected, estimated revenue per hour impacted, SLA/SLO breach status and error budget burn rate.
- Operational metrics: CPU/memory, thread/connection exhaustion, queue depth, DB slow queries, propagation of errors across services.
- Probable Cause & Confidence (4 min)
- Hypothesis ranked by confidence (e.g., recent deployment + schema mismatch → cascading retries).
- Evidence: error types from logs/traces, correlation in tracing spans, recent code/config changes, timing with autoscale behavior.
- Near-term Plan & Asks (7 min)
- Immediate next steps (containment actions for next 30/60/120 minutes): rollback or patch, traffic steering, scaling, disabling feature flags.
- Medium-term: root-cause fix timeline, testing/validation plan, customer remediation plan.
- Risks & contingency: what could go wrong and fallback (full rollback, customer throttling).
- Asks from leadership: approve rollback, prioritize on-call engineers, communications go-ahead, legal/PR involvement.
Telemetry & Dashboards to Surface
- High-level: service health dashboard, SLO burn chart, incident timeline.
- Requests/Errors: error rate (5m/1h), error types and top stack traces, p95/p99 latency, throughput by region/tenant.
- Resource/Infra: host/container CPU, memory, thread pool utilization, DB latency and QPS, queue lengths, autoscaler events.
- Tracing: top failing traces, end-to-end latency waterfall.
- Deployment metadata: commit IDs, build artifacts, config changes, feature flags toggled.
- Customer signals: number of open support tickets, NPS/CSAT alerts, partner escalations.
Recommendations (executive focus)
- Short-term: contain (rollback/feature-flag off) to restore availability within next X minutes; extend mitigation window if necessary.
- Communication: coordinated customer communication template (what we know, who’s impacted, ETA, mitigation steps) and cadence for updates.
- Post-incident: expedited RCA with timeline, remediation plan (code fix, automation, tighter pre-deploy checks), and SLO/alert tuning to detect earlier.
- Investment asks: improve observability (distributed tracing coverage, per-tenant metrics), runbook automation, and chaos testing for this class of failure.
Close (1 minute)
- Reiterate current state, next checkpoint time, and one clear decision requested from the board/CTO now (e.g., approve rollback / approve public statement).
An alert keeps firing and clearing repeatedly for what's really one ongoing issue. How would you deal with the flapping without hiding the fact that there's a real, persistent problem underneath it?
Sample Answer
Direct answer: Flapping means the underlying issue is real and ongoing, it just isn't crossing the alert condition cleanly. Fix it with hysteresis (a different threshold to clear an alert than to raise it) and grouping (collapse the repeated fire/clear events into one ongoing incident), not by silencing the alert, silencing would hide the exact persistent problem the question is asking you not to hide.
Structured elaboration
| Technique | What it does | Trade-off |
|---|---|---|
| Hysteresis | Use two thresholds: fire at a higher bar, clear at a lower one, so a metric oscillating right around a single line doesn't flap | Delays resolution slightly, the alert stays open a bit longer than a single-threshold rule would |
| Debounce / persistence window | Require the condition to hold continuously for N minutes before firing (and before clearing) | Increases time-to-detect by up to the window length |
| Stateful grouping | Collapse repeated fire/clear cycles for the same underlying signal into one open incident instead of one notification per flap | Requires a stable identity for "the same issue" (a fingerprint), or unrelated issues can get incorrectly merged |
| Severity escalation over time | Start at a lower severity, escalate if the flapping (or the underlying condition) persists past a duration threshold | Adds state-machine complexity; a badly tuned escalation delay can under- or over-react |
Applying these without hiding the real problem
- Hysteresis and debounce reduce the number of individual fire/clear notifications, but the underlying incident record should stay open and visible the entire time the condition keeps recurring, not just during the moments it's actively firing.
- Grouping should merge notifications, not merge away the evidence: the incident should retain a count of how many times it flapped and the full timestamp history, so on-call can see "this has fired 14 times in the last hour" rather than a single anonymous alert with no memory of the pattern.
- Escalate severity based on persistence, not suppress it: a condition that's been flapping for an hour is a stronger signal that something is wrong, not a weaker one, and the escalation should reflect that (raise severity or broaden the audience) rather than quietly muting it because "it keeps clearing on its own."
Worked example
A disk-usage metric oscillates between 78% and 82% because of periodic log rotation, with a single static threshold at 80%. With no hysteresis, this fires and clears repeatedly as the metric crosses 80% each cycle. Applying hysteresis with a fire threshold of 85% and a clear threshold of 75%:
- The metric's actual range (78% to 82%) never touches either the fire line (85%) or, once fired, the clear line (75%) inconsistently, it stays comfortably inside the dead zone between the two thresholds and doesn't flap.
- If disk usage genuinely climbs past 85% (a real leak, not the periodic rotation pattern), it fires once and stays fired until it drops all the way back under 75%, giving one clean incident instead of a stream of fire/clear notifications for the same underlying trend.
This is a case where the "fix" isn't detecting the flapping better, it's recognizing that a single threshold was never the right model for a metric with a normal 78 to 82% oscillation range, and setting the dead zone wide enough to cover that normal range is what actually solves it.
Trade-offs & pitfalls
- Every one of these techniques trades detection speed for noise reduction. A condition that genuinely needs an immediate page (imminent data loss, a security event) should not be debounced or given wide hysteresis, the noise-reduction techniques above are for conditions where a few minutes of delay is an acceptable cost for not paging someone six times an hour.
- Grouping by a fingerprint that's too broad merges genuinely unrelated issues into one incident (masking that there are actually two separate problems); too narrow, and it fails to group the flaps it was meant to collapse. The fingerprint needs to key on the actual root-cause dimension (host, service, error signature), not just the alert name.
- A hysteresis dead zone set too wide delays real detection meaningfully; too narrow, and it doesn't solve the flapping at all. The right width comes from looking at the metric's actual normal oscillation range (as in the worked example), not from a generic default.
During an incident you notice dashboards and logs report inconsistent metrics across regions. Requirements about regional failover are unclear. Walk me through your triage approach to determine whether this is a telemetry issue vs. a real outage, how you'd mitigate risk immediately, and how you'd communicate uncertainty to stakeholders.
Sample Answer
Situation: I’m an SRE on-call and dashboards/logs show inconsistent metrics across regions; it's unclear if regional failover should have occurred.
Triage approach (quick, evidence-first):
- Scope & impact: confirm which regions, services, and customers are affected. Check alerts, pagers, and user-facing error reports.
- Cross-check independent telemetry:
- Compare metrics from multiple sources: application metrics, infra metrics (host CPU/network), load balancer, CDN, DNS, and uptime probes.
- Pull raw logs (not aggregated) from affected region and a healthy region for the same time window.
- Run active synthetic checks (curl/health endpoints) from multiple locations to reproduce.
- Validate control plane and config:
- Check recent deploys, config changes, infra automation (Terraform/Ansible), and rollout history for that region.
- Inspect DNS records, load-balancer config, and routing (BGP, Anycast) for recent changes.
- Time & consistency checks:
- Verify clocks/timezones and log timestamps to rule out delayed/duplicated telemetry.
- Look for replication lag, message-queue backpressure, or monitoring pipeline errors (prometheus remote write failures, metric exporters down).
Decision heuristics:
- If user-facing synthetic checks fail and infra logs show errors → likely real outage.
- If only aggregated dashboards differ but raw logs and probes are OK or monitoring exporters are failing → likely telemetry pipeline issue.
Immediate risk mitigation (short-term):
- Open incident channel, assign roles (commander, communications, exec updates).
- If telemetry pipeline is suspected: mark dashboards as degraded, silence noisy alerts tied to that pipeline, and enable fallbacks (alternate exporters, pull metrics directly).
- If region appears down: divert new traffic away (LB/DNS failover), scale healthy regions, enable read-only modes or feature flags to reduce load, and roll back recent changes if correlated.
- Preserve forensic data: snapshot logs, export metrics, avoid auto-scaling churn that would erase evidence.
Communicating uncertainty to stakeholders:
- Initial message (within 5–10 min): concise facts: what we see, potential impact, what we’re doing, and what we don’t know. Example: “We see inconsistent metrics across eu-west and us-east. User-facing health checks from eu-west are failing; raw app logs show 5xx errors in eu-west. We’re investigating whether this is a telemetry pipeline or a real regional outage. Actions: running synthetic checks, checking recent deploys, and preparing traffic failover. Next update in 15 minutes.”
- Use structured updates: timeline, verified facts, actions taken, mitigation plan, ETA for next update. Call out uncertainty explicitly (what is unverified and why).
- Escalation: notify product/ops leads and customer-facing teams if customer impact is likely; provide suggested messaging.
- Post-incident: commit to a postmortem with timeline, root cause, and concrete remediation (improve runbooks, add cross-region synthetic probes, harden failover docs, add telemetry health SLOs).
This approach balances quick protective actions with evidence gathering, prevents premature failovers, preserves data for RCA, and keeps stakeholders informed without overclaiming certainty.
You have more than one initiative you care about in flight at the same time, each requiring you to spend goodwill with the same stakeholders. How do you decide where to spend your limited credibility?
Sample Answer
Treat credibility like a limited, rechargeable budget. Rank the initiatives competing for the same stakeholders by expected impact and by how big an ask each one actually requires, spend the smallest ask that moves you closer to the goal first, and save the most expensive kind of ask for the initiative where it buys the most lasting change.
The budget
- Inventory. List every initiative that needs support from the same stakeholders, and rate each on impact (what actually breaks or improves if it happens or doesn't) and on cost (a small favor versus a full re-prioritization).
- Cheap versus expensive asks.
| Type | Example | When to use |
|---|---|---|
| Cheap | Sharing data that clarifies a trade-off, proposing an opt-in pilot, aligning a recommendation to something already on the stakeholder's own roadmap | Often, as your default move |
| Expensive | Asking someone to publicly reverse a prior call, forcing a roadmap-wide rework, escalating over someone's head | Rarely, only when the payoff clearly exceeds the relationship cost |
- Sequence across initiatives. Where two initiatives compete for the same stakeholder's goodwill, lead with whichever can be proven cheaply first, bank the resulting trust, and use it to justify the costlier ask on the second initiative rather than spending big on both at once.
- Replenish deliberately. Credibility isn't only spent, it's earned back: deliver on what you said you would, credit others publicly, and be visibly right on the smaller asks. Without replenishment, the sequencing above collapses, because there's nothing left to spend when the second initiative needs it.
- Reserve escalation. Save the most expensive form of capital, going over someone's head or forcing a public reversal, for cases where the cost of not acting clearly exceeds the relationship cost, and even then, spend it having already banked smaller wins with that same stakeholder.
Worked example
A team lead has two initiatives in flight that both need buy-in from the same product stakeholder: a smaller data-quality fix that would quietly improve a metric the stakeholder already cares about, and a larger platform refactor that would require the stakeholder to accept a slower roadmap for a quarter.
Asking for both at once risks getting a lukewarm yes on neither, or a reluctant yes on the small ask while the larger one is flatly refused because there's no banked trust to draw on yet.
The lead sequences deliberately: pitches the data-quality fix first, as a narrowly scoped, low-risk pilot, delivers it, and makes sure the stakeholder gets visible credit for the resulting improvement in their own reporting. Only after that win is delivered and credited does the lead bring the larger refactor ask, explicitly framed against the credibility just built: "the same kind of investment made the number you're now presenting to your leadership possible. This is the same category of work, at a larger scale."
The stakeholder grants the larger ask more readily, because the smaller one was delivered and credited correctly first, rather than both asks being treated as independent, equally costly requests made at the same time.
What a senior person does differently here: never spends the expensive ask first, and always makes sure a stakeholder sees an earlier, smaller win pay off for them personally before asking for something bigger.
Trade-offs and pitfalls
- Spending all your capital early to move fast on every initiative at once usually produces a string of shallow "sure, fine" agreements that dissolve the moment the stakeholder has to defend the decision to someone else.
- Treating every ask as if it costs the same leads to either overspending on trivial requests or badly underestimating the cost of a genuinely expensive one.
- Sequencing only works if you're honest about which initiative actually has the most impact; using credibility to win on the initiative you personally prefer, rather than the one that matters most, burns trust once the mismatch becomes visible.
You inherit hundreds of ad-hoc automation scripts across multiple repos with poor testing and no clear owners. Propose a step-by-step migration plan to inventory, prioritize, refactor, test, and centralize critical automations into maintainable artifacts while keeping services operational. Include risks and rollback strategies.
Sample Answer
Situation: I inherited hundreds of ad‑hoc automation scripts scattered across repos with no tests or owners, many used in critical ops.
Plan (step‑by‑step):
- Triage & inventory (2 weeks)
- Run repo scan (language, entry points, cron/jenkins triggers, cloud infra hooks).
- Create a catalog (owner, usage frequency, last run, inputs/outputs, side effects, criticality, runtime).
- Add lightweight telemetry: wrap scripts with a tracer that emits run metadata to a central store.
- Prioritize (1 week)
- Rank by impact: production‑facing, manual toil reduction, incident frequency, security/exposure.
- Define acceptance SLOs and risk levels per script.
- Stabilize in place (ongoing)
- For top tier scripts, add input validation, timeouts, and idempotency guards without changing logic.
- Add logging and feature flags to safely toggle behavior.
- Refactor into maintainable artifacts (4–8 weeks per batch)
- Create templates: CLI/packaged module, container images, or serverless functions depending on latency and environment.
- Implement idempotent design, parameterization, and secrets handling (use vault).
- Add unit tests for business logic and small integration tests for external calls.
- CI/CD and testing
- Central CI pipeline that runs lint, unit, integration (mocking external services), and end‑to‑end smoke tests in a sandbox.
- Introduce test fixtures and contract tests for external systems.
- Ownership & docs
- Assign owners or a rotation squad, add runbooks, playbooks, and SLA commitments.
- Publish the catalog and add automated alerts for failures and drift.
- Migrate traffic safely
- Use canary deploys and run both old and new implementations in parallel (shadow runs) validating outputs.
- Gradually cut over when metrics (success rate, latency, resource use) remain within thresholds.
- Retire legacy
- After sustained parity and owner sign‑off, decommission old scripts and update monitoring/dashboard.
Risks and mitigations
- Breaking production: mitigate with feature flags, shadowing, canaries, and throttled rollouts.
- Data/state drift: add checksums, dry‑run modes, and reversible operations when possible.
- Secrets leakage: enforce secret management and rotate creds pre‑cutover.
- Knowledge loss: record runbooks and pair original users during handover.
Rollback strategies
- Quick toggle via feature flag or scheduler pause.
- Revert to legacy by switching cron/trigger endpoints to the old implementation.
- Use immutable deployments so rollback is a single deploy of previous image.
- If state mutated incorrectly, have snapshot/backup and compensating scripts ready; run compensations in dry‑run first.
Success metrics
- % automations tested, owner coverage, MTTR for automation failures, reduction in manual incidents, and error budget impact.
This phased, risk‑aware approach preserves service availability while turning brittle scripts into testable, owned automation.
You have mixed hardware in the cluster: GPU nodes for machine learning, on-demand nodes for critical services, and spot instances for low-priority batch jobs. Explain how you'd use node labels, taints, tolerations, node selectors or affinity, and PodTopologySpread to ensure correct scheduling and protect critical workloads from being placed on spot instances.
Sample Answer
Direct answer
Node labels, taints/tolerations, affinity, and topology spread each answer a different scheduling question, and this scenario needs all of them combined rather than one chosen over the others. Taints on the volatile pool (spot) provide the exclusion guarantee that keeps critical workloads off it by default. Affinity provides the positive pull that sends the right workload to the right pool, and for GPU (graphics processing unit) nodes that pull has to be paired with the device-plugin's extended resource accounting, not just a label. Topology spread (or pod anti-affinity) spreads critical replicas so a single node or zone loss never removes more than one replica.
Structured elaboration
| Mechanism | Question it answers | Example in this scenario |
|---|---|---|
| Node labels | What kind of node is this | hardware=gpu / ondemand / spot |
| Taints + tolerations | Which pods are allowed here at all (an exclusion gate) | spot=true:NoSchedule, only batch pods tolerate it |
| Node affinity / nodeSelector | Where does this specific pod want to go (a positive pull) | requiredDuringSchedulingIgnoredDuringExecution on hardware=gpu |
| Extended resources (device plugin) | How many units of a scarce, non-CPU resource this pod needs | resources.limits: {nvidia.com/gpu: 1} |
| topologySpreadConstraints | How replicas of one workload are spread | maxSkew: 1 across topology.kubernetes.io/zone |
| PriorityClass + preemption | Who survives when capacity is scarce | Critical pods get a higher priorityClassName than batch |
GPU nodes need more than a label
Labeling a node hardware=gpu is necessary but not sufficient. The scheduler only knows a node has usable GPU capacity once the NVIDIA device plugin (or a vendor equivalent) DaemonSet advertises it as an extended resource in the node's allocatable, for example nvidia.com/gpu: 4. A pod requests it like any other resource:
resources:
limits:
nvidia.com/gpu: 1
Without the resource request, a pod with only nodeSelector: {hardware: gpu} can land on a GPU node without ever actually reserving a device, or worse, several pods could expect the same already-claimed device. Pair the label or affinity rule (which steers the pod to the right node family) with the extended-resource request (which makes the scheduler actually reserve a device).
Excluding spot from critical workloads
kubectl taint nodes -l node-lifecycle=spot spot=true:NoSchedule
Only pods that explicitly tolerate it can land there:
tolerations:
- key: "spot"
operator: "Equal"
value: "true"
effect: "NoSchedule"
Critical services carry no such toleration, so the scheduler treats spot nodes as invisible to them by default, with no risk of a nodeSelector typo accidentally placing one there.
Spreading critical replicas
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: critical-service
whenUnsatisfiable: DoNotSchedule makes this a hard constraint; ScheduleAnyway makes it best-effort. For a service that must survive a zone loss, DoNotSchedule is the right choice even though it can leave a pod Pending if the under-represented zone runs out of capacity, which is a signal to add capacity, not to loosen the constraint.
Priority for the pool that can vanish without warning
Spot capacity can disappear with only seconds of notice. Give critical workloads a higher priorityClassName so, if critical and batch pods ever land in the same resource pool during a capacity burst, the scheduler preempts lower-priority batch pods rather than the reverse.
Worked example
A cluster has 2 GPU nodes (4 GPUs each, 8 total), 3 on-demand nodes for critical services, and 4 spot nodes for batch. A training job requests 2 GPUs; with the device plugin installed, allocatable nvidia.com/gpu across the 2 GPU nodes totals 8, and the scheduler places the pod on whichever GPU node currently has 2 or more free, refusing to schedule (Pending, correctly) if all 8 are already claimed elsewhere. A critical service asks for 3 replicas with topologySpreadConstraints maxSkew: 1 across the 3 on-demand zones: with exactly 3 zones and 3 replicas the constraint is satisfiable exactly, one per zone, so losing any single zone loses exactly 1 of 3 replicas, never more.
Trade-offs and pitfalls
- A taint on the spot pool only stops pods without the toleration; it does not, by itself, stop a batch pod from landing on an on-demand node. If batch must also be kept off on-demand capacity, that pool needs its own taint plus a matching toleration on batch pods, not just a one-directional rule.
- Required affinity and required topology spread can leave pods unschedulable when capacity is tight. Monitor scheduling events (
PendingplusFailedScheduling) rather than reflexively loosening a hard rule to preferred, which quietly reintroduces the correlated-failure risk the rule existed to prevent. - GPU device counts are not overcommittable the way CPU or memory can be with limits set above requests. Plan capacity on whole-device granularity.
What is PACELC, and how does it extend the CAP theorem? Walk through an example decision where PACELC's latency-versus-consistency trade-off matters even when there is no active network partition.
Sample Answer
Direct answer
PACELC, short for "if Partition, Availability vs. Consistency; Else, Latency vs. Consistency", says that CAP's dilemma, choose Consistency or Availability when a network Partition is happening, is only half the story. Even when there is no partition at all, a system still has to choose between Latency and Consistency for every write it replicates, because making a write durable on every replica before acknowledging it takes longer than acknowledging it once it's durable on a single node. PACELC packages this as: if Partition occurs, trade off Availability against Consistency (exactly what CAP already says); Else, meaning no partition, trade off Latency against Consistency.
Restating CAP precisely first
CAP says that during an actual network partition, a distributed system can guarantee only one of Consistency (every read sees the latest completed write) or Availability (every request gets a non-error response) for the nodes on either side of the split, not both. A common misreading treats CAP as "pick two of three, always"; it isn't. CAP's teeth are specifically about behavior during a partition. Most systems are both consistent and available almost all of the time, precisely because a true network partition is a rare event relative to total uptime, not something happening continuously.
flowchart TD
Start[Write occurs] --> P{Partition active?}
P -->|Yes| AC[Choose Availability or Consistency]
P -->|No| LC[Choose Latency or Consistency]
What PACELC adds
PACELC names the trade-off CAP is silent about: during normal operation, with no partition, you still choose between Latency (L) and Consistency (C), because synchronous replication that waits for a majority of replicas costs a round trip before it can acknowledge a write, while asynchronous or single-node-acknowledged replication returns faster but risks a reader seeing stale data, or the acknowledged write being lost outright if that one node fails before it propagates. Systems are commonly labeled by both branches together, for example PA/EL (favor Availability under partition, favor Latency otherwise, the Cassandra/Dynamo-style default) or PC/EC (favor Consistency in both cases, the HBase-style default).
Worked example: a decision with no partition occurring
A write to a piece of user data must be replicated to three nodes: R1 in the local region, and R2, R3 in two remote regions. All three are reachable; no partition is happening anywhere in this example.
- Favor consistency (the "C" side of the Else branch): the write path waits for acknowledgment from a majority, at least two of the three replicas, say R1 and R2, before returning success to the caller. Any subsequent read from a majority quorum is now guaranteed to see this write. Cost: the caller's write waits on the round trip to R2, a remote replica, even though R1, the local one, already has it durably.
- Favor latency (the "L" side of the Else branch): the write path acknowledges as soon as R1 has it durably, and replicates to R2 and R3 asynchronously in the background. Cost: the caller gets a fast, local acknowledgment, but a read served from R2 immediately afterward, before the async replication catches up, will not see the write yet. If R1 crashes before that background replication completes, the already-acknowledged write can be lost entirely, with zero partition ever occurring.
This decision, wait for two of three versus acknowledge on one, is made on every single write regardless of whether any partition is happening, which is exactly the trade-off PACELC's Else branch names and CAP alone has nothing to say about, since CAP only speaks to a system that is not fully connected.
Trade-offs & pitfalls
A common misconception is treating a database's PACELC label as a fixed law of the software rather than a description of its typical default: most systems let you tune the replication wait per request (via quorum size), so "Cassandra is PA/EL" describes its usual configuration, not something it's incapable of changing. It's also easy to blur this Else-branch trade-off with an availability discussion; in the worked example above, no node was ever unreachable, so the trade being made is purely about how long the write path waits before acknowledging, not about surviving an outage, which is a separate concern belonging to the partition branch of the theorem.
Why do liveness and readiness checks need to be defensive about what they actually verify, and what's an example of a health check that lies about system health?
Sample Answer
Direct answer
A health check that returns success just because the process is running, without checking anything it actually depends on, lies by reporting healthy while the service can't do its job, for example because its database connection pool is exhausted. Liveness checks should answer "should this process be restarted," and readiness checks should answer "can this instance serve traffic right now," and conflating the two causes an orchestrator to make the wrong decision.
Structured elaboration
- Liveness check: answers "should this be restarted?" It should catch deadlocks or unrecoverable internal state, but should not check external dependencies, because a database outage isn't fixed by restarting the app, and a liveness check that fails on a database outage causes the orchestrator to restart every instance simultaneously, making the outage worse.
- Readiness check: answers "should traffic go to this instance right now?" This one should check dependencies, database reachable, cache reachable, disk space available, because an instance that can't reach its database shouldn't receive traffic even though it doesn't need to be restarted.
- The lying health check anti-pattern: an endpoint that just returns success with no logic reports healthy even when every downstream dependency is down, the single most common health-check bug in production systems.
- Defensive design: a readiness check needs its own short timeout and shouldn't itself become a source of load, since orchestrators poll it frequently.
Worked example
A service's health endpoint returns success as long as the HTTP server thread is alive, with no check of its database connection. The database goes down; the app is still "alive" and keeps receiving traffic, returning errors to every real request, while the health check keeps reporting green the entire time, hiding the outage from the orchestrator.
Trade-offs and pitfalls
Making a liveness check too strict, checking dependencies, causes cascading restarts during a dependency outage, turning a partial outage into a full one. Making a readiness check too shallow, like the example above, means the orchestrator keeps sending traffic to instances that can't serve it, arguably worse than doing nothing.
What the interviewer probes next
Whether the candidate distinguishes liveness from readiness at all, since conflating them is extremely common and causes real incidents.
Recommended Additional Resources
- SRE Book (Google): https://sre.google/books/ - foundational SRE concepts, monitoring, incident response
- The Art of Monitoring by Rob Ewaschuk: practical monitoring and alerting design
- Designing Data-Intensive Applications by Martin Kleppmann: distributed systems fundamentals
- LeetCode: medium-level algorithmic problems, particularly those involving queues, heaps, and scheduling
- Prometheus documentation: metrics collection and querying
- Kubernetes documentation: container orchestration concepts
- DoorDash Engineering Blog: real-world system design challenges (if available publicly)
- Site Reliability Engineering workshops (Udacity, Linux Academy): structured SRE training
- Incident response case studies: from various tech companies to understand troubleshooting patterns
- Infrastructure-as-Code tutorials: Terraform, CloudFormation examples
- System design interview resources: Educative, ByteByteGo
Search Results
The exhaustive guide to the Doordash Software Engineer interview
Interview Questions · Tell me about yourself and recent projects. · Why do you want to work for DoorDash? · Can you provide examples of how you've collaborated ...
DoorDash Engineering Manager Interview (questions, process, prep)
Google Site Reliability Engineer (SRE) Interview (questions, process, prep). Complete guide to the Google site reliability engineer interview.
DoorDash System Design Interview: A Complete Guide
Clear scoping: Who are the users? What are the core actions? What happens if something fails? · Load estimates: Daily orders? Real-time events?
DoorDash Interview Guide: Process, Questions & Case Studies
Get an insider look at the DoorDash interview process—covering recruiter screens, take-home assessments, case studies, technical rounds, ...
DoorDash's Interview Process & Questions - Interviewing.io
Most questions should be practical in nature, and LeetCode questions that focus on job scheduling are popular. From one of our users, who was a ...
DoorDash Interview Questions (Updated 2025) - Exponent
"Clarify "What do you mean by favorite product? Are you thinking specifically hardware, software, or a feature within those, or something non-electronic?
SRE interview questions and job descriptions - Gremlin
Sample Site Reliability Engineer Interview Questions · What is an SLO? · Follow up: What is an SLA? · What is a linked list? · Name some other data structures.
Site Reliability Engineer Interview Experience - San Francisco ... - Taro
DoorDash's Site Reliability Engineer interview process in San Francisco, California. DoorDash Interview Questions. Single-Threaded CPU. Medium.
This interview preparation guide was generated using AI-powered research from the sources listed above. While we strive for accuracy, we recommend verifying critical information from official company sources.
Want to create your own tailored preparation guide using our deep research?
Get Started for FreeInterview-Ready Courses
Visual-first, interactive, structured learning paths
Browse Site Reliability Engineer (SRE) jobs
AI-enriched listings across hundreds of company career pages
Explore Jobs