Skip to main content

Interview card (SDS + EM)

General system design from System Design School, plus engineering-manager questions. Jot this on paper. Use company language only if they put it on the board.


System design (SDS method)​

Clock

Requirements 8–10 · APIs 3–5 · High-level 15 · Deep dives 15 · EM close 3–5

Open

Don’t start with Kafka. Restate the problem. Ask. Write NFRs before boxes.

Decompose

  1. Verbs → use cases (what “correct” means)
  2. Nouns → entities, who may write
  3. Adjectives → constraints; each adjective earns a component

Ask every time

Actors? Read vs write? Peak? Worse: stale / wrong / down / leaked? Retention? One region?

Big four (they conflict — pick from the business)

Availability · scalability · latency · consistency

Stronger consistency costs latency and availability. Use the weakest the feature can tolerate.

CAP in English

Split happens: CP = correct, maybe down. AP = up, maybe stale. Don’t apply one choice to the whole system.

Four pains → techniques (add only when a number forces it)

  • Too many users → replicate compute (LB) and/or data
  • Too much data → partition (key matches access; consistent hashing ~1/N remap)
  • Must feel fast → cache reads; async writes if the user can wait
  • Stale/inconsistent → the bill for the above

Core boxes

Stateless services + LB · DB replicas + cache · partition · queue

Five facts

  1. One box at a time, each forced
  2. Hash-mod-N remaps almost everything on resize; consistent hashing ~1/N
  3. AP answers stale; CP refuses
  4. Optimistic lock: version column, loser retries
  5. Queues are at-least-once → workers idempotent

Template (then amend)

Write → queue → workers update DB/cache → read from cache

If lying is expensive: cache is a performance layer, not truth. Show freshness. Timeout = in-doubt, don’t guess.

Deep-dive menu (pick 2)

Idempotent retry · poison/DLQ · hot key · backfill · authz on every read · saga if two systems can’t share a txn

Don’t

Cookie-cutter Redis+Kafka. CDN / object storage if time dies. Framework wars.


EM overlay (end of every board)​

  1. Team: who owns which box (platform vs product). Conway.
  2. v1 vs later: what you cut; what you refuse to cut.
  3. Done: tests on the trust boundary, not “we’ll add e2e later.”
  4. KPIs: lag, error budget, escaped defects — not story points.
  5. Ops: page workers, not heroes; on-call is a staffing issue.
  6. Exec: two hows + risk in English. Date vs fidelity, in the open.

Stakeholder spine

Outcome → constraint → two hows → risk → who/what we stop → ask for a decision.

Never “engineering says no.” Never “we’ll hardcode it.”


EM questions they may ask (~90s each)​

Delivery / design

  • Product wants it “like Excel by Friday.” What do you do?
  • How do you say no without blocking the outcome?
  • Design and a plan: who owns it, what’s v1, what you measure.
  • How do you work with architects / PMs / other EMs (matrix)?
  • How do you set technical direction without being the bottleneck?

Quality / ops

  • How do you measure engineering (KPIs)?
  • Incident: stabilize, evidence, comms, fix includes detection.
  • Quality is behind: where do you put tests first?
  • On-call / well-being / bus factor.

People

  • How do you mentor / give feedback / do performance if you inherit no framework?
  • Underperformance.
  • Disagreement with a peer (approach, not identity).
  • Feedback that changed you (IC hero → multiplier).
  • Why manager vs staying a senior IC? Have you managed before? (honest, then pivot)

You should ask them (pick 2)

What’s the weakest part of delivery right now? When product wants a shortcut, who has last call? How do you want this EM to show progress?


Name one product per box​

Whiteboard first as roles (load balancer, queue, cache). If they ask “what would you use?”, pick one. SDS default is AWS. If they say Azure, swap the Azure column. Don’t list three vendors.

Box you drawWhat it’s forAWS (say this)AzureAlso fine
DNS / CDNName → edge; static/cache near userRoute 53 + CloudFrontAzure DNS + Front Door / CDNCloudflare
Load balancerSpread HTTP/TCP across stateless appsALB (HTTP) / NLB (TCP) / “ELB”Azure Load Balancer / App Gatewaynginx, Envoy
API gatewayAuth, rate limit, routing, TLS terminateAPI GatewayAPI ManagementKong, NGINX
App / computeStateless request handlersECS, EKS, or LambdaApp Service, AKS, FunctionsKubernetes
CacheHot reads, sessions, rate-limit countersElastiCache RedisAzure Cache for RedisMemcached
SQL / OLTPStrong consistency, relations, moneyRDS Postgres / AuroraAzure SQL / Postgres FlexibleMySQL
NoSQL / KVHigh-scale key lookup, flexible docsDynamoDBCosmos DBCassandra, Mongo
Object storeBlobs, files, backups, imagesS3Blob StorageGCS
Queue (tasks)Buffer writes; at-least-once workersSQSStorage Queue / Service BusRabbitMQ
Log / streamOrdered partitions, replay, many consumersKafka on MSK / KinesisEvent HubsKafka
Pub/subFan-out notify (email, webhooks)SNSEvent Grid—
SearchFull-text, filtersOpenSearchCognitive SearchElasticsearch
IdentityWho is this user/serviceCognito / IAMEntra IDAuth0, Okta
SecretsKeys, DB passwordsSecrets ManagerKey VaultVault
Workflow / sagaMulti-step, compensateStep FunctionsDurable Functions / Logic AppsTemporal
ObservabilityMetrics, traces, logs, errorsCloudWatch + X-RayAzure MonitorDatadog, Prometheus, Sentry

One-liners so you don’t freeze

  • LB: “ALB in front of stateless app tasks.”
  • Writes that can wait: “SQS, workers, idempotent on message id.”
  • Replay / many consumer groups: “Kafka (or Event Hubs).”
  • Positions / money: “Postgres, not Redis as source of truth.”
  • Hot read: “Redis cache-aside, key includes version or as_of.”
  • Authz: “Gateway authenticates; service still checks entitlements on every read.”
  • Failures: “DLQ + Datadog on queue depth and worker errors.”

If they already have a stack, match it. Don’t start an AWS vs Azure fight.


What to draw (UML-ish, keep it ugly and labeled)​

System design is not a class diagram. Use a tiny set of symbols. Label every arrow.

SymbolDrawMeans
ActorStick figureUser, agent ops, lender, external bank
System / serviceRectangle, name insideAPI Gateway, Vote Service
DatabaseCylinderPostgres, Redis (write cache on Redis)
Queue / topicStacked rectangles or a long horizontal barSQS, Kafka
Object storeCylinder or parallelogram labeled S3Blobs
BoundaryBig dashed box around a groupRead path vs Write path; region
NoteDog-ear rectangle“at-least-once”, “idempotent key”

Arrows

  • Solid, one arrowhead: sync request/response (HTTPS, SQL)
  • Dashed: async (publish, enqueue)
  • Open arrow / “push”: stream or fan-out
  • Write the protocol or verb on the line: POST /votes, INCR, consume

Sequence (if they want a walkthrough)
Vertical lifelines = services. Horizontal arrows = calls. Time goes down. One happy path, then one failure (retry / timeout).

Don’t draw
Class diagrams, inheritance, every pod, “microservice mesh” unless asked.

Minimal board (copy this shape)

[User] --> [API Gateway / ALB] --> [App service]
| \
v v
[Queue] [Postgres]
|
v
[Worker] --> [Postgres]
--> [Redis cache]

Then add only what an adjective forced: authz box, DLQ, second DB, CDN.


10-minute drill​

Write verbs/nouns/adjectives, the four NFRs, at-least-once → idempotent, EM close list, Excel-by-Friday spine. Name one product per box (ALB, API Gateway, SQS, RDS, Redis, S3, Datadog). Draw the six-box sketch above once. Say the open once out loud.