You’ve done everything right. You gathered requirements, sketched a clean high-level architecture, discussed scale, and the interviewer is nodding along.
Then they say: “Great, now let’s dive deeper into one component.”
And this is where everything falls apart.
You either go too shallow (just restating what you already said), pick the wrong component to dive into, or get so deep into implementation details that you lose sight of the system. After 15 minutes of rambling, the interviewer has learned nothing new about your abilities.
Here’s the brutal truth: The deep dive phase is where senior-level thinking is tested. Anyone can sketch boxes and arrows. But can you design the internals of a critical component while keeping the whole system in context? That’s what separates an L5 from an L4.
Let me show you exactly why candidates fail this phase and how to fix it.
The Three Fatal Deep Dive Mistakes
Mistake #1: Going Too Shallow
What it looks like:
Interviewer: “Let’s deep dive into how you’d design the URL shortening service.”
Candidate: “Sure, so the service takes a long URL, generates a short code, and stores it in the database. When users access the short URL, we look it up and redirect them.”
[Awkward silence]
Why it fails:
You just repeated your high-level design. The interviewer already knows this from your architecture diagram. They want to know:
- How exactly do you generate unique short codes?
- What happens when two requests try to create the same short URL simultaneously?
- How do you handle the database at 10K requests/second?
- What about analytics? How do you count clicks without slowing down redirects?
The signal you’re sending: “I can draw boxes, but I don’t know how to actually build systems.”
Mistake #2: Choosing the Wrong Component
What it looks like:
Interviewer: “Pick a component to dive deeper into.”
Candidate: “Let me talk about the load balancer configuration.”
Why it fails:
Load balancers are mostly off-the-shelf solutions. Diving into nginx config or AWS ALB settings shows you don’t understand what interviewers care about.
They want you to deep dive into the hard engineering problems specific to this system:
- For URL shortener: The ID generation algorithm
- For Twitter: The fan-out write system for feeds
- For Instagram: The image upload and CDN distribution pipeline
- For messaging: The real-time message delivery system
The signal you’re sending: “I can’t identify which parts of the system are actually complex.”
Mistake #3: Losing the System Context
What it looks like:
Candidate: “So for the database schema, we’ll have a
urlstable with columns: id as BIGINT auto-increment, original_url as VARCHAR(2048), short_code as CHAR(7) with a unique index using B-tree for O(log n) lookups, created_at as TIMESTAMP, and we’ll need to decide between InnoDB vs MyISAM for the storage engine. InnoDB gives us ACID but MyISAM has better read performance. Actually, we should also consider the page size and buffer pool configuration…”
Why it fails:
You’ve gone so deep into MySQL internals that you’ve forgotten:
- How does this component interact with the rest of the system?
- What happens when this database becomes a bottleneck?
- How does this design decision impact your requirements?
The signal you’re sending: “I get lost in details and can’t maintain the bigger picture.”
The Deep Dive Framework: What Actually Works
Here’s the structure that works for any component:
Step 1: Restate the Component’s Job (30 seconds)
Start by clearly defining what this component does and why it’s important.
"Let me deep dive into the URL generation service since that's
the core of this system. This component needs to:
1. Generate unique short codes for every long URL
2. Handle 1,000 requests/second based on our estimates
3. Guarantee no collisions between short codes
4. Be fast - we can't make users wait while generating codes
This is critical because if we get collisions, users will see
the wrong websites, which is a security issue."
Why this works: You’ve framed the problem and shown you understand what matters.
Step 2: Present Your Approach (2-3 minutes)
Explain your solution at a high level before diving into details.
"I'm considering two approaches:
Approach 1: Hash-based generation
- Hash the long URL using MD5/SHA256
- Take first 7 characters as short code
✅ Fast, deterministic
❌ Collision probability, not truly unique
Approach 2: Counter-based generation
- Use a distributed counter to generate sequential IDs
- Convert to base62 (a-z, A-Z, 0-9) for the short code
✅ Guaranteed unique, predictable size
❌ Need to handle distributed ID generation
I'd go with Approach 2 because uniqueness is non-negotiable
for this system. Let me explain how we'd implement the
distributed counter..."
Why this works: You’ve shown trade-off thinking and made a justified decision.
Step 3: Design the Internals (5-7 minutes)
Now go deep on the actual implementation.
"For the distributed ID generation, we have a few options:
Option A: Database auto-increment
- Single database generates sequential IDs
- Simple but creates a single point of failure
- Bottleneck at high scale
Option B: UUID generation
- Each server generates its own UUIDs
- No coordination needed
- But UUIDs are 128-bit, too long for our use case
Option C: Snowflake-style IDs (I'd recommend this)
- 64-bit IDs composed of:
- 41 bits: timestamp in milliseconds
- 10 bits: machine ID (supports 1024 servers)
- 13 bits: sequence number (8192 IDs per ms per machine)
This gives us:
- ~8 million unique IDs per second per machine
- Naturally ordered by time
- No coordination between servers
- Each server is autonomous
Then we convert this 64-bit ID to base62:
- 64-bit number → 10-11 character base62 string
- We can use the first 7 chars as our short code
- Chance of collision in first 7 chars: ~1 in billion for
millions of URLs
Should I walk through the base62 encoding algorithm or discuss
how we'd handle the rare collision case?"
Why this works:
- You’ve gone deep enough to show expertise
- You’ve explained your reasoning
- You’ve shown you understand the math
- You’re checking if the interviewer wants more detail
Step 4: Connect Back to Requirements (1-2 minutes)
Show how this design satisfies the original requirements.
"Let me verify this meets our requirements:
✅ Unique IDs: Snowflake guarantees uniqueness per machine
✅ 1000 requests/sec: Each server can handle 8M/sec, way over
✅ Fast: ID generation is just bit manipulation, <1ms
✅ Scalable: Add more servers, each gets unique machine ID
✅ No collisions: Built into the algorithm
The one trade-off is that short codes aren't truly random -
they increase over time. If that's a security concern (someone
could guess recent URLs), we could add a layer of obfuscation.
Should we discuss that?"
Why this works: You’ve closed the loop and shown you haven’t lost sight of the bigger picture.
Step 5: Discuss What Could Go Wrong (2-3 minutes)
Senior engineers think about failure modes.
"Here are the potential issues:
1. Clock skew between servers
- If server clocks aren't synchronized, we could get ID conflicts
- Solution: Use NTP to sync clocks, or use a logical clock
2. Machine ID assignment
- Need a service to assign unique machine IDs to new servers
- Could use ZooKeeper or etcd for coordination
- Fallback: Use IP address hash as machine ID
3. Service restart with same machine ID
- Sequence number resets to 0, potential conflicts
- Solution: Wait 1ms on startup to guarantee new timestamp
4. Running out of machine IDs (1024 limit)
- At massive scale, we'd need to reuse machine IDs
- Solution: Track decommissioned servers and reuse IDs
Would you like me to discuss any of these in more detail?"
Why this works: You’ve demonstrated production-level thinking and anticipated the follow-up questions.
How to Choose Which Component to Deep Dive
If the interviewer gives you the choice, pick the component that:
- Involves complex algorithms or logic (not just CRUD operations)
- Is unique to this system (not generic infrastructure)
- Directly impacts key requirements (scale, latency, reliability)
Good Choices by Problem Type:
URL Shortener:
- ✅ Unique ID generation algorithm
- ✅ Analytics system (how to count without blocking redirects)
- ❌ Database schema (too simple)
- ❌ Load balancer config (off-the-shelf)
Twitter/Feed System:
- ✅ Fan-out write system (push vs pull model)
- ✅ Timeline ranking algorithm
- ❌ User authentication (not unique to Twitter)
- ❌ CDN setup (commodity service)
Messaging App:
- ✅ Real-time message delivery (WebSocket management)
- ✅ Unread count tracking at scale
- ❌ Message storage schema (straightforward)
- ❌ Rate limiting (standard pattern)
Video Streaming:
- ✅ Adaptive bitrate streaming logic
- ✅ Video encoding pipeline
- ❌ User registration (generic)
- ❌ Payment processing (third-party)
The pattern: Choose the component where you can demonstrate advanced problem-solving, not basic CRUD knowledge.
The Time Management Trap
Here’s where candidates lose points even with good technical skills:
The typical failure pattern:
- 0-5 min: Requirements ✅
- 5-15 min: High-level design ✅
- 15-30 min: Still drawing high-level design 😬
- 30-40 min: Rushed deep dive, barely scratching the surface 💀
- 40-45 min: No time for bottlenecks or trade-offs 💀
The correct timing:
- 0-5 min: Requirements
- 5-15 min: High-level design
- 15-30 min: Deep dive (this should be your LONGEST phase)
- 30-40 min: Bottlenecks and scaling
- 40-45 min: Wrap-up and final questions
The deep dive deserves 15 minutes minimum. If you only have 5 minutes left when you start deep diving, you’ve already failed time management.
Practice Technique: The Isolated Deep Dive
Here’s how to get good at deep dives:
-
Pick a system design problem (URL shortener, messaging app, etc.)
-
Spend 5 minutes identifying 3 components worth deep diving
-
Set a 10-minute timer for each component
-
Practice explaining just that component out loud
- Restate its purpose
- Present your approach
- Design the internals
- Connect to requirements
- Discuss failure modes
-
Record yourself and watch it back
Key practice questions:
- “Did I go deep enough to show senior-level thinking?”
- “Did I lose sight of the overall system?”
- “Would someone understand how to implement this from my explanation?”
- “Did I discuss trade-offs and failure modes?”
Do this for 10 different components across 5 different problems. You’ll start to see the patterns.
Red Flags That Kill Your Deep Dive
Interviewers are watching for these warning signs:
❌ “I’m not sure exactly how this works, but I think…”
- Shows you’re guessing, not reasoning from principles
❌ 15 minutes of continuous talking without checking in
- Might be going down wrong path, interviewer can’t interject
❌ “We’ll just use a library for that”
- Avoiding the hard problem instead of solving it
❌ Details without context
- Talking about indexes without explaining why they matter
❌ No mention of what could go wrong
- Overconfident, no production experience
Green Flags That Signal Senior-Level
✅ “Let me verify this meets our requirements…”
- Constantly tying back to the bigger picture
✅ “Here’s what could go wrong and how we’d handle it…”
- Production-level thinking
✅ “Should I go deeper here, or would you like me to move on?”
- Respecting the interviewer’s time and agenda
✅ “The trade-off is X vs Y. Given our requirements, I’d choose X because…”
- Showing reasoning, not just memorized solutions
✅ “At Google scale this breaks down, but for our 10M users it works”
- Right-sizing the solution
The Deep Dive Is Your Showcase Moment
Remember: The interviewer already has senior engineers who can draw high-level architectures. They need to know if you can handle the hard parts.
The deep dive is where you prove:
- You understand complex algorithms and data structures in production context
- You can reason about distributed systems problems
- You think about failure modes and edge cases
- You can communicate complex ideas clearly
- You maintain system context even when in the details
This is your 15 minutes to demonstrate senior-level engineering judgment.
Most candidates waste it by going too shallow, picking the wrong component, or getting lost in irrelevant details.
Don’t be most candidates.
Your Practice Plan This Week
Here’s your homework:
Day 1-2: Do 3 isolated deep dives
- URL shortener: ID generation system
- Twitter: Fan-out write system
- Instagram: Image upload pipeline
Day 3-4: Do 3 more isolated deep dives
- Messaging: Real-time delivery system
- Video streaming: Encoding pipeline
- Ride-sharing: Location tracking and matching
Day 5-6: Full mock interviews
- Do 2 complete 45-minute mock interviews
- Force yourself to spend 15+ minutes on the deep dive
- Record them and review your timing
Day 7: Review and identify patterns
- Which components did you explain well?
- Where did you lose the system context?
- Did you consistently discuss failure modes?
Final Thought
The deep dive phase is where interviewers distinguish between candidates who’ve memorized architectures and candidates who can actually build complex systems.
You can draw all the correct boxes on the whiteboard and still fail if you can’t demonstrate depth of thinking.
Practice the framework. Restate the problem, present your approach, design the internals, connect to requirements, discuss failure modes.
Do it 20 times across different components and it becomes automatic.
That’s when you’ll walk into the interview and nail the deep dive while other candidates are still drawing boxes.
Now go practice under time pressure - because that’s the only way to build the muscle memory.
Ready to Ace Your System Design Interview?
Practice with our AI interviewer and get instant feedback on your approach
Start AI Interview For Free