The Invisible Killer
Designs rarely fail from hard problems; they fail from unbounded ones. Every system connects to everything — auth, notifications, analytics, fraud, chat — and each connection is a rabbit hole. Scope control is deciding in advance where exploration stops.
THE BREADTH TRAP
prompt: "design ride matching"
└─► "well, riders need accounts..." ← auth rabbit hole
└─► "...with password reset flows" ← deeper
└─► "...and OAuth providers" ← 20 minutes gone
└─► matching never drawn
THE SCOPED PATH
"auth exists; I'll treat it as an identity service returning a
trusted user ID — focusing today on matching."
The In/Out Ledger
Write the boundary down. Unwritten scope re-enters by accident:
| In scope (v1) | Out of scope (v1) |
|---|---|
| Request → match → trip → payment spine | Carpooling, scheduled rides |
| Rider + driver apps as clients | Driver incentive engine |
| Card-on-file payment via PSP | Wallets, split fares, regional methods |
| Basic ratings | In-app chat (SMS fallback assumed) |
Two properties of a good ledger: every Out has a one-line reason, and the ledger is visible during the whole design so drift gets caught live.
Deferral Seams: Cheap Insurance for Later
Out-of-scope does not mean unanticipated. A seam costs minutes now:
PaymentSpine v1: the seam:
client → TripService interface PaymentProvider {
→ PaymentProvider charge(tripId, amount): Receipt
(single impl: StripeAdapter) refund(receiptId)
}
later wallets/regional PSPs plug in
behind the same interface — no redesign
The test of a proper deferral: when the deferred feature arrives, it adds a box, not a rewrite.
Time-Boxed Depth Allocation
Scope control extends inside each kept component — decide depth before diving:
MATCHING SERVICE (in scope, core):
deep-dive: geo-index + match algorithm ← the interesting part
PAYMENTS (in scope, but commodity):
shallow: call PSP, idempotency keys, done ← don't reinvent Stripe
HISTORY (should-tier):
one line: replicas + cache ← move on
Depth follows risk and differentiation, not familiarity.
When Scope Creep Arrives Anyway
Mid-design additions (“can we also support…”) get the three-way response:
- Park: add to ledger’s Out column with reason.
- Trade: allowed only if something of equal weight leaves.
- Seam-check: if trivial to note an attachment point, do so and continue.
Interview Framing
Interviewers inject scope tests deliberately: vague prompts, mid-design feature drops. The scoring behavior is verbal fencing — “that’s out of scope v1; here’s the seam it would attach to” — then immediate return to the core flow. Candidates who chase every branch run out of clock with no architecture; the discipline of returning IS the seniority signal.
Premium Content
Unlock Scope Control and all premium lessons with a subscription.
From ₹199.99/year — See plans