Skip to content

Boarding pass · System Design Advanced

System Design · Advanced interview

An AI mock interview for senior engineers in system design rounds. Reason about consensus and distributed transactions, data at scale and hotspots, resilience patterns and observability, and driving an end-to-end design under real constraints.

20–30 minEstimated6 questionsTailored live12 model answersTo study
  • Voice interview
  • Live feedback
  • Browser-only
  • No installation required

Your report · sample

AI Readiness Score

/100
Content score English score

Finish the mock and get this report — scored on content and English, with concrete tips and a model answer for every question, plus a study plan.

Your flight path

Five steps to interview-ready.

From a quick warm-up to a personalised study plan — here's the whole loop, and what you get at each gate.

  1. Step 01

    Preparation

    Skim the topics and warm up — you're briefed before takeoff.

  2. Step 02

    AI Interview

    A realistic AI interviewer asks tailored questions — answer by voice or text.

  3. Step 03

    Instant Score

    Finish and get a 0–100 readiness score across content and English.

  4. Step 04

    AI Feedback

    Concrete tips and a rewritten model answer for every response.

  5. Step 05

    Study Plan

    A personalised plan targets your weakest areas — so the next run scores higher.

Preview the AI demo

See one answer scored, end to end.

The whole loop on sample data — question, your answer, instant feedback and a study plan. Hover to pause.

aevrofy.com/session · live demoPlaying

Interviewer · Question 1

“Tell me about yourself.”

Who it's for

  • Senior and staff engineers
  • Engineers who own architecture decisions
  • Anyone targeting senior/lead design rounds
  • Devs designing distributed systems

What you'll practice

  • Consensus and distributed transactions
  • Hotspots, estimation and zero-downtime migration
  • Resilience patterns and observability
  • Driving an end-to-end design

Topics covered

What this level expects.

Distributed systems

  • Consensus
  • Distributed transactions
  • Delivery semantics

Data at scale

  • Hotspots
  • Estimation
  • Zero-downtime migration

Resilience

  • Cascading failures
  • Observability
  • Cache stampede

Design process

  • End-to-end design
  • Consistency choices
  • Bottlenecks

Practice questions

12 questions, with model answers.

Read them, then run the live mock to answer out loud and get scored. Tap any question to reveal a model answer.

01Why is consensus hard, and what does an algorithm like Raft give you?

Consensus — getting multiple nodes to agree on a value despite failures and network delays — is hard because messages can be lost, delayed, or reordered, and you can't distinguish a slow node from a dead one. Algorithms like Raft and Paxos provide agreement and a consistent replicated log as long as a majority (quorum) is alive, by electing a leader and committing entries once a majority acknowledges. They underpin things like leader election, configuration stores, and strongly consistent databases.

02How do you handle a transaction that spans multiple services or databases?

You generally avoid distributed ACID transactions because two-phase commit is slow and blocks on coordinator failure. The common pattern is a saga: a sequence of local transactions, each with a compensating action to undo it if a later step fails, coordinated via orchestration or events. You accept eventual consistency and design idempotent, reversible steps. The key trade-off is 2PC's strong consistency and locking versus sagas' availability and complexity.

03What's the difference between at-least-once, at-most-once, and exactly-once delivery?

At-most-once may drop messages but never duplicates; at-least-once never drops but may duplicate (the usual default for reliability); exactly-once is the ideal but is very hard across a network. In practice you get exactly-once *effects* by combining at-least-once delivery with idempotent consumers or deduplication, rather than truly delivering once. Designing consumers to tolerate duplicates is the realistic path.

04How do you design around a hotspot or 'celebrity' problem?

A hotspot is a key that gets disproportionate traffic — a celebrity's profile, a trending item — overloading whatever shard or cache holds it. Mitigations: replicate/fan-out that hot data to many caches or read replicas, add a dedicated cache layer with high TTL, shard the hot key further (e.g. key-splitting for counters), and use request coalescing. The principle is to spread a single hot key's load instead of letting one node own it.

05How and why do you do back-of-the-envelope estimation in a design?

You estimate scale early — requests/sec, data volume per day, storage growth, bandwidth, memory for a cache — to ground the design in reality and reveal what's hard. For example, QPS = daily active users × actions × peak factor / 86400 tells you how many servers and whether one database suffices. It's not about precision but about catching order-of-magnitude problems before you design the wrong thing.

06How do you change a schema or migrate data at scale with zero downtime?

Use expand-and-contract: add the new column/table (expand) while writing to both old and new (dual-write), backfill existing data in batches, switch reads to the new path once verified, then remove the old (contract). Each step is backward-compatible and reversible, and you deploy code and schema changes separately so old and new versions coexist. The goal is no single step that requires a stop-the-world cutover.

07How do you stop a failure in one service from cascading across the system?

Apply isolation and fail-fast patterns: timeouts on every call so a slow dependency doesn't pile up threads, circuit breakers that stop calling a failing dependency and let it recover, bulkheads that isolate resource pools per dependency, retries with exponential backoff and jitter, and graceful degradation/fallbacks. Backpressure and load shedding cap intake. Together these contain a failure to its blast radius instead of letting it spread.

08How do you design observability for a distributed system?

Three pillars: metrics (rates, errors, latency percentiles — the RED/USE methods) for dashboards and alerts; structured logs for detail; and distributed tracing (propagating a trace id across services) to follow a request end-to-end and find where latency or errors originate. You tie alerts to SLOs/error budgets rather than raw thresholds so you alert on user-impacting symptoms. Observability is what makes incidents debuggable when many services interact.

09What is a cache stampede / thundering herd, and how do you prevent it?

When a popular cached key expires, many concurrent requests miss simultaneously and all hammer the database to recompute it, potentially overwhelming it. Prevent it with request coalescing (a single in-flight recompute, others wait), early/probabilistic recomputation before expiry, locks or single-flight on the recompute, and staggered TTLs so keys don't expire together. The aim is one recompute per expiry, not thousands.

10Walk me through designing a URL shortener end-to-end.

Clarify scope and scale (reads ≫ writes, billions of URLs, low latency). API: POST a long URL → short code, GET code → redirect. Generate codes via a counter base-62 encoded or a hash with collision handling. Store the mapping in a key-value/SQL store, sharded by code; cache hot codes in Redis and front redirects with a CDN. Add analytics asynchronously via a queue. Then discuss trade-offs: code length vs space, custom aliases, consistency of click counts, and handling hotspots.

11How do you decide between consistency and availability for a specific feature?

Ask what a stale or rejected read costs the user. For money, inventory, or anything where a wrong value causes real harm, choose consistency even at the cost of availability. For feeds, counts, recommendations, or social data where brief staleness is invisible, choose availability and reconcile eventually. The decision is per-feature, not system-wide, and you should be able to justify it in business terms, not just technical ones.

12How do you identify and remove bottlenecks as a system grows?

Measure under realistic load and find the constrained resource — CPU, memory, I/O, locks, a single database, network — using metrics, profiling, and load tests rather than guessing. Then relieve it: cache, add read replicas, shard, move work async, optimize the hot query, or scale the tier. Bottlenecks move once you fix one, so it's iterative — you re-measure and address the new limiting factor, guided by the actual data.

Preparation tips

Walk in ready.

  • Be able to compare 2PC and the saga pattern
  • Have a concrete back-of-the-envelope estimate ready
  • Know circuit breakers, bulkheads and backpressure
  • Explain at-least-once + idempotency for exactly-once effects

Ready for the real thing?

Run a 6-question System Design mock interview, answer out loud, and get a readiness score with tips and model answers.

More advanced interviews

Aevrofy · System Design advanced interview prep