Comprehensive Interview Preparation Guide: Site Reliability Engineer (Senior Level) at Airbnb
Airbnb's SRE interview process for senior-level candidates follows a structured pipeline designed to evaluate technical depth, system thinking, and cultural fit. The process begins with a recruiter screening to assess background and motivation, followed by a technical phone screen covering coding and foundational system design. Candidates who advance proceed to an on-site engineering loop consisting of 4-5 rounds that evaluate distributed systems knowledge, infrastructure design expertise, coding proficiency in automation and scripting, complex system design thinking, and behavioral alignment with Airbnb's core values including 'Belong Anywhere' and collaborative problem-solving.
Interview Rounds
Recruiter Screening
What to Expect
The initial recruiter screening is a 20-30 minute conversation designed to validate your background, assess communication skills, and evaluate cultural fit. The recruiter will explore your technical experience, years in SRE and related roles, your familiarity with infrastructure technologies, and your motivation for joining Airbnb specifically. For a senior-level candidate, recruiters pay close attention to your ability to articulate complex technical concepts clearly, your experience mentoring others, and how well you understand Airbnb's mission around global belonging and hospitality. This round also serves as an opportunity to ask clarifying questions about the role, team structure, and expected responsibilities. Strong performance here means demonstrating confidence, clarity about your background, genuine interest in Airbnb's challenges, and alignment with the company's values.
Tips & Advice
Be concise and structured in your responses; recruiters appreciate candidates who can explain technical complexity simply. Research Airbnb's recent infrastructure challenges (payments, real-time availability, global scale) and mention specific reasons why you want to solve those problems. Emphasize your senior-level experience: mention teams you've built or influenced, large incidents you've led postmortems on, and technical decisions that had broad impact. Ask thoughtful questions about the team's current reliability goals and measurement practices. Show enthusiasm for Airbnb's mission, not just the technical work.
Focus Topics
Leadership & Mentorship Experience
For a senior-level role, clearly articulate your experience mentoring junior engineers, influencing team practices, and taking ownership of significant projects. Share examples of times you've led incident postmortems, championed reliability improvements, or built systems that improved team efficiency. Discuss how you've contributed to team growth and knowledge sharing.
Practice Interview
Study Questions
Motivation for Airbnb & Role Understanding
Articulate specific reasons why you want to work at Airbnb as an SRE, beyond generic statements like 'it's a great company.' Reference Airbnb's specific technical challenges (global marketplace reliability, payment systems, search availability), the company's impact on the travel industry, or Airbnb's approach to infrastructure and reliability. Demonstrate that you understand what the SRE role at Airbnb entails.
Practice Interview
Study Questions
Airbnb Values Alignment (Belong Anywhere & Collaboration)
Understand and be able to discuss Airbnb's core values, particularly 'Belong Anywhere,' which emphasizes global connectivity and inclusion. Prepare examples from your career where you've fostered collaborative environments, helped teams work across boundaries, or championed practices that improved team effectiveness. Discuss how you approach mentoring and supporting other engineers.
Practice Interview
Study Questions
Technical Stack & Infrastructure Technology Familiarity
Be prepared to discuss your hands-on experience with key infrastructure technologies relevant to Airbnb: cloud platforms (AWS, GCP, Azure), container orchestration (Kubernetes), monitoring tools (Datadog, Prometheus), message queues (Kafka), databases (MySQL, PostgreSQL, NoSQL), and infrastructure-as-code tools (Terraform, Ansible). Mention specific projects where you worked with these technologies.
Practice Interview
Study Questions
Professional Background & Experience Validation
Clearly articulate your 5+ years of SRE experience, highlighting progression from mid-level to senior roles. Prepare a concise summary of your career trajectory, key responsibilities at each level, and how your experience has evolved. For a senior candidate, emphasize periods where you took on expanded scope, mentored other engineers, or influenced architectural decisions.
Practice Interview
Study Questions
Technical Phone Screen
What to Expect
The technical phone screen is a 60-90 minute session conducted via a video call with a senior engineer or technical manager. This round assesses your coding ability, problem-solving approach, and foundational knowledge of distributed systems and infrastructure concepts. You'll be expected to write functional code (typically in Python, Go, or similar language) in a shared editor while thinking through the problem aloud. The problems are usually medium-difficulty, inspired by real infrastructure or reliability challenges. This is a filter round designed to ensure you have the coding fundamentals and communication clarity needed to succeed in on-site interviews. Expect live coding, followed by discussion of trade-offs and design considerations.
Tips & Advice
Practice coding in a shared editor environment before the interview; tools like CoderPad or similar can feel different from your local IDE. For a senior-level candidate, interviewers expect not just correct solutions but also discussion of trade-offs, scalability considerations, and communication of your thinking process. Write clean, readable code with appropriate comments. Don't rush; explain your approach before coding. If you get stuck, think out loud and show your problem-solving process rather than going silent. For infrastructure-focused problems, discuss monitoring, error handling, and operational concerns alongside the core logic.
Focus Topics
Problem-Solving Approach & Communication
Develop a structured approach to problem-solving: clarify requirements and constraints, break down the problem into components, discuss trade-offs before diving into implementation, and explain your thinking as you code. Practice talking through problems clearly, asking clarifying questions when needed, and being open to feedback or alternative approaches. For senior engineers, interviewers expect you to guide the discussion, not just answer questions.
Practice Interview
Study Questions
Infrastructure Concepts & Cloud Platforms
Demonstrate practical knowledge of infrastructure management including containerization (Docker), orchestration (Kubernetes basics), networking (DNS, load balancers, firewalls), and cloud provider services (compute, storage, managed databases). Understand how services communicate, how data flows through systems, and the operational considerations of deploying software at scale. Be ready to discuss decisions like on-premises vs. cloud, multi-region deployment, disaster recovery.
Practice Interview
Study Questions
System Design Fundamentals & Trade-offs
Understand core concepts needed for distributed systems: CAP theorem (Consistency, Availability, Partition Tolerance), replication strategies, consensus algorithms (basic understanding), load balancing, caching, and service discovery. Be able to discuss trade-offs between different approaches: synchronous vs. asynchronous processing, strong vs. eventual consistency, in-memory caching vs. persistence. For phone screens, expect to discuss how these concepts apply to infrastructure design challenges.
Practice Interview
Study Questions
Coding Fundamentals & Scripting in Preferred Language
Maintain proficiency in at least one programming language used for infrastructure automation (Python, Go, or bash). Focus on writing clean, readable code that handles edge cases and errors gracefully. For SRE roles, emphasis is often on practical scripting and automation rather than complex algorithms. Be able to write code that performs tasks like parsing data, interacting with APIs, handling retries, and logging effectively. Understand basic design patterns for automation scripts: idempotency, error handling, configuration management.
Practice Interview
Study Questions
On-Site Round 1: Distributed Systems & Infrastructure Design
What to Expect
This 60-minute on-site round evaluates your ability to design reliable, scalable infrastructure systems. You'll likely work with an experienced engineer or tech lead to architect a system that solves a reliability challenge (e.g., designing a highly available service discovery system, building a resilient data pipeline, or architecting a global caching system). The interviewer will start with a problem statement and gradually introduce constraints and scale requirements. You'll be expected to think through trade-offs, discuss monitoring and observability requirements, consider failure scenarios, and justify your architectural decisions. This round assesses both technical depth and your ability to think about operational concerns from the beginning of system design.
Tips & Advice
For a senior-level round, don't just describe a high-level architecture; dive into details like how you'd handle failures, what monitoring you'd implement, how you'd manage deployments and rollbacks, and what the operational burden would be. Discuss real SRE concerns: how to define SLOs for this system, what an error budget means, how you'd conduct postmortems if the system fails. Ask clarifying questions about scale, traffic patterns, and constraints before proposing solutions. Draw diagrams to explain your thinking. Be prepared to evolve your design as requirements change. For a senior candidate, interviewers expect you to demonstrate systems thinking: understanding how your design impacts other systems, considering team capacity to operate the system, and balancing technical ideals with practical reality.
Focus Topics
Operational Complexity & Maintainability
Consider the operational burden of your design: how many systems does your design add to the operational landscape? How easy is it to debug? Can it be deployed safely? What's the training burden on the team? For a senior role, balance technical elegance with operational pragmatism. Discuss deployment strategies (rolling deploys, canary releases, blue-green deployments) and rollback procedures. Consider cost implications and resource constraints the team faces.
Practice Interview
Study Questions
Capacity Planning & Performance Optimization
Discuss how you'd plan for growth: forecasting traffic, understanding resource requirements, and scaling proactively before hitting limits. Understand performance characteristics of different technologies (database query performance, cache hit rates, network bandwidth). For your design, discuss latency expectations, throughput capacity, and how you'd optimize for Airbnb's use cases (high traffic, global distribution, real-time updates).
Practice Interview
Study Questions
Distributed Systems Architecture & Scalability
Design systems that scale horizontally, handle failures gracefully, and remain available despite partial outages. Understand sharding strategies, replication approaches, consensus mechanisms, and how to avoid single points of failure. Discuss trade-offs between consistency models (strong vs. eventual), replication factor decisions, and backup strategies. For senior roles, consider how your design impacts reliability, operational complexity, and cost at massive scale (Airbnb's global footprint).
Practice Interview
Study Questions
Monitoring, Observability & Alerting
Design comprehensive monitoring strategies for systems: what metrics to collect, how to set meaningful alerts, what logging and tracing looks like. Understand the difference between metrics (aggregated quantitative data), logs (detailed events), and traces (request flows across services). Discuss how you'd detect failures quickly, identify the root cause, and provide operational insights to the team. For a system you're designing, specify the SLIs (Service Level Indicators) and how you'd measure them.
Practice Interview
Study Questions
High Availability & Resilience Design
Design systems that maintain availability during failures: database failures, network partitions, deployment errors, hardware failures, cascading failures. Understand techniques like redundancy, failover mechanisms, bulkheads, circuit breakers, and graceful degradation. Discuss how to design systems that fail predictably and recover quickly. Consider multi-region deployment, disaster recovery procedures, and backup strategies for critical data.
Practice Interview
Study Questions
On-Site Round 2: Coding & Infrastructure Automation
What to Expect
This 60-minute round focuses on your ability to write production-quality code for infrastructure automation and tooling. You'll typically work on a problem that involves writing scripts, tools, or automation to solve operational challenges (e.g., building a configuration management tool, writing a deployment script with error handling, implementing a monitoring check, or creating a utility for log analysis). Unlike the phone screen, these problems are often more complex and may involve multiple components. The emphasis is on pragmatic, reliable code that an SRE team would actually use in production. You'll be expected to consider edge cases, error handling, testing, and operational concerns like monitoring and logging.
Tips & Advice
Focus on writing code that's not just correct but also production-ready: handle errors gracefully, include appropriate logging and monitoring hooks, consider edge cases, and make the code maintainable. For a senior-level candidate, interviewers expect sophistication: understanding concurrency issues, implementing retry logic with exponential backoff, designing for idempotency. Use appropriate design patterns and explain why you've chosen them. Discuss testing strategy and operational concerns. If the problem involves configuration or deployment, discuss validation, rollback procedures, and safety mechanisms. Communicate your assumptions and design decisions clearly.
Focus Topics
Testing & Code Quality
Discuss your testing strategy: unit tests for logic, integration tests for system behavior, and potentially end-to-end tests. For infrastructure code, understand how to test safely without affecting production. Discuss code review practices, documentation, and maintainability. For a senior candidate, demonstrate understanding of test coverage and when exhaustive testing is necessary vs. pragmatic.
Practice Interview
Study Questions
Monitoring, Logging & Observability in Code
Integrate monitoring and logging into your code from the start: emit meaningful metrics, log important events, include tracing for debugging. Understand structured logging (key-value pairs), metric types (counters, gauges, histograms), and how to instrument code for observability. For infrastructure code, ensure operational teams can understand what the code is doing.
Practice Interview
Study Questions
Concurrency, Parallelization & Asynchronous Programming
Understand how to write code that handles concurrent operations: threads, processes, async/await patterns (depending on language). For infrastructure code, this often means managing parallel operations like deploying to multiple servers, running checks across infrastructure, or processing data streams. Understand race conditions, deadlocks, and synchronization primitives. Know when to use concurrency and when it adds complexity without benefit.
Practice Interview
Study Questions
Production-Ready Code & Error Handling
Write code that handles failures gracefully: implement proper error checking, use appropriate error types, log meaningful error messages, and fail fast when necessary. For a senior candidate, understanding advanced error handling techniques like circuit breakers, retries with backoff, and error propagation is expected. Implement idempotent operations where possible so that retries don't cause problems. Think about partial failures in distributed systems and how your code deals with them.
Practice Interview
Study Questions
Automation Script Development & Operational Tooling
Develop scripts and tools that automate routine operational tasks: deployments, configuration management, health checks, data migrations, or system maintenance. Understand how to parameterize scripts (configuration, environment variables), make them repeatable, and ensure they're safe to run multiple times. Implement proper logging so operators can understand what the script did. For senior engineers, consider how tools scale to manage infrastructure at Airbnb's scale.
Practice Interview
Study Questions
On-Site Round 3: Complex System Design & Architecture
What to Expect
This 60-minute round is a deep-dive system design interview focused on solving complex, real-world reliability challenges at Airbnb's scale. You might be asked to design a distributed tracing system for Airbnb's microservices, architect a global incident management system, design a service mesh architecture, or solve scaling challenges in Airbnb's booking or payment infrastructure. The interviewer will work with you to explore constraints, trade-offs, and operational implications in depth. This round assesses your ability to think architecturally about large-scale systems, make principled trade-offs between competing concerns (consistency vs. availability, simplicity vs. features, performance vs. cost), and consider the organizational and operational dimensions of system design.
Tips & Advice
Approach this systematically: start by clarifying requirements and constraints, outline high-level architecture, then dive into components. For a senior-level round, interviewers expect sophisticated thinking: understanding how your design relates to real Airbnb systems, considering Airbnb's specific scale and constraints (millions of listings, billions in transaction volume, global distribution), and discussing operational concerns deeply. Think about how your design impacts other teams and systems. Discuss SLOs, monitoring, incident response, deployment strategies, and team organization around your design. Be comfortable with ambiguity and evolving your design as requirements change. Don't just describe technology; explain why you've chosen each component and what trade-offs you're making.
Focus Topics
Deployment & Release Strategy
Design safe deployment approaches for your system: how do you roll out changes with minimal risk? Discuss strategies like canary deployments, feature flags, blue-green deployments, and rollback procedures. Consider how to balance speed (releasing frequently) with safety (not breaking things). For a senior role, understand how deployment strategy affects team velocity, reliability, and operational burden.
Practice Interview
Study Questions
SLOs, Monitoring, & Operational Metrics
For the system you design, define appropriate SLOs (Service Level Objectives): what availability target should you commit to? What latency SLOs make sense? Design the observability layer: what metrics matter, what alerts should fire, how do you quickly identify root causes? Discuss error budgets and how they guide your decisions about risk. For a senior role, understand how SLOs shape the team's operational priorities and release practices.
Practice Interview
Study Questions
Data Consistency & Integrity in Distributed Systems
Understand consistency models (strong vs. eventual), when each is appropriate, and how to implement each. Design systems that maintain data integrity across services: ensuring bookings are correct, payments are recorded accurately, and listings reflect reality. Discuss distributed transactions, event sourcing, CQRS (Command Query Responsibility Segregation), and compensating transactions. Consider edge cases and failure scenarios.
Practice Interview
Study Questions
Performance, Latency & Throughput Optimization
Design systems optimized for Airbnb's performance requirements: minimize latency for user-facing services, maximize throughput for backend processing, handle traffic spikes gracefully. Understand caching strategies, database optimization, query optimization, and asynchronous processing. Discuss trade-offs between consistency, latency, and cost. For a design, articulate the expected latency characteristics and how you'd optimize to meet them.
Practice Interview
Study Questions
Service Reliability & Resilience Patterns
Design systems using patterns like circuit breakers, bulkheads, timeouts, retries with exponential backoff, and graceful degradation. Understand how to prevent cascading failures when one service degrades. Discuss timeout selection, retry policies, and how to make services resilient to dependency failures. For Airbnb use cases, consider how to maintain marketplace functionality even when some services fail.
Practice Interview
Study Questions
Large-Scale Distributed System Architecture
Design complex systems that operate at Airbnb's scale: handling millions of requests per second, petabytes of data, or billions of transactions. Understand how to decompose systems into manageable components, define service boundaries, and manage interactions between services. Discuss data consistency across distributed services, handling failures without cascading, and maintaining correctness in the face of network partitions and partial outages.
Practice Interview
Study Questions
On-Site Round 4: Behavioral & Culture Fit
What to Expect
This 60-minute round evaluates your alignment with Airbnb's values, leadership capability at a senior level, and how you collaborate with teams. The interviewer will ask open-ended questions about your experiences handling difficult situations, your approach to incident management and learning from failures, examples of mentoring or influencing others, and how you approach problems that don't have clear technical solutions. Expect questions like 'Tell me about a time you had to overcome a difficult challenge,' 'Describe a situation where you disagreed with a decision and how you handled it,' and 'What does belonging mean to you in the context of your work?' The interviewer is looking for evidence of leadership maturity, humility, collaboration, bias toward action, and alignment with Airbnb's mission of belonging and global connection.
Tips & Advice
Prepare specific, detailed stories using the STAR method (Situation, Task, Action, Result) that showcase your senior-level competencies: leading teams through crises, mentoring engineers, making tough decisions, and learning from failures. For Airbnb specifically, connect your experiences to their values. Prepare for questions about how you handle conflict, make decisions under uncertainty, and support team growth. Discuss incident postmortems you've led, emphasizing psychological safety and learning mindset. Be authentic; Airbnb values genuine connection and belonging. Discuss how you bring people together and create inclusive teams. Avoid canned responses; interviewers can tell when you're reciting prepared answers. For a senior role, demonstrate reflection and growth: discuss mistakes you've made and how you've learned from them. Ask thoughtful questions about team culture and how reliability work is valued.
Focus Topics
Handling Ambiguity & Making Decisions Under Uncertainty
Share examples of situations with unclear requirements or conflicting priorities where you had to make decisions. Discuss your decision-making process: how do you gather information, consider trade-offs, and commit to a direction despite uncertainty? For a senior role, demonstrate that you can navigate ambiguity, involve appropriate stakeholders, and move forward decisively even with incomplete information. Discuss how you balance thorough analysis with speed to action.
Practice Interview
Study Questions
Personal Growth & Reflection
Discuss challenges you've faced in your career, how you've grown from them, and what you're focused on developing next. Share examples of situations where you changed your mind or learned something important. Demonstrate humility and a growth mindset. For a senior role, discuss how you stay current with technology evolution and continuously improve your leadership capabilities.
Practice Interview
Study Questions
Collaboration & Cross-Functional Influence
Discuss how you work with product, backend, frontend, and other teams. Share examples of situations where you had to influence others without direct authority: getting buy-in for reliability improvements, advocating for technical investments, or resolving conflicts. Discuss your approach to understanding other teams' constraints and finding win-win solutions. For a senior role, demonstrate that you're a bridge builder and multiplier across the organization.
Practice Interview
Study Questions
Incident Management & Learning from Failures
Share detailed examples of major incidents you've experienced: what went wrong, how you responded, what you learned. Discuss your approach to incident response: how you stay calm under pressure, communicate with stakeholders, and lead teams through crises. Emphasize psychological safety in postmortems: how you create environments where people feel comfortable discussing failures openly without blame. For a senior role, discuss how you've built incident response culture and processes that help teams learn and improve continuously.
Practice Interview
Study Questions
Airbnb Values & Mission Alignment (Belong Anywhere)
Understand and embody Airbnb's core values: 'Belong Anywhere' emphasizes global connection, inclusion, and creating spaces where people feel welcome. Discuss your personal connection to these values and how they influence your work as an SRE. Share examples of how you've fostered inclusive team environments, contributed to making systems work globally, or helped colleagues from different backgrounds feel valued. Discuss how you approach infrastructure decisions with empathy for users globally.
Practice Interview
Study Questions
Leadership, Mentorship & Influence
Share examples of engineers you've mentored and how they've grown. Discuss how you approach mentoring: do you focus on technical skills, career development, or both? Share examples where you've influenced team practices or decisions without having formal authority. Discuss your approach to empowering others and developing leaders. For a senior SRE, demonstrate how you multiply your impact through others rather than just solving problems yourself.
Practice Interview
Study Questions
Frequently Asked Site Reliability Engineer (SRE) Interview Questions
Propose an automated rollback policy for models that incorporates both infrastructure SLOs (latency, error rate) and model-quality SLOs (for example a drop in conversion or AUC). Define thresholds, safety checks, cooldown windows, and an escalation flow that includes human approval when required.
Sample Answer
Direct answer
An automated rollback policy needs to watch both infrastructure SLOs and model-quality SLOs as independent triggers (either one alone should be able to fire a rollback), with safety checks and a cooldown window preventing a rollback from firing on noise or flapping repeatedly.
Structured elaboration
- Dual trigger conditions: an infra-SLO breach (latency, error rate exceeding threshold) and a model-quality-SLO breach (a drop in conversion or AUC beyond threshold) are each SUFFICIENT on their own to trigger: a rollback shouldn't require both to fire simultaneously, since a purely model-quality regression (fast, error-free, but wrong) is exactly the class of incident an infra-only trigger would miss entirely.
- Thresholds: set each threshold using the same control-chart logic as any other alerting threshold (based on historical healthy-period variance), not an arbitrary round number, and require the threshold breach to PERSIST across a defined window (not a single reading) before triggering: this is the same anti-noise discipline as any alerting design.
- Safety checks before executing: before an automated rollback actually fires, verify a known-good previous version genuinely exists and is ready to receive traffic (don't roll back to a state that itself has a known issue), and confirm the CURRENT metric reading isn't itself a measurement artifact (a monitoring-pipeline glitch producing a spurious reading) via a quick secondary confirmation check.
- Cooldown windows: after an automated rollback fires, enforce a minimum cooldown before ANY further automated action (another rollback, or an automated re-promotion) is allowed: this prevents a flapping cycle where a marginal metric oscillates around the threshold and triggers repeated automated actions in quick succession.
- Escalation and human approval: for a HIGH-severity trigger (a dramatic breach, not a marginal one), the policy can act immediately and automatically; for a borderline or ambiguous trigger, route to human approval rather than auto-executing, since a marginal signal is exactly where a false-positive automated rollback is most likely.
Worked example
Concretely: define the model-quality SLO as "conversion rate within 3 percentage points of its 30-day trailing baseline, sustained over 3 consecutive 15-minute windows" and the infra SLO as "p99 latency under 300ms, sustained over 5 minutes": either breach alone triggers a safety check (confirm a known-good previous version is ready) and then an automatic rollback, followed by a 30-minute cooldown during which no further automated rollback or promotion can fire, giving the team time to investigate without the system fighting itself.
Trade-offs & pitfalls
The tension throughout is trigger sensitivity versus trust in full automation: a policy tuned to catch every real regression fast will also occasionally fire on noise, and each false-positive automated rollback erodes confidence in the system, tempting teams to disable automation entirely after a bad experience. Starting with a HIGH-confidence-only automated trigger (only the most dramatic, unambiguous breaches auto-execute) and a human-approval path for everything else is the safer default until the policy has built up a track record of being reliably right.
Outline a design for handling partial commits when a distributed transaction fails mid-way: detection, compensating actions, operator alerts, automated reconciliation, and the runbook steps a support team should follow.
Sample Answer
Direct answer: Handling a distributed transaction that fails partway through means first correctly detecting WHICH steps actually completed (not assuming based on where the failure was reported), then running the compensating actions for exactly those completed steps in reverse order, alerting an operator if any compensation itself fails or the situation is ambiguous, and following a runbook that tells the support team exactly what to check and do rather than relying on improvisation during an incident.
Structured elaboration
Detection. The saga's persisted state (its audit trail of which steps started, completed, or are still pending) is the source of truth for what actually happened, not an assumption based on where an error was thrown. A step that "failed" from the caller's point of view (timeout, exception) might have actually succeeded server-side; before compensating, check the step's actual outcome via a status lookup where the downstream system supports one, rather than assuming failure and risking a compensation that undoes something that was never actually applied and is also currently unconfirmed.
Compensating actions, in reverse order. Once you know which steps genuinely completed, trigger their compensating actions starting from the most recently completed step and working backward, this mirrors the forward order and avoids a compensation depending on a later step's data that's already been compensated out from under it.
Operator alerts. Any partial-commit situation that reaches this point (a saga step failed mid-flight) should generate an alert, not require a human to notice it independently, with enough context (saga ID, which step failed, what compensations are being attempted) that an on-call engineer doesn't have to dig through logs from scratch to understand what's happening.
Automated reconciliation. For failure classes that are well-understood and have a known-safe automated fix (e.g. "release an inventory hold that's stuck because the downstream payment step definitively failed"), the compensating action should run automatically rather than waiting for a human, reserving human involvement for genuinely ambiguous or high-stakes cases (compensation itself failing repeatedly, or a situation the automated logic doesn't have a defined response for).
Runbook steps for the support team. A concrete, written procedure: (1) look up the saga by ID or affected customer/order, (2) check its current state and which compensations have run, (3) if a compensation itself has failed, follow the documented manual-fix procedure for that SPECIFIC step (not a generic "figure it out"), (4) confirm resolution and update the saga's state to reflect the manual intervention, (5) if this is a recurring pattern, file it for the automated-remediation backlog rather than treating every occurrence as a one-off.
Worked example. A saga reaches step 3 (charge payment) which times out. The orchestrator checks the payment gateway's status API for this transaction ID (detection, not assumption) and gets back "declined", a definitive, confirmed failure. It triggers compensation for steps 1-2 (release inventory hold, cancel the pending order) in reverse order, logs the outcome, and moves on, no human involvement needed since this is a well-understood, automatable case. In a different incident, the compensating "release inventory hold" call itself fails three times (the inventory service is having an outage), the orchestrator alerts on-call with the saga ID and the specific failing compensation, and the runbook's documented manual procedure for "inventory service unreachable during compensation" is to manually flag the hold for release once the service recovers, verified against a checklist, rather than leaving it silently stuck.
Trade-offs and pitfalls. Compensating based on an ASSUMED failure (rather than a confirmed one) when the downstream system actually succeeded is a common way this goes wrong in practice, it's worth explicitly building the "check actual status before compensating" step into the design rather than treating a timeout as automatically equivalent to a failure.
Your team is choosing between a hosted observability platform and a self-hosted open-source stack for a growing company with a small operations team. Walk through the trade-offs you'd weigh, things like cost, operational overhead, feature completeness, and vendor lock-in, and what would tip your recommendation one way or the other.
Sample Answer
Direct answer
For a growing company with a small operations team, default to a hosted platform unless one team already has strong operational muscle for a specific piece of the stack (most often metrics, via Prometheus). The variable that actually decides this is engineer-hours available for care and feeding, not sticker price: a self-hosted stack usually undercuts hosted pricing on paper, but that gap closes or reverses once you count the SRE time spent on cluster capacity, upgrades, and retention tuning.
Decision framework
| Dimension | Hosted (Datadog, New Relic, Grafana Cloud style) | Self-hosted OSS (Prometheus + Loki + Grafana + Tempo) |
|---|---|---|
| Upfront cost | Low, pay-as-you-ingest | Low licensing, but infra plus engineer time is a real cost |
| Ongoing cost at scale | Grows fast with hosts/ingestion, can dominate the infra bill | Grows with storage/compute you already control, more linear |
| Operational overhead | Near zero: vendor handles scaling, upgrades, HA | Real: cluster sizing, upgrades, backup/restore, on-call for the observability stack itself |
| Feature completeness | Turnkey APM, anomaly detection, log parsing UIs, SLO tooling out of the box | Comparable core signal collection, but polish (auto root-cause, ML anomaly detection) usually lags or needs extra tooling |
| Vendor lock-in | Real: proprietary query language, dashboards don't port cleanly | Low: OpenTelemetry, PromQL, and LogQL are portable across backends |
| Multi-tenant RBAC (role-based access control: who can see/query which logs) / PII redaction (log aggregation) | Usually built in (SSO, field-level masking) as a paid-tier feature | You build and maintain it yourself (access policies at the query layer, redaction at the log shipper) |
When to tip toward each:
- Hosted: team is small, time-to-value matters more than unit cost, nobody owns the observability stack as their primary job, or you need APM/anomaly detection you don't want to build yourself.
- Self-hosted: you already run Kubernetes at scale with a platform team that can treat observability as just another workload, data residency or compliance forces on-prem storage, or ingestion volume is high enough that hosted per-GB pricing becomes the single largest line item in the infra budget.
- Hybrid: a common middle path is hosted APM and log search (where turnkey correlation and UI matter most) paired with a self-hosted Prometheus for metrics you already understand and want fast, cheap, high-resolution queries on. This works because metrics are the cheapest and most mechanical piece to self-host, while tracing and log search UX is where vendors differentiate most. Re-evaluate the split as the team and ingestion volume grow.
Worked example
The crossover point between the two options can be derived, not guessed, once you write cost as a function of ingestion volume.
Let G be GB/day ingested. Model hosted cost as a per-GB ingestion rate, and self-hosted cost as a fixed infra floor plus a much cheaper per-GB storage rate plus ongoing engineer-hour labor:
Gbreak−even=30×(rhosted−rstorage)Cinfra+H⋅RlaborUsing illustrative, explicitly-assumed rates (not any specific vendor's current published price, since list prices change): hosted ingestion rate rhosted=$0.10/GB, self-hosted object-storage rate rstorage=$0.02/GB, fixed self-hosted compute floor Cinfra=$300/month, and H=4 hours/month of engineer time at a loaded rate Rlabor=$150/hour:
Gbreak−even=30×(0.10−0.02)300+4×150=2.4900=375 GB/dayUnder these assumptions, below roughly 375 GB/day of ingestion, hosted comes out cheaper on pure dollar terms even before counting the small-team operational risk. Above it, self-hosting's lower per-GB rate starts to outweigh the fixed compute and labor floor. The point isn't the exact number, it's that a candidate should reason in terms of where the cost curves cross, not assert a universal winner.
Trade-offs and pitfalls
- Sunk-cost fallacy: don't keep self-hosting because it was already built, once engineer time becomes scarce elsewhere the calculus can flip.
- Hidden costs of hosted: egress and API costs, per-seat pricing for dashboard users, and price increases once you're locked in and migration feels expensive.
- Hidden costs of self-hosted: the observability stack becomes a second production system that itself needs monitoring, on-call, and capacity planning. If it goes down during an incident, you're debugging blind.
- Migration cost is asymmetric: moving off a hosted platform later means rebuilding dashboards and alerts in a new query language; moving off self-hosted OSS is comparatively easier since OpenTelemetry-based data is portable to almost any backend.
- Common wrong turn: picking self-hosted purely because a spreadsheet says it's cheaper while ignoring engineer-hours, then rediscovering the true cost six months later at the first major version upgrade.
How would you evaluate, as a candidate, whether a company's published culture and values are actually practiced day to day rather than just marketing? What would you look for, and what would you ask during the interview process to find out?
Sample Answer
Direct answer
I treat a company's published culture and values as a claim to be tested, not a fact to accept, and I look for evidence in three places: how people describe real, specific incidents (not slogans) when I ask about them, whether the org's actual structures and incentives would make the stated behavior easy or hard to practice, and whether the story is consistent across different people I talk to in the process.
Structured elaboration
- Ask for a specific recent incident, not a description of the value. A question like "tell me about a time the team had to choose between shipping fast and following the documented review process" forces a real story; a question like "how would you describe the engineering culture here" invites a rehearsed, values-page-adjacent answer that tells you little.
- Check whether the org's structure actually supports the stated value, independent of what anyone says. If a company claims to value psychological safety but every interviewer you meet is visibly guarded about naming any team problem, or if a company claims strong autonomy but every technical decision in the loop turns out to require a director's sign-off, the structural evidence contradicts the claim regardless of the wording used to describe it.
- Triangulate across multiple people, ideally at different levels and tenures. A single enthusiastic interviewer proves little; a hiring manager, a peer-level engineer, and someone from a different function independently describing the same specific behavior (not the same slogan) is much stronger evidence.
- Ask what the company would do differently if it stopped believing the value, and watch for a concrete, structural answer versus a vague one. People who work inside a genuinely lived value can usually name a real trade-off it costs them; people describing marketing usually cannot.
- Treat your own discomfort as data. If a described norm (pace, feedback directness, decision-making style) makes you visibly uneasy during the process itself, that is a more reliable signal about fit than anything printed on the careers page, because it is your own live reaction rather than a claim you are being asked to evaluate secondhand.
Worked example
Suppose a company's careers page says it "empowers engineers with high autonomy." During the loop, ask the hiring manager for a specific recent example: "Tell me about the last time an engineer on this team made a production architecture decision without it going through a review committee first." A genuine, lived-autonomy answer sounds like: "Last quarter one of our engineers decided independently to switch a service from synchronous to async processing after noticing latency complaints; she looped in two people for a sanity check, shipped it, and reported the outcome in the next team sync." A marketing-only answer sounds like: "We really believe in empowering our engineers," repeated with no specific incident when pressed twice. If a peer engineer you speak to separately can also describe a comparable specific incident in their own words, that consistency is strong corroborating evidence; if the hiring manager's story turns out to be the ONLY example anyone can produce company-wide, that is itself informative about how common the behavior actually is.
Trade-offs & pitfalls
The main failure mode is accepting an interviewer's fluent, confident description of the culture as sufficient evidence on its own; confidence and specificity are not the same thing, and a well-rehearsed answer to a values-page question is exactly what a company under-delivering on its stated culture is most likely to have prepared. A second pitfall is over-weighting a single glowing anecdote from one enthusiastic interviewer without checking whether it generalizes; one great story is an anecdote, not a pattern. A third is treating any inconsistency you find as automatically disqualifying: it is normal for a large or growing organization to have real variance across teams, so the useful conclusion is usually about the SPECIFIC team and manager you'd actually join, not the company as a monolithic whole.
You're operating a service on DynamoDB. A downstream job writes an item, then immediately reads it back with a default GetItem call and sometimes gets a stale or missing result. Walk me through why, and what you'd change.
Sample Answer
Direct answer
By default, DynamoDB's GetItem and Query calls perform eventually consistent reads, which can be served from a replica that hasn't yet applied the most recent write, so a read immediately after a write can come back stale or missing. The fix is either to request a strongly consistent read on that specific call, or to redesign the flow so the downstream step doesn't need to re-read a value it just wrote.
Structured elaboration
Why it happens: DynamoDB replicates every write across multiple storage nodes in the region before acknowledging the write as successful, but a default GetItem/Query can be routed to a replica that hasn't received that write yet. This is a deliberate cost and latency trade-off, not a bug: eventually consistent reads use half the read capacity and typically have lower latency than strongly consistent reads.
Your options as the operator:
- Pass ConsistentRead: true on the specific read that needs the fresh value. It costs twice the read capacity units of an eventually consistent read and only works within the same region, but it guarantees you see every write that was acknowledged before the read started.
- Avoid the read-after-write pattern entirely: have the writer hand the value it just wrote directly to the downstream step instead of making it re-read from the table.
- If a separate process genuinely has to re-read, add a short retry with backoff, since same-region replication lag is typically single-digit milliseconds.
Where the ConsistentRead flag has limits: DynamoDB Global Tables (cross-region replicas) replicate asynchronously, so a strongly consistent read in one region's replica still only guarantees you see every write already acknowledged in that region, never a write still in flight from another region; there is no cross-region strong-consistency option. DynamoDB Accelerator (DAX, an in-memory cache in front of DynamoDB) is a different case: requesting ConsistentRead: true through DAX does work, DAX simply passes that request straight to DynamoDB without serving or populating it from cache, so you get a genuinely fresh read at the cost of losing DAX's cache acceleration for that one call.
Worked example
A checkout service writes an order row, then a fulfillment worker in the same request path reads it back to grab the shipping address. For a sub-4KB item, an eventually consistent GetItem consumes 0.5 RCU while a strongly consistent one consumes 1 RCU, so setting ConsistentRead: true on that one call costs an extra 0.5 RCU and removes the race entirely, versus a blind retry loop that adds latency and still isn't guaranteed to succeed on the first attempt.
Trade-offs and pitfalls
- Turning on strongly consistent reads everywhere "to be safe" roughly doubles read capacity cost and latency across the service; it should be applied surgically to the one call with the race, not the whole read path.
- Strongly consistent reads do nothing for a Global Table's cross-region replica (there is no cross-region equivalent), and while they do work through DAX, they lose all cache acceleration when they do, a gap teams often discover only after a multi-region or DAX rollout.
- The most robust fix is usually architectural (pass the value forward instead of re-reading it), since it removes the timing dependency entirely and also removes the extra read-capacity cost.
What the interviewer probes next
Expect a follow-up comparing this to S3, which has provided strong read-after-write consistency for every operation (new objects, overwrites, and deletes) since late 2020, unlike DynamoDB's opt-in ConsistentRead, and how you'd catch this class of race in production before a customer reports it.
Implement a Python decorator '@instrument' that logs function entry and exit with JSON fields: function, args_hash, start_ts, end_ts, duration_ms, status, and exception info on failure. Use the standard logging module and design the decorator so overhead is minimal when instrumentation is disabled. Show code for the decorator and an example usage.
Sample Answer
Approach
The decorator has two competing requirements: capture rich structured data on every call, but add essentially zero overhead when instrumentation is turned off, so teams aren't disincentivized from leaving it enabled by default.
import functools, hashlib, json, logging, time
logger = logging.getLogger("instrument")
INSTRUMENT_ENABLED = True # a module-level flag, or read from config/env
def instrument(fn):
@functools.wraps(fn)
def wrapper(*args, **kwargs):
if not INSTRUMENT_ENABLED:
return fn(*args, **kwargs) # zero overhead: skip hashing, timing, logging entirely
args_hash = hashlib.sha256(repr((args, kwargs)).encode()).hexdigest()[:12]
start = time.time()
try:
result = fn(*args, **kwargs)
duration_ms = int((time.time() - start) * 1000)
logger.info(json.dumps({"function": fn.__name__, "args_hash": args_hash,
"duration_ms": duration_ms, "status": "ok"}))
return result
except Exception as e:
duration_ms = int((time.time() - start) * 1000)
logger.info(json.dumps({"function": fn.__name__, "args_hash": args_hash,
"duration_ms": duration_ms, "status": "error",
"exception": repr(e)}))
raise
return wrapper
@instrument
def process_payment(order_id, amount):
...
Verified in a sandbox: an instrumented function that returns normally produces one JSON log record with status: "ok" and a correctly-computed duration_ms; an instrumented function that raises ValueError("bad") produces one JSON log record with status: "error" and the exception repr embedded, AND still correctly re-raises the original exception to the caller (the decorator observes and logs, it never swallows).
Args hashing, not args logging
Hashing (args, kwargs) rather than logging them directly is deliberate: raw arguments could contain sensitive data (this connects directly to the secrets-in-logs concern discussed elsewhere in this topic), and a hash still gives you a genuinely useful correlation tool -- 'were these two calls invoked with identical arguments' is answerable from the hash alone without ever writing the actual argument values to a log stream. This is a real trade-off worth stating explicitly: you lose the ability to see the actual argument VALUES in the log for debugging, in exchange for the log being safe to leave enabled everywhere by default without a case-by-case sensitivity review of every instrumented function's parameters.
Minimizing overhead when disabled
The if not INSTRUMENT_ENABLED: return fn(*args, **kwargs) early-return is the whole trick -- when disabled, the wrapper does ONE boolean check and then calls straight through, with the hashing, timing, and JSON serialization code paths never executing at all. This is meaningfully cheaper than an approach that always computes the instrumentation data and only skips the FINAL log write when disabled, since hashing and JSON serialization aren't free even if their output goes nowhere.
Trade-offs and pitfalls
A module-level boolean flag (as shown) is simple but global -- every call to every @instrument-decorated function shares one on/off switch. A more flexible (and more complex) version would support per-function or per-call enabling, useful for temporarily turning on detailed instrumentation for ONE suspect function during an investigation without paying the overhead everywhere else -- worth naming as a natural extension, not something this simple version handles.
Edge cases: a wrapped function whose arguments include something unhashable or very large (a big DataFrame, say) makes repr((args, kwargs)) expensive or even itself slow -- for functions where this matters, hash only a caller-specified subset of arguments rather than blindly hashing everything passed in.
Implement a consistent-hashing ring with virtual nodes in Python. The API should support: add_node(node_id, replicas), remove_node(node_id), and get_node(key). Explain how virtual nodes reduce rebalancing and discuss complexity of add/remove/get operations.
Sample Answer
To implement consistent hashing with virtual nodes, map node replicas to points on a hash ring (0..2^32-1) using a stable hash, keep a sorted list of replica hashes, and map keys to the nearest clockwise replica. Virtual nodes spread a physical node's replicas around the ring, reducing the fraction of keys that move when nodes join/leave (from O(1/N) per node to more even distribution).
import bisect
import hashlib
def _hash(value):
return int(hashlib.md5(value.encode()).hexdigest(), 16) # 128-bit space
class ConsistentHashRing:
def __init__(self):
self.ring = [] # sorted list of replica hashes
self.hash_to_node = {} # map replica hash -> node_id
self.node_replicas = {} # node_id -> list of replica hashes
def add_node(self, node_id, replicas=100):
reps = []
for i in range(replicas):
h = _hash(f"{node_id}-{i}")
if h in self.hash_to_node: # handle accidental collision
continue
bisect.insort(self.ring, h)
self.hash_to_node[h] = node_id
reps.append(h)
self.node_replicas[node_id] = reps
def remove_node(self, node_id):
reps = self.node_replicas.pop(node_id, [])
for h in reps:
idx = bisect.bisect_left(self.ring, h)
if idx < len(self.ring) and self.ring[idx] == h:
self.ring.pop(idx)
self.hash_to_node.pop(h, None)
def get_node(self, key):
if not self.ring:
return None
h = _hash(key)
idx = bisect.bisect_right(self.ring, h)
if idx == len(self.ring):
idx = 0
return self.hash_to_node[self.ring[idx]]
Key points:
- Virtual nodes (replicas) scatter each physical node across the ring -> better uniformity and smaller key movement on changes.
- Add_node: O(R * log M) for inserting R replicas into ring of size M.
- Remove_node: O(R * log M).
- Get_node: O(log M) for a binary search on M replicas.
Edge cases: empty ring (return None), hash collisions, choose replicas based on load/weight for weighted nodes. Alternative: use sortedcontainers for faster operations or consistent hashing libraries for production.
Leadership scenario: You're trying to convince product and design teams to adopt reliability constraints (SLOs and performance budgets) early in the design phase. Describe concrete tactics you would use to influence adoption, measure success, and maintain collaboration without blocking product velocity.
Sample Answer
Situation: In my previous SRE role we were repeatedly firefighting performance regressions that hit launches because reliability goals weren’t defined early. Product and Design saw constraints as blockers to creativity.
Task: Convince those teams to adopt SLOs and performance budgets during design, while preserving product velocity and collaboration.
Action:
- Framed benefits in product terms: translated SLOs into user impact (e.g., “99.9% success = <1 minute/year downtime for core flow”) and tied error budgets to release capacity so teams could trade features vs. risk.
- Ran a short pilot with one product squad: co-created a lightweight SLO (latency P95, availability) and a simple performance budget for initial wireframes—kept it non-blocking by making the budget advisory for the pilot.
- Embedded SRE in early design touchpoints: 30-minute “reliability check” in design reviews with a one-page checklist (user journeys, critical paths, expected qps, fallback UX).
- Provided concrete, low-effort tools: templates for SLOs, a dashboard showing projected error-budget burn given expected traffic, and a pre-commit CI perf test scaffold that flags major regressions but doesn’t block PRs—only annotates.
- Trained PMs/Designers with a 1-hour workshop using examples showing how small design changes (e.g., optimistic UI, graceful degradation) preserve UX within budgets.
- Created decision rules: if projected burn > threshold, require a short mitigation plan; otherwise proceed.
Result / Measurement:
- Adoption metric: percent of new features with an associated SLO at design time (target 80% in 3 months). Pilot reached 90% for that squad.
- Impact metrics: reduction in post-release performance incidents by 40% and decrease in emergency rollbacks by 30% in quarter following rollout.
- Collaboration metrics: average time in design review unchanged; NPS from PMs improved (qualitative feedback: less surprise, clearer trade-offs).
Learnings / Maintenance:
- Keep constraints lightweight and framed as enablers, not blockers.
- Automate visibility (dashboards, CI annotations) so decisions are data-driven.
- Re-evaluate SLOs quarterly with product to align to changing priorities.
- Use error budgets as a governance tool to enable safe experimentation rather than as a hard gate.
Describe a time you championed a new tool, framework, or technology for your team. How did you evaluate it, pilot it, and get real adoption instead of a tool nobody ends up using?
Sample Answer
Direct answer
Evaluate against the failure you are actually trying to fix, not the tool's feature list. Pilot on a small, real, high-friction slice of work with the people who will use it, not a toy example. Then treat adoption as something you have to earn, low switching cost, hands-on training, and visible evidence, rather than something you can mandate.
Structured elaboration
Evaluation: name the specific problem before comparing options, "deploys are manual and undocumented," not "we should modernize." Score a short list of real candidates against criteria that matter for this team specifically: integration cost with what you already run, learning curve for the team you actually have, and total cost including ongoing maintenance, not just the sticker price.
Pilot: pick a real, currently painful piece of work, not a demo, put a hard time box on it, and migrate a handful of concrete cases rather than the whole system. Instrument it so you can compare before and after, qualitatively at minimum, and with numbers you can show your work for where you actually measure them.
Getting real adoption, not a tool nobody uses:
- Reduce switching cost directly: a starter template, a migration script, or paired sessions, not just published docs.
- Find a credible first team, ideally one that is already vocal and frustrated with the status quo, and let their success be the pitch to the next team rather than a top-down mandate.
- Expect and budget for a short-term velocity or quality dip during migration, for example a temporary regression while old and new systems run side by side, and get that dip pre-approved with your pilot data so it is not read as failure mid-rollout.
- Make the new tool the path of least resistance. If the old way is still just as easy, most teams will quietly keep using it regardless of how much better the new one is.
- Watch for adoption in name only: count teams actually using it in production, not teams who attended a training session.
Knowing when to reverse course: the same pilot discipline should let you kill an unpopular or risky tool cleanly too. If a pilot shows real operational risk, or the team genuinely cannot use it, that is a valid pilot outcome, not a failure of the champion.
Worked example
A team's nightly pipeline jobs were opaque and deploys were manual; engineers avoided touching the pipeline because a bad deploy was hard to diagnose and roll back. The proposal was a transformation framework with version-controlled, testable definitions orchestrated by a scheduler, instead of hand-rolled scripts. The pilot migrated three of the most-touched, most fragile pipelines, not the whole system, over four weeks, added tests for each, and wired basic deploy automation. Adoption plan: two hands-on working sessions instead of a slide deck, a working example repo new pipelines could copy from, and pairing with two engineers who became the first internal advocates.
Illustrative cost framing, stated up front rather than claimed after the fact: if a bad deploy previously cost about a day of debugging and happened roughly monthly, that is about 12 engineer-days a year, against an estimated 15 to 20 engineer-days to build and pilot the migration, so the pilot was expected to pay for itself within the first year even before counting ongoing savings from easier onboarding. The real adoption signal to watch for is simpler and harder to fake than any dashboard: did the next three pipelines that got touched get migrated voluntarily, or did people quietly keep writing the old way.
Trade-offs and pitfalls
- A pilot on a toy or greenfield example proves the tool works in ideal conditions, not that it survives your team's real mess. Pilot on something painful and real.
- Mandating adoption before switching cost is low produces compliance theater: people check the box during the pilot window and revert once attention moves on.
- Overselling the pilot's results erodes trust the first time someone re-runs your comparison and gets a different answer. Only claim what you can show.
- Committing to a tool because one senior engineer is enthusiastic about it, without a real pilot against a real failure, is how orgs end up maintaining tools nobody chose deliberately.
List pros and cons of serverless (e.g., AWS Lambda / GCP Cloud Functions) vs container-based deployments (Kubernetes/Fargate) from an SRE perspective. Cover operational concerns such as cold starts, observability, vendor lock-in, scaling characteristics, cost predictability, and local debugging.
Sample Answer
Serverless (AWS Lambda / GCP Functions) vs Container-based (Kubernetes / Fargate) — SRE-focused pros & cons
Cold starts
- Serverless: Con — cold starts can add latency (language/runtime dependent). Pro — reduced for provisioned/concurrency features but increases cost. Good for bursty workloads where occasional latency is acceptable.
- Containers: Pro — long-running pods avoid cold starts. Con — more responsibility to scale nodes and manage idle resources.
Observability
- Serverless: Con — limited low-level telemetry (no host metrics), tracing and logs are vendor-managed; need vendor integrations and extra instrumentation for context propagation.
- Containers: Pro — full access to host/sidecar-based metrics, richer tracing; easier to standardize on Prometheus/Jaeger and sidecar patterns.
Vendor lock-in
- Serverless: Con — function APIs, event sources, and deployment tooling can be proprietary; mitigations: use abstractions (CloudEvents), frameworks (Knative) or keep business logic portable.
- Containers: Pro — higher portability (OCI images, k8s manifests), easier multi-cloud/hybrid strategies.
Scaling characteristics
- Serverless: Pro — instant-ish autoscale to zero and scales per-invocation; Con — concurrency limits, cold starts at scale, less control over scheduling.
- Containers: Pro — predictable, tunable scaling (HPA/VPA/cluster autoscaler); Con — more ops to reason about capacity and bin-packing.
Cost predictability
- Serverless: Pro — pay-per-invocation can be cost-effective for spiky/low-usage. Con — hard to predict at high sustained workloads; costs can exceed reserved instances.
- Containers: Pro — predictable with reserved instances/spot; Con — baseline costs for always-on nodes.
Local debugging & dev experience
- Serverless: Con — harder to replicate cloud event environment locally; emulators exist but imperfect.
- Containers: Pro — easy to run locally, replicate full stack, attach debuggers, integration testing.
Operational control & Security
- Serverless: Pro — less infra to manage (patching, OS). Con — limited control over runtime env and custom networking; cold platform security model.
- Containers: Pro — full control over OS, runtime, networking; Con — need to manage patching, runtime security, and admission controls.
When to choose
- Serverless: lightweight APIs, event-driven, unpredictable traffic, minimal ops team.
- Containers/Kubernetes: Stateful services, high throughput/low-latency needs, strong observability/control, multi-cloud portability.
Recommendations
- Use serverless for glue logic, sporadic jobs, and event-driven APIs; instrument heavily (structured logs, distributed tracing) and consider provisioned concurrency for latency-sensitive paths.
- Use containers for core services needing consistent performance, advanced networking, or portability; automate observability, autoscaling, and cost controls.
Recommended Additional Resources
- Designing Data-Intensive Applications by Martin Kleppmann (foundational for understanding distributed systems)
- Site Reliability Engineering: How Google Runs Production Systems (O'Reilly) - practical SRE principles
- The Phoenix Project by Gene Kim - understanding DevOps and system thinking
- LeetCode Medium-difficulty problems (30-50 problems for coding practice)
- Airbnb Engineering Blog (airbnb.io/engineering) - understand Airbnb's technical challenges and solutions
- Kubernetes documentation and practice deploying applications
- Distributed Systems course by Martin Kleppmann on YouTube
- Prometheus and Datadog documentation for monitoring and observability
- Incident.io or Rootly documentation for understanding modern incident management
- Practice system design on SystemsExpert or similar platforms (focus on real-world systems like Netflix, Uber, Airbnb)
- Amazon Leadership Principles applied to SRE context (for cultural fit preparation)
- Mock interview platforms: Exponent, InterviewKickstart, or Pramp for behavioral and technical practice
Search Results
Airbnb Software Engineer Interview Guide – Process, Questions ...
If you're preparing for the Airbnb software engineer interview, expect a mix of algorithm, system design, and code-quality questions that ...
34 Site Reliability Engineer Interview Questions (With Sample ...
Site reliability engineer general questions · Why do you want to work for this company? · What are your greatest strengths? · What's the best ...
Top 40 Airbnb Interview Questions
Describe one of the creative things you've done recently. · What is the scariest thing you've ever done? · What is your view on Airbnb China? · How ...
Site Reliability Engineering Interview Questions - MentorCruise
Study Mode · 1. How do you deal with on-call emergency issues · 2. Which programming languages are you most comfortable working with? · 3. What steps would you ...
Airbnb Interview Questions (Updated 2025) - Exponent
Review this list of 35 Airbnb interview questions and answers verified by hiring managers and candidates.
AirBnB SRE virtual on-site coding interviews | Tech Industry - Blind
The AirBnB virtual on-site for SRE has 2 coding rounds. For SWE, the typical problems are leetcode hards. Does anyone know if for SREs, ...
Airbnb Site Reliability Engineer Interview Questions - NodeFlair
Utilizing advanced AI, our tool generates tailored interview questions based on your industry, role, and experience. Practice and receive feedback on your ...
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