Delivery framework timeline from requirements to deep dives

Delivery framework

A repeatable structure for system design interviews — requirements, entities, API, high-level design, deep dives — built to stop the most common failure mode: running out of time before you deliver a working system.

Why you need a delivery framework

Most mid-level candidates who fail don't fail on knowledge. They run out of time and never finish a working system — and it lands on the scorecard as vague “time management” feedback.

Analogy diagram: election rally route mapped to interview steps.
Interview delivery is a rally route — fixed stops, fixed order, finish on time.

The fix usually isn't working twice as fast. It's spending your 45 minutes on the right things, in the right order.

Overall structure

The framework is a fixed sequence with a timing budget. Follow it and you stay focused on what's graded — and you have a script to fall back on when nerves hit.

Interviewers don't grade “framework adherence” as its own line item — it usually shows up under communication. But candidates who follow a structure consistently finish with a working system. Candidates who don't, usually don't.

Six-step delivery framework with feedback loops: high-level design satisfies functional requirements; deep dives satisfy non-functional requirements.
Recommended system design interview structure — stay linear, then loop back to requirements as you harden.

Read the diagram left to right first — then notice the two arcs looping back to requirements:

  • High-level design → Functional requirements: by the end of HLD, every feature you promised should have a working path on the whiteboard.
  • Deep dives → Non-functional requirements: scale, latency, consistency, and failure modes get proven here — not as random rabbit holes.
  1. Requirements — ~5 minutes (functional + non-functional + optional capacity math)
  2. Core entities — ~2 minutes
  3. API or interface — ~5 minutes
  4. Data flow — optional ~5 minutes — skip if not a pipeline-style system (dashed box on purpose)
  5. High-level design — ~10–15 minutes — primary goal: satisfy functional requirements
  6. Deep dives — ~10 minutes — primary goal: satisfy non-functional requirements
Interview takeaway

Stay linear to deliver a working system. Use deep dives to prove NFRs — don't invent microservices before the user path works.

Requirements (~5 minutes)

Goal: get a clear understanding of the system you're asked to design. Break requirements into two sections.

1) Functional requirements

These are your “Users / clients should be able to…” statements — the core features. Discuss them first, often as a back-and-forth with your interviewer like you're talking to a product manager: “Does the system need to do X?” “What would happen if Y?”

Example — Twitter-like system:

  • Users should be able to post tweets.
  • Users should be able to follow other users.
  • Users should be able to see tweets from users they follow.

Example — cache system:

  • Clients should be able to insert items.
  • Clients should be able to set expirations.
  • Clients should be able to read items.

Non-functional requirements

These describe system qualities — phrased as “The system should be able to…” or “The system should be…”

Example — Twitter-like system:

  • Highly available — prioritize availability over consistency.
  • Scale to support 100M+ DAU.
  • Low latency — render feeds in under 200ms.

Rank them — don't list eight and hope one lands:

  1. Scale — read/write ratio and traffic shape. Decides whether you need caching or sharding at all.
  2. Latency — name the one path with a tight SLA (search, feed, checkout). Everything else just needs to be reasonable.
  3. Consistency vs. availability — pick a side per data type (CAP). This decides your database and replication strategy.

Capacity estimation

Skip ritual back-of-envelope math. Do the calculation only when the number will change your design.

In most scenarios you're designing a large distributed system — that's reasonable to assume. Many candidates calculate storage, DAU, and QPS only to conclude “ok, so it's a lot.” As interviewers, we gain nothing except that you can do arithmetic.

Suggested line: “I'll skip upfront estimations and do targeted math during design if a number would change my architecture.”

Still learn to estimate quickly — it helps you reason about trade-offs. Don't worry if you're bad at mental math under pressure; most people are. Round aggressively.

Core entities (~2 minutes)

A great design interview is a loop: requirements shape the design, and the design exposes new requirements.

Identify and list the core entities of your system. This defines terms, clarifies the data central to your design, and gives you a foundation to build on. These are the entities your API will exchange and your system will persist.

In the interview, jot a bulleted list and say it's a first draft.

Why not the full data model yet? Because you don't know what you don't know. As you design, you'll discover new entities and relationships. Start small; iterate. Once you're in high-level design and know what state updates on each request, add relevant columns/fields.

Twitter example:

  • User
  • Tweet
  • Follow

Useful questions:

  • Who are the actors in the system? Do roles overlap?
  • What nouns / resources satisfy the functional requirements?

API or system interface (~5 minutes)

Before high-level design, define the contract between your system and its users. For product-style interviews this often maps directly to functional requirements (but not always!). Use this contract to guide your architecture.

Quick decision — which protocol?

  • REST — HTTP verbs (GET, POST, PUT, DELETE) on resources. Default for most interviews.
  • GraphQL — clients specify exactly what data they want. Use when diverse clients have different data needs.
  • RPC (gRPC) — action-oriented, faster for service-to-service. Use for internal APIs when performance is critical.
  • WebSockets / SSE — for real-time features; design your core API first.

For Twitter, choose REST and design endpoints using core entities as plural resources:

POST /v1/tweets
body: { "text": string }

GET /v1/tweets/{tweetId} → Tweet

POST /v1/follows
body: { "followee_id": string }

GET /v1/feed → Tweet[]

[Optional] Data flow (~5 minutes)

For some backend systems — especially data-processing systems — describe the high-level sequence of actions from inputs to outputs. If your system doesn't involve a long sequence of actions, skip this.

We usually define data flow as a simple list. You'll use it to inform high-level design next.

Web crawler example:

  1. Fetch seed URLs
  2. Parse HTML
  3. Extract URLs
  4. Store data
  5. Repeat

High-level design (~10–15 minutes)

Now design the high-level architecture: boxes and arrows for servers, databases, caches, queues, and how they interact. Whiteboard or Excalidraw. See Key technologies for common components.

Don't overthink this. Primary goal: an architecture that satisfies the API — and thus the requirements. In most cases, go one-by-one through your API endpoints and build the design sequentially.

Building a Twitter-like high-level design endpoint by endpoint.
Build the simple path first — feed efficiency belongs in deep dives.
  1. Narrate data flow and what state changes on each request.
  2. When a request hits the DB, document relevant columns next to it on the board.
  3. Skip obvious User columns (name, email, password hash) — focus on fields that matter to your design.
  4. Talk through your thought process continuously — silence reads as confusion.

Deep dives (~10 minutes)

Astute readers noticed our simple Twitter design is woefully inefficient at fetching feeds. That's fine. Deep dives are where you harden the design:

  • Ensure it meets all non-functional requirements.
  • Address edge cases.
  • Identify and fix bottlenecks.
  • Improve based on probes from your interviewer.

Seniority matters: junior candidates can expect the interviewer to point out weak spots. Senior candidates should identify them and lead. Staff+ goes further into org-level trade-offs.

Cost and performance levers

Interview Q&A by level

Practice saying these out loud for the delivery framework. Interviewers grade clarity and judgment more than buzzwords.

Interview takeaway

Match depth to the bar: define → trade off → operate. Don't dump principal answers in an entry-level screen.

Conclusion

Memorize the sequence: Requirements → Entities → API → (Data flow) → High-level design → Deep dives. It prevents “time management” failures and delivers what interviewers actually need — a working system, explained clearly.

Run this loop well and you naturally hit the four qualities every rubric rewards:

Four colorful cards: problem navigation, solution design, technical excellence, and communication.
The framework exists to make these four qualities show up on their own.
  • Top 3 functional requirements — not forty.
  • Quantified non-functional requirements — not vague “low latency”.
  • Skip ritual math; do math when it changes the design.
  • Simple HLD first; complexity in deep dives.
  • Collaborate in deep dives — don't filibuster.

Worked micro-script: design a URL shortener

Timebox cheat sheet

  • 0–5m clarify
  • 5–10m capacity
  • 10–20m API+data+HLD
  • 20–35m deep dive
  • 35–45m failures & trade-offs

Failure modes to mention

Call out at least one dependency failure (DB down, cache stampede, queue lag, region outage) and your mitigation (timeouts, retries with jitter, degraded mode, circuit breaker).

← Lattice