•CASE STUDY

Explaining Your Own Project Architecture (and Scaling It Up)

5 min read·945 words·Beginner

Asked at

2 candidate reports between May 2026 and Aug 2026

How to use this case study

SDE-2 / Mid

  • Be able to walk through a project you built end to end
  • Including components
  • Data flow
  • Storage and one failure you handled
  • In about 10 minutes

SDE-3 / Senior

  • Explain the trade-offs you made and why
  • Show how the design changes at 10x and 100x traffic

Staff / Principal

  • Show ownership across teams
  • Explain what you would do differently now
  • Redesign for planet scale with multi-region data and clear cost awareness

Problem RestatementProblem

Many interviews (JPMorgan, Visa and others) include a round where you explain a real project you built: what it does, how data flows from the trigger to the output, what each component owns, how failures are handled, and what you personally did. A common follow-up (asked at Visa for a Staff role): "Now imagine it has to work at the scale of Facebook or Google. Redesign it."

This page gives a structure for that answer, and a worked example of scaling a typical project.

Deep Dive — How to structure the explanationDeep dive

You have ten to fifteen minutes to explain something you spent two years on. The structure you pick decides whether the interviewer learns what you can do.

Weak

Tell it chronologically

"We started with a monolith, then in Q2 we added a queue, then we migrated to Postgres..."

Architecture diagram
%%{init: {"look":"handDrawn","handDrawnSeed":7,"theme":"base","fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","themeVariables":{"fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","fontSize":"16px","primaryColor":"#fff4e6","primaryBorderColor":"#1e1e1e","primaryTextColor":"#1e1e1e","secondaryColor":"#e7f5ff","tertiaryColor":"#ebfbee","lineColor":"#1e1e1e","textColor":"#1e1e1e","mainBkg":"#fff4e6","nodeBorder":"#1e1e1e","clusterBkg":"#f8f9fa","edgeLabelBackground":"#ffffff","classText":"#1e1e1e"}}}%%
flowchart LR
  T["Timeline narration"] --> H["History the interviewer cannot evaluate"]
  H --> NOW["Ten minutes gone, the current system never described"]
  T --> ME["No separation between what the team did and what you did"]
  ME --> UNK["Your actual contribution stays unknown"]

The order the system was built in is not the order it is understood in. Worse, a chronology hides ownership: nothing in it distinguishes a decision you made from one you inherited, which is the thing being assessed.

Good

Tour the components

Walk through the boxes: API layer, services, databases, queues, external systems.

Much better — the interviewer now has a picture, and this is the right backbone. What a tour leaves out is motion: a list of components does not show how a request becomes a result, which means the interesting parts — where state changes, where things can fail, where you had to choose — never come up.

Best

Follow one request, then go deep on what was hard

Architecture diagram
%%{init: {"look":"handDrawn","handDrawnSeed":7,"theme":"base","fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","themeVariables":{"fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","fontSize":"16px","primaryColor":"#fff4e6","primaryBorderColor":"#1e1e1e","primaryTextColor":"#1e1e1e","secondaryColor":"#e7f5ff","tertiaryColor":"#ebfbee","lineColor":"#1e1e1e","textColor":"#1e1e1e","mainBkg":"#fff4e6","nodeBorder":"#1e1e1e","clusterBkg":"#f8f9fa","edgeLabelBackground":"#ffffff","classText":"#1e1e1e"}}}%%
flowchart LR
  C["Context - 1 min: problem, users, rough scale"] --> A["Architecture - 3-4 min: trace ONE request end to end"]
  A --> D["Data - 2 min: what lives where, who owns it, consistency needs"]
  D --> H["Hard parts - 3 min: one or two problems you actually solved"]
  H --> WHAT["What you tried, what worked, what it cost"]
  WHAT --> Y["Your role - explicit: what you designed and decided"]
  Y --> Q["Leave time for follow-ups - the scaling question is coming"]
  • Trace a single request end to end. It forces every component to justify its existence and naturally surfaces the queues, caches and failure points in the order they matter.
  • Spend the middle on one or two hard problems — a race condition, a slow query, an outage — and say what you tried, what worked, and what it cost. This is the only part that distinguishes you from someone describing a system they read about.
  • State your own role explicitly. "I designed X, I decided Y" is not bragging; it is answering the question, and interviewers cannot assume it.
  • Give the numbers early. Requests per second and data size let the interviewer calibrate everything that follows — without them, they cannot tell whether your choices were reasonable.

Stop before the time is up. The follow-up — usually "now make it a hundred times bigger" — is where the strongest signal is, and running to the buzzer costs you that.

Example Project (Before Scaling)

An internal order notification service: when an order ships, it sends an email and SMS to the customer.

Architecture diagram
%%{init: {"look":"handDrawn","handDrawnSeed":7,"theme":"base","fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","themeVariables":{"fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","fontSize":"16px","primaryColor":"#fff4e6","primaryBorderColor":"#1e1e1e","primaryTextColor":"#1e1e1e","secondaryColor":"#e7f5ff","tertiaryColor":"#ebfbee","lineColor":"#1e1e1e","textColor":"#1e1e1e","mainBkg":"#fff4e6","nodeBorder":"#1e1e1e","clusterBkg":"#f8f9fa","edgeLabelBackground":"#ffffff","classText":"#1e1e1e"}}}%%
flowchart LR
    OS["Order Service"] -->|"REST call"| NS["Notification Service"]
    NS --> DB[("Postgres - templates, logs")]
    NS --> EM["Email provider"]
    NS --> SMS["SMS provider"]
  • Scale today: 50K notifications/day, one region, 2 app instances, one Postgres.
  • A hard part solved: the SMS provider sometimes timed out, so orders waited and sometimes got 2 texts. Fix: added timeouts, an idempotency key per (order, channel), and moved sending to a background worker.

Redesign for Planet ScaleScale

Assume 100x–1000x traffic: 50M notifications/day across many regions, with spikes (sales events). Walk through what breaks first, then fix it:

What breaksWhyFix
Synchronous REST call from Order ServiceSlow providers block orders, spikes overload usPublish an "order shipped" event to Kafka. Notification consumers process it asynchronously
Single PostgresWrite volume and single point of failureShard the notification log by user ID. Keep templates in a small replicated DB plus cache. Primary + replicas per shard
One regionLatency for global users, region outage = no notificationsMulti-region deployment. Events processed in the user's home region. Replicate critical data
Providers' rate limitsSpikes exceed provider quotasPer-provider rate limiters, priority queues (transactional before marketing), multiple providers with failover
Duplicate sends on retriesAt-least-once processingIdempotency key (event_id, channel) stored with a TTL. Check before sending
No visibilityHard to debug at scaleMetrics per channel and provider, tracing by event ID, dead-letter queue with alerts

3.1 Redesigned Architecture

Architecture diagram
%%{init: {"look":"handDrawn","handDrawnSeed":7,"theme":"base","fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","themeVariables":{"fontFamily":"Virgil, \"Segoe Print\", \"Comic Sans MS\", cursive","fontSize":"16px","primaryColor":"#fff4e6","primaryBorderColor":"#1e1e1e","primaryTextColor":"#1e1e1e","secondaryColor":"#e7f5ff","tertiaryColor":"#ebfbee","lineColor":"#1e1e1e","textColor":"#1e1e1e","mainBkg":"#fff4e6","nodeBorder":"#1e1e1e","clusterBkg":"#f8f9fa","edgeLabelBackground":"#ffffff","classText":"#1e1e1e"}}}%%
flowchart LR
    OS["Order Service"] -->|"OrderShipped event"| K[("Kafka - partitioned by user")]
    K --> W["Notification workers - per region"]
    W --> ID[("Idempotency store")]
    W --> PREF[("User prefs + templates cache")]
    W --> RL["Per-provider rate limiter"]
    RL --> P1["Email providers"]
    RL --> P2["SMS providers"]
    W -->|"failed after retries"| DLQ[("Dead-letter queue")]
    W --> LOG[("Sharded delivery log")]

3.2 Talking points that show depth

  • Consistency: notifications can be eventually consistent. The order DB stays strongly consistent. Say this out loud.
  • Replication (the key discussion at Visa): explain leader-follower replication, synchronous vs asynchronous replication (data loss vs latency), and how failover works.
  • Cost: SMS is expensive, so batch and deduplicate, respect user preferences, and prefer push notifications when possible.
  • Rollout: move from sync to async gradually. Dual-run for a week and compare delivery counts before switching off the old path.

Common Follow-up QuestionsFollow-ups

  • "What would you do differently?" Pick something real, like "I'd have made it event-driven from day one" or "I'd add load tests before launch".
  • "How did you know it worked?" Metrics, dashboards, alerts and the before/after numbers.
  • "What if the database is down?" Explain failover, what users see during it, and how data is protected (backups, point-in-time recovery).

Wrap-UpWrap-up

Present your project in a fixed order: context and scale, the boxes and one request's path, data ownership, one or two hard problems with numbers, operations, and your role. To scale it to planet size, name what breaks first and fix it step by step: make it async with events, shard and replicate data, go multi-region, respect provider limits, add idempotency, and build observability, while being honest about the trade-offs.

More Case Studies

Frequently Asked Questions

What is the Explaining Your Own Project Architecture (and Scaling It Up) system design question?

Explaining Your Own Project Architecture (and Scaling It Up) is a system design interview question asked at FAANG companies. It covers distributed systems, databases, caching and tests your ability to design scalable, production-ready systems. InterviewSkool's breakdown walks you through requirements, API design, architecture, and trade-offs.

Which companies ask the Explaining Your Own Project Architecture (and Scaling It Up) question?

JPMorgan, Visa have reportedly asked variations of this question in system design interviews. The exact wording may differ, but the core design challenges remain the same.

How should I prepare for the Explaining Your Own Project Architecture (and Scaling It Up) interview question?

Start with the problem statement and scale estimates, then design the high-level architecture. Focus on the core components, data model, and API design. InterviewSkool's breakdown covers the full solution with mermaid diagrams and trade-off analysis to help you prep efficiently.

What level is the Explaining Your Own Project Architecture (and Scaling It Up) question?

This question is suitable for SDE-2, SDE-3, and Staff engineer interviews. The level guidance on this page provides specific tips for each level — SDE-2 candidates should focus on core architecture, while Staff engineers should discuss trade-offs, monitoring, and incremental rollouts.

Practice with a Mock Interview

Apply what you learned in a live system design mock interview with InterviewSkool's AI interviewer.

Start System Design Interview →