J.P. Morgan Senior DevOps Engineer Interview Experience: 19 Scenario-Based Questions for a ₹22 LPA Role 🚀
Company: J.P. Morgan
Role: Senior DevOps Engineer
Compensation: ₹22 LPA
Interview Rounds: Round 1 & Round 2, Technical Deep Dive
Focus Areas: Azure, AKS, Kubernetes, Jenkins, CI/CD, Terraform, DevSecOps, Observability, Disaster Recovery, and Production Troubleshooting
Introduction: Senior DevOps Interviews Are About Decisions, Not Definitions
Imagine you’re working as a Senior DevOps Engineer in a banking environment.
A production application starts returning HTTP 502 errors. Half of your canary deployment is failing. Your Kubernetes pods appear healthy, but customers are experiencing delays. Meanwhile, your deployment pipeline takes 40 minutes to release a small configuration change.
Your engineering manager asks a simple question:
“What is happening, how will you prove it, and how will you prevent it from happening again?”
This is where senior-level DevOps interviews become different.
Knowing what Kubernetes, Terraform, Jenkins, Azure Application Gateway, or Prometheus does is only the starting point. Interviewers want to understand how you investigate production failures, make decisions under pressure, protect customer transactions, and design systems that recover safely.
For a banking organization, these decisions matter even more. Availability, security, auditability, data integrity, and controlled change management are not optional extras.
In this article, we’ll work through 19 scenario-based questions using a consistent interview preparation format:
🧠 Simple Concept: Understand the problem in plain English.
❓ Why Do We Need It? Understand the business and engineering impact.
⚙️ How Does It Work? Break down the technical approach.
🏢 Production Example: Connect the answer to a realistic production environment.
💻 Commands / Configuration: Learn the commands or configuration that support your answer.
🚨 Common Interview Trap: Avoid answers that sound good but fail in production.
🎯 Candidate-Style Answer: Learn how to communicate your reasoning confidently.
The goal isn’t to memorize 19 scripts. It’s to develop a repeatable way to solve problems like a Senior DevOps Engineer.
Section 1: Kubernetes, Production Troubleshooting, and CI/CD
Question 1. Your application on Azure Kubernetes Service (AKS) fails health checks randomly. How do you debug it end-to-end?
🧠 Simple Concept
A health check tells Kubernetes whether an application is running correctly and whether it should receive traffic.
AKS applications commonly use three types of probes:
Liveness probe: Determines whether a container needs restarting.
Readiness probe: Determines whether a pod can receive traffic.
Startup probe: Gives a slow-starting application time to initialize.
Random failures can come from resource pressure, application startup delays, dependency failures, incorrect probe configuration, network problems, or node-level issues.
❓ Why Do We Need It?
Incorrect health checks can cause healthy applications to restart repeatedly or unhealthy applications to continue receiving traffic.
In a banking application, this can turn a minor performance problem into a customer-facing outage.
⚙️ How Does It Work?
Follow the request path and collect evidence at each layer.
Step 1: Check pod status and recent restarts.
kubectl get pods -n production -o wide
kubectl describe pod <pod-name> -n production
kubectl get events -n production \
--sort-by=.metadata.creationTimestampLook for failed probes, OOMKilled, scheduling problems, image failures, and node changes.
Step 2: Inspect application logs.
kubectl logs <pod-name> -n production
kubectl logs <pod-name> -n production --previousThe --previous flag is useful when the container has restarted and you need its previous container logs.
Step 3: Check resource consumption.
kubectl top pods -n production
kubectl top nodesInvestigate CPU throttling, memory pressure, node saturation, and resource requests and limits.
Step 4: Verify probe configuration.
startupProbe:
httpGet:
path: /health/startup
port: 8080
periodSeconds: 10
failureThreshold: 30
readinessProbe:
httpGet:
path: /health/ready
port: 8080
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: /health/live
port: 8080
periodSeconds: 10
failureThreshold: 3These values are examples, not universal production defaults. Set thresholds according to measured startup and recovery times.
Step 5: Check dependencies and networking.
Verify database connectivity, DNS resolution, service endpoints, network policies, ingress health, and downstream timeouts.
🏢 Production Example
Suppose an AKS application needs 45 seconds to initialize after a restart, but its liveness probe begins failing after 15 seconds.
Kubernetes repeatedly restarts the application before initialization finishes.
A properly configured startup probe can prevent those premature restarts. If the application still fails, inspect the underlying startup dependency rather than simply increasing every timeout.
🚨 Common Interview Trap
Increasing the liveness probe timeout without investigating the root cause.
A longer timeout may hide a real dependency failure, CPU starvation, or memory leak.
🎯 Candidate-Style Answer
“I would start by determining whether the failures are caused by Kubernetes restarting the container, the readiness probe removing it from service, or the application itself becoming unhealthy. I would inspect pod events, previous logs, resource metrics, probe configuration, and node health. Then I would trace the request through the Kubernetes Service, ingress, and downstream dependencies. Once I identify the root cause, I would fix it, validate recovery under load, and add monitoring to detect recurrence.”
Question 2. During a production canary deployment, half the traffic returns HTTP 502 while the remaining requests succeed. How do you troubleshoot it?
🧠 Simple Concept
A canary deployment routes a portion of production traffic to a new application version while the existing version continues serving users.
HTTP 502 usually means a gateway or proxy received an invalid response from an upstream server or could not complete the upstream exchange correctly.
The first question is whether the failures are correlated with the new version, a particular backend, or a specific traffic path.
⚙️ How Does It Work?
Step 1: Stop increasing canary exposure.
If the failure rate is above the deployment’s agreed threshold, pause the rollout and follow the established rollback policy.
Step 2: Compare stable and canary versions.
Check error rates, latency, pod readiness, resource usage, application logs, and dependency failures separately for both versions.
Step 3: Inspect the traffic-routing layer.
Depending on the architecture, investigate:
Azure Application Gateway or ingress controller logs.
Kubernetes Service selectors and EndpointSlices.
Canary routing weights and backend health.
Target port mismatches.
TLS settings, connection resets, and upstream timeouts.
kubectl get svc -n production
kubectl get endpointslices -n production
kubectl get pods -n production --show-labels
kubectl describe ingress -n productionUse the commands relevant to your actual ingress and traffic-management setup.
Step 4: Test each backend independently.
Send requests to stable and canary backends where access permits. Compare response codes and latency.
Step 5: Roll back if the canary violates the release policy.
Investigate whether the problem comes from application compatibility, bad routing, insufficient capacity, configuration differences, or an incompatible downstream dependency.
🏢 Production Example
The stable version supports a database field as optional, but the canary version assumes that field always exists.
Requests routed to the canary fail while requests routed to the stable version succeed.
The correct response is to stop the rollout, preserve diagnostic evidence, restore stable service, and correct the compatibility issue.
🚨 Common Interview Trap
Assuming that a 50% failure rate means the canary’s traffic weight is wrong.
A routing configuration may be working exactly as intended. The new version may simply be failing consistently.
🎯 Candidate-Style Answer
“I would pause the canary rollout and compare error rates between the stable and canary versions. I would correlate failed requests with version, backend, route, and timestamp. Then I would inspect gateway logs, backend health, Service endpoints, application logs, and dependency compatibility. If the release exceeds our error budget or rollback threshold, I would restore the stable version and investigate the failure using traces and deployment evidence.”
Question 3. Your CI/CD pipeline takes 40 minutes to deploy a small change. How would you optimize it?
🧠 Simple Concept
Pipeline optimization means reducing unnecessary waiting and repeated work without compromising testing, security, or release reliability.
A 40-minute pipeline might spend most of its time downloading dependencies, building containers, running duplicate tests, scanning images, waiting for approval, or deploying components that have not changed.
⚙️ How Does It Work?
Start by measuring the pipeline rather than randomly removing stages.
Step 1: Establish a stage-by-stage baseline.
For example:
Dependency installation: 8 minutes.
Unit and integration tests: 12 minutes.
Image build: 8 minutes.
Security scans: 5 minutes.
Deployment and validation: 7 minutes.
These are illustrative numbers, not measured results from the interview.
Step 2: Optimize expensive stages.
Cache dependencies using lockfile-aware cache keys.
Use parallel execution for independent test suites.
Build only affected services in a monorepo.
Use Docker multi-stage builds and BuildKit caching.
Reuse immutable image digests between stages.
Run appropriate tests and security checks at the correct points.
Use efficient self-hosted or appropriately sized agents.
Avoid rebuilding the same artifact for each environment.
Step 3: Preserve release controls.
Never remove critical security scans or tests just to make the pipeline look faster.
Instead, eliminate duplication, improve cache hit rates, and parallelize independent tasks.
Step 4: Measure the result.
Track pipeline duration, cache hit rate, failure rate, deployment frequency, change failure rate, and time to recover.
💻 Example: Docker Build
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/htmlCopying dependency manifests before application source allows the dependency layer to be reused when only application files change, provided the cache remains valid.
🏢 Production Example
A microservices repository rebuilds all 25 services whenever one service changes.
Introducing change detection and dependency-aware builds allows the pipeline to test and build only affected components, while retaining integration tests for critical cross-service contracts.
🚨 Common Interview Trap
Optimizing for pipeline duration alone.
A five-minute deployment that regularly breaks production is worse than a reliable 15-minute deployment.
🎯 Candidate-Style Answer
“I would first identify which pipeline stages contribute most to the 40-minute duration. Then I would improve caching, parallelize independent tests, use incremental builds, eliminate duplicate artifact generation, and right-size runners. I would maintain security and quality gates, compare results against the baseline, and validate that the optimization does not increase deployment failures.”
Question 4. One Kubernetes pod shows high CPU usage, but its logs look clean. What do you investigate next?
🧠 Simple Concept
Clean logs do not mean a healthy application. CPU usage can increase because of excessive request volume, inefficient algorithms, garbage collection, retry loops, thread contention, or CPU throttling.
Logs report what an application chooses to record. Metrics and profiles reveal behavior that developers may not have logged.
⚙️ How Does It Work?
Step 1: Identify whether the CPU increase is isolated.
kubectl top pods -n production
kubectl top pod <pod-name> -n production --containersCompare CPU usage with requests, limits, traffic volume, and replica count.
Step 2: Inspect CPU throttling.
Use container metrics such as:
container_cpu_usage_seconds_totalcontainer_cpu_cfs_throttled_seconds_total
Metric availability and naming depend on the monitoring stack and runtime.
Step 3: Check application-level metrics.
Examine request rate, latency, queue depth, worker count, garbage-collection pauses, and downstream retries.
Step 4: Profile the application.
Use an appropriate profiler, such as a Java Flight Recorder for Java, a CPU profile for Go, or a Python profiler for Python.
Step 5: Check whether the workload is distributed evenly.
Look for uneven traffic, sticky sessions, partition hotspots, or a single replica receiving a disproportionate share of requests.
🚨 Common Interview Trap
Immediately increasing CPU limits.
That might relieve throttling, but it will not fix an infinite loop, an inefficient query, or uneven traffic distribution.
🎯 Candidate-Style Answer
“I would correlate CPU usage with traffic, latency, container limits, and application metrics. I would check throttling and then profile the process to identify the expensive code path. I would also investigate traffic imbalance and retry behavior. Based on the evidence, I would optimize the application, adjust resources, or scale replicas, then verify that CPU usage and latency improve together.”
Question 5. Design a highly available logging system for more than 100 microservices across three regions.
🧠 Simple Concept
A distributed logging platform collects, processes, stores, searches, and retains application and infrastructure logs from many services.
For three regions, the design must account for regional failures, network partitions, ingestion backpressure, access controls, and long-term retention.
⚙️ How Does It Work?
A practical architecture could look like this:
<box border radius=”lg” padding={3} gap={2}> <box background=”#172554” theme=”dark” radius=”md” padding={3} align=”center”> **100+ Microservices**
<text color="#FFFFFF" size="sm">Structured JSON logs with correlation IDs</text></box> <box align=”center”> <icon name=”arrow-down” size=”xl”/> </box> <box background=”#164E63” theme=”dark” radius=”md” padding={3} align=”center”> **Regional Collection Layer**
<text color="#FFFFFF" size="sm">OpenTelemetry Collector, Fluent Bit, or Azure Monitor Agent</text></box> <box align=”center”> <icon name=”arrow-down” size=”xl”/> </box> <box background=”#365314” theme=”dark” radius=”md” padding={3} align=”center”> **Durable Ingestion and Processing**
<text color="#FFFFFF" size="sm">Buffering, filtering, enrichment, retry and backpressure controls</text></box> <box align=”center”> <icon name=”arrow-down” size=”xl”/> </box> <grid columns={2} gap={2}> <grid-item> <box border radius=”md” padding={3} align=”center”> **Hot Storage**
<text size="sm">Searchable logs and incident investigation</text>
</box>
</grid-item>
<grid-item>
<box border radius="md" padding={3} align="center">
**Archive Storage**
<text size="sm">Azure Blob Storage with lifecycle policies</text>
</box>
</grid-item></grid> <box align=”center”> <icon name=”arrow-down” size=”xl”/> </box> <box background=”#713F12” theme=”dark” radius=”md” padding={3} align=”center”> **Observability and Security**
<text color="#FFFFFF" size="sm">Dashboards, alerts, audit trails, access policies and retention enforcement</text></box> </box>
Recommended technology choices:
Collection: OpenTelemetry Collector, Fluent Bit, or Azure Monitor Agent.
Central observability: Azure Monitor and Log Analytics, or a self-managed platform such as OpenSearch where justified.
Durable buffering: Azure Event Hubs or another regionally appropriate ingestion service.
Long-term retention: Azure Blob Storage with lifecycle management and appropriate immutability controls.
Alerting and dashboards: Azure Monitor, Grafana, or the selected platform’s native capabilities.
Design decisions to explain:
Keep collection resilient within each region.
Buffer logs during downstream outages.
Apply backpressure rather than allowing unlimited memory growth.
Avoid making application availability dependent on successful log ingestion.
Separate hot searchable retention from low-cost archive retention.
Use role-based access, encryption, redaction, and audit trails.
Define regional failover and recovery objectives explicitly.
🏢 Production Example
A regional logging backend becomes unavailable during a deployment surge.
Local collectors buffer a bounded amount of data and retry delivery. Applications continue operating because logging is not synchronously dependent on the central search platform. If the buffer fills, the system follows a documented drop, sampling, or spillover policy with alerts.
🚨 Common Interview Trap
Assuming that sending every log to one global cluster automatically creates high availability.
The ingestion service, storage, network path, search backend, and authentication layer can each become a single point of failure.
🎯 Candidate-Style Answer
“I would use regional collectors and ingestion paths, a durable buffer, and independently resilient storage and search components. Azure Monitor and Log Analytics would be a strong managed option, with Blob Storage for long-term retention. I would define ingestion capacity, backpressure, access controls, regional recovery objectives, and retention requirements before choosing the final topology. I would also prevent sensitive payment or customer data from leaking into logs.”
Question 6. An application works for internal users but returns HTTP 403 for external users. How do you isolate the problem?
🧠 Simple Concept
HTTP 403 means a request was understood but refused by a server or security layer. It does not automatically mean that the application itself rejected the user.
Internal and external traffic may follow different DNS, gateway, firewall, identity, and network paths.
⚙️ How Does It Work?
Trace both successful and failed requests.
Compare the URLs, DNS records, source IPs, authentication tokens, headers, and timestamps.
Check Azure Application Gateway access and firewall logs if that gateway is in the path.
Inspect WAF rules, IP restrictions, network security rules, API gateway policies, and identity authorization.
Verify whether the request reaches the application.
Correlate the external request ID with application logs and distributed traces.
Check whether a recent security or configuration change affected external traffic.
Useful checks include:
nslookup app.example.com
curl -v https://app.example.com/health
kubectl get ingress -n production
kubectl get svc -n productionRun network tests from an appropriate external location. A request from inside the cluster cannot prove that the public route works.
🚨 Common Interview Trap
Disabling the WAF or opening broad firewall rules without confirming which control blocked the request.
That can restore connectivity while creating a security incident.
🎯 Candidate-Style Answer
“I would compare the internal and external request paths and identify the first layer where their behavior differs. I would inspect gateway and WAF logs, source IP restrictions, authentication and authorization policies, DNS, and application logs. Once I identify the exact blocking rule, I would make the smallest approved change and validate it with positive and negative security tests.”
Question 7. How do you implement secure, dynamic secret rotation in Azure DevOps pipelines?
🧠 Simple Concept
Secrets include database passwords, API keys, certificates, and tokens. Secure rotation replaces credentials without exposing them or unnecessarily interrupting production services.
The preferred design is to minimize long-lived secrets and retrieve credentials from an approved secrets manager at runtime.
⚙️ How Does It Work?
A practical Azure architecture uses:
Azure Key Vault for secret and certificate management.
Azure DevOps service connections using workload identity federation where supported.
Managed identities for supported Azure-hosted workloads.
RBAC and least-privilege access.
Automated rotation workflows with verification and rollback planning.
Example pipeline task:
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: 'Production-Service-Connection'
KeyVaultName: 'company-prod-kv'
SecretsFilter: 'db-password'
RunAsPreJob: false
- script: ./deploy.sh
displayName: 'Deploy application'This illustrates retrieving a secret into the pipeline environment. The service connection must be configured correctly, and the script must avoid printing secrets or enabling unsafe shell tracing.
For runtime applications, prefer workload identity or managed identity when the target service supports it rather than copying static credentials into container images or source repositories.
A safe rotation workflow:
Create or issue the replacement credential.
Update the secret store.
Update consumers using a compatible rollout strategy.
Verify that the new credential works.
Revoke the old credential after confirming migration.
Alert on failures and audit every privileged operation.
🚨 Common Interview Trap
Updating a secret in Key Vault and assuming that every running application automatically uses the new value.
Applications may cache credentials or load them only at startup. Rotation must include consumer refresh behavior and validation.
🎯 Candidate-Style Answer
“I would centralize secrets in Key Vault, use federated or managed identities wherever possible, and restrict access through least-privilege RBAC. Rotation would be automated and coordinated with application reload behavior. I would verify the new credential before revoking the old one, avoid logging sensitive values, and maintain audit trails and a recovery procedure.”
Section 2: Azure Architecture, Reliability, and Infrastructure as Code
Question 8. How would you use Azure Application Gateway with WAF for a sensitive banking application?
🧠 Simple Concept
Azure Application Gateway is a Layer 7 web traffic load balancer. Its Web Application Firewall helps protect HTTP applications against common web exploits and suspicious request patterns.
For a banking application, it should be part of a broader security architecture, not treated as a complete security solution.
⚙️ How Does It Work?
A typical traffic flow is:
Customer → DNS → Application Gateway + WAF → Private backend → AKS application → Authorized downstream services
Important controls include:
WAF prevention mode after appropriate validation and tuning.
Managed rule sets and controlled custom rules.
TLS termination and secure backend communication.
Private backend access and restricted administrative paths.
Web Application Firewall logs and alerting.
Identity-based access, network segmentation, and secrets management.
DDoS protection and rate limiting at appropriate layers.
Regular rule review, patching, and security testing.
If using AKS, select an ingress integration compatible with the chosen Application Gateway and Kubernetes architecture. Avoid accidentally deploying competing ingress controllers with overlapping ownership.
🏢 Production Example
A malicious request attempts SQL injection through a public payment API.
The WAF detects the request pattern and blocks it under the applicable rule. Security monitoring records the event. The application still validates inputs and uses parameterized database queries because WAF filtering cannot replace secure application design.
🚨 Common Interview Trap
Claiming that enabling WAF automatically makes a banking application compliant or secure.
Compliance also depends on identity, data protection, auditability, access control, secure development, operational procedures, and applicable regulatory requirements.
🎯 Candidate-Style Answer
“I would deploy Application Gateway with a tuned WAF policy, secure TLS configuration, restricted backend connectivity, and centralized monitoring. I would validate managed rules in a controlled environment, review false positives, and maintain application-level security controls. For a banking workload, I would also address encryption, identity, audit retention, incident response, and regulatory requirements.”
Question 9. Azure deployment experiences intermittent DNS resolution failures. What could cause them?
🧠 Simple Concept
DNS translates hostnames into IP addresses. Intermittent failures can be caused by inconsistent DNS configuration, caching, network connectivity, overloaded resolvers, incorrect private DNS links, or transient upstream failures.
⚙️ How Does It Work?
Investigate in layers:
Client and pod: Is the issue limited to one pod or workload?
Kubernetes DNS: Check CoreDNS health, configuration, resource pressure, and logs.
VNet configuration: Verify custom DNS settings and routes.
Private DNS: Check zone records, VNet links, and private endpoint configuration.
Upstream resolvers: Test reachability and response times.
Caching: Investigate stale records, negative caching, and record TTLs.
kubectl get pods -n kube-system
kubectl logs -n kube-system \
-l k8s-app=kube-dns
kubectl exec -it <pod-name> -n production -- \
nslookup service.example.internalThe CoreDNS label selector can vary by cluster configuration, so confirm the actual labels first.
For a more detailed diagnosis, use a temporary approved troubleshooting pod containing DNS utilities and test both internal service names and external hostnames.
🏢 Production Example
An application starts failing after a private endpoint change.
Some workloads resolve the expected private IP, while others continue using cached records or an incorrect DNS path. Comparing resolver responses, TTLs, and VNet links helps identify the inconsistent configuration.
🚨 Common Interview Trap
Restarting CoreDNS immediately without checking whether the issue originates in private DNS, VNet settings, or upstream resolution.
🎯 Candidate-Style Answer
“I would reproduce the failure from the affected workload and compare DNS responses across pods and nodes. I would inspect CoreDNS metrics and logs, resolver configuration, VNet DNS settings, private zone links, routes, and caching behavior. I would then correct the underlying issue and add DNS failure-rate and latency monitoring.”
Question 10. Users experience a 10-second delay every 15 minutes in an AKS application, despite no code changes. How do you begin root cause analysis?
🧠 Simple Concept
A recurring delay is a clue. It may indicate a scheduled job, cache expiration, connection-pool recycling, garbage collection, backups, monitoring activity, token refresh, or a periodic resource bottleneck.
The fact that no code changed does not mean nothing changed. Infrastructure, dependencies, traffic patterns, and scheduled operations can all change independently.
⚙️ How Does It Work?
Step 1: Establish a precise timeline.
Collect timestamps for slow requests, pod restarts, CPU throttling, memory usage, network errors, and downstream latency.
Step 2: Compare the 15-minute interval with system events.
Investigate:
CronJobs and scheduled maintenance.
Connection-pool limits and recycling.
Cache TTLs and synchronized cache refresh.
Garbage collection and memory pressure.
Database checkpoints, backups, or periodic queries.
Token renewal and DNS cache expiration.
Autoscaling and node-level activity.
Step 3: Trace a slow request.
Use distributed tracing to determine whether the time is spent in the application, database, network, or an external dependency.
Step 4: Test a hypothesis.
Compare affected and unaffected replicas, inspect dependency metrics, and check whether the delay aligns with a known scheduled event.
🏢 Production Example
A service’s authentication token expires on a 15-minute interval. Several replicas attempt refresh simultaneously, creating a burst of requests to an identity provider.
The result is a periodic latency spike. Jittered refresh schedules, caching, and resilient retry policies can help once the evidence confirms the cause.
🚨 Common Interview Trap
Restarting pods because the problem looks periodic.
A restart may temporarily clear symptoms while making the underlying timing issue harder to investigate.
🎯 Candidate-Style Answer
“I would correlate slow requests against infrastructure and application telemetry over several intervals. Distributed traces would help identify where the additional ten seconds are spent. I would investigate scheduled jobs, cache and token expiry, connection pools, garbage collection, and dependency performance. I would change the system only after validating a specific hypothesis and would confirm the fix across multiple recurrence windows.”
Question 11. Jenkins jobs randomly fail during artifact upload. Which layers would you investigate?
🧠 Simple Concept
Artifact upload failures can originate in the Jenkins agent, network, artifact repository, authentication, storage quota, or the artifact itself.
Intermittent failures require correlation, not guesswork.
⚙️ How Does It Work?
Check the following layers in order:
Build agent: Disk space, memory, process termination, and temporary-directory availability.
Artifact integrity: File existence, size, checksum, permissions, and archive corruption.
Network: DNS, TLS, proxy settings, packet loss, connection resets, and upload timeouts.
Authentication: Expired tokens, changed credentials, permissions, and repository policies.
Artifact repository: Capacity, rate limits, service health, and request-size limits.
Concurrency: Multiple jobs uploading the same artifact or exhausting connections.
Retry behavior: Bounded retries with backoff for transient failures.
Useful commands:
df -h
df -i
curl -v https://artifact.example.com/
sha256sum build-artifact.tar.gzThe curl request should use an approved health endpoint or authenticated test request where required. Avoid exposing credentials in command output.
🏢 Production Example
Several Jenkins agents upload large artifacts simultaneously. The repository begins returning HTTP 429 responses because a rate limit has been reached.
Reducing unnecessary concurrent uploads, using bounded exponential backoff, and tuning repository capacity resolves the issue without hiding genuine authentication or integrity failures.
🚨 Common Interview Trap
Adding unlimited retries.
Retries can amplify an overloaded repository and make a transient outage worse.
🎯 Candidate-Style Answer
“I would capture the exact error code and timestamp, then correlate it with agent health, artifact checksums, network metrics, authentication events, and repository logs. I would distinguish transient network or rate-limit failures from permanent permission and integrity errors. I would use bounded retries with backoff, preserve artifact integrity checks, and monitor upload failure rates.”
Question 12. How would you implement automated rollback for failed Kubernetes deployments?
🧠 Simple Concept
A deployment rollback restores a known-good application version when the new version fails defined health or release criteria.
A Kubernetes rollout completing successfully does not prove that the application is functionally correct. Automated rollback should combine deployment status with meaningful application signals.
⚙️ How Does It Work?
Step 1: Define release health criteria.
Examples include:
Error rate above the approved threshold.
Latency exceeding the service’s SLO.
Readiness failures or repeated restarts.
Failed synthetic transactions.
Significant regression against the stable version.
Step 2: Deploy using an immutable image digest.
This makes the released artifact identifiable and reproducible.
Step 3: Monitor during a defined observation window.
Combine Kubernetes health checks with application metrics and smoke tests.
Step 4: Trigger rollback when the release policy is violated.
kubectl rollout status deployment/payment-api \
-n production --timeout=180s
kubectl rollout undo deployment/payment-api \
-n production
kubectl rollout history deployment/payment-api \
-n productionThese commands illustrate the mechanism. A production automation system should ensure the correct revision is restored, record the triggering evidence, and avoid competing deployments.
Step 5: Verify recovery.
Confirm error rate, latency, synthetic transactions, and downstream behavior have returned to acceptable levels.
Step 6: Handle database compatibility separately.
Rolling back application code does not automatically reverse a database migration.
🏢 Production Example
A new release increases payment API errors from 0.1% to 4%.
The deployment controller pauses rollout, an automated policy triggers restoration of the stable version, and post-rollback synthetic transactions verify recovery. An incident record captures the release digest, metrics, and rollback event.
🚨 Common Interview Trap
Using kubectl rollout undo as the entire rollback strategy.
It does not automatically undo infrastructure changes, database schema changes, or external side effects.
🎯 Candidate-Style Answer
“I would implement progressive delivery with explicit health gates, error-rate and latency thresholds, immutable artifacts, and a defined observation period. If the new version violates the release policy, the pipeline or progressive-delivery controller would stop promotion and restore the last known-good version. I would then validate recovery, preserve evidence, and ensure database and infrastructure changes remain compatible with rollback.”
Question 13. Design a cost-optimized cloud architecture for an internal reporting application that runs nightly and stores logs for three years.
🧠 Simple Concept
A nightly reporting workload is a good candidate for scheduled execution and pay-for-use services, provided its processing time, availability requirements, data sensitivity, and recovery objectives support that model.
The three-year log-retention requirement also means that searchable storage and archival storage should be treated differently.
⚙️ How Does It Work?
A practical Azure design might include:
Scheduler: Azure Data Factory, Logic Apps, or a scheduled workflow.
Compute: Azure Functions, Azure Container Apps Jobs, or an appropriately sized batch service.
Data source: Azure SQL Database or another existing managed data store.
Output: Azure Blob Storage for generated reports.
Logs: Azure Monitor for operational investigation and Blob Storage for long-term retention where appropriate.
Security: Managed identity, private connectivity where required, and least-privilege RBAC.
Cost management: Lifecycle rules, budgets, tagging, and scheduled execution.
Use a managed service if it fits the workload. Avoid running an always-on Kubernetes cluster for a short nightly job without a concrete reason.
🏢 Production Example
A report runs for 20 minutes each night, processes historical transactions, and produces a CSV report for internal users.
The workload can use scheduled compute, store output in Blob Storage, and archive operational logs according to a documented retention policy. The system should monitor failed runs, preserve audit records, and make reruns idempotent.
🚨 Common Interview Trap
Sending every log to premium searchable storage for three years.
That can create unnecessary costs. However, cheap storage must still meet audit, retrieval, immutability, and data-residency requirements.
🎯 Candidate-Style Answer
“I would choose scheduled or event-driven compute based on execution duration and dependencies, rather than paying for an always-on platform. I would separate report storage, operational log search, and long-term archives. Lifecycle policies would move data to lower-cost tiers while preserving required retention and retrieval guarantees. I would also include cost budgets, failure alerts, secure identity, and tested recovery procedures.”
Question 14. How do you perform zero-downtime database migrations in a distributed application?
🧠 Simple Concept
Zero-downtime migrations allow old and new application versions to operate safely while the database schema evolves.
The central principle is backward compatibility. Application deployments and schema changes must be coordinated so that a temporary mixture of versions remains functional.
⚙️ How Does It Work?
Use the expand-and-contract pattern.
<box border radius=”lg” padding={3} gap={2}> <box background=”#164E63” theme=”dark” radius=”md” padding={3}> **1. Expand**
<text color="#FFFFFF" size="sm">Add a nullable column, new table, or compatible schema change without removing the old structure.</text></box> <box align=”center”> <icon name=”arrow-down” size=”lg”/> </box> <box background=”#365314” theme=”dark” radius=”md” padding={3}> **2. Migrate and Validate**
<text color="#FFFFFF" size="sm">Backfill data in batches, verify consistency, and measure replication lag where relevant.</text></box> <box align=”center”> <icon name=”arrow-down” size=”lg”/> </box> <box background=”#713F12” theme=”dark” radius=”md” padding={3}> **3. Switch Application Behavior**
<text color="#FFFFFF" size="sm">Deploy compatible application code and verify reads, writes, and transaction behavior.</text></box> <box align=”center”> <icon name=”arrow-down” size=”lg”/> </box> <box background=”#7F1D1D” theme=”dark” radius=”md” padding={3}> **4. Contract**
<text color="#FFFFFF" size="sm">Remove old fields or tables only after all consumers have migrated and recovery risks are addressed.</text></box> </box>
Additional safeguards:
Test against realistic data volumes.
Keep schema changes version-controlled.
Use backward-compatible APIs and events.
Make backfills resumable and idempotent.
Monitor lock duration, query latency, and replication lag.
Prepare a recovery plan for data changes, not just application code.
Avoid destructive schema changes in the same release that first introduces replacement behavior.
🏢 Production Example
A payment service must replace an existing customer identifier with a new canonical identifier.
The team adds the new column, dual-writes where appropriate, backfills historical rows, verifies consistency, switches reads, and only later removes the old column. During the transition, both application versions can continue operating safely.
🚨 Common Interview Trap
Assuming that rolling back application code reverses a database migration.
Data transformations may be irreversible, and destructive schema changes can make the previous application version unusable.
🎯 Candidate-Style Answer
“I would use an expand-and-contract migration with backward-compatible schema changes. I would backfill data incrementally, verify consistency, deploy compatible application versions, and monitor database performance throughout the rollout. I would remove legacy schema only after every consumer has migrated. For critical systems, I would test recovery and data restoration separately from application rollback.”
Question 15. What is your disaster recovery strategy for stateful applications running in containers?
🧠 Simple Concept
Stateful applications depend on data that must survive container, node, cluster, or regional failure.
Kubernetes can recreate containers and pods, but it does not automatically guarantee that the application’s data is recoverable or consistent.
⚙️ How Does It Work?
Start by defining two critical recovery objectives:
RPO, Recovery Point Objective: How much data loss is acceptable.
RTO, Recovery Time Objective: How long recovery may take.
Then design recovery around the data layer.
Core components:
Managed databases with suitable backup and replication options.
Persistent volumes with documented backup and restore procedures.
Cross-region data protection where required.
Version-controlled Kubernetes manifests and Terraform.
Replicated container images and required configuration.
Secrets recovery and identity restoration.
Runbooks, dependency maps, and tested failover procedures.
Recovery sequence:
Detect and declare the incident.
Confirm the integrity and availability of the recovery data.
Restore or promote the data layer.
Recreate infrastructure and cluster resources.
Restore application configuration and secrets access.
Deploy compatible application versions.
Validate data consistency and business transactions.
Redirect traffic and monitor recovery.
🏢 Production Example
A regional outage affects an AKS-based reporting service backed by a managed database.
The recovery procedure provisions or activates the approved recovery environment, restores or promotes the database according to the recovery design, deploys application workloads, and validates reports before reopening access.
🚨 Common Interview Trap
Saying that multiple replicas provide disaster recovery.
Replicas help with certain failures, but they do not replace backups, cross-region recovery planning, or protection against accidental deletion and data corruption.
🎯 Candidate-Style Answer
“I would begin with business-approved RPO and RTO targets. I would design data backups and replication independently of container recovery, version infrastructure and application configuration, and document the failover sequence. I would test restores and regional recovery regularly, measure actual recovery time, and verify data integrity before declaring the service recovered.”
Question 16. An Azure Function is being throttled. How would you detect and fix it?
🧠 Simple Concept
Throttling occurs when a function or one of its dependencies exceeds a limit on concurrency, requests, execution, compute, or throughput.
The source of throttling may be the Azure Function platform itself or a downstream service such as a database, API, or messaging system.
⚙️ How Does It Work?
Step 1: Confirm the failure mode.
Inspect Azure Monitor metrics, Application Insights, invocation results, duration, dependency failures, and relevant service-limit metrics.
Step 2: Identify where the limit occurs.
Investigate:
Function hosting plan and available capacity.
Concurrency and trigger behavior.
Execution time and memory consumption.
Queue or event backlog.
Downstream HTTP 429 responses.
Database connection limits.
Per-resource quotas and regional capacity.
Step 3: Apply the appropriate fix.
Depending on the evidence:
Scale the hosting plan or adjust supported scaling configuration.
Reduce per-invocation work.
Batch operations where appropriate.
Introduce queue-based load leveling.
Apply bounded exponential backoff and jitter for transient throttling.
Reduce excessive concurrency against downstream systems.
Optimize slow dependencies.
🏢 Production Example
A queue-triggered function processes hundreds of payment notifications simultaneously. The database begins returning rate-limit errors.
Increasing function concurrency would worsen the problem. A better solution may involve controlling concurrency, optimizing database calls, and using retry policies that respect downstream capacity.
🚨 Common Interview Trap
Assuming every HTTP 429 or timeout is caused by insufficient Azure Function compute.
The downstream dependency may be the actual bottleneck.
🎯 Candidate-Style Answer
“I would inspect invocation failures, duration, concurrency, hosting-plan metrics, and dependency telemetry to locate the throttling source. I would distinguish platform limits from downstream limits before scaling. Then I would tune concurrency, optimize work per invocation, and introduce appropriate buffering or retry behavior. Finally, I would load-test the solution and monitor queue depth, failure rate, and processing latency.”
Question 17. Design a blue/green deployment strategy on Azure using Terraform and CI/CD pipelines.
🧠 Simple Concept
Blue/green deployment maintains two environments:
Blue: The current production version.
Green: The new version being prepared for production.
Traffic moves to green only after validation. Blue remains available as a recovery target until the release is accepted.
⚙️ How Does It Work?
Step 1: Provision repeatable infrastructure with Terraform.
Manage networking, gateway configuration, application resources, identity, and monitoring as code.
Step 2: Build one immutable artifact.
Build and scan the image once, record its digest, and promote that same artifact across environments.
Step 3: Deploy green without changing production traffic.
Verify configuration, secrets access, connectivity, and dependencies.
Step 4: Run release validation.
Execute smoke tests, synthetic transactions, security checks, and performance tests appropriate to the service.
Step 5: Shift traffic.
Use a compatible traffic-routing mechanism, such as Azure Application Gateway backend configuration, Front Door routing, or an appropriate Kubernetes progressive-delivery controller.
Step 6: Observe and roll back if necessary.
Use defined error-rate and latency thresholds. Route traffic back to blue if the release violates policy.
Step 7: Clean up safely.
Retain the previous environment until the rollback window closes, then remove it through a controlled Terraform change.
💻 Example Terraform Concept
variable "active_color" {
type = string
default = "blue"
validation {
condition = contains(["blue", "green"], var.active_color)
error_message = "active_color must be blue or green."
}
}
locals {
active_backend = var.active_color
}This snippet demonstrates a validated deployment input, not a complete traffic-switching implementation. The gateway or routing resource must consume the selected backend, and state changes must be coordinated with the release pipeline.
🚨 Common Interview Trap
Destroying blue immediately after switching traffic.
If green develops a serious problem, the team may lose its quickest recovery option.
🎯 Candidate-Style Answer
“I would manage both environments with Terraform, deploy an immutable artifact to the inactive environment, and validate it before switching traffic. The pipeline would promote the release only after health and synthetic checks pass. I would retain the old environment during the rollback window, account for database compatibility and shared-state risks, and record the traffic switch and validation results for auditability.”
Section 3: Monitoring, Performance Engineering, and Senior-Level Thinking
Question 18. How would you monitor end-to-end SLA for services involved in a payments pipeline?
🧠 Simple Concept
A payment rarely depends on a single service. It may pass through an API gateway, authentication service, payment orchestrator, fraud detection system, database, and external payment provider.
Monitoring each component independently does not guarantee that the complete payment journey is healthy.
You need end-to-end observability that measures whether the business transaction succeeds within the promised time.
❓ Why Do We Need It?
Imagine that every microservice reports 99.9% availability, but payments still fail because of timeouts between services.
A collection of green dashboards can coexist with an unhappy customer. Humans have managed to make that possible through distributed systems.
For payment processing, monitor:
Successful payment completion rate.
End-to-end transaction latency.
Failed and timed-out transactions.
Duplicate transaction attempts.
Queue backlog and processing delays.
Dependency availability.
Reconciliation discrepancies.
SLA and SLO compliance.
⚙️ How Does It Work?
Step 1: Define the service-level objectives.
For example, a hypothetical objective might require 99.95% of eligible payment requests to complete successfully within a specified latency target. The actual objective must come from business requirements.
Step 2: Trace the complete transaction.
Use OpenTelemetry instrumentation and a distributed tracing backend to follow requests across services.
Assign correlation and trace IDs, but never place card numbers, authentication secrets, or sensitive customer data in trace attributes.
Step 3: Monitor the golden signals.
Latency: How long does a payment take?
Traffic: How many transactions are being processed?
Errors: How many requests fail or time out?
Saturation: Are queues, CPU, memory, connections, or other resources approaching capacity?
Step 4: Connect technical metrics to business metrics.
A database timeout is a technical symptom. An increase in incomplete payments is a business impact.
Step 5: Alert on meaningful conditions.
Use burn-rate alerts, sustained error-rate increases, transaction latency, and queue backlog. Avoid paging engineers for every isolated error.
🏢 Production Example
A payment orchestrator receives requests successfully, but an external payment provider responds slowly.
The orchestrator’s own health check remains green. Distributed traces reveal that most of the transaction’s time is spent waiting for the external provider.
The team can then investigate provider latency, configure appropriate timeouts and retry policies, and implement safe handling for uncertain transaction outcomes.
For financial transactions, retries must be designed carefully. A timeout does not prove that a payment failed, and blindly retrying a non-idempotent operation can create duplicate transactions.
💻 Example: Prometheus Alert
groups:
- name: payment-alerts
rules:
- alert: PaymentErrorRateHigh
expr: |
(
sum(rate(payment_requests_total{status="error"}[5m]))
/
clamp_min(sum(rate(payment_requests_total[5m])), 1e-9)
) > 0.02
for: 5m
labels:
severity: critical
annotations:
summary: "Payment error rate is above 2%"
description: "Investigate payment failures and dependencies."This is an illustrative alert. The metric labels, handling of low traffic, and threshold must match the actual instrumentation and agreed SLO.
🚨 Common Interview Trap
Monitoring infrastructure CPU and memory while ignoring payment completion and transaction correctness.
A system can be technically available but operationally failing.
🎯 Candidate-Style Answer
“I would define business-aligned SLIs and SLOs for payment success rate, end-to-end latency, and transaction failures. I would use distributed tracing to follow each transaction across services and correlate it with infrastructure and dependency metrics. I would build alerts around sustained SLO violations and error-budget burn, protect sensitive data in telemetry, and ensure that retries preserve payment idempotency and transaction integrity.”
Question 19. Explain the difference between scaling compute-intensive and I/O-intensive workloads in Azure.
🧠 Simple Concept
Not every workload needs more CPU.
A compute-intensive workload spends most of its time performing calculations. An I/O-intensive workload spends much of its time waiting for a database, disk, network, or external service.
Scaling without identifying the bottleneck is one of the more expensive ways to learn that CPU was never the problem.
⚙️ How Does It Work?
<box border radius=”lg” padding={3} gap={3}> <row align=”start” gap={3}> <box background=”#164E63” radius=”md” padding={2}> <icon name=”cpu” color=”#FFFFFF” size=”2xl”/> </box> <box flex=”1” gap={1}> **Compute-intensive workloads**
<text color="secondary" size="sm">Examples: image processing, encryption, simulations, large-scale calculations.</text>
- Measure CPU utilization, throttling, execution time, and throughput.
- Choose appropriate CPU capacity and parallelism.
- Scale replicas or workers when work can be distributed.
- Optimize algorithms and avoid unnecessary computation.
</box></row> <divider color=”subtle”/> <row align=”start” gap={3}> <box background=”#365314” radius=”md” padding={2}> <icon name=”database” color=”#FFFFFF” size=”2xl”/> </box> <box flex=”1” gap={1}> **I/O-intensive workloads**
<text color="secondary" size="sm">Examples: API aggregation, database access, file processing, external service calls.</text>
- Measure request latency, queue depth, connection pools, and I/O wait.
- Optimize queries, batching, caching, and connection reuse.
- Use asynchronous processing where appropriate.
- Scale downstream services and control concurrency to avoid overload.
</box></row> </box>
💻 Azure and Kubernetes Scaling Options
For compute-intensive workloads:
Use an appropriate Azure VM or node SKU.
Set CPU requests and limits based on measured behavior.
Use the Horizontal Pod Autoscaler (HPA) for replica scaling.
Use node autoscaling where supported and configured.
Consider parallel processing for independent tasks.
For I/O-intensive workloads:
Investigate database capacity, network latency, and dependency quotas.
Tune connection pools and request concurrency.
Use queues to smooth traffic bursts.
Apply caching when data consistency requirements permit it.
Scale replicas only when additional concurrency can improve throughput without overwhelming dependencies.
🏢 Production Example
An image-processing service runs at 95% CPU and processes jobs too slowly. Scaling workers and optimizing image transformations may increase throughput.
A separate reporting API runs at 15% CPU but has high latency because database queries take several seconds. Adding more API replicas may increase database contention rather than improve performance.
The correct scaling strategy depends on the measured bottleneck.
🚨 Common Interview Trap
Assuming that horizontal scaling fixes every performance problem.
Scaling application replicas cannot eliminate an inefficient database query, a rate-limited external API, or a serialized processing bottleneck.
🎯 Candidate-Style Answer
“I would first identify whether the workload is CPU-bound, memory-bound, or waiting on I/O. For compute-intensive workloads, I would optimize processing and scale CPU capacity or parallel workers. For I/O-intensive workloads, I would focus on dependency latency, connection pools, query optimization, caching, and controlled concurrency. I would validate the changes through load testing and compare throughput, latency, and cost rather than relying on CPU utilization alone.”
Bonus: How to Approach Senior DevOps Interview Questions Like These
The 19 scenarios above cover a wide range of tools, but the underlying interview pattern is surprisingly consistent.
When an interviewer gives you a production incident, structure your answer around six decisions.
<box border radius=”lg” padding={3} gap={2}> <row align=”start” gap={3}> <box background=”#172554” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>1</title> </box> <box flex=”1” gap={1}> **Establish the impact**
Identify affected users, services, regions, error rates, and business transactions.
</box></row> <row align=”start” gap={3}> <box background=”#164E63” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>2</title> </box> <box flex=”1” gap={1}> **Collect evidence**
Use logs, metrics, traces, events, configuration, and deployment history.
</box></row> <row align=”start” gap={3}> <box background=”#365314” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>3</title> </box> <box flex=”1” gap={1}> **Isolate the failing layer**
Narrow the problem to the application, infrastructure, network, identity, data, or dependency layer.
</box></row> <row align=”start” gap={3}> <box background=”#713F12” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>4</title> </box> <box flex=”1” gap={1}> **Mitigate safely**
Restore service using an approved rollback, failover, traffic shift, or capacity adjustment.
</box></row> <row align=”start” gap={3}> <box background=”#7F1D1D” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>5</title> </box> <box flex=”1” gap={1}> **Prove the root cause**
Test a specific hypothesis against evidence instead of declaring the first plausible explanation to be the answer.
</box></row> <row align=”start” gap={3}> <box background=”#334155” theme=”dark” radius=”md” size=”40px” align=”center” justify=”center”> <title size=”lg” color=”#FFFFFF”>6</title> </box> <box flex=”1” gap={1}> **Prevent recurrence**
Improve automation, monitoring, tests, capacity planning, documentation, and operational controls.
</box></row> </box>
Common mistakes to avoid in a ₹22 LPA Senior DevOps interview
Giving definitions without describing an investigation.
Listing tools without explaining why each tool is needed.
Making infrastructure changes before establishing the likely cause.
Treating Kubernetes rollback as a complete recovery strategy.
Ignoring security, auditability, and data integrity.
Scaling services without checking downstream capacity.
Claiming root cause without evidence.
Failing to explain how the fix will be validated.
Final Takeaways 🎯
Senior DevOps engineering is not about knowing the largest number of commands. It is about making good technical decisions when several systems interact and the available evidence is incomplete.
For these 19 scenarios, remember five principles:
Observe before changing. Establish the impact and gather evidence before acting.
Follow the complete request path. Problems frequently occur between components rather than inside one component.
Automate safe recovery. Rollbacks, retries, and failovers need explicit conditions and validation.
Design for failure. High availability, backup recovery, secret rotation, and database compatibility must be planned before incidents occur.
Measure the outcome. A fix is not complete until the system’s behavior improves and the result can be demonstrated.
The strongest interview answer is not necessarily the one with the most complicated architecture. It is the one that explains the problem clearly, chooses an appropriate investigation, makes a safe decision, and proves that the solution works.
Relevant Hashtags
#JPMorgan #DevOpsInterview #SeniorDevOpsEngineer #Azure #AKS #Kubernetes #Terraform #Jenkins #AzureDevOps #DevSecOps #CI_CD #SRE #CloudEngineering #PlatformEngineering #ProductionSupport #Observability #SiteReliabilityEngineering #InfrastructureAsCode #TechnicalInterview #DevOpsCareer
Follow Me
If you enjoyed this article and would like more practical DevOps, Cloud, Kubernetes, AWS, Terraform, CI/CD, and Software Engineering content, connect with me on LinkedIn.
LinkedIn: https://www.linkedin.com/in/arvindverma021/
Learn the tools. Practice the incidents. Explain your decisions. Build the engineering judgment that production systems demand. 🚀
Arvind Verma is free today. But if you enjoyed this post, you can tell Arvind Verma that their writing is valuable by pledging a future subscription. You won't be charged unless they enable payments.
© 2026 Arvind Verma
548 Market Street PMB 72296, San Francisco, CA 94104