Course → Module 9: Advanced Topics & Emerging Architectures

The Interview Is Not a Test

You have spent eight modules learning how systems work: feedback loops, scaling patterns, database tradeoffs, distributed consensus, and real-world case studies. This session is about communicating that knowledge under pressure. A system design interview is 45 minutes. You cannot cover everything. The interviewer knows this. They are not measuring completeness. They are measuring how you think, how you prioritize, and how you handle the gap between what you know and what you do not.

This session covers time management, communication structure, tradeoff articulation, ambiguity handling, and the skill of saying "I don't know" without losing credibility.

The 45-Minute Framework

Most system design interviews at major tech companies are 45 to 60 minutes. After introductions and closing questions, you have roughly 35 minutes for the actual design. Spending that time without structure leads to one of two failure modes: either you spend 25 minutes on requirements and never reach the architecture, or you start drawing boxes immediately and design a system that solves the wrong problem.

Phase Time Goal Common Mistake
1. Requirements 5 min Clarify functional and non-functional requirements. Agree on scope. Assuming requirements instead of asking. Designing for features the interviewer did not mention.
2. Estimation 5 min Estimate scale: users/sec, storage, bandwidth. Identify the dominant constraint. Skipping estimation entirely. Or spending 10 minutes on exact math that does not change the design.
3. High-Level Design 15 min Draw the architecture. Identify major components, data flow, and API contracts. Going too deep on one component. Forgetting to show data flow between components.
4. Deep Dive 15 min Drill into 1-2 components. Discuss database schema, caching, or scaling approach. Waiting for the interviewer to choose the topic. Not discussing tradeoffs.
5. Wrap-Up 5 min Summarize. Mention what you would add with more time. Ask questions. Ending abruptly. Not acknowledging known limitations of the design.

These time blocks are guidelines, not rigid boundaries. If the interviewer asks a follow-up question during your high-level design, answer it. The framework prevents you from losing track of time, not from having a conversation.

flowchart LR A[Requirements
5 min] --> B[Estimation
5 min] B --> C[High-Level
Design
15 min] C --> D[Deep Dive
15 min] D --> E[Wrap-Up
5 min]

Communicating Tradeoffs

Every architectural decision is a tradeoff. SQL vs NoSQL. Synchronous vs asynchronous. Push vs pull. Cache-aside vs write-through. The interviewer expects you to identify these tradeoffs, articulate both sides, and justify your choice in the context of the problem.

A weak answer: "I'll use PostgreSQL for the database." A strong answer: "For the user profile service, I'll use PostgreSQL because we need strong consistency for account data, the data is relational (users have addresses, payment methods, order history), and the read/write ratio is heavily read-biased, which PostgreSQL handles well with read replicas. If this were a session store with high write throughput and flexible schema, I'd choose Redis or DynamoDB instead."

The structure is: decision, reasoning, context, and the alternative you considered. This pattern works for every choice in the design. Practice it until it becomes automatic.

Tradeoffs to have ready for common decisions:

Decision Option A Option B Key Tradeoff
Database SQL (PostgreSQL, MySQL) NoSQL (DynamoDB, Cassandra) Consistency + joins vs. write throughput + horizontal scale
Communication Synchronous (REST, gRPC) Asynchronous (Kafka, SQS) Simplicity + immediate response vs. decoupling + resilience
Consistency Strong consistency Eventual consistency Correctness guarantee vs. availability + latency
Caching Cache-aside Write-through Simple invalidation vs. always-fresh cache
Scaling Vertical Horizontal Simpler ops vs. near-unlimited capacity

Handling Ambiguity

The interviewer will give you an intentionally vague prompt. "Design Spotify." "Build a URL shortener." "Design a chat application." The vagueness is the test. Candidates who immediately start designing reveal that they build systems without understanding requirements. Candidates who ask clarifying questions demonstrate that they know requirements drive architecture.

Good clarifying questions follow a pattern. Start with users and use cases: "Who are the users? What are the core actions they take?" Then scale: "How many daily active users? What is the read/write ratio?" Then constraints: "Is there a latency requirement? Are there regulatory constraints on data storage?" Then scope: "Should I design the recommendation engine, or focus on playback and playlist management?"

You do not need to ask every possible question. Five to seven targeted questions are enough. The goal is to demonstrate that you think about problems before solving them, and to give the interviewer a chance to steer you toward the areas they care about.

Saying "I Don't Know"

There will be moments when you do not know the answer. The interviewer asks about a specific algorithm, a technology you have not used, or a scaling technique you have only read about. How you handle this moment matters more than the missing knowledge.

The interviewer is not testing whether you know the answer. They are testing whether you can find it while thinking out loud.

Three approaches that work:

Acknowledge and reason from first principles. "I haven't worked with CRDTs directly, but I understand they are data structures designed for eventual consistency in distributed systems. For this collaborative editor, I would need a structure that allows concurrent edits without coordination. Let me think through what properties that requires."

Acknowledge and offer an alternative. "I'm not deeply familiar with Cassandra's compaction strategies, but I know the general approach to LSM-tree compaction. For this write-heavy workload, I'd choose a compaction strategy that favors write throughput over read performance. In production, I'd benchmark size-tiered vs leveled compaction."

Acknowledge and move on. "I don't know the specifics of that algorithm. Let me note it as a detail to research and continue with the high-level design so we use the remaining time well."

What never works: guessing confidently, changing the subject without acknowledging the gap, or freezing.

Common Anti-Patterns

The resume recital. Spending five minutes explaining your current job before addressing the problem. The interviewer already has your resume. Start with the problem.

The technology parade. Listing every technology you know without connecting it to the problem. "We could use Kafka, or RabbitMQ, or SQS, or Redis Streams." The interviewer wants to know which one and why.

The premature optimization. Adding caching, sharding, and CDNs before establishing that the basic design works. Start simple. Scale when the numbers demand it.

The monologue. Talking for 10 minutes without checking in. The interview is a collaboration. Pause periodically: "Does this direction make sense? Should I go deeper here or move on?"

The perfectionist. Refusing to draw a component until the design is perfect in your head. Sketching a rough version and iterating is faster and more communicative than silent thinking.

The Wrap-Up That Leaves an Impression

With five minutes remaining, summarize what you designed and what you left out. This shows self-awareness and architectural maturity.

"We designed a music streaming service with a microservices architecture. The core components are user management with PostgreSQL, a catalog service backed by Elasticsearch for search, an audio streaming service using a CDN for delivery, and a playlist service using Redis for session data. We discussed the fan-out strategy for the activity feed and the caching layer for popular tracks. Given more time, I would address the recommendation engine, offline playback synchronization, and a more detailed approach to rights management and geo-restrictions."

This takes 60 seconds and communicates that you understand what the system needs beyond what you had time to design.

Further Reading

Assignment

Set a 45-minute timer. Design Spotify (or another music streaming service). Follow the framework exactly.

  1. Minutes 0-5: Requirements. Write down 5-7 clarifying questions and answer them yourself. Define the scope: playback, search, playlists, social features. Pick three to focus on.
  2. Minutes 5-10: Estimation. Estimate DAU, concurrent listeners, catalog size, average song size, peak bandwidth. Show your math.
  3. Minutes 10-25: High-Level Design. Draw the architecture. Label every component and every arrow. Include at least: client, CDN, API gateway, 3+ backend services, 2+ data stores.
  4. Minutes 25-40: Deep Dive. Pick two components. For each, discuss the data model, scaling strategy, and one specific tradeoff you made.
  5. Minutes 40-45: Wrap-Up. Write a 3-sentence summary of what you built and what you would add with more time.

After the timer ends, review your notes. Where did you run out of time? Which phase took longer than expected? Practice this exercise three times with different systems (chat app, ride-hailing, e-commerce) and track how your time allocation improves.