Design Instamart Delivery System

Quick-commerce grocery delivery inspired by Swiggy Instamart, Zepto and Blinkit: addresses mapped to dark stores, per-store catalogs and stock reservations, orders pushed to pickers in aisle order, riders waiting at the store, and capture-on-delivery payments. A teaching design.

Functional requirements

  • Users browse product catalog with per‑store availability and pricing.
  • Users add items to cart, which has a 30‑minute reservation window.
  • At checkout, inventory is reserved atomically to prevent overselling.
  • Orders are assigned to couriers based on batching and capacity.
  • Customers receive notifications for order status and delivery tracking.

Non-functional requirements

  • Handle 12k concurrent users with 5 requests/user during peak hours.
  • 99.9% availability with graceful degradation under load.
  • Sub‑second latency for catalog and cart interactions.
  • Data consistency for inventory and orders to prevent overselling.
  • Operational simplicity for rapid iteration and debugging.

How the design evolves

Stage 1: One Catalog, One Central Stock Count

See why a national catalog and a single stock number can't deliver in ten minutes.

What was missing: Nothing yet.

Why that's risky: A shopper sees items their nearest store doesn't have, two orders can take the last unit, and evening spikes swamp one server.

What gets added: One server showing a national catalog and placing orders against a central stock count.

Trade-offs: Simple, but stock isn't where the shopper is.

Stage 2: Dark Stores: Per-Store Catalog and Reservations

Show only what the shopper's nearby store has, and never sell the same unit twice.

What was missing: One catalog and one stock count for the whole country.

Why that's risky: The order sits in the database: nobody at the store knows to pick it.

What gets added: A store locator that maps the address to its dark store, a catalog showing that store's live stock from a stock cache, and a checkout that reserves each item at that store with a conditional decrement before creating the order with an idempotency key.

Trade-offs: Stock badges come from a cache that can lag a moment; the reservation at checkout is authoritative.

Stage 3: Picking at the Dark Store

Get each order picked and packed within a couple of minutes.

What was missing: Orders weren't sent to the store.

Why that's risky: Packed orders wait until someone finds a rider.

What gets added: An order event stream partitioned by store, a push channel that sends each order to a picker's handheld with items in aisle order (missing items trigger a substitution offer to the shopper), and a notification worker for status updates.

Trade-offs: Substitutions need the shopper's quick answer; if none comes, the item is refunded.

Stage 4: Riders Waiting at the Store

Hand a packed order to a rider immediately.

What was missing: No rider assignment.

Why that's risky: Shoppers can only browse, not search, and payments aren't captured.

What gets added: Riders check in at their store and send location pings to a rider location service; an assignment worker gives each packed order to a waiting rider, or batches two orders heading the same way.

Trade-offs: Keeping riders at the store costs idle time but makes the ten-minute promise possible.

Stage 5: Search with Per-Store Availability

Let shoppers find products their store actually has.

What was missing: No search.

Why that's risky: Payment capture and abuse protection are missing, and store performance isn't measured.

What gets added: A product search service and index with per-store availability flags, kept current by an indexer reading catalog and stock changes.

Trade-offs: Availability in search lags by seconds; checkout is authoritative.

Stage 6: Payments, Protection and Monitoring

Charge only for what was delivered, block abuse, and watch each store.

What was missing: Payments weren't captured, and nothing limited abuse or measured store performance.

Why that's risky: Remaining risk is local: a store outage must route its zone to the next-nearest store.

What gets added: A payment worker that captures payment for delivered items only (refunding missing or substituted items), a rate limiter, and monitoring of time to pack, time to deliver, stockouts and substitution rate per store.

Trade-offs: Capturing after delivery means rare failed captures, in exchange for never charging for missing items.

Frequently asked questions

How were the stages and changes determined?

The stages represent a logical progression of architectural improvements, starting from a monolithic design and evolving towards a more scalable, reliable, and maintainable system. Each change was chosen to address specific limitations or risks in the previous stage while preserving existing functionality.

Can I modify the architecture at each stage?

Yes! The provided architecture is a starting point. You can experiment with different designs, add or remove components, and see how it affects scalability, reliability, and performance. The goal is to learn through iteration and exploration.

What if I want to skip stages or make larger changes?

Feel free to jump ahead or make bigger leaps in the architecture. The stages are meant to guide you, but real-world systems often require non-linear evolution. Just be mindful of the trade-offs and risks associated with larger changes.

How do I evaluate the impact of changes?

Consider the scalability, reliability, fault tolerance, performance, and trade-offs of each change. You can use load testing, chaos engineering, and monitoring to assess how your architecture performs under different conditions.

Are there any recommended tools or platforms to build this on?

You can use any technology stack you're comfortable with. Common choices include cloud platforms like AWS, GCP, or Azure for infrastructure, and languages/frameworks like Node.js, Python, Java, or Go for services. The key is to focus on the architectural principles rather than specific technologies.

PRISM
System Design Interview
Round 1 of 4 · Architecture Design · 60:00 remaining
PRISM logo PRISM logo
Problems
AI Interview
Interview Challenges
Build & Stress Test NEW
System Architectures
Design & Fix NEW
Interactive Roadmap
System Design Guides Interview Prep Guide
Problems
Today's mission
Notifications
    Theme
    Pricing Community NEW Send feedback Report a problem NEW
    Sign in
    Theme
    Community NEW Send feedback Report a problem NEW
    All problems
    Phase
    Build & Stress Test
    Phase 01: Thinking in Systems
    Upcoming

    Components

    User
    CDN
    Load Balancer
    Server
    Cache
    Database
    Blob Storage
    Search Index
    Queue
    Worker
    Rate Limiter
    Service
    API Gateway
    Reverse Proxy
    WebSocket Server
    Third-party API

    Inspector

    Notes
    Use clear names so your design intent is easy to understand.
    Good
    Name by business meaning
    "Order API", "Restaurant Service"
    Avoid
    Generic names = zero signal
    "Server 1", "API", "Queue"
    A short description for each component makes feedback much better.
    100%
    Start by identifying:
    • Users & entry points
    • APIs & services
    • Databases & storage
    • Traffic flow & scale

    Round 1 of 4 Architecture Design

    Run a simulation to see results.

    Time Remaining
    60:00
    System Design Interview

    What are the core functional requirements?
    What are the key non-functional constraints?

    Questions

    Start Evaluation to unlock questions.

    EVALUATE MODE

    Test yourself like it's the real thing.

    A structured 4-module evaluation that mirrors how top companies assess system design candidates.

    Architecture Design
    Draw your system on the canvas. Define components, connections, and data flow.
    FR & NFR Requirements
    Answer functional and non-functional requirement questions about your design.
    MCQ Round
    Multiple choice questions testing your depth on the chosen system.
    Tradeoff Analysis
    Justify your design decisions and defend your architectural tradeoffs.
    AI Report Generated
    Choose a Problem
    No problem selected
    • 30 min
    • 45 min
    • 60 min
    Round 2 of 4
    MCQ Round
    Answer multiple-choice questions based on your design.

    Exit Interview?

    You're in the middle of an interview session. Leaving now will end your current attempt.

    Your progress will be saved.

    Open a saved design

    Select a design to load into the canvas.

    My Evaluations

    Your past evaluation sessions

    Here’s a simple request flow that follows the expected layer order.

    External User
    →
    Edge CDN → API Gateway → Load Balancer
    →
    Compute App Servers / Services
    →
    DataAccess Cache
    →
    Storage Database / Search Index
    →
    Async Queue → Worker

    Tip: keep arrows moving forward through layers (Edge → Compute → Storage). Avoid sending storage back to compute.

    Evaluation Instructions

    Read the rules carefully before starting. The test auto-submits on refresh.

    Before you start

    • Build your architecture on the canvas. The timer starts when you click Start Evaluation.
    • Don't forget to answer Functional Requirement and Non Functional Requirements.
    • When satisfied with your design, click Next to lock it and view the questions.
    • Please answer final step questions to complete the evaluation.

    Dos

    • Do read each question carefully before answering.
    • Do include required components to maximize component coverage.
    • Do save a copy of your design if you want to keep it before submission.

    Don'ts

    • Don't refresh or close the tab during an active evaluation — this will auto-submit your answers.
    • Don't switch app modes or open another tab while the evaluation is running.
    • Don't attempt to edit the design after clicking Next; the workspace will be locked.

    All the best!!

    Confirm

    Input

    Notice

    Evaluation Report
    Report a problem

    Evaluation Complete

    Generating Your Report

    Hang tight — our AI is evaluating your design…

    Did you know?

    Loading…

    Share feedback

    Tell us what worked well and what we can improve.

    Let's personalize this

    Answer a couple of quick questions so we can tailor your journey and missions.

    Your welcome gift: of Full PRISM Access

    Your Pro access starts as soon as you press Start my journey.

    SYSTEM BRIEF

    System Constraints

    What the system must do — every item is a user-facing behaviour your architecture must support.

      ↑ Engineering Constraints

      These are the failure modes you must design against — latency SLAs, durability targets, traffic ceilings.

        ⇆ Architecture Constraints

        Core Concepts to Master

        Your Journey
        PHASE – –
        0 / 0 0%
        0
        Mock Interview Checklist

        Pick a topic to start

        Explore concept overviews, real-system examples, key tradeoffs, and interview talking points for each roadmap section.

        Phase Mastered

        You've conquered this phase. These are the skills you now own:

          +500 XP

          Company Interview Paths

          Progress Summary