Site Reliability Engineer (Entry Level) Interview Preparation Guide - FAANG Standards
This guide is based on general FAANG interview practices and may not reflect specific company procedures.
The Entry-Level SRE interview process at FAANG companies typically consists of 7 rounds designed to assess foundational knowledge of reliability engineering, systems thinking, basic automation skills, and cultural fit. The process spans 4-8 weeks and includes technical screening rounds focusing on coding fundamentals, infrastructure knowledge, monitoring concepts, incident response basics, and automation. Entry-level candidates are expected to demonstrate strong learning ability, solid problem-solving fundamentals, and genuine interest in reliability practices rather than deep expertise.
Interview Rounds
Recruiter Screening Call
What to Expect
Initial 30-minute call with a recruiter to assess basic fit, background, and interest in the SRE role. The recruiter will review your resume, verify your location and availability, explain the role responsibilities, and outline the interview process. They will assess your communication skills, understanding of reliability engineering concepts at a high level, and readiness to move forward. This is your chance to make a strong first impression and demonstrate genuine interest in site reliability engineering.
Tips & Advice
Be clear about your interest in reliability engineering and why you chose this path. Have 2-3 specific examples ready of times you debugged complex problems or learned new systems quickly. Ask thoughtful questions about the team's mission, size, and tech stack. Mention any relevant coursework, personal projects, or internships. Prepare a clear elevator pitch about your background (30 seconds). Clarify any gaps in your resume proactively. Be enthusiastic but authentic about your current skill level.
Focus Topics
Basic Reliability Engineering Concepts Familiarity
Have a general understanding of: what SLOs (Service Level Objectives) and availability targets mean, the concept of incident response and postmortems, why monitoring systems is critical, and basic understanding of deployment and rollback. You do not need deep knowledge at this stage. Just enough to show you have researched the role and can discuss reliability intelligently.
Practice Interview
Study Questions
Your Background and Motivation for SRE
Prepare a 1-2 minute narrative about your background, why you are interested in SRE, and what you hope to learn. Highlight any relevant experience: internships, course projects involving systems, debugging experience, familiarity with Linux, or contributions to reliability work. Be authentic about your current skill level. Entry-level candidates are not expected to be experts. Share specific incidents where you had to troubleshoot something complex or learn a new technology quickly.
Practice Interview
Study Questions
Understanding the SRE Role and Responsibilities
Be able to clearly articulate what Site Reliability Engineering means: balancing reliability and velocity, minimizing downtime, reducing errors, keeping releases stable, and managing incidents. Understand that SREs blend software engineering with systems administration. For entry level, focus on foundational responsibilities: monitoring systems, responding to incidents, and learning to automate operational tasks. Know that SREs are bridge between development and operations.
Practice Interview
Study Questions
Technical Phone Screen - Coding Fundamentals
What to Expect
60-90 minute technical screening with an engineer, typically conducted via video call and screen sharing. The interviewer will pose 1-2 coding problems focused on basic data structures, algorithms, and problem-solving approach. Problems are typically easy to medium difficulty, solvable in 30-45 minutes per problem. The evaluator is assessing your ability to think through problems systematically, code clearly, communicate your approach, and handle edge cases. For SRE roles, problems may be slightly biased toward automation-relevant scenarios such as parsing data, working with strings, or basic system operations.
Tips & Advice
Start by clarifying the problem with the interviewer before coding. Think out loud about your approach. Do not jump directly to coding. Write pseudocode first if helpful. Handle edge cases and discuss time and space complexity. Test your code mentally with examples. If stuck, explain your thinking and ask for hints. Interviewers appreciate problem-solving resilience over perfect code. Practice on LeetCode (easy-medium difficulty). Code in your most comfortable language, typically Python or Java. Use clear variable names and comments. After solving, discuss potential optimizations or alternative approaches.
Focus Topics
Clean Code and Clear Communication
Write code that is readable, uses clear variable names, includes comments where logic is not obvious, and follows language conventions. Communicate your approach clearly before coding. Explain trade-offs and decisions explicitly. For SRE work, clean code is crucial because others must understand and maintain your automation scripts. Walk through test cases after implementing.
Practice Interview
Study Questions
Automation-Relevant Coding Problems
Practice problems involving: parsing and transforming log data, working with strings and regular expressions, counting and aggregating data, basic system operations like file handling and simple data processing, sorting and searching through configuration data. These often appear in SRE interviews to test automation-relevant thinking and real-world problem application.
Practice Interview
Study Questions
Algorithm Problem-Solving Approach
Master the ability to break down problems, identify patterns, and think through solutions systematically. Practice: understanding the problem statement clearly, identifying edge cases, planning an approach before coding, considering time and space trade-offs, testing solutions with examples. Common patterns: two-pointer, sliding window, binary search, sorting, string manipulation, and basic dynamic programming.
Practice Interview
Study Questions
Data Structures Fundamentals
Strong understanding of arrays, linked lists, hash tables, stacks, queues, and trees. Know their time complexities for insert, delete, search, and traverse operations. Understand when to use each structure based on use cases. For SRE context: hash tables for configuration lookups, arrays for log processing, trees for hierarchical system representations. Be comfortable implementing basic operations and explaining trade-offs between data structures.
Practice Interview
Study Questions
Systems and Infrastructure Fundamentals
What to Expect
60-minute technical interview focusing on Linux and Unix systems, basic networking, and infrastructure concepts. The interviewer will ask questions about operating system concepts, command-line proficiency, process management, file systems, basic networking, and system resource management. Expect hands-on scenario questions like 'Your application is consuming excessive CPU, how would you investigate?' or 'Walk me through how a packet travels on the network.' This round assesses foundational systems knowledge essential for reliability work.
Tips & Advice
Study Linux from first principles: understand processes, file descriptors, signals, and resource management. Be comfortable with common command-line tools (ps, top, netstat, curl, grep, sed, awk). Understand OSI model basics and TCP/IP fundamentals. Practice troubleshooting scenarios on a Linux system. Know the difference between threads and processes. Study system calls and how applications interact with the OS. Prepare to explain concepts verbally, drawing diagrams if necessary. Focus on depth rather than breadth. Better to deeply understand a few concepts than superficially know many.
Focus Topics
Command-Line Proficiency and Troubleshooting
Comfortable using shell commands for system troubleshooting and administration. Key tools: ps (process information), top and htop (real-time monitoring), grep, sed, awk (text processing), curl (HTTP requests), netstat and ss (network statistics), du and df (disk usage), kill and killall (process termination), tar and gzip (compression). Know how to redirect I/O, pipe commands together, and create simple scripts. Understand how to use man pages.
Practice Interview
Study Questions
System Resource Management and Monitoring
How to monitor system resources: CPU (utilization, context switching, load average), memory (heap versus stack, paging, swapping), disk (I/O operations, free space), and network (bandwidth utilization, packet loss). Know tools like top, free, iostat, and vmstat. Understand resource contention and how it affects application performance. Know common resource exhaustion scenarios and their symptoms: out of memory, disk full, high I/O wait.
Practice Interview
Study Questions
Linux and Unix Fundamentals
Deep understanding of process management (how processes are created, scheduled, and terminated), signals and signal handling, file descriptors and I/O redirection, file systems and permissions, environment variables, and shell basics. Know common processes and what they do. Understand process states (running, sleeping, zombie). Know how to interpret process information from tools like ps and top. Be comfortable with permission model: user, group, other.
Practice Interview
Study Questions
Basic Networking Concepts
Understanding of TCP/IP stack (layers, protocols), DNS resolution process, TCP versus UDP, connection establishment and closure, ports and sockets, IP addressing, subnetting basics, and common networking tools (curl, netstat, telnet, dig). Know how applications connect to the network and common failure modes. Understand concepts like connection timeouts, retries, and packet loss. Know what happens when you ping a host or make an HTTP request.
Practice Interview
Study Questions
Monitoring, Observability, and Incident Response Fundamentals
What to Expect
60-minute technical interview focused on understanding monitoring and observability concepts, incident response procedures, and reliability metrics. The interviewer will ask about monitoring architecture, types of metrics and alerts, log aggregation, distributed tracing basics, the concepts of SLOs/SLIs/SLAs, and how incident response works. Expect scenario questions like 'How would you debug high latency in an application?' or 'Walk me through how you would respond to a production outage.' This round assesses your understanding of how SREs keep systems reliable through visibility and response.
Tips & Advice
Study the three pillars of observability: metrics, logs, and traces. Understand the difference between monitoring and observability. Know common monitoring tools (Prometheus, Grafana, ELK stack) conceptually. Study SLO/SLI/SLA definitions with real examples. Understand incident response workflows and why postmortems matter. Learn about alert design and alert fatigue. Study common failure modes and troubleshooting approaches. Prepare examples from your projects where you debugged issues. Understand error budgets conceptually and how they guide decision making.
Focus Topics
Observability and Systematic Troubleshooting
Understanding observability (the ability to understand system state from external outputs) versus monitoring (collecting predefined metrics). Know troubleshooting methodology: gathering data systematically, forming hypotheses, testing hypotheses, iterating toward root cause. Understand that in complex distributed systems, observability requires logs, metrics, and traces together. Practice thinking through 'what would I measure to debug this issue?' scenarios. Know common failure modes: cascading failures, resource exhaustion, bad deployments, network issues, latency.
Practice Interview
Study Questions
Monitoring and Alerting Architecture
Understand components of a monitoring system: collection (agents gathering metrics from systems), storage (time-series databases), visualization (dashboards for human understanding), and alerting (triggering notifications on thresholds). Know the difference between metrics (numeric measurements over time), logs (discrete events with context), and traces (request flows through distributed systems). Understand alert design principles: avoiding alert fatigue (too many false positives), setting meaningful thresholds, and routing alerts appropriately. Know metric types: counters (incrementing values), gauges (point-in-time values), histograms (distributions).
Practice Interview
Study Questions
Incident Response and Blameless Postmortems
Understanding the incident response process: detection (monitoring and alerting identifies the issue), triage (understanding severity and impact), response (mitigating impact quickly), recovery (restoring service to normal), and post-incident review (learning systematically). Know the concept of blameless postmortems: analyzing failures without assigning personal blame, focusing on systemic improvements and process changes. Understand how to think about incident severity and escalation. Know that SREs are often first responders and must communicate clearly during incidents.
Practice Interview
Study Questions
SLIs, SLOs, SLAs, and Error Budgets
Clear understanding of Service Level Indicators (measurable metrics of service quality like latency percentiles, availability, error rate), Service Level Objectives (target thresholds for SLIs, for example 99.9% availability), and Service Level Agreements (contractual commitments with customers). Understand error budgets: if your SLO is 99.9% availability, you have a 0.1% error budget, roughly 43 minutes of downtime per month. Know how error budgets guide release velocity versus stability trade-offs. Be able to give real-world examples from familiar services.
Practice Interview
Study Questions
Automation and Infrastructure as Code
What to Expect
60-minute technical interview assessing your ability to think about automation, write infrastructure code, and understand deployment practices. The interviewer will discuss how you would automate operational tasks, walk through configuration management concepts, discuss deployment strategies, and may ask you to write a simple script or describe infrastructure-as-code approaches. Expect scenarios like 'How would you automate server provisioning?' or 'Walk me through how you would set up continuous deployment safely.' This round assesses whether you can move from manual, error-prone operations to automated, repeatable, reliable processes.
Tips & Advice
Study Infrastructure as Code concepts and tools conceptually (Terraform for cloud-agnostic provisioning, CloudFormation for AWS, Ansible for configuration management, Kubernetes manifests for container orchestration). Understand configuration management and why treating infrastructure as code is important for reliability. Know deployment strategies: rolling deployments, canary releases, and blue-green deployments. Understand CI/CD pipeline concepts. Write a few simple automation scripts in Python or Bash. Prepare to discuss idempotence (running code multiple times safely). Study the concept of immutable infrastructure. Know differences between imperative (scripts) and declarative (IaC) approaches. Be ready to explain trade-offs.
Focus Topics
CI/CD Pipeline Concepts
Understanding continuous integration (frequent code merges with automated testing to catch issues early) and continuous deployment (automatically pushing changes to production). Know typical pipeline stages: build (compile code), test (unit, integration tests), deploy (push to production), monitor (watch for issues). Understand the role of SREs in CD: creating safe deployment mechanisms, implementing quality gates, enabling reliable automation. Know common CI/CD tools conceptually (Jenkins, GitLab CI, GitHub Actions). Understand how SREs ensure deployments are safe.
Practice Interview
Study Questions
Safe Deployment Strategies and Rollouts
Understanding different approaches to deploying software safely: rolling deployments (gradual replacement of old version with new), canary releases (testing with small user segment first before full rollout), blue-green deployments (switching between two identical environments), and shadow traffic (sending real traffic to new version without affecting users). Know why safe deployments matter: minimize blast radius of bad changes, enable quick rollbacks, detect issues early before affecting many users. Understand automated rollback concepts. Know how deployment velocity relates to reliability and error budgets.
Practice Interview
Study Questions
Automation and Scripting for Operational Tasks
Ability to write scripts that automate repetitive operational tasks: log processing, system configuration, health checks, data collection, and remediation actions. Know scripting languages commonly used in SRE: Python, Bash, Go. Understand idempotence (scripts produce the same result when run multiple times safely). Understand error handling and logging in scripts. Practice writing simple scripts that are production-safe: they validate inputs, handle edge cases, log their actions, and fail gracefully rather than silently.
Practice Interview
Study Questions
Infrastructure as Code (IaC) Fundamentals
Understanding that infrastructure should be managed like software code: version controlled, peer reviewed, tested, and automated. Know the benefits: reproducibility (same setup every time), auditability (who changed what), disaster recovery (rebuild from code), and scaling (define once, deploy many times). Understand declarative approach (describe desired state) versus imperative approach (scripts that make changes step by step). Know common IaC tools (Terraform for cloud-agnostic provisioning, Ansible for configuration management, Docker for containerization, Kubernetes for orchestration). For entry level, conceptual understanding is more important than hands-on expertise.
Practice Interview
Study Questions
System Design and Reliability Thinking
What to Expect
60-minute technical interview focusing on basic system design thinking and how reliability considerations influence architecture. Rather than designing massive systems, expect questions about designing simple reliable systems or analyzing existing systems for reliability concerns. Examples: 'How would you design a monitoring dashboard?' or 'Walk me through how you would make a simple web service more reliable.' The interviewer is assessing whether you think about reliability throughout design, understand trade-offs, consider failure modes, and make reasonable architectural decisions. This round emphasizes learning ability and thinking process more than absolute correctness.
Tips & Advice
Practice thinking systematically about systems: clarify requirements, consider trade-offs, discuss failure modes, evaluate scaling approaches. For entry level, keep designs simple but well-reasoned. Focus on clarity of thinking over architectural complexity. Think out loud about reliability considerations: 'What if the database goes down?' or 'How do we handle traffic spikes?' Start with simple designs and add complexity based on constraints. Draw diagrams to explain your architecture. Discuss monitoring and observability from the start. Know basic concepts: load balancing, replication, caching, circuit breakers. Study real systems (your favorite company's tech blog) to see how they approach reliability in practice.
Focus Topics
Scaling and Capacity Planning Basics
Understanding how systems scale: vertical scaling (bigger machines with more resources) versus horizontal scaling (more machines). Knowing that at entry level you are learning these concepts, not designing Netflix-scale systems. Understanding bottlenecks: if your service is stateless, you scale horizontally easily; if stateful, it is harder and requires techniques like sharding. Know autoscaling concepts: scaling when load increases, scaling down when it decreases. Understanding that capacity planning requires predicting future load and building buffer for reliability.
Practice Interview
Study Questions
Basic Fault Tolerance Patterns
Understanding common patterns that make systems fault-tolerant: replication (data redundancy across multiple servers), failover (switching to backup when primary fails), circuit breakers (stopping requests to failing services to prevent cascades), retry with exponential backoff (intelligent retrying with delays), timeouts (preventing hanging requests), and graceful degradation (providing partial functionality when components fail). Know when each pattern is appropriate and its trade-offs. Understand that fault tolerance usually involves trade-offs: more replicas cost more but tolerate more failures.
Practice Interview
Study Questions
Observability in System Architecture
Incorporating observability from the design phase: logging at key decision points, emitting meaningful metrics, understanding distributed tracing for multi-service systems. Designing for debuggability: making systems transparent so issues can be diagnosed quickly. Understanding what metrics matter for reliability: error rates, latency percentiles, resource utilization. Knowing that post-hoc observability is harder and more expensive to add than designing for it from the start.
Practice Interview
Study Questions
Reliability-First Design Thinking
Approaching system design with reliability as a primary concern, not an afterthought. For any system design question, follow this framework: (1) Identify critical paths that must not fail, (2) Consider failure modes at each component, (3) Design recovery mechanisms, (4) Plan monitoring and observability, (5) Consider trade-offs between reliability and other qualities like cost or performance. Understand that highly reliable systems are designed with failure recovery in mind from the start, not achieved through operational heroics. Entry-level candidates should show they are thinking systematically about failure scenarios.
Practice Interview
Study Questions
Behavioral and Cultural Fit Assessment
What to Expect
45-60 minute interview with an SRE engineer or manager focused on assessing cultural fit, learning ability, collaboration, and alignment with company values. Using behavioral interview format (tell me about a time when...), the interviewer will explore your problem-solving approach, handling of challenges, collaboration skills, learning from failures, and ability to take initiative. Expect questions about teamwork, communication, receiving feedback, and how you approach learning new technologies. This round is especially important at entry level to assess learning potential and cultural alignment.
Tips & Advice
Use the STAR method for behavioral questions (Situation, Task, Action, Result): set the context, explain your specific responsibility, describe what you did, and share the outcome. Prepare 5-7 concrete examples from projects, coursework, or work experience showing: problem-solving, overcoming challenges, learning from mistakes, collaboration, taking initiative, handling ambiguity, or receiving feedback. For entry-level roles, examples from coursework or personal projects are completely valid and expected. Focus on what YOU did, not what your team did. Emphasize learning: how did you approach a new technology? How did you handle not knowing something? Be authentic about areas where you are still learning. Ask thoughtful questions about team culture, projects, growth opportunities, and mentorship.
Focus Topics
Company Values and Cultural Alignment
Understanding and demonstrating alignment with the company's values and principles. Different FAANG companies emphasize different principles: Google values innovation and scale; Amazon values customer obsession and frugality; Meta values moving fast; Netflix values freedom and responsibility; Microsoft values growth mindset. Research the company's values carefully and think about examples in your experience that align with them. Show genuine interest in the company's mission and engineering culture beyond just getting a job.
Practice Interview
Study Questions
Problem-Solving Under Uncertainty and Ambiguity
Approaching ambiguous situations with systematic thinking rather than panic. SRE work frequently involves debugging complex systems where the root cause is not obvious initially. Share examples where you faced unclear problems, how you gathered information systematically, formed hypotheses about root cause, tested them, and eventually solved the issue. Show that you can handle not having all the answers and can navigate uncertainty methodically.
Practice Interview
Study Questions
Collaboration and Communication Skills
Ability to work effectively with teammates: asking for help when stuck, explaining ideas clearly and patiently, listening to others, receiving feedback gracefully, and contributing to team discussions. SRE work is inherently collaborative—you work with developers, other SREs, and operations teams across functions. Share examples where you collaborated to solve problems, communicated technical concepts clearly to different audiences, or helped teammates understand something they struggled with.
Practice Interview
Study Questions
Learning Ability and Growth Mindset
Demonstrating that you actively learn new technologies, frameworks, and concepts. For entry level, this is often more important than current expertise. Share examples of technologies you have learned independently, challenges you overcame by researching and experimenting, and how you approach unfamiliar systems systematically. Show curiosity: asking questions, reading documentation, seeking mentorship from more experienced people. Demonstrate that you are not afraid of 'I do not know' but instead treat it as a learning opportunity.
Practice Interview
Study Questions
Frequently Asked Site Reliability Engineer (SRE) Interview Questions
You need to track a boolean flag (or a small set of category memberships) for millions of entities, and support fast set operations like 'find everyone with flag A and flag B'. Compare a bitset/bitmap representation against a hash set of IDs on memory footprint and the cost of those set operations.
Sample Answer
Direct answer
For a boolean flag (or a small set of category memberships) tracked across millions of entities, a bitset (one bit per entity per flag, packed into a flat array of machine words) beats a hash set of member IDs on both memory and multi-flag query cost whenever a meaningful fraction of entities actually carry the flag. A hash set only wins when the flag is genuinely sparse, since its memory scales with the number of members, not the population size.
Structured elaboration
Bitset representation: N entities need N/8 bytes flat (1 bit per entity), addressed directly by entity index. "Has flag A and flag B" becomes a single bitwise AND across the two byte arrays, one machine word at a time (e.g. 64 bits = 64 entities per instruction) - the work is O(N) bits total, but with a tiny constant factor, since it's pure word-parallel ALU work with no hashing and no pointer chasing.
Hash set representation: only the entities WITH the flag are stored, each as (say) an 8-byte id plus hashing/bucket overhead; a reasonably tuned open-addressing set needs load-factor slack and per-slot metadata on top of the raw id, so assume roughly 24 bytes per entry all-in as an illustrative estimate. Total memory is then k⋅b where k is the member count and b the per-entry byte cost, independent of N. "A and B" becomes an intersection of two hash sets: O(min(|A|, |B|)) hash lookups into the larger set - cheap when both sets are small, but each lookup costs a hash computation and a probe, not a single ALU instruction.
Break-even point:
bitset byteshash set byteskbreak=8N≈k⋅b=8bNSparse middle ground: compressed bitmap formats (such as Roaring bitmaps) adaptively switch between array, bitmap, and run-length containers per chunk of the index range, approaching hash-set-sized memory when a flag is sparse and raw-bitset speed when it's dense, at the cost of extra implementation complexity and a small per-operation overhead versus a flat bitset.
The same idea, one level down (folding the game-engine collision-layer case): a per-entity collision-layer bitmask (up to 64 layers) is the identical idea with the axes swapped. Instead of one bitmap spanning the whole population for each flag, each individual entity carries its own fixed-width integer, where a single 64-bit word covers up to 64 category bits, and two entities' membership overlap becomes one AND across those two words, rather than a hash lookup on either side.
Worked example
Plugging concrete numbers into the break-even formula above:
N = 100_000_000 # total entities
b = 24 # assumed bytes per hash-set entry (8-byte id + ~16 bytes overhead)
bitset_bytes = N / 8
breakeven_k = bitset_bytes / b
breakeven_fraction = breakeven_k / N
print(f"bitset size: {bitset_bytes:,.0f} bytes")
print(f"breakeven k (members): {breakeven_k:,.0f}")
print(f"breakeven fraction of N: {breakeven_fraction:.6f} ({breakeven_fraction*100:.4f}%)")
Output:
bitset size: 12,500,000 bytes
breakeven k (members): 520,833
breakeven fraction of N: 0.005208 (0.5208%)
So with these assumptions, a hash set is smaller only while fewer than about 0.52% of the 100 million entities carry the flag; past that density, the flat bitset is both smaller AND cheaper to query.
The per-entity collision-mask version of the same idea:
LAYER_PLAYER = 1 << 0
LAYER_ENEMY = 1 << 1
LAYER_TERRAIN = 1 << 2
entity_mask = LAYER_PLAYER | LAYER_TERRAIN
other_mask = LAYER_ENEMY | LAYER_TERRAIN
collides = (entity_mask & other_mask) != 0 # shares the "terrain" layer bit
print("collision check (shared layer bit set):", collides)
Output:
collision check (shared layer bit set): True
Whether the "many entities x few flags" bitset lives on the population axis (feature flags) or the "one entity x many categories" bitmask lives on the per-object axis (collision layers), the payoff is the same O(1) word-parallel membership or overlap test instead of a hash lookup.
Trade-offs & pitfalls
- A bitset needs entities to have small, dense, stable integer indices; if entity IDs are sparse (e.g. UUIDs), you need an id-to-dense-index table regardless, which itself costs memory a hash set skips.
- Bitset updates (flip a flag) are O(1) but require already knowing the entity's index; hash set add/remove is also O(1) average, with a higher constant cost from hashing and resize amortization.
- Iterating "give me every entity with flag A" requires a bit-scan over the bitset (fast, but not free); a hash set hands you the member list directly at no extra cost.
- Reaching for a hash set out of habit on a flag that is actually dense (say 40% of entities) wastes memory relative to a bitset AND makes multi-flag boolean queries meaningfully slower.
- Compressed bitmaps trade a little per-operation overhead for adapting automatically across the sparse/dense spectrum, which pays off once you have many flags of very different densities rather than hand-picking bitset vs. hash set per flag.
A production terraform plan shows an unexpected destroy on a critical database. You're the on-call SRE. What do you do in the next five minutes, and how do you make sure it doesn't happen again?
Sample Answer
Direct answer
Don't apply. In the next five minutes: stop or cancel the pipeline run, lock state so nobody else can apply either, and tell the team what you're looking at. Then, before touching anything else, diff the plan's reasoning against the last known-good state and recent changes (commits, variable/tfvars edits) to find out why Terraform thinks it needs to destroy that resource, since the fix depends entirely on the cause: a rename needs a state move, a genuinely stale resource needs an import, an unintended change needs to be reverted, not applied around.
In the next five minutes
- Stop the change. Cancel the running CI/CD job or any in-progress
terraform apply. If the backend supports locking (S3 + DynamoDB, Terraform Cloud), confirm or extend the lock so nobody else's job can slip in while you investigate. - Communicate early, even without a root cause yet. Post in the incident channel: which plan, which resource, that the rollout is paused. Silence while you investigate reads worse than an honest "found a destroy on the prod DB in the plan, holding it, digging in."
Root-causing before touching anything
- Re-run and capture the plan as data:
terraform plan -out=planfile && terraform show -json planfile | jq .to see exactly which attribute or resource-address change is driving the destroy, not just the summary line. - Compare state to the live resource:
terraform state show module.db.aws_db_instance.exampleagainst the actual console/CLI describe output (aws rds describe-db-instances), checking identifiers and tags line up with what the plan assumes. - Check recent changes: PRs and commits that renamed a resource, moved it between modules, changed
count/for_each(afor_eachkey disappearing from the map is a classic silent-destroy trigger), or changed alifecycleblock. Also check pipeline variable files and any remote variable store for a changed value, a variable change can trigger the same destroy as a code change, without a code diff to review. - Check provider/plugin versions: an unexpected provider upgrade can change how a resource's identity is computed and make Terraform think an existing resource needs replacing.
Safe remediation paths
If the destroy is unintended, prefer fixes that don't touch the resource at all over any kind of apply:
lifecycle { prevent_destroy = true }on the resource, as an immediate, non-destructive guard while the real fix is worked out.terraform state mv, if the resource just lost its correct address (a rename or a move between modules):terraform state mv module.old.aws_db_instance.example module.db.aws_db_instance.example.terraform import, if Terraform genuinely lost track of an existing resource:terraform import module.db.aws_db_instance.example db-identifier.
Only after one of these fixes is in place do you re-plan (expecting zero destroys on the critical resource) and apply that reviewed plan, with sign-off from whoever owns the database.
If the apply already went through
Sometimes you're not looking at a plan, you're looking at the aftermath: an apply already ran, and an incorrect variable value (a promoted staging tfvars file, or a pipeline variable that quietly changed) already removed production database read replicas. The response changes because you can no longer prevent the change, only limit the damage and communicate honestly:
- Communicate immediately and specifically. Tell the on-call lead, the database owners, and any affected service teams what was destroyed, when, and the current customer-facing impact, before you have a full root cause. An early "replicas X and Y are gone, primary is intact, investigating" beats an hour of silence.
- Check the primary first. Replicas are usually rebuildable without data loss if the primary is untouched; confirming that changes how urgent everything downstream is.
- Recover: rebuild replicas from the primary through the normal provisioning path, or restore from the most recent backup/snapshot if the primary was also affected. Do not run
terraform applyagain until the incorrect variable value is identified and fixed, re-applying blind risks recreating the exact same destroy. - Change the process, not just the review habits. The trigger here was a variable value, not a code change, so "review PRs more carefully" doesn't cover it. Add an automated policy check (OPA/Sentinel, or a CI plan-scanner) that blocks any plan containing a destroy of a resource tagged something like
criticality = prod-data, regardless of whether the destroy came from a code change or a tfvars/pipeline-variable change, and require a second, explicit approval for that class of plan specifically.
Trade-offs and pitfalls
- The instinct to "just fix it fast" by re-running
applyis exactly backwards here, an apply that repeats the same unexplained destroy is the single worst outcome; a paused pipeline is recoverable, a second destroy usually isn't. prevent_destroyandstate mv/importare non-destructive by design, prefer them over any apply until you understand the cause; only apply once the plan shows zero unexpected destroys.- Coordinate with the change's author before assuming malice or a bug, sometimes the destroy is intentional (a deliberate re-provisioning) and the real gap was that it wasn't flagged as high-risk before merge.
- Close the loop with a blameless postmortem: timeline, root cause, the specific process or guardrail change, an owner, and a deadline, not just "we'll be more careful."
Your team keeps getting paged at 2 a.m. for a disk space alert that clears itself ten minutes later before anyone can act on it. How would you redesign the alert so it stops paging on transient spikes but still catches real capacity problems?
Sample Answer
Direct answer
A threshold that fires on a single instantaneous sample is the root problem: it reacts to noise, not to a sustained condition. The fix is to require the condition to hold for a minimum duration meaningfully longer than the known false-alarm's own duration before it pages, and to separate "worth looking at during business hours" from "wake someone up," instead of treating every threshold breach as page-worthy.
Structured elaboration
Concretely:
- Change the check from "disk usage over 90% right now" to "disk usage over 90% for at least 15 consecutive minutes." Since this specific false alarm already resolves on its own in about ten minutes, the sustained window needs real margin past that, not a duration equal to it, or the same class of spike could still accidentally satisfy the rule.
- Add a second, lower-severity threshold, for example a ticket or a chat notification at 85% sustained for an hour, that goes to the team's queue instead of paging, so a genuinely slow leak still gets noticed before it becomes urgent.
- Use trend, not just level, where you can: usage climbing 5% per hour is a different problem than sitting flat at 91% for months on a disk that runs nearly full by design.
- Route the actual page only for the sustained, high-severity case, and route everything else to a lower-urgency channel with a runbook link, so on-call learns to trust that a page always means act now.
Worked example
A minute-by-minute simulation makes the trade-off concrete. Baseline disk usage sits at 70%. A transient spike jumps to 93% at minute 10, holds for exactly 10 minutes (matching the alert's own known pattern), and drops back to 71% at minute 20, nothing wrong. Separately, a real leak starts climbing 1% per minute from minute 30 onward and first crosses 90% at minute 49, staying above it from then on.
- Instant threshold (pages the moment any sample is at or above 90%): fires immediately at minute 10 for the spike, a false page, and fires again at minute 49 for the real leak. Across the run it fires on 42 separate minutes total.
- Sustained-15-minute threshold: never fires during the 10-minute spike, since 10 consecutive minutes does not reach the 15-minute bar. It does confirm the real leak, paging at minute 63, 15 consecutive minutes after the climb first crossed 90% at minute 49, a 14-minute detection delay traded for silencing the known false-alarm pattern with real margin.
That 14-minute delay is the actual cost of the redesign. If this were a volume that could fill from 90% to 100% faster than that under a genuinely fast leak, a flat 15-minute duration would be too slow and would need shortening or pairing with a rate-of-change check instead.
Trade-offs and pitfalls
- A "for" duration trades detection speed for noise reduction: too short and you are back to paging on spikes, too long and a genuine fast fill (a runaway log during an incident) eats into your response time. Size the duration to the fastest realistic growth rate you actually need to catch in time.
- Static percentage thresholds do not generalize across disks of very different sizes; 90% full on a 20 TB data volume is very different headroom than 90% on a 20 GB boot volume. Consider an absolute free-space floor in addition to a percentage.
- Silently raising the threshold to make the pages stop is the wrong fix and the most common mistake here; it just narrows the window before a real full-disk incident.
What the interviewer probes next
They will usually push on how you would gain confidence in a new duration setting before it goes live in production, and on how your same alerting policy needs to bend for a volume that is intentionally expected to run near full, like a cache tier.
Explain the end-to-end principle and how it shapes where functionality like retransmission, error checking, and encryption gets placed across network layers. Give one example where following the end-to-end principle strictly is the right call, and one example where placing a function in an intermediate device (not just the endpoints) is justified in practice.
Sample Answer
Direct answer
The end-to-end principle says that a function like reliability, error checking, or encryption should generally be implemented at the ENDPOINTS of a communication, not in the network in between, because only the endpoints have enough context to do it completely and correctly; anything the network attempts to do on the endpoints' behalf is, at best, redundant, and often incomplete.
Structured elaboration
The classic argument: even if a network device implements reliable delivery for its OWN hop (say, a link-layer retransmission scheme), the endpoints STILL need their own end-to-end reliability check, because failures can occur anywhere along the full path, including at the endpoints themselves (a corrupted disk write, an application bug), that no single intermediate hop's reliability mechanism can catch. Since the endpoints need to implement the full check anyway to cover the whole path, the intermediate hop's partial version becomes pure extra cost (complexity, latency, resource use) with no corresponding gain in actual end-to-end correctness. This is exactly the reasoning behind TCP's own design: reliability (retransmission, checksums) lives at the TRANSPORT layer, running on the two endpoints, not distributed piecemeal across every router the packet crosses.
Worked example
A case where following the end-to-end principle strictly is clearly the right call: end-to-end encryption. If confidentiality were instead implemented hop-by-hop (each link encrypting its own segment separately, decrypting and re-encrypting at every intermediate device), every single intermediate device becomes a point where the data is available in plaintext, and a single compromised or misconfigured hop breaks confidentiality for the WHOLE path. Only the endpoints encrypting directly to each other, with intermediate devices never possessing the ability to decrypt at all, gives a security guarantee that doesn't depend on trusting every device along the way.
A case where placing a function in an INTERMEDIATE device is justified, despite the end-to-end principle's default preference: a link with an unusually high, characteristic error rate (some wireless or satellite links) benefits from LOCAL link-layer retransmission on just that one hop, because retransmitting a single lost bit-pattern on the actual lossy hop is far cheaper (both in latency and in bandwidth) than always waiting for a full end-to-end retransmission across the ENTIRE path whenever that one link drops something. This doesn't replace the endpoints' own end-to-end mechanism (which must still exist to catch failures anywhere else along the path); it's a legitimate LOCAL optimization layered underneath it, not a substitute for it.
Trade-offs & pitfalls
The end-to-end principle is a strong DEFAULT, not an absolute law; the mistake is either applying it dogmatically (refusing any intermediate optimization, even ones that provide a real, complementary performance benefit on a specific problematic hop) or abandoning it too readily (letting the network take over a correctness-critical function like encryption or reliability entirely, on the mistaken assumption that "the network already handles that").
Tell me about a time your own personal values conflicted with how your manager or company wanted you to handle something. What did you do, and how did you resolve the tension?
Sample Answer
Direct answer
The situation I'd describe is a mid-sized project where my manager wanted me to present a set of results to a client as more conclusive than the underlying data actually supported, because the client relationship was under strain and a confident-sounding update would help. My personal value was straightforward accuracy in what I present, even when the more cautious version is less comfortable to deliver; my manager's approach prioritized relationship repair over precision in that specific moment. I did not treat it as a fight to win outright; I looked for a version of the update that was honest and still served the relationship.
Structured elaboration
- Name the actual tension precisely, not just "we disagreed." In this case it was not that my manager wanted me to lie; it was a difference in where to draw the line between appropriately confident communication and overstating certainty, which is a much more common and more defensible kind of workplace values conflict than an outright integrity violation.
- Raise the concern directly and early, privately, before the moment it would matter (the client meeting), rather than either silently complying or making it a public confrontation. I asked my manager one on one what specifically in the data supported the stronger framing, which turned the conversation from a disagreement about values into a conversation about evidence.
- Offer an alternative that serves the underlying goal your manager actually cares about. My manager's real goal was preserving the client relationship, not the specific wording; I proposed a version that led with the two results we were genuinely confident in, was transparent about the one metric still trending in the wrong direction, and paired it with a concrete next step and timeline. This served the relationship-repair goal without requiring me to overstate anything.
- Be honest about what you would do if the answer had been no. If my manager had insisted on the original framing after that conversation, my actual next step would have been to ask to attach a short written appendix with the caveated numbers, so the honest version existed in the record even if it wasn't the headline; if that had also been refused, I would have escalated to my manager's manager rather than either comply silently or refuse outright, because the stakes (client trust, and my own credibility if the caveated number surfaced later) were high enough to warrant it.
- Reflect honestly on what you learned, including about your own judgment, not only about the other person. I learned that raising the concern as a specific evidentiary question ("what supports this framing") got further, faster, than raising it as a values statement ("I'm not comfortable with this") would have, because it gave my manager something concrete to respond to.
Worked example
The client update, as originally proposed, said: "engagement is up and the rollout is on track." What the underlying data actually showed: two of three key metrics had improved meaningfully, but the third (a retention metric the client cared about specifically) had been flat to slightly down for three weeks running, with a plausible but unconfirmed hypothesis for why. The version I proposed and we ultimately sent said: "engagement and adoption are both up meaningfully this period; retention is currently flat, and we have identified a likely cause we're testing a fix for over the next two weeks, with a follow-up update once we have results." The client's actual reaction was more positive than my manager expected, specifically because the concrete next step read as more credible than an unqualified "on track" would have.
Trade-offs & pitfalls
The common failure in answering this question is picking an example that is really just "I disagreed with a decision," with no genuine values dimension, or the opposite extreme, an example so severe (fraud, safety, legal risk) that it reads as a one-time crisis story rather than the kind of ordinary, recurring tension this question is actually probing for. Another pitfall is describing the resolution as pure capitulation ("I raised it once, they said no, I dropped it") or pure martyrdom ("I refused and it cost me"), neither of which shows the judgment interviewers are actually testing for: the ability to find a version of the truth that serves both your own integrity and the legitimate underlying goal the other person had.
Explain idempotency in the context of operational automation and SRE scripts. Provide concrete examples of idempotent and non-idempotent operations, explain why idempotency matters for retries, scheduled jobs, and incident recovery, and list practical techniques (checks, CAS, temporary files, atomic renames) you'd use to make an automation idempotent.
Sample Answer
Direct answer
An operation is idempotent if running it once and running it N times leave the system in the same final state. For automation this matters enormously because scripts get re-run all the time -- by a retry, by a scheduler firing again after a crash, by an operator manually re-triggering a stuck job -- and if the operation isn't idempotent, a re-run doesn't just repeat the work, it corrupts the outcome.
Idempotent vs non-idempotent examples
- Idempotent:
UPDATE users SET status = 'active' WHERE id = 5(setting a value, not incrementing it); creating a file with fixed content via atomic write;PUTa resource with a full representation. - Non-idempotent:
INSERT INTO users (...) VALUES (...)with no uniqueness constraint (running it twice creates a duplicate row);UPDATE balance = balance + 100(running it twice adds 200); appending a line to a log file on every run (running it twice appends twice).
Why it matters for retries, scheduled jobs, and incident recovery
Retries only make sense as a resilience mechanism if re-attempting is safe -- otherwise every retry policy is trading 'might fail' for 'might silently double-apply,' which is worse. Scheduled jobs re-run on a fixed cadence regardless of whether the previous run's outcome is known, so if a job's own idempotency isn't guaranteed, a scheduler firing twice in quick succession (or a manual re-trigger after an ambiguous failure) can duplicate side effects. During incident recovery specifically, the person fixing things is often re-running a script under time pressure without being 100% sure the first run completed -- an idempotent script means 're-run it and see' is a safe troubleshooting step rather than a gamble.
Practical techniques
- Check-before-act: verify current state before mutating (does the user already exist? is the directory already present?) and skip if the desired state is already true.
- Compare-and-swap (CAS) / conditional writes: mutate only if the current value matches an expected prior value (an ETag check, a
WHERE version = Nclause), so a concurrent or repeated write can't silently clobber a change made in between. - Temporary files + atomic rename: write new content to a temp file, then
os.replace()/mvit into place -- the rename is atomic at the filesystem level, so a crash mid-write never leaves a half-written file for a re-run to see.
Worked example: package install and user account creation
Installing a package idempotently means checking 'is this package already at the target version' before running the installer, not blindly re-running apt install (which is itself usually idempotent, but a custom install script that unconditionally downloads-and-extracts is not -- a re-run mid-network-blip can leave a half-extracted package that the next run needs to detect and clean up, not just retry blindly on top of). Creating a user account idempotently means checking 'does this user already exist with these group memberships' before calling useradd, because a bare re-run of useradd bob on an already-existing bob fails loudly (which is actually the SAFE failure -- the dangerous version is a custom account-provisioning script that does useradd then unconditionally appends group memberships on every run, silently accumulating group memberships across genuinely legitimate re-runs rather than converging to a fixed desired-state list). Common pitfalls that break idempotency in practice: race conditions (two concurrent runs both pass the check-before-act check before either acts), partial failures (a crash between step 2 and step 3 of a 3-step operation leaves state a re-run doesn't correctly recognize as 'partially done'), and destructive cleanup steps (a re-run that deletes-then-recreates rather than checking-then-updating, which turns a benign re-run into a brief outage window every single time).
Trade-offs and pitfalls
The most common mistake is treating idempotency as binary (a script either 'is' or 'isn't' idempotent) rather than as a property that has to be verified for EACH distinct side effect a script has -- a script can correctly no-op on its main file write while still, say, unconditionally appending a log line on every run, making it only partially idempotent in a way that's easy to miss in review. Edge case: an operation that's idempotent under normal conditions can stop being idempotent under a specific failure mode (a crash between two of its steps) if those steps aren't ALSO individually and jointly idempotent -- idempotency has to be verified end-to-end, not just for the common-path run.
You receive three alerts at once: a public API returning errors to a fifth of users, a payment service with a small but high-value failure rate, and a non-critical nightly batch job failing. Decide which you respond to first and in what order, and justify the ranking using impact, scope, and business criticality. Describe your first concrete action on the top-priority item.
Sample Answer
Direct answer
Of the three, I'd respond to the payment failures first, then the public API errors, then the batch job. The payment failures affect a small percentage but include high-value customers and touch money directly, which makes the per-incident cost disproportionately high even at low volume. The API errors affect a much larger share of users (a fifth), which makes them close behind despite lower per-user stakes. The batch job failing on non-critical reports has the lowest urgency because nothing customer-facing depends on it in the next few minutes.
Structured elaboration
Prioritization among simultaneous alerts should weigh three factors together, not any one alone:
- Impact per affected user. A failed payment is a much sharper failure than a slow page load; money and trust are on the line in a way that compounds if it isn't caught quickly.
- Scope. How many users or how much revenue is actually affected right now, not how loud the alert is. A noisy alert with low real impact should never outrank a quiet one with high impact.
- Business criticality and reversibility. Some failures get worse the longer they run (money moving incorrectly, data corrupting further); others are simply delayed (a report that's a few hours late is annoying but recoverable).
A good way to communicate this under pressure: state the ranking and the one-line reason out loud or in the incident channel immediately, then explicitly assign or acknowledge who is covering the lower-priority items so they aren't silently dropped, even while you focus on the top one.
Worked example
For the three alerts given: payment failures affecting 1% of transactions, including high-value customers, go first, because even a small volume of incorrect financial outcomes needs immediate first-action (typically confirming whether payments are failing safely, i.e., not charging without fulfilling, versus failing unsafely). Second, the public API 5xx errors affecting 20% of users across regions, because the sheer scope makes it the next highest-impact item even though each individual failure is less severe than a payment error. Third, the internal nightly batch job, which is deprioritized to 'someone will pick this up after the first two are stable' since it affects no external users right now. First concrete action on the payment issue: check whether failures are being safely rejected (no charge, clear error to the user) or unsafely processed (charge succeeds but order fails), since that distinction determines whether this needs an urgent stop-the-bleeding action or can tolerate a few more minutes of investigation.
Trade-offs and pitfalls
A common pitfall is anchoring on whichever alert is loudest or has the highest raw volume, rather than the one with the highest actual business impact; a batch job failing nightly can generate more page noise over time than a rare but severe payment issue. Another pitfall specific to this pattern: sometimes a single root cause produces what looks like several simultaneous alerts (a bad deploy triggering a flood of unrelated-looking alerts across a fleet), and prioritizing them as independent problems wastes time that a single fix would resolve; it's worth a quick check for a shared root cause before treating three alerts as three separate incidents. At a higher level, a manager juggling multiple simultaneous incidents across teams faces the same decision with an added dimension: whether the aggregate is severe enough to formally declare a larger, cross-team incident rather than three parallel smaller ones.
Leadership asks you to explain, in non-technical terms, why maintaining two active data centres increases cost but reduces user-visible downtime. Give a short explanation with a simple numeric example illustrating the trade-off between cost and minutes of downtime per year.
Sample Answer
Direct answer
Running two active data centres means duplicating the infrastructure that serves users, so if one site fails, the other keeps serving with little to no interruption. That duplication raises fixed costs (hardware, networking, and the ongoing work of keeping both sites synchronized and tested), in exchange for far less user-visible downtime, because a failure that would take a single-site setup fully offline gets absorbed by the second site instead.
Structured elaboration
- Define the trade-off in plain terms first, before any numbers: it is duplicated cost bought to avoid duplicated failure. "Availability" here just means the percentage of the year the service was actually reachable.
- Make the trade-off concrete with a numeric example (below), because "increases cost but reduces downtime" is true of almost any resilience investment and doesn't help leadership decide if this specific one is worth it.
- Note diminishing returns. Going from a single site to two active sites buys a large downtime reduction for a moderate cost increase. Pushing further, from four nines to five nines, typically costs disproportionately more for a much smaller absolute gain, so the decision should track business impact per minute, not availability percentage for its own sake.
- Two format variants worth knowing. The same numeric framing works as a short memo to executives requesting an SLO increase: state the change and its downtime-and-dollar consequence in the first two sentences, then put the derivation below as supporting detail. It also works, largely unchanged, when the audience is an external client evaluating your reliability commitments rather than internal leadership, the difference is that you're now translating into an SLA commitment they can hold you to, not just an internal budget ask.
Worked example
Say a single data centre gets the service to 99.9% availability. A year has 525,600 minutes, so the downtime is 525,600 x (1 - 0.999) = 526 minutes a year (about 8.75 hours), at a cost of $1.0M a year.
A second active site raises availability to 99.99%: 525,600 x (1 - 0.9999) = 53 minutes a year, at a cost of $1.6M a year.
That's 526 - 53 = 473 minutes of downtime avoided for an extra $600k a year, or about $1,270 for every minute of downtime avoided (600,000 / 473 ≈ 1,270). Leadership can weigh that against what a minute of downtime actually costs the business (lost revenue, support load, customer trust) to judge if the trade is worth it.
When business and engineering are in the same room (a consistency-model version of this same trade-off), layer the explanation instead of picking one level: open with the plain-language framing everyone can hold ("does an update show up everywhere instantly, or does it catch up a moment later"), then, once that lands, add one sentence naming the actual mechanism for the engineers in the room, eventual consistency versus strong consistency, so nobody is bored or lost at the same time.
Trade-offs & pitfalls
The cost-per-minute figure is a useful summary, but it's a simplification: not all minutes cost the same (an outage during checkout hours costs far more than one at 3am), and the model should say so rather than imply a flat rate. A second pitfall: two data centres do not eliminate all downtime, correlated failures (a bad config pushed to both sites, a shared upstream dependency) can take both down together, so "two sites" is risk reduction, not risk elimination, and that caveat belongs in the leadership conversation, not just the postmortem.
You are on a production server where curl http://localhost:8080 returns 'connection refused', but the application process reports as 'running'. Outline a systematic set of troubleshooting steps using ss, lsof, systemctl, journalctl, firewall checks, and SELinux/AppArmor to find the root cause.
Sample Answer
Start by clarifying goal: curl to localhost:8080 is refused though process is “running”. Work top-down from network stack to OS controls.
- Confirm process & PID
- ps aux | grep <app> — verify PID, user, full command. Reason: ensure you're inspecting correct process.
- Check listening sockets with ss
- ss -ltnp | grep :8080
- ss -ltnp | grep <PID>
If no listener on 0.0.0.0:8080 or ::1, app may not have bound or crashed after forking. If bound only to 127.0.0.1 but you curl via different interface, connection refused.
- Use lsof to map FD -> socket and files
- lsof -Pan -p <PID> -iTCP -sTCP:LISTEN
- lsof -i :8080
This shows the exact FD, bound address, and whether the socket is owned by expected binary.
- Verify service manager state
- systemctl status <service> --no-pager
Look for restart loops, ExecStart args, unit overrides, or different ports configured via environment files (check /etc/systemd/system/<svc>.d/).
- Check recent logs
- journalctl -u <service> -e --no-pager
- journalctl -k or /var/log/messages for kernel errors
Look for binding errors (EADDRINUSE, EACCES), permission denials, or segfaults.
- Test connectivity locally and from other hosts
- curl -v --interface lo http://127.0.0.1:8080
- curl -v http://127.0.0.1:8080
If local loopback works but other interfaces fail, binding scope is likely the issue.
- Firewall checks
- iptables -L -n -v | grep 8080
- nft list ruleset
- firewall-cmd --list-all (on RHEL/CentOS)
Confirm rules aren’t rejecting or dropping connections; note that "connection refused" is TCP RST — usually app or kernel, not firewall DROP.
- SELinux/AppArmor
- For SELinux: getenforce; ausearch -m avc -ts recent or journalctl | grep AVC
- For AppArmor: aa-status; journalctl | grep apparmor
An SELinux denial can prevent binding to privileged ports or accessing files; AVC messages show denials.
- Port collision and socket reuse
- ss -tanp | grep 8080 to see if another process owns port
- Check TIME_WAIT or sockets in CLOSE_WAIT indicating prior crashes
- Configuration drift
- Inspect app config / env files used by systemd unit (EnvironmentFile=)
- Confirm port value matches what's being bound
- Reproduce safely and remediate
- If mis-bound, update config and systemctl restart <service>
- If SELinux blocked, temporary setenforce 0 to test, then create proper policy via audit2allow
- If firewall blocked, add rule or adjust zone
- If another process holds port, stop it or change ports
- Post-incident
- Add liveness checks, bind-address validation, and alerting on listen-state
- Document root cause and fix (service config, SELinux policy, firewall rule, or bug)
Rationales: ss/lsof identify binding; journalctl/systemctl give process intent and errors; firewall/SELinux explain external policy rejections. Combine outputs to pinpoint whether refusal is app-level (not listening or listening on different address), OS-level (permissions, collisions), or network-policy level.
Behavioral/Leadership: As an SRE lead, describe a time (or hypothetical approach) when you had to make a trade-off between performance tuning and system reliability. What stakeholders did you involve, how did you measure risk, and how did you communicate the final decision and its rationale?
Sample Answer
Situation: On a high-traffic service I owned, the product team planned to roll out a new real-time analytics feature that dramatically increased CPU and memory usage per request. Early canary tests showed 30% higher tail latency and risked breaching our 99.9% availability SLO during peak traffic.
Task: As SRE lead I had to decide whether to push for aggressive performance tuning (optimizations and increased concurrency) to meet product latency goals now, or prioritize reliability (rate-limit/circuit-break the feature, add staging rollout) while we engineered safer optimizations. The trade-off: faster user value vs higher risk of widespread incidents.
Action:
- Gathered stakeholders: product manager (feature priorities), engineering owners (code changes), infra team (capacity/cost), on-call SREs, and security (resource isolation).
- Framed decisions around measurable SLIs: p99 latency, error rate, CPU saturation, and error-budget burn rate. Ran load tests to quantify impact and modeled failure scenarios to estimate blast radius.
- Defined options and risks in a decision document (decision matrix): (A) full rollout with aggressive tuning (faster delivery, high risk to SLO), (B) staged rollout + feature-flag + strict rate limits (slower delivery, low risk), (C) rewrite with caching (longer term, high engineering cost, low risk).
- Chose option B: staged rollout with tight rate limits and enhanced monitoring while allocating a small engineering squad for focused optimizations. I set guardrails: stop rollout if error budget consumption exceeded 10% in one hour or p99 latency rose >20%.
- Communicated via a short executive summary + technical annex: rationale, quantified risks, rollback criteria, runbook for on-call, and timeline. Shared dashboards (real-time SLI panels) with stakeholders and scheduled daily syncs during rollout.
Result: The staged rollout delivered initial user value without breaching SLOs; error budget burn remained below thresholds. The optimization sprint reduced per-request CPU by 25% over six weeks, enabling broader rollout with acceptable cost. Stakeholders remained aligned because decisions were data-driven and reversible.
Learning: Anchor trade-offs to SLIs/SLOs and error budgets, involve all affected stakeholders early, make decisions reversible with clear stop-criteria, and communicate both the quantitative risk assessment and operational playbook so engineering and business teams can move confidently.
Recommended Additional Resources
- LeetCode - Practice easy and medium difficulty coding problems, focusing on data structures and algorithms patterns relevant to automation and system operations
- System Design Primer (GitHub repository) - Excellent resource for understanding distributed systems basics and reliability concepts appropriate for entry level
- Linux Administration Handbook by Nemeth, Snyder, and Hein - Comprehensive reference and explanation of Linux systems and administration concepts
- The Site Reliability Workbook published by Google - Practical exercises, real-world scenarios, and guidance on SRE practices and reliability engineering
- High Performance Browser Networking by Ilya Grigorik - Deep understanding of networking, performance, and latency issues relevant to reliability work
- Cracking the Coding Interview by Gayle Laakmann McDowell - Interview preparation strategies, data structures, and algorithm practice resources
- Company Tech Blogs and Engineering Posts - Read Google Cloud Blog, AWS Architecture Blog, Meta Engineering Blog, Netflix Technology Blog to learn how FAANG companies approach reliability at scale
- Public Incident Postmortems - Study postmortems from Stripe, GitHub, Datadog, and other companies to understand failure analysis and root cause investigation patterns
- Terraform Documentation and Tutorials - Hands-on experience with infrastructure-as-code concepts and tools
- Kubernetes Official Documentation - Understanding container orchestration and deployment concepts
- Interactive Linux Practice - Practice on your own Linux system, cloud VM, or platforms like Linux Academy with hands-on labs and scenarios
- Prometheus and Grafana Official Documentation - Understanding modern monitoring stacks and observability architectures
- CloudAcademy and A Cloud Guru - Online platforms offering hands-on labs and tutorials for cloud, systems, and SRE skills
Search Results
Azure Site Reliability Engineering Interview Questions - YouTube
... basic to advanced and scenario-based questions to help you clear SRE Azure engineer interview. Below are the concepts we covered in this video on Top 30 ...
So You Want to Be an SRE? - Vishakha Sadhwani
Role, skills, salary, AI impact and a downloadable interview guide!! · Explain SLIs/SLOs/SLAs and give real-world examples · Deep-dive on monitoring/observability ...
Top 50+ Software Engineering Interview Questions and Answers
8. Distinguish between Alpha and Beta Testing? ; Alpha testing is performed at the developer's site. Beta testing is performed at the end-user, the of the ...
Google Software Engineer Early Career Interview Questions [2024]
How would you design Google's database for web indexing? What approach would you take when designing a task scheduling system? How would you design Google Home ...
20 Common System Design Interview Questions (With Sample ...
Prepare for your next interview with these 20 common system design interview questions, complete with sample answers to help you ace the interview process.
30+ Software Engineer Interview Questions: What to Expect & How ...
Common Software Engineer Interview Questions ; Experiential · Explain to me your toughest project and the working architecture. What have you built? ; Hypothetical.
Top 110+ DevOps Interview Questions and Answers for 2026
Here are some of the most common DevOps interview questions and answers that can help you while you prepare for DevOps roles in the industry.
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