Loading content...
After asking essential questions, you've gathered a wealth of information about the problem. But raw information isn't a design specification—it's chaos waiting to overwhelm your solution. The next critical step is scoping: explicitly defining what your design will and will not include.
Scoping is where engineering judgment becomes visible. It's easy to try to design everything; it's harder—and more valuable—to design the right things. In a time-constrained interview, scoping separates candidates who deliver focused, complete solutions from those who deliver sprawling, incomplete ones.
By the end of this page, you will understand how to transform gathered requirements into a bounded design scope. You'll learn techniques for identifying what's 'in scope' versus 'out of scope,' how to communicate scoping decisions, and how to handle scope negotiations with interviewers. This skill prevents wasted effort and demonstrates professional engineering judgment.
Consider a deceptively simple prompt: "Design a parking lot system."
A parking lot system could include:
Attempting to design all of this in a 45-minute interview is impossible. Yet many candidates try, resulting in a shallow sketch of many features rather than a deep design of essential ones.
Scoping solves this problem by explicitly defining boundaries.
Without explicit scoping, interviews often drift. The interviewer mentions an edge case, you start solving it, which leads to another consideration, which leads to another... Suddenly you've spent 15 minutes on payment dispute resolution when you haven't even defined your core classes. Scoping prevents this drift.
Effective scoping follows a systematic process. After gathering requirements through clarifying questions, apply this framework to define your design boundaries:
| Category | Criteria | Treatment | Example |
|---|---|---|---|
| Core | System cannot function without it | Full design depth; complete implementation | Vehicle entry/exit tracking |
| Important | Significantly enhances value; commonly expected | Design interface; partial implementation | Payment processing abstraction |
| Deferrable | Enhancement; not essential for MVP | Acknowledge; design extensibility point | Reservation system |
| Out of Scope | Tangential; requires separate design effort | Explicitly exclude; mention if time permits | Multi-location management |
Every LLD problem has a nucleus—the essential functionality around which everything else orbits. Identifying this core prevents you from getting lost in peripheral concerns.
The Core Identification Technique:
Ask yourself: "If I removed everything except one capability, what would remain for this to still be called a [parking lot / elevator / library]?"
Imagine explaining your system in one sentence to a newspaper reporter. What would you say? 'A system that parks and retrieves vehicles.' 'A system that moves people between floors.' This one sentence is your core. Everything else is elaboration.
Common Core Problems in LLD Interviews:
| System | Core Problem | Core Entities |
|---|---|---|
| Parking Lot | Managing vehicle-to-spot assignments over time | Vehicle, ParkingSpot, Ticket |
| Elevator | Efficiently moving between floors on requests | Elevator, Floor, Request |
| Library | Managing book loans and returns over time | Book, Member, Loan |
| Chess | Validating and executing moves on a board | Board, Piece, Move, Player |
| Hotel Booking | Matching guests to available rooms for date ranges | Room, Reservation, Guest |
| Ride-Sharing | Matching riders with nearby drivers for trips | Rider, Driver, Trip, Location |
Once you've identified the core, classify remaining features. This isn't arbitrary—use systematic criteria to justify your decisions.
Classification Criteria:
Example: Classifying Parking Lot Features
| Feature | Classification | Reasoning |
|---|---|---|
| Vehicle entry/exit | Core | Without this, it's not a parking system |
| Spot allocation by size | Core | Fundamental to correct parking logic |
| Ticket generation | Core | Required to link entry to exit |
| Payment processing | Important | Expected; good for Strategy pattern demonstration |
| Multiple vehicle types | Important | Demonstrates polymorphism; commonly asked |
| Real-time availability | Important | Commonly requested; affects Observer pattern |
| Advance reservations | Deferrable | Separate subsystem; mention extensibility |
| Mobile payment integration | Deferrable | Payment abstraction handles this; implementation detail |
| License plate recognition | Out of Scope | Hardware integration; separate system |
| Analytics dashboard | Out of Scope | Reporting system; entirely different design |
Features that allow you to demonstrate design patterns deserve promotion in priority. Payment processing (Strategy), vehicle types (inheritance/polymorphism), availability tracking (Observer)—these features have pedagogical value beyond their functional value.
Having classified features internally, you must communicate scope to the interviewer. This is a critical moment—it demonstrates judgment and ensures alignment before you invest design effort.
The Scope Statement Structure:
Example Scope Statement:
"Based on our discussion, here's my proposed scope for this design: CORE SCOPE:- Vehicle entry and exit tracking- Spot allocation based on vehicle size (motorcycle, car, bus)- Ticket generation linking entry to payment- Multi-level parking lot structure INCLUDED BUT LESS DEEP:- Payment processing abstraction (Strategy pattern, multiple payment types)- Real-time availability tracking- Multiple entrance/exit management EXPLICITLY OUT OF SCOPE (for time):- Advance reservation system (though I'll design for extensibility) - License plate recognition integration- Mobile app integration- Analytics and reporting I'm proposing this scope because it lets me demonstrate:- Strong object-oriented design with SOLID principles- Multiple design patterns (Strategy, Factory, Observer)- Thread-safety considerations if needed- Clean separation of concerns Does this align with what you'd like to see?"When you explicitly state what's out of scope, you demonstrate awareness of complexity without being consumed by it. You're saying: 'I see this, I understand its importance, and I'm making a deliberate choice to defer it.' This is senior engineering behavior.
Your proposed scope isn't always accepted verbatim. Interviewers may push back, request additions, or suggest different priorities. This is normal—and how you handle it matters.
Common Negotiation Scenarios:
Response Strategies:
| Scenario | Response Strategy | Example Response |
|---|---|---|
| Add feature | Accept gracefully; acknowledge trade-off | 'Absolutely, I'll include reservations. That may mean less depth on payment—is that okay?' |
| Remove feature | Accept; clarify what to do with freed time | 'Got it, I'll skip payment. Should I go deeper on spot allocation algorithms instead?' |
| Different depth | Adjust plan; confirm new focus | 'Understood—I'll focus more on the scheduling. Should I still show the full class structure first?' |
| Specific scenario | Integrate into scope; note it explicitly | 'That's a great edge case—I'll make sure my design handles it. I'll call it out when I reach that part.' |
When an interviewer modifies your scope, pay attention. They're telling you what they want to evaluate. If they ask for reservations, they likely want to see how you handle booking conflicts. If they emphasize scheduling, they want to assess algorithmic thinking. Adapt your design focus accordingly.
When you exclude a feature from scope, don't pretend it doesn't exist. Instead, design extensibility points—places in your design where future features could plug in without restructuring.
This serves multiple purposes:
1234567891011121314151617181920212223242526272829303132333435363738
// Current scope: Simple ticket-based entry// Future scope: Reservation system (out of scope, but extensible) // Extensibility Point: Abstract spot allocationinterface SpotAllocationStrategy { allocateSpot(vehicle: Vehicle, lot: ParkingLot): ParkingSpot | null; deallocateSpot(spot: ParkingSpot): void;} // Current Implementation: First-available strategyclass FirstAvailableStrategy implements SpotAllocationStrategy { allocateSpot(vehicle: Vehicle, lot: ParkingLot): ParkingSpot | null { // Find first available spot matching vehicle size return lot.getAvailableSpots() .find(spot => spot.canFit(vehicle)) ?? null; } deallocateSpot(spot: ParkingSpot): void { spot.markAvailable(); }} // EXTENSIBILITY: Future ReservationAwareStrategy would:// 1. Implement same interface// 2. Check reservation status before allocation// 3. Reserve specific spots for upcoming reservations// No changes to ParkingLot or other classes needed! // The ParkingLot uses the strategy via injection:class ParkingLot { constructor(private allocationStrategy: SpotAllocationStrategy) {} parkVehicle(vehicle: Vehicle): Ticket | null { const spot = this.allocationStrategy.allocateSpot(vehicle, this); if (!spot) return null; return new Ticket(vehicle, spot, new Date()); }}When presenting your design, briefly mention extensibility points: 'Notice that I've used a SpotAllocationStrategy here. While I'm implementing simple first-available logic, a reservation system would simply provide a different strategy implementation—no changes to ParkingLot needed.' This shows strategic thinking without consuming design time.
Understanding what not to do is as valuable as knowing best practices. These common scoping anti-patterns undermine otherwise solid designs:
Your initial scope is a proposal, not a contract. If you finish core design early, you can say: 'I have time remaining—should I dive deeper into payment, or would you like to see reservations?' This demonstrates adaptability while maintaining structure.
Let's see scoping applied to different LLD problem types, demonstrating how problem nature influences scope decisions:
Elevator System Scoping:
Core Scope (deep design):
Important (interfaces + partial):
Deferrable (mention extensibility):
Out of Scope:
Justification: Elevator systems are fundamentally about state management and scheduling algorithms. The core value is demonstrating State pattern for elevator states and Strategy pattern for scheduling. Emergency handling shows robustness thinking.
Scoping transforms chaotic requirements into actionable design specifications. It's the bridge between understanding a problem and solving it effectively.
What's Next:
With essential questions asked and scope defined, you have a solid foundation. But foundations aren't complete without documentation. The next page covers documenting assumptions—how to capture the implicit decisions you're making, communicate them clearly, and protect your design from 'but you should have known' criticism.
You now understand how to scope LLD problems effectively. Scoping isn't about doing less—it's about doing the right things well. Every feature you exclude is a decision you can defend; every feature you include is a commitment you can fulfill. Next, we'll learn to document the assumptions that fill gaps in your requirements.