Skip to content

Software Engineer interview questions

100 real questions with model answers and explanations for Senior candidates.

See a Software Engineer resume example

Practice with flashcards

Spaced repetition · Hunter Pass

Questions

retentiondesign

I would keep redirects on a cache-first read path and generate keys without a central bottleneck.

  • A Base62-encoded 64-bit Snowflake ID gives roughly 11-character keys; worker IDs are leased uniquely and clock rollback stops generation before it can duplicate a key.
  • Cassandra stores key, destination, owner, and expiry across 256 virtual shards, while Redis caches hot mappings with a 24-hour TTL.
  • Redirect nodes perform one Redis lookup and then a shard lookup, leaving about 20 ms for storage inside the 100 ms p99 budget.
  • Five years at 20,000 writes per second is about 3.2 trillion rows; at 100 bytes each and replication factor 3, I would budget roughly 1 PB before compaction and backups.

Why interviewers ask this: The interviewer is evaluating capacity estimation, key generation, data partitioning, and a credible latency path.

designconcurrency

I would separate socket ownership from durable message processing and order messages by room.

  • Stateless WebSocket gateways hold about 50,000 connections each and publish authenticated messages to Kafka keyed by room_id.
  • Kafka gives one ordered partition per room key, and consumers persist messages to Cassandra before publishing them through Redis Streams to recipient gateways.
  • The 200 ms p99 is measured to an online recipient gateway: 30 ms for ingress, 80 ms for Kafka plus persistence, 60 ms for fan-out, and 30 ms margin.
  • Each connection has a 16 KB outbound buffer under a per-gateway 1 GB cap; on overflow a slow client gets a resync cursor and disconnects.

Why interviewers ask this: A strong answer must connect connection scale, ordering scope, durable storage, and slow-client backpressure.

designproxy

I would keep file bytes in object storage and make the application own only metadata and upload coordination.

  • The API creates an S3 multipart upload and returns signed URLs for 16 MB parts, so a 5 GB file resumes from the last confirmed part.
  • PostgreSQL stores file versions, hashes, ownership, and the multipart upload ID, with a unique constraint on tenant_id plus path plus version.
  • Clients send S3's SHA-256 checksum for each part and a final manifest; S3 validates bytes before the server atomically publishes the new version.
  • Ten petabytes stays in S3 with lifecycle tiers, while change notifications use a per-user monotonic cursor so offline clients request only missed metadata.

Why interviewers ask this: The interviewer is checking separation of data and control planes, resumability, metadata correctness, and storage economics.

designfeature-flags

I would evaluate flags inside each process from a versioned local snapshot.

  • A control-plane API stores each definition and an outbox row in one PostgreSQL transaction; CDC then publishes every committed version to Kafka.
  • SDKs keep an immutable in-memory map and swap the whole snapshot atomically, making each evaluation an O(1) lookup under 1 ms.
  • A streaming gRPC channel pushes versioned deltas, a gap triggers an immediate snapshot fetch, and 2-second heartbeats enforce the 5-second SLO for connected healthy SDKs.
  • If the control plane is unavailable, SDKs use the last valid snapshot and a typed hard-coded default rather than blocking application requests.

Why interviewers ask this: The interviewer wants a design that meets hot-path latency without sacrificing propagation, recovery, or safe defaults.

design

I would make PostgreSQL enforce one active owner per seat and treat the hold as an expiring state.

  • A conditional UPDATE claims a free or expired seat and writes hold_id plus expires_at in one transaction, so check and reserve cannot race.
  • The seat row is the serialization point, and an index on event_id plus expires_at lets cleanup find expired holds without scanning the event.
  • A durable timer table and scheduler publish hold_id at expiry; release runs only WHERE hold_id matches and expires_at has passed, so an old timer cannot clear a newer hold.
  • The API accepts an idempotency key for 24 hours, so client retries return the original hold instead of consuming another seat.

Why interviewers ask this: The interviewer is testing whether correctness is encoded atomically rather than delegated to caches or application locks.

design

I would use fan-out on write for normal accounts and fan-out on read for celebrity posts.

  • Normal posts are pushed through Kafka into per-user Cassandra feed rows capped at the newest 1,000 item IDs.
  • Accounts above 100,000 followers are marked as celebrities, and their posts stay in a separate author timeline to avoid 50 million writes per post.
  • The read service scans the paged followed-celebrity index until a heap proves the top 20 cutoff, avoiding a fixed author cap that could omit posts.
  • I budget 40 ms for timeline reads, 60 ms for merge and ranking, 60 ms for hydration, and retain 40 ms inside the 200 ms p95 target.

Why interviewers ask this: The interviewer is evaluating whether the candidate recognizes skew and chooses a hybrid fan-out model with a latency budget.

queriesdesign

I would serve a compact prefix index entirely from memory and rebuild it off the request path.

  • An offline Spark job produces a weighted finite-state transducer from the 5 million phrases, including locale and popularity scores.
  • Each stateless node memory-maps the versioned index and returns the top 10 completions without a remote database call.
  • A load balancer spreads traffic across 180 nodes at roughly 5,600 QPS each; after losing 1 of 3 zones, the remaining nodes stay near 8,400 QPS under a tested 10,000-QPS ceiling.
  • A Redis overlay holds trending phrases for 5 minutes; the service merges that small set with the immutable index inside the 50 ms p99 budget.

Why interviewers ask this: The interviewer is checking whether the design fits the corpus and latency target rather than defaulting to a general database.

queriesdesignmonitoring

I would use a partitioned log for ingestion and a columnar time-series store for compressed queries.

  • Kafka absorbs about 10 GB per second across 1,500 partitions, keyed by tenant and metric hash to keep average partition ingress below 7 MB/s.
  • Consumers batch 10,000 samples into ClickHouse MergeTree tables; 30 days is about 26 PB raw before compression, so replicas are partitioned by day and ordered by tenant_id, metric_id, and timestamp.
  • Materialized views pre-aggregate by service into 10-second and 5-minute buckets, so a 24-hour service chart scans thousands of rows instead of all underlying series.
  • Cardinality quotas reject tenants above 1 million active series, because unbounded labels would break both the 30-day storage budget and 10-second query SLO.

Why interviewers ask this: The interviewer is evaluating throughput arithmetic, physical layout, pre-aggregation, and cardinality controls.

design

I would partition jobs by due-time bucket and let workers lease batches independently.

  • PostgreSQL partitions jobs by hour with an index on next_run_at, while 60 logical shards keep each minute's scan bounded.
  • Scheduler nodes use SELECT FOR UPDATE SKIP LOCKED to lease 1,000 due jobs for 2 minutes and publish them to Kafka.
  • Workers require an execution_id and store completion with the business effect when both share a database; external effects require an idempotency key and outbox.
  • A reconciliation scan finds jobs overdue by more than 2 minutes, and scheduling lag above 60 seconds breaches the stated precision target.

Why interviewers ask this: The interviewer wants practical partitioning, lease semantics, idempotent execution, and a measurable precision guarantee.

designwebhooks

I would keep one durable sequence and one in-flight delivery per destination, including during retries.

  • Kafka ingress uses destination_id as the key across 1,000 partitions, and a Kafka Streams state store keeps each destination's ordered pending queue.
  • A dispatcher sends only the head item; 20,000 async connections sustain 200,000 per second only at measured latency near 100 ms, while 3 seconds is a cutoff, not sizing input.
  • Failure moves the head's next_attempt_at through 1-minute, 5-minute, and 30-minute delays for up to 24 hours without advancing that destination.
  • After 5 failures its circuit opens, but only that key waits in the partitioned state store, so healthy destinations on the same partition continue.

Why interviewers ask this: The interviewer is checking ordering scope, retry architecture, connection limits, and tenant isolation.

database

I would split around business ownership and transactional invariants, not around technical layers.

  • Catalog owns products and prices, Inventory owns reservations, Orders owns purchase state, and Payments owns provider interactions and its ledger.
  • Each service exposes versioned gRPC commands and Kafka events, and the hard no-shared-table rule is enforced with separate PostgreSQL schemas and credentials.
  • Checkout orchestrates the workflow but never edits another service's rows; it calls ReserveInventory and AuthorizePayment using explicit request IDs.
  • Weekly release independence is tested by consumer-driven contracts in CI, while cross-service changes remain additive for at least two releases.

Why interviewers ask this: The interviewer is evaluating whether boundaries follow invariants and team ownership while preserving independent deployment.

boundariesapiconcurrency

I would make upload and processing separate asynchronous resources.

  • The client uploads directly to S3 through multipart signed URLs, so the API never buffers a 500 MB body.
  • POST /jobs validates the object metadata, records a job in PostgreSQL, and returns 202 plus a job_id within the 2-second limit.
  • Kafka only wakes workers; a worker claims a 20-minute PostgreSQL lease with heartbeats and a fencing version before processing in an isolated pool.
  • GET /jobs/{id} and a completion webhook expose status, while cancellation is best-effort because a 15-minute codec step may not stop instantly.

Why interviewers ask this: The interviewer wants an asynchronous contract that respects payload size, acknowledgement time, ownership, and cancellation semantics.

designresilience

I would require an idempotency key and bind it to both the caller and request payload.

  • PostgreSQL stores tenant_id, idempotency_key, request_hash, order_id, status, and response under a unique tenant-key constraint.
  • The first request creates the idempotency row and order in one transaction; a duplicate returns the stored status and response.
  • Reusing the same key with a different request hash returns 409, preventing an accidental collision from silently changing meaning.
  • Records live for 24 hours as promised, and in-progress duplicates poll the original operation rather than running order creation concurrently.

Why interviewers ask this: The interviewer is checking atomicity, key scope, payload conflicts, and behavior while the first request is still running.

promises

I would keep existing versions additive and run breaking changes as an explicit migration program.

  • OpenAPI schemas reject removed fields, narrowed enums, and newly required properties in CI through a tool such as oasdiff.
  • A breaking change gets a dated version, while the old version remains on the same reliable gateway for the full 12-month window.
  • Per-client version metrics identify the remaining 10,000 integrations, and automated notices include the exact endpoint and last-use timestamp.
  • The gateway supports both versions from one canonical domain model, avoiding a separate legacy fleet that would threaten the 99.99% availability target.

Why interviewers ask this: The interviewer is evaluating compatibility mechanics, migration observability, and operational support for long deprecation windows.

pagination

I would expose opaque keyset cursors over a stable unique ordering.

  • Records are ordered by created_at plus id, backed by a composite B-tree index in PostgreSQL.
  • The cursor encodes the last pair and filter hash, signed with HMAC so clients cannot alter position or reuse it with different filters.
  • Each page executes a range query with LIMIT 101, returning 100 rows and a next cursor without scanning prior pages.
  • Inserts after the cursor may appear later in the current traversal, while inserts before it wait for a new traversal; snapshot consistency would require an as-of token.

Why interviewers ask this: The interviewer is testing index-aware contract design and honest consistency semantics under concurrent mutation.

schema

I would make the new field optional and preserve old event meaning for the full mixed-version period.

  • Avro schemas live in Schema Registry with FULL_TRANSITIVE compatibility, so old consumers read new data and new consumers can replay retained old data.
  • delivery_window is a nullable record with explicit default null and documented UTC semantics; absence means no promised window rather than a guessed value.
  • Producers dual-populate old and new representations for 6 months if existing fields cannot express the new concept cleanly.
  • Contract fixtures run against all 40 consumers, and removal starts only after consumer-owned version telemetry shows zero old-schema reads.

Why interviewers ask this: The interviewer wants concrete compatibility rules, semantic defaults, and evidence-based retirement across many consumers.

design

I would use an orchestrated saga with explicit reservations and compensations.

  • The orchestrator persists a state machine in PostgreSQL and calls all three providers with stable operation IDs and 9-second deadlines.
  • Flight and hotel create 5-minute holds, while payment authorizes but does not capture until both holds succeed.
  • Any failed step triggers idempotent compensation, releasing holds and voiding authorization, with retries through a durable queue.
  • At 30 seconds the API returns confirmed, rejected, or pending with a booking_id; it never claims failure while compensation or a late provider response is unresolved.

Why interviewers ask this: The interviewer is evaluating distributed workflow state, compensation, deadlines, and truthful client semantics without atomic cross-provider transactions.

concurrency

I would use an append-only double-entry ledger with balances derived from immutable postings.

  • PostgreSQL accepts postings only through a stored procedure with a deferred constraint trigger that verifies debits equal credits before commit.
  • Account entries are partitioned monthly and indexed by account_id plus sequence, while closed partitions move to cheaper storage after one year.
  • A balance table is updated in the same transaction for fast reads, and a nightly recomputation verifies it against immutable entries.
  • Corrections use reversing entries linked to the original, preserving the 7-year audit trail and the hard no-mutation rule.

Why interviewers ask this: The interviewer is checking domain invariants, immutable modeling, read optimization, and long-term retention.

queries

I would keep recent samples in a time-partitioned columnar store and archive compressed partitions to object storage.

  • Kafka receives samples keyed by device_id, and ClickHouse batches inserts into daily MergeTree partitions ordered by device_id and timestamp.
  • Thirty hot days at 3 million samples per second require compression and replication; Delta or Parquet files in S3 hold months 2 through 24.
  • A device-hour query uses the primary ordering to scan one narrow range, while hourly min-max-avg projections serve common dashboards.
  • Late samples remain writable for 48 hours; older corrections go to a side table to avoid rewriting multi-terabyte archived partitions.

Why interviewers ask this: The interviewer is evaluating storage tiering, write layout, query locality, and a policy for late data.

queries

I would store adjacency lists by user and precompute the small relationship checks needed online.

  • Cassandra rows keyed by follower_id hold sorted followee IDs, distributing 2 billion append-heavy edges without cross-node transactions.
  • A reverse table keyed by followee_id supports follower pages; both writes carry the same edge version and are repaired asynchronously.
  • A Redis set caches follows for active users, so mutual status is two SISMEMBER operations well under 100 ms.
  • Full mutual lists use intersection only for users below 100,000 edges; celebrity accounts use a precomputed mutual subset to cap memory and CPU.

Why interviewers ask this: The interviewer is testing access-pattern-driven modeling, denormalization, and handling of high-degree graph skew.

Locked questions

  • 21

    Model metadata for 500 million documents across 100,000 tenants, with 10,000 writes per second and tenant-folder listing below 200 ms.

  • 22

    Model inventory for 10 million SKUs and 100,000 decrements per second during a flash sale, with a hard rule that available stock never becomes negative.

  • 23

    Model 500 million threaded comments, returning 50 at a time, supporting depth up to 8, and avoiding recursive database queries on reads.

    databasequeriesrecursion
  • 24

    Choose a data model for 2 million drivers updating location every 5 seconds, with 3 km nearby-driver queries below 100 ms p95.

    queriesmodeling
  • 25

    Design an immutable audit store accepting 100,000 events per second for 7 years, with searches over the latest 5 minutes completing in 2 seconds.

    designimmutability
  • 26

    Design caching for a product catalog with 500,000 reads and 2,000 price updates per second, where prices may be stale for at most 5 seconds.

    designcaching
  • 27

    A celebrity counter receives 2 million increments per second, may be off by 1%, and must converge within 10 seconds; how do you implement it?

  • 28

    Shard an order store growing by 5 TB per year and serving 100,000 queries per second, while each merchant needs 30-day range scans.

    shardingqueries
  • 29

    Two hundred application pods serve 20,000 requests per second, but PostgreSQL allows only 2,000 connections; size the connection pools and queueing behavior.

    postgrespoolingdata-structures
  • 30

    An API request contains 100 item IDs, its dependency allows 500 QPS, and the endpoint must finish within 300 ms p95; how do you batch and limit work?

    endpointsbatchdependencies
  • 31

    Serve 1 million original images in 20 sizes at 100,000 requests per second, with cached p95 below 100 ms and no eager generation of all variants.

    caching
  • 32

    Design a global rate limiter for 5 million requests per second across 10,000 tenants, allowing at most 2% burst overshoot in each aligned 1-second window.

    designrate-limiting
  • 33

    An ingestion service receives 500,000 events per second normally and 2 million for 5-minute bursts, must not drop data, and has only 1 million events per second of downstream capacity.

    capacity
  • 34

    Partition a Kafka stream carrying 1 million account events per second, with strict per-account order, 200 partitions, and consumers that may scale to 500 instances.

    partitioningkafka
  • 35

    Deduplicate 500,000 events per second for 30 days when 0.5% are duplicates, with bounded storage and no probabilistic false positives.

    queries
  • 36

    Publish an event within 2 seconds of each of 50,000 database transactions per second, with no lost event and no distributed transaction with Kafka.

    databasetransactionsdistributed
  • 37

    Store user profiles writable in 3 regions, with writes below 150 ms, read-your-own-writes, and up to 5 seconds of staleness for other users.

  • 38

    Design a like counter accepting 5 million updates per second across 4 regions, with values converging within 2 seconds and temporary error below 1%.

    design
  • 39

    A shared queue receives 100,000 jobs per second and can surge 10x, but checkout jobs must start within 1 second while email may wait 10 minutes.

    capacitydata-structures
  • 40

    Design a delayed queue for 100 million timers per day, with 1-second precision over a 24-hour horizon and at-least-once firing.

    designdata-structures
  • 41

    A consumer group has 100 partitions, may run 500 workers, retries each message at most 5 times, and must prevent one poison message from blocking its partition.

    partitioning
  • 42

    Thirty nodes must run one compaction task that takes 2 minutes, leases expire after 10 seconds, and overlapping writes are forbidden even during a 30-second pause.

  • 43

    Structure subscription billing with 6 plans, 3 payment providers, and 12 billing rules, while adding a provider must not change plan logic.

  • 44

    Design an import service for 20 file formats where third-party parsers are untrusted, each job has a 200 MB memory limit, and adding a format cannot redeploy the core API.

    designapimemory
  • 45

    Implement price calculation with 12 discount rules, deterministic output under 5 ms, and an audit trail explaining every applied rule.

  • 46

    Model an order workflow with 15 states, 15 commands, and 40 allowed transitions, where invalid transitions must be impossible and duplicate commands are expected for 24 hours.

  • 47

    Implement 10,000 concurrent transfers per second where many target the same account, balances cannot go negative, and no update may be lost.

    concurrency
  • 48

    A search request fans out to 20 shards, has a 120 ms deadline, and needs the best 50 results; how do you handle cancellation and stragglers?

    soft-skillsestimationsharding
  • 49

    A WebSocket node holds 100,000 clients with a 4 GB memory cap; some clients read at 1 KB/s while broadcasts arrive at 100 KB/s.

    memorywebsockets
  • 50

    Design a worker pool on 64 cores for 1 million short tasks per second, with a queue cap of 100,000 and graceful shutdown within 10 seconds.

    designlifecycledata-structures
  • 51

    Five minutes after a checkout deploy, HTTP 5xx rises from 0.2% to 18% and 1,200 orders per minute are at risk; walk me through your first 15 minutes.

    deploymenthttp
  • 52

    A regional API is returning 32% timeouts for 20 minutes, but all application pods report healthy; what do you do next?

    resilienceapi
  • 53

    Kafka consumer lag jumps from 30 seconds to 45 minutes after a schema release, delaying 8 million order events; how do you respond?

    schemakafka
  • 54

    A payment dependency starts returning 40% 503s during a sale, pushing your own checkout error rate to 22%; how do you contain the incident?

    incidentsdependencies
  • 55

    At 02:00, database primary CPU reaches 100%, API errors hit 27%, and failover would lose up to 20 seconds of asynchronous writes; make the call.

    databaseapiasync
  • 56

    A bad configuration reaches all 600 pods and raises login failures to 65%; configuration propagation takes 8 minutes, while a code rollback takes 3 minutes.

    configrollback
  • 57

    A cache cluster loses half its nodes, database QPS rises from 15,000 to 90,000, and the database limit is 100,000; what do you do in the next 10 minutes?

    databasecaching
  • 58

    A certificate expires and blocks 100% of internal gRPC calls for 11 minutes; service owners are all restarting pods independently. How do you lead the response?

    grpc
  • 59

    After a Go service deploy, API p99 rises from 180 ms to 1.4 seconds while p50 stays at 70 ms and CPU is unchanged; how do you investigate?

    deploymentapi
  • 60

    A Java service's p99 grows from 250 ms to 2.2 seconds every 6 minutes after a release, with CPU dropping during each spike.

  • 61

    A PostgreSQL query that took 40 ms now takes 3.8 seconds after the table grew from 20 million to 400 million rows; what is your process?

    queriespostgresconcurrency
  • 62

    A Python worker's throughput falls from 12,000 to 3,000 jobs per minute after adding JSON validation, but CPU remains at one core on a 16-core host.

    validationthroughputpython
  • 63

    A Rust service's p99 doubles from 90 ms to 180 ms after replacing a bounded channel with an unbounded one; average queue depth looks low.

    data-structures
  • 64

    A TypeScript API's p99 rises from 120 ms to 900 ms only when responses exceed 2 MB; network bandwidth is below 40%.

    typescript
  • 65

    An Elasticsearch search p99 rises from 300 ms to 4 seconds after adding one optional filter; only 8% of requests use it.

    search
  • 66

    gRPC latency rises from 35 ms to 600 ms after enabling retries, although the downstream's own processing time remains 30 ms.

    latencygrpcconcurrency
  • 67

    A PostgreSQL-backed service scales linearly to 6,000 RPS, then throughput stops while CPU reaches 85% and lock waits reach 30% of request time; how do you unblock growth to 12,000 RPS?

    postgresthroughput
  • 68

    A Go API hits 20,000 RPS at 95% CPU; profiles show 38% in JSON encoding and 22% in memory allocation, and the target is 35,000 RPS.

    memoryapi
  • 69

    At 50,000 RPS, Redis reaches 90% single-thread CPU even though the cluster has 12 nodes; one key receives 35% of all operations.

    redisconcurrency
  • 70

    A Kafka pipeline handles 300,000 events per second but stalls at 450,000; brokers are at 55% CPU, while one of 120 partitions carries 28% of traffic.

    partitioningkafkaci-cd
  • 71

    Kubernetes scales an API from 40 to 200 pods, but throughput stays at 30,000 RPS and database connections jump from 800 to 4,000.

    databaseapikubernetes
  • 72

    A Cassandra cluster sustains 80,000 writes per second but p99 exceeds 2 seconds at 110,000; compaction backlog grows by 500 GB per hour.

    backlog
  • 73

    An AWS service meets 15,000 RPS but must handle a launch at 60,000 RPS in six weeks; DynamoDB shows one tenant consuming 45% of write capacity.

    dynamodbcapacity
  • 74

    A retry bug created 180,000 duplicate orders over 6 hours; 7,000 were already shipped. How do you repair the data and prevent recurrence?

    resilience
  • 75

    A database says 2.4 million invoices exist, but object storage contains only 2.37 million PDFs after a worker outage; how do you recover the missing 30,000?

    database
  • 76

    After a CDC outage, Elasticsearch is missing 3% of 50 million product updates and contains stale versions for another 1%; search must remain online.

    search
  • 77

    A cross-region replication bug lost 12 minutes of profile updates for 84,000 users, while newer writes already exist for 19,000 of them.

    replication
  • 78

    A ledger balance table differs from immutable entries for 0.06% of 30 million accounts after a deployment; customers can still initiate transfers.

    deploymentimmutability
  • 79

    A migration converted timestamps in 200 million rows with the wrong timezone offset, affecting 14 days of data and active customer reports.

    migrations
  • 80

    Under 8,000 concurrent requests, two buyers occasionally reserve the last inventory unit; the check and decrement are separate SQL statements.

    sqlconcurrency
  • 81

    Two workers can process the same queue message after a 30-second visibility timeout, and the job takes up to 90 seconds; duplicate emails are reaching 4%.

    concurrencydata-structurescss
  • 82

    A Go map used by 64 goroutines crashes production once every few days with concurrent map writes; reads outnumber writes 10,000 to 1.

    concurrencyzero-to-one
  • 83

    A balance transfer locks source then destination, while a refund locks destination then source; deadlocks reach 300 per minute at peak.

    locking
  • 84

    A feature flag refresh races with requests: about 0.2% of users see a mix of old and new rules within one evaluation.

    feature-flags
  • 85

    A 2-second dependency slowdown causes retries across 40 services; traffic reaches 6 times normal and 70% of calls fail in a retry storm.

    resiliencedependencies
  • 86

    An authentication service fails, and every API synchronously calls it; within 4 minutes all 1,500 application threads are blocked.

    authapiconcurrency
  • 87

    A downstream timeout is set to 5 seconds, your endpoint SLO is 800 ms, and three sequential dependencies each retry twice.

    resiliencesloendpoints
  • 88

    A popular cache key expires every hour, causing a jump from 2,000 to 80,000 database QPS for 20 seconds and repeated partial outages.

    databasecaching
  • 89

    A queue consumer retries poison messages immediately; 0.1% bad events consume 60% of worker capacity and delay valid events by 25 minutes.

    capacitydata-structures
  • 90

    Product wants a revenue feature worth an estimated $400,000 per quarter, but the owning service has caused three SEV-1 incidents and 14 hours of downtime in 90 days; what do you propose?

    estimationincidents
  • 91

    A team spends 35% of each sprint fixing flaky integration tests, while a contractual feature is due in six weeks with a $1 million penalty.

    integrationflakyagile
  • 92

    A monolith takes 55 minutes to deploy and blocks 6 teams, but production incidents are low and the next two quarters are feature-heavy; do you split it?

    incidentsmonolithdeployment
  • 93

    A database version reaches end of support in four months, migration needs six engineer-weeks, and product has committed all capacity to a launch in three months.

    databasemigrationscapacity
  • 94

    An internal library is pinned 18 major versions behind, has two critical vulnerabilities, and is used by 70 services; a direct upgrade breaks 23 of them.

    vulnerabilities
  • 95

    A mid-level engineer opens a 2,000-line payment change two days before release; review finds no idempotency handling and only happy-path tests.

    idempotency
  • 96

    A junior engineer causes a 17-minute outage with a migration that locked a 300-million-row table; how do you handle the next day?

    soft-skillsmigrations
  • 97

    Two senior reviewers disagree for a week over Kafka versus PostgreSQL outbox polling for 4,000 events per second, blocking 5 engineers.

    conflictpostgreskafka
  • 98

    Code reviews take a median of 29 hours across an 8-person team, causing three-day lead time; quality is acceptable and no reviewer owns the queue.

    code-reviewdata-structures
  • 99

    An engineer you mentor misses three estimates by more than 100% because unknowns surface late; their code quality is strong.

    mentoringestimation
  • 100

    A staff engineer repeatedly approves changes without reading tests, and two escaped regressions caused 48 minutes of downtime; you are not their manager.

    testing