Back
Yatin KharYatin Khar

The 40 Seconds That Break Zepto’s 0‑Minute Promise.

~40sOOS recovery · 5 forced steps
1,100+dark stores · mid-2026
2.5Mdaily orders · FY25

3 things I found

01

The OOS recovery loop is where the 10-minute promise breaks.

Dark stores stock only 2,500–3,000 SKUs - out-of-stocks are structural. The current 5-step, 40-second recovery happens at precisely the moment Blinkit is one swipe away.

02

The highest-value user looks healthy in the data but isn't.

Suresh (₹1,600/week) appears as ₹1,100/week after silently routing ₹500 of produce to a neighbourhood vendor. He doesn't churn - he splits. Invisible to retention metrics.

03

The ₹99 threshold is AOV engineering, not consumer goodwill.

Removing handling, surge, and rain fees replaced three visible exit triggers with one invisible nudge. The AOV lift from self-selected add-ons likely exceeds what fees ever earned.

3 things I found:

1. The OOS recovery loop is where the 10-minute promise breaks. Dark stores stock 2,500–3,000 SKUs in 2,000 sq ft - out-of-stock events are structural, not exceptional. The current recovery forces ~5 steps and ~40 seconds at precisely the moment Blinkit is one swipe away. An Inline Smart Substitution Toggle at cart review converts this from a reactive error into a proactive one-tap resolution before checkout.

2. The highest-value user looks healthy in the data but isn't. Suresh Iyer (₹1,600/week, kirana-convert) shows up as ₹1,100/week after routing ₹500 of produce spend to a neighbourhood vendor. He doesn't churn - he silently splits. A "sourced today" freshness badge on produce listings addresses the trust deficit, not the delivery speed.

3. The ₹99 free-delivery threshold is AOV engineering, not consumer goodwill. Eliminating handling fees, surge fees, and rain fees in November 2025 removed three visible pain points and replaced them with one invisible nudge: add a ₹20 item to cross the threshold. That nudge earns more in AOV lift than the fees it replaced. (BusinessToday, Nov 2025.)


00) Fact-Check & Data Verification

I cross-referenced every claim in this teardown against publicly available data as of May 2026.

Dark Stores FY25 Revenue Market Share Daily Orders
1,100+ ₹11,110 Cr ~22–25% 2.4–2.5M

Corrected - Handling Fee Critique

I originally critiqued Zepto's handling fee line item in Bill Details as a visual hierarchy failure. That critique is now factually outdated. In November 2025, Zepto scrapped handling fees, surge fees, and rain fees entirely. Blinkit still charges ₹4 handling, Instamart charges ₹9.80. The teardown now pivots this section to analyse why the removal happened and how the ₹99 free-delivery threshold replaced fees as the primary AOV lever.

Corrected - UPI Handoff Latency

The draft criticised a 1.2–1.8 second gap during UPI app-switch. This is now partially resolved. In January 2026, Zepto rolled out in-app UPI payments. Users can now enter UPI PIN inside the Zepto app itself, bypassing the redirect to Google Pay or PhonePe entirely. Swiggy and Zomato have implemented similar in-app UPI. The competitive gap cited in the draft has narrowed significantly.

Refined - Dark Store Count

Zepto Blinkit Swiggy Instamart

Verified: Zepto operates 1,100–1,200 dark stores as of mid-2026. Blinkit leads with approximately 2,027 stores (Q3 FY26 actual). Swiggy Instamart has 1,143 (verified, Q4 FY26). Flipkart Minutes is estimated at 800+ (unverified; no public disclosure). The total industry footprint across the top 8 cities exceeds 3,800 stores. This density context matters for the OOS analysis - more stores in a given area means more inventory fragmentation and more frequent stock-outs per individual location.

Verified - 10-Minute Delivery Model

The core premise remains accurate. Zepto's dark stores occupy 2,000–3,000 sq ft, stock approximately 2,500–3,000 high-velocity SKUs, and achieve approximately 3-minute order picking times. The 10-minute delivery promise is maintained across major metros. Zepto's total catalogue has expanded to 45,000+ SKUs across all tiers via a marketplace model, with categories now including pharmacy (launched August 2025), Zepto Café (food), and electronics.


01) The Context & User Persona

This analysis combines desk research with conversations with 8 active Zepto users across Bengaluru and Delhi NCR (April–May 2026), recruited through personal network referrals. Sessions were 20–35 minutes, unstructured. The personas below synthesise observed behaviours from these conversations with publicly available market data.

I ground this audit in a scenario that captures the psychological reality of Indian quick-commerce usage. This is not about "typical" usage - it is about the high-stress, high-intent moment where UX failures have maximum financial consequence for the platform.

Arjun Mehta
Arjun Mehta - Software Engineer, 28 - Koramangala, Bengaluru
UPI-First · ₹430–470 AOV · Night Orderer · 4.6★ Rating

It is 9:45 PM on a Friday. Arjun's flatmates announce that colleagues are arriving in 20 minutes. He opens Zepto with a tight mission: Sprite 2L (₹90), Lays Classic (₹20), mixer packs (₹120), and Maggi (₹56). His total cart hovers around ₹286 - well above the ₹99 free delivery threshold, so he pays zero delivery fee. His attention budget for checkout is under 45 seconds. He is simultaneously on a WhatsApp call. His Koramangala society has a three-layer address: the complex name, the block number, and the flat - a combination that delivery agents routinely misroute. His 4G signal fluctuates between the lobby and his flat on the 6th floor. Any friction here is a defection event. Blinkit sits on his home screen, one swipe away.

The psychology of the Indian q-commerce consumer

Three forces shape Arjun's behaviour that do not apply - or apply differently - in Western markets:

1. Extreme price sensitivity at the margin. Indian consumers will compare a ₹90 item across Zepto, Blinkit, and Instamart before ordering. They will also mentally calculate whether the cart is above or below the free delivery threshold and add a filler item (a ₹20 packet of biscuits) to avoid the ₹30 delivery fee. This is not penny-pinching - it is rational behaviour in a market where Zepto's AOV is ₹430–470, and a ₹30 fee represents 6–7% of the order value. That ₹30 is not invisible. It is a psychologically salient cost that triggers loss aversion disproportionate to its absolute value.

2. Surge and rain pricing erode trust asymmetrically. Until November 2025, Zepto and its competitors charged rain fees and surge fees during peak demand. These fees were small in absolute terms (₹6–30), but their variability made them feel arbitrary and punitive. The psychological damage was not the ₹15 - it was the violation of predictability. Indian consumers, trained by decades of MRP (Maximum Retail Price) transparency on physical packaging, have a deep cultural expectation that prices should be stable and legible. Dynamic pricing on delivery feels like autorickshaw fare negotiation - tolerated, but resented. Zepto's decision to eliminate these fees was as much a trust-repair exercise as it was a pricing move.

3. UPI is the mental model for "fast payment." In India, 20+ billion UPI transactions happen per month (21.6 billion in December 2025, per NPCI data). The mental model for fast checkout is not "enter card details" - it is "enter UPI PIN." Any checkout that redirects to a separate app introduces an app-switch - a context change that costs 2–4 seconds and creates a cognitive interruption. Zepto's January 2026 launch of in-app UPI collapses this entire friction chain into a single PIN entry within the app. This is one of the highest-impact UX changes in the Indian q-commerce space in the last 12 months.


Persona 2 - The Planned Weekly Shopper

Rahul Sharma
Rahul Sharma - Marketing Manager, 34 - Powai, Mumbai
₹800–1,100 AOV/week · Primary grocery buyer for household of 3

Rahul Sharma is the household's primary grocery decision-maker - partner and a 4-year-old. He does a "main shop" every Sunday morning: vegetables, dairy, cleaning supplies, breakfast items, snacks. Then 2–3 mid-week top-ups for consumed or forgotten items. His total Zepto spend is ₹3,200–4,400/month, making him approximately 2–2.5× more valuable by monthly GMV than Arjun's impulse profile (₹3,200–4,400 vs. est. ₹1,700–1,900/month at Arjun's AOV and order frequency).

He is not Zepto's core use-case user. He plans. His Sunday order has 15–20 line items across categories. His primary evaluation criterion is completeness and accuracy - not speed. He does not care whether it arrives in 9 minutes or 14 minutes. He cares deeply if the onions arrive bruised, if the Amul butter is substituted with Mother Dairy without his consent, or if 2 of his 18 items simply don't show up.

How his OOS experience differs from Arjun's:

Dimension Arjun (Impulse, 9 PM Friday) Rahul Sharma (Planned, Sunday AM)
Cart size 4–5 items, ₹460 16–20 items, ₹950
OOS response High anxiety, immediate defection risk Quiet frustration, silent basket edit
Visible churn signal Opens Blinkit within 60 seconds Doesn't churn - adds "buffer" items
Long-term NPS effect Immediate negative spike Slow erosion, invisible in weekly data
What the product sees Abandonment event (measurable) Completed order (misleading positive)

His "buffer behaviour" is Zepto's most expensive invisible problem: he now orders 2 packets of Maggi when he needs 1, because he has learned 1–2 items on a 16-item order typically don't arrive. This inflates Zepto's reported AOV while masking a reliability failure. A ₹950 order that looks healthy in the dashboard represents a user who has permanently discounted his trust in Zepto's inventory.

Rahul points to a gap the ISST doesn't address. The ISST optimises for Arjun - the panic-mode, high-defection user who needs OOS recovery in the moment. For Rahul, the higher-value fix is order accuracy tracking: a post-delivery screen asking "did everything arrive and meet expectations?" that feeds a dark-store inventory reconciliation loop. Rahul's silent feedback - no complaint raised, just buffer behaviour - is the least visible and most expensive form of experience failure in Zepto's data.


Persona 3 - The Kirana-Replacement Convert

Suresh Iyer
Suresh Iyer - Operations Manager, 44 - Rohini Sector 9, Delhi
₹1,400–1,800 AOV/weekly order · Ex-kirana customer of 12 years

Suresh spent 12 years buying groceries from the same kirana 200 metres from his home - Ramesh Bhai's shop, where his preferences were known, informal credit was available ("pay at month-end"), and produce freshness was guaranteed by a 12-year relationship. He switched to Zepto 14 months ago when Ramesh Bhai's shop closed after a rent dispute.

He is Zepto's most economically valuable and most structurally skeptical user. His ₹1,600 average weekly order is 3.5× Arjun's cart value. He buys vegetables, pulses, atta, oil, cleaning supplies, and personal care - in bulk, once a week, on Saturday afternoons. He has never placed an impulse order.

What he has lost versus the kirana:

Dimension Ramesh Bhai's Kirana Zepto
Produce freshness Relationship-guaranteed ("He knew I wanted firm tomatoes") Unknown; no intake timestamp visible
Credit Informal month-end settlement Cash/UPI upfront only
Personalisation 12 years of remembered preferences Algorithmic; no memory of produce preferences
Complaint resolution Immediate, in-person Refund in 24–48 hrs; doesn't replace the disruption
Discovery Ramesh Bhai would suggest what's fresh today Zepto shows what's in stock, not what's good today

What Zepto has given him that the kirana couldn't: 10-minute top-up delivery when something runs out mid-week, no negotiation, and free delivery on his large orders well above the ₹99 threshold.

His primary pain point is produce trust. He has received substandard vegetables 3 times in 14 months - each time, Zepto refunded him. But the refund did not replace the 45 minutes spent re-ordering or cooking with inferior ingredients. He has now split his purchases: vegetables from a neighbourhood vendor, packaged goods from Zepto. Zepto's data shows him as a ₹1,100/week customer. He is actually a ₹1,600/week customer who has redirected ₹500 of produce spend back to the informal economy.

Suresh reveals what the retention data misses: Zepto's produce quality problem is not a logistics problem - it is a trust signal problem. Suresh does not need faster delivery of better vegetables. He needs to know before ordering that the vegetables at his local dark store were received fresh that morning. A "sourced today" timestamp badge on produce listings - pulled from the WMS intake log (already captured at dark store intake) and exposed through the product listing API - requires no new data collection, only new data exposure. It is a low-engineering-lift change that could recover the ₹400–500/week in produce spend that Suresh has rerouted. At Zepto's scale (1,100+ dark stores, 2.4–2.5M daily orders), even recovering 10% of the "category split" users would represent material GMV.



02) The Deep Dive - UX Analysis

2A - Where the checkout is invisible — and where it isn't

Indian users arrive at Zepto with three patterns already locked in: the cart interaction from Swiggy and Blinkit, the payment flow from 20+ billion monthly UPI transactions, and a cultural expectation - shaped by decades of MRP pricing - that prices should be stable and fully legible. Where Zepto matches these exactly, the checkout disappears. Where it deviates, users pause, second-guess, or exit.

Where Zepto gets it right - Cart & Payment

The cart bottom sheet and quantity stepper (− ● +) sit exactly where Swiggy and Blinkit users expect them - no relearning cost, the hand already knows where to go. The January 2026 in-app UPI launch resolves an older, more significant friction: users no longer context-switch to Google Pay or PhonePe mid-checkout. PIN entry stays inside Zepto, matching the payment mental model that NPCI and the UPI ecosystem have spent three years building. Both are cases where Zepto followed the established pattern precisely - and both are right.

Cart bottom sheet

Zepto cart bottom sheet
Address redacted
1
2
3
  1. Stepper (−●+) - identical pattern to Swiggy and Blinkit; zero relearning cost
  2. Delivery & Handling Fee: FREE - Nov 2025 fee elimination; vs Blinkit ₹4, Instamart ₹9.80
  3. Savings chip (₹40) - visual closure signal + micro-reward; mirrors the Swiggy/Zomato savings confirmation users expect

In-app UPI payment

Zepto UPI payment screen
Address redacted
A
B
  1. "Unlock Zepto UPI" - Jan 2026; PIN entered inside Zepto, no context-switch to GPay or PhonePe
  2. External UPI as fallback - GPay, CRED, Amazon Pay, slice UPI preserved; graceful degradation maintained

Where Zepto is inconsistent - ₹99 Threshold Visibility

Zepto's ₹99 free delivery threshold is the lowest in Indian q-commerce (Blinkit and Instamart both set it at ₹199). But the visibility of this threshold during the add-to-cart flow is inconsistent. On some screens, a progress bar shows "₹X more for free delivery." On others, it is absent. The Indian consumer who is mentally calculating whether to add a ₹20 biscuit packet to avoid a ₹30 delivery fee needs this signal to be persistent and unmissable. Users encounter it sometimes, not always - and in a product that promises speed, a signal that appears inconsistently is functionally absent.


2B - Visual hierarchy: where the checkout screen makes you work

The Bill Details Screen - A Revised Scannability Analysis

Fee elimination simplified Zepto's Bill Details - fewer line items, cleaner scan. But simplification exposed a deeper structural problem that the noise of handling fees had been obscuring.

Updated - Law of Proximity (Revised)

With zero handling fees and zero surge fees, Zepto's Bill Details now shows fewer line items: item subtotal, delivery charge (₹0 above ₹99 or ₹30 below), any applied coupon discount, and total payable. The reduced line count improves scannability. However, when a coupon is applied, the discount line and the total payable line are visually equidistant from the subtotal. The discount should feel "attached" to the subtotal (it modifies the price), while the total should feel like a conclusion. Currently, flat spacing treats them identically, which forces a full top-to-bottom scan every time.

Law of Closure - Still Failing

Zepto's entire brand promise is speed. The one moment in their checkout where the eye has to work - scanning a flat list top-to-bottom to locate the final total - contradicts that promise directly. The "To Pay" row sits at the same visual weight as every other line: same font size, same spacing, no bounding container, no shaded row, no bold differentiation. A bordered or shaded row around the total would collapse the scan to zero. Instead, users spend a beat locating the number that matters. In a UX where the brand is "10 minutes," a beat is a design failure.

Bill details - below ₹99 threshold

Zepto bill details below ₹99 threshold
Address redacted
1
2
3
  1. "Free above ₹99 (Unlock by adding ₹59 more)" - the AOV nudge in blue text; one invisible threshold replaces three visible fee line items. Adding a ₹59 item likely earns more AOV lift than the ₹30 fee it replaced
  2. Handling Fee FREE - competitive advantage: Blinkit charges ₹4, Instamart ₹9.80; zero-other-fees is Zepto's November 2025 trust-repair move, now a product differentiator
  3. "To Pay ₹70" - no visual distinction - the final total sits flat in the list at the same visual weight as every other row; a bordered or shaded row would collapse the eye directly to the number that matters

Indian q-commerce users are trained by Swiggy and Zomato food delivery to see a "Savings" chip in green near the total - a visual closure signal that says "you saved ₹X on this order." Zepto surfaces this inconsistently. Blinkit's implementation of this savings chip is more consistent - it provides closure and a micro-reward in the same interaction, which are not the same thing.


2C - Two places the checkout actively works against the user

The delivery timer vanishes at the worst possible moment

Zepto's ETA counter - the N mins display - is their most powerful trust signal. But it disappears during checkout. Once the user enters the payment screen, the ETA is gone. This is precisely when it matters most - the anxious moment where users ask "will it still arrive in 10 minutes if I confirm now?" Hiding the primary value proposition at the highest-stakes decision point works directly against the brand promise.

Rivalry signal: Swiggy Instamart has begun surfacing a persistent "delivery in ~N mins" indicator through its checkout flow in recent builds. In the Bengaluru and Delhi NCR markets where Zepto and Instamart compete store-for-store (both at ~1,100–1,200 dark stores), this micro-UX decision likely contributes to measurable checkout completion differences.

The out-of-stock recovery loop is where the 10-minute promise actually breaks

This is, to me, the most consequential failure I found. Out-of-stock events are structural in Indian q-commerce - dark stores stock only 2,500–3,000 high-velocity SKUs in 2,000–3,000 sq ft. Inventory is volatile, especially for high-demand items (milk, eggs, beverages) during evening peaks. The fragmentation created by 1,100+ stores means that each individual dark store has less inventory depth than a traditional kirana store - OOS is not an edge case, it is a statistical inevitability during peak hours.

The scenario: a user adds 4 items, proceeds to checkout, and between cart review and payment confirmation, one item goes OOS. Zepto's current flow forces a 5-step recovery loop:

Current OOS Recovery: Error surfaces → User reads → Dismisses → Returns to cart → Manually removes OOS item or searches substitute → Re-initiates checkout. That is 5 additional interactions, approximately 35–45 seconds (estimated from walkthrough of the live app flow, April 2026), and a trust-break in the 10-minute promise. At Arjun's moment of maximum impatience, this is a near-certain defection to Blinkit.

Of the 8 users I spoke to, 5 had experienced an OOS event in the last 30 days. 4 of those 5 said they opened Blinkit, Instamart, or another quick commerce app in the same session - not after abandoning Zepto, but while still on the OOS error screen. The fifth placed the order anyway, minus the item. No one proactively searched for a substitute inside Zepto.

The deeper issue is prevention, not recovery. Zepto's inventory data can predict high-risk OOS SKUs at order time - that data exists in the system already. Substitution options should be surfaced before payment initiation, not after failure.


03) The Proposed Product Fix

Inline Smart Substitution Toggle (ISST)

I propose an Inline Smart Substitution Toggle (ISST): surface algorithmically ranked substitutes for flagged cart items - with a pre-authorisation toggle - at the cart review stage, before checkout initiation. This converts a reactive, flow-breaking OOS recovery loop into a proactive, zero-tap background resolution.

Current state - Zepto's "Swap & save" surface

Zepto Swap and save in cart
1
2
3
4
  1. ETA "Delivering in 22 mins" visible in cart - but disappears at the payment screen, exactly when the user is most anxious about the 10-minute promise
  2. "Swap & save" chip - Zepto already surfaces a substitution UI in cart; the ISST builds on this existing pattern and extends it to OOS events
  3. One-tap "Swap" button - the interaction model already exists; ISST extends it to pre-authorised OOS resolution rather than savings-motivated swaps
  4. "Swap now to unlock extra savings" - current framing is economics-driven, not OOS-driven; ISST needs to handle both motivations depending on cart context and trigger type

The redesigned flow:

  1. Cart review - inventory confidence signal. Backend checks real-time dark store inventory. Items below a threshold (<30% remaining) are flagged with an amber chip: "Only a few left" - mirroring the signal already on the product listing page, now surfaced in cart context.
  2. ISST - the key interaction. For flagged items, a collapsed accordion appears: "If unavailable, auto-swap with [Substitute + ₹ delta]? → Toggle ON/OFF." Substitute is pre-selected by Zepto's recommendation engine (same brand, similar price). Toggle is OFF by default - user must opt in, one tap. One tap opts in.
  3. Checkout proceeds normally. User proceeds to in-app UPI payment. Substitution intent is stored server-side against the order.
  4. OOS event - background resolution. If the item goes OOS during packing, substitute is auto-swapped. Push notification: "We swapped [Item] with [Substitute] - ₹[delta] adjusted." Order is not blocked. 10-minute promise preserved.
  5. No OOS event - nothing changes. Toggle was set but never triggered. No UI noise, no unnecessary notification.
ISST mockup  -  cart review screen with low-stock chip, substitution accordion, and OFF-by-default toggle

Before vs. after:

Current OOS Recovery With ISST
Flow Error → modal → dismiss → back to cart → remove/search → restart checkout ISST toggle in cart (1 tap, optional) → OOS resolves in background → push confirms
Steps ~5 steps · ~40 seconds ~1 optional tap · 0 interruption
Outcome High defection Promise preserved

Why doesn't this exist already?

Worth naming directly - Blinkit and Swiggy have partial substitution flows, and Zepto's engineering team is not unaware of OOS. Three likely constraints explain the gap.

Real-time inventory latency. Flagging items below a stock threshold requires a fresh inventory check at cart review - an additional API call in a flow Zepto has aggressively optimised for speed. Any feature that adds perceptible latency to cart load is scrutinised hard at the product level. The ISST is only viable if the inventory signal can be piggybacked on an existing cart API call, not added as a standalone request.

Substitution liability. If Zepto auto-swaps an item and the substitute triggers an allergen (different brand, different ingredient profile), the liability question is not trivial - especially post the Consumer Protection (E-Commerce) Rules 2020. A pre-authorisation toggle where the user explicitly opts in addresses this, but the legal review adds timeline and likely explains why Blinkit and Instamart implement substitution only post-dispatch (when an agent calls), not pre-checkout.

Inventory signal quality. The ISST is only as good as the WMS data feeding it. In a fast-moving dark store during a Friday evening peak, inventory counts can lag physical reality by several minutes. False positives - flagging an item as OOS-risk when it is in stock - train users to distrust the amber chip and eventually ignore it. Zepto would need confidence in its real-time inventory accuracy before surfacing this signal to users at scale.

These are solvable constraints, not blockers. A feature spec that does not name them is incomplete - and a PM who ships without naming them gets surprised in week two of the rollout.

One constraint worth naming: the price delta on the substitute is non-negotiable for Indian consumer trust. If the substitute costs ₹10 more, display it explicitly. If cheaper, show the saving. In a market where users calculate whether to add a ₹20 item to avoid a ₹30 fee, hiding even a small price delta triggers dark-pattern suspicion. MRP transparency is a cultural expectation - violating it erodes long-term NPS.


04) Success Metrics - A/B Test Design

I would validate the ISST through a geo-based A/B test, splitting dark stores in Bengaluru and Delhi NCR - both markets where Zepto operates 200+ stores each and where OOS frequency is highest during evening peaks. Minimum run: 4 weeks to capture weekend patterns. Minimum detectable effect: 5% relative improvement on the North Star.

Metric Type Metric Target
North Star OOS Checkout Completion Rate Baseline est. ~54% → Target ≥65% (+11pp)
Primary ISST Opt-in × Swap Satisfaction ≥28% opt-in rate, ≥82% swap satisfaction
Guardrail Post-Delivery Rating & Refund Rate Kill flag if swapped orders show >2% relative refund increase

Also worth tracking: session abandonment rate during peak OOS hours (7–10 PM weekdays, Bengaluru cluster). If ISST reduces the "app opened → order not placed" funnel drop by even 3pp in this cohort, it translates to meaningful GMV recovery at Zepto's current 2.4–2.5M daily order scale.

Randomisation unit: dark store cluster, not individual user.

Randomising at the user level creates cross-contamination - the same user orders from different dark stores depending on time and location, and may encounter ISST in one order and not another. Randomising at the dark store cluster level (e.g., Bengaluru North vs. Bengaluru South) isolates the treatment cleanly and reflects the supply-side reality that OOS events are store-specific, not user-specific. Cluster-level randomisation also prevents the treatment from leaking through social signals - users sharing "Zepto swapped my Sprite" on family WhatsApp groups in a mixed control/treatment area.

Sample size rationale.

Bengaluru and Delhi NCR together represent approximately 400–500 active dark stores and an estimated 600–700k daily orders. At the target 11pp lift on OOS checkout completion (baseline ~54%), 80% statistical power, and α = 0.05, a back-of-envelope power calculation points to significance in 3–4 weeks at this volume - aligning with the 4-week minimum. The longer run is necessary because OOS frequency is not uniform: weekday evening peaks (milk, eggs, beverages) behave differently from Sunday morning planned-shopping patterns, and both need representation in the sample.

Novelty effect risk.

ISST is a new interaction. Opt-in rates in weeks 1–2 will be inflated by curiosity - users toggling it on to see what happens, not because they intend to use it for this order. The primary opt-in target (≥28%) should be measured as the week 3–4 steady-state average, not the campaign mean. Treat week 1–2 data as directional only.

Kill flag - more precise definition.

The refund rate guardrail needs a secondary signal: app review sentiment. Flag reviews from treatment cohort users in the 48 hours post-delivery on ISST-triggered swap orders, filtering for keywords - "wrong item," "different brand," "not what I ordered." A sentiment spike here is a leading indicator of the refund rate crossing the guardrail, and catches the problem before it compounds into a Play Store rating issue that is far slower to recover from than a feature rollback.


04.5) Applied PM Frameworks

Jobs-to-be-Done (JTBD)

User Type Functional Job Emotional Job Social Job
Arjun (Impulse buyer) "Get snacks and drinks delivered before my friends arrive" "Feel like a competent host without leaving the house" "Be the flatmate who sorted it - not the one who fumbled a 10-minute app"
Rahul (Planned shopper) "Replace my weekly kirana run without sacrificing accuracy" "Feel in control of my household's nutrition and budget" "Feed my family well without spending my Sunday on errands"
Suresh (Kirana-convert) "Get reliable packaged goods delivered; keep produce options open" "Feel like I'm not being cheated on freshness" "Not have to negotiate or remember to carry cash"
Dark Store Picker (Ops) "Fulfil orders accurately within a 3-minute pick window" "Not be the reason an order goes wrong" "Be part of a system that works"

What the JTBD analysis revealed to me - and the product decisions it drives:

The Arjun/Rahul tension exposes a design conflict that a single substitution UX cannot resolve cleanly. Arjun's job is panic resolution - he has a 45-second attention budget, friends arriving in 20 minutes, and zero tolerance for "are you sure?" friction. For him, the ISST toggle should default OFF (fast path preserved) with a single-tap opt-in that does not interrupt checkout flow. Rahul's job is weekly completeness without surprise - he accepts substitutions in principle, but cares deeply which item was swapped. A generic "nearest equivalent" substitute for atta or eggs is not acceptable to someone who has 12 years of kirana-trained brand preferences. For Rahul, the ISST needs category-level preference settings ("always substitute Britannia bread; never substitute produce") rather than a blanket accept/decline. One toggle built for Arjun fails Rahul, and vice versa. Context-aware defaults - lower cart value + peak hour + single-serve items → default ON; high cart value + planned shopping pattern → prompt for preference setup - is the JTBD-informed design.

Suresh's behaviour reveals Zepto's invisible revenue leak. He still places a ₹1,100 weekly order, so Zepto's retention dashboard shows him as active and healthy. But his ₹500 produce redirect to the neighbourhood sabziwala is invisible in the data. His actual JTBD is not "get groceries fast" - it is "get groceries I can trust." Speed is a hygiene factor for him, not a differentiator; Zepto already clears that bar. The "sourced today" freshness badge proposed in Section 03 addresses exactly this job-to-be-done: it does not improve delivery speed, it provides confidence before the order is placed - which is where Suresh's decision actually happens. At Zepto's scale, even recovering 10% of the category-split users like Suresh would represent measurable GOV.

The dark store picker persona surfaces an ops dependency the ISST creates that is easy to miss from the rider-facing product side. When Arjun's pre-approved substitution fires during packing, the picker needs three things: (1) confirmation the substitution is approved, (2) the specific substitute SKU and location in the dark store, and (3) a revised pick path that routes to the substitute without breaking the 3-minute SLA. The ISST is not a standalone front-end feature - it requires a WMS integration that updates the picker's task queue in real time. A feature spec that stops at the rider-facing UI is incomplete. The picker UX is part of the design surface.


05) Key PM Takeaway

Strategic Friction vs. AOV Maximisation: The ₹99 Pricing Masterclass

The most instructive lesson I took from this teardown is not in the UX frameworks. It is in Zepto's fee structure change from November 2025 - and the second-order thinking behind it.

On the surface, Zepto eliminating handling fees, surge fees, and rain fees looks like a pure consumer-friendly move, backed by Zepto's strong funding position following its 2024 fundraising rounds. But I think that reading is shallow. Here is what I believe actually happened:

Zepto replaced visible friction (fees) with invisible friction (a lower free-delivery threshold).

The old model: ₹199 minimum for free delivery + ₹2 handling fee + dynamic surge/rain fees. The user saw 3–4 line items of charges. Each was a micro-moment of price scrutiny. Each was a potential exit trigger. The psychological weight was not the ₹2 or the ₹15 rain fee - it was the cognitive burden of evaluating multiple charges simultaneously. Indian consumers, acutely trained by MRP culture and kirana store bargaining, do not passively accept fees. They evaluate them, resent them, and compare them across apps.

The new model: ₹99 minimum for free delivery. Zero other fees. One threshold. One decision. The ₹99 threshold is set just above a single-item impulse purchase (a ₹29 milk pouch, a ₹40 bread loaf) but well below the average order value of ₹430–470. The user's mental calculus becomes trivially simple: "Am I above ₹99? Yes → free delivery. No → add one more item."

This is the tension every PM in Indian quick-commerce must navigate. The old fee model generated direct revenue per order but created visible friction that suppressed conversion and eroded trust. The new model eliminates visible friction but uses the ₹99 threshold to nudge users into adding incremental items - the ₹20 Parle-G packet, the ₹30 Amul butter - to cross the free delivery line. The AOV lift from this nudge may well exceed the per-order revenue that handling fees generated.

Fees are not just revenue lines. They are UX elements. Every fee is a row in the Bill Details screen, a moment of price scrutiny, and a potential trust violation. In the Indian market - where Blinkit still charges ₹4 handling and Instamart charges ₹9.80 - Zepto's decision to go to zero is not generosity. It is a bet that frictionless checkout conversion + threshold-driven AOV lift will outperform per-order fee revenue.

The best product friction is friction the user chooses to resolve themselves. A ₹30 delivery fee feels imposed. Adding a ₹20 biscuit packet to cross a threshold feels like a choice. Same economic outcome for the platform. Radically different emotional outcome for the user. That difference is the entire job of product management.


06) Closing Perspective

What I came away with is a grudging respect: Zepto has built something impressive - a checkout that feels fast even when the supply chain operates at the edge of physical feasibility. The fee elimination, the in-app UPI, the ₹99 threshold - these are not random moves. They are a coherent strategy to make the checkout loop as cognitively weightless as possible in a market where Blinkit commands 50%+ share and Flipkart Minutes is scaling to 800+ dark stores.

But the gap I have identified - the out-of-stock recovery loop - is not a visual design problem. It is a systems-thinking problem. The checkout was designed for a world where inventory is reliable. In Indian q-commerce - where a Diwali evening in Karol Bagh can drain a dark store's snack inventory in 40 minutes, where each 2,500 sq ft store stocks only the fastest-moving SKUs - the checkout loop must treat failure states as first-class citizens.

Zepto has received SEBI approval for a ₹11,000–12,000 crore IPO targeting July–September 2026. Public market investors will scrutinise checkout completion rates, OOS recovery efficiency, and the unit economics impact of fee elimination. The Inline Smart Substitution Toggle is not a band-aid - it is a philosophical shift from "we will tell you when something goes wrong" to "we have already prepared for things going wrong." That is the standard a company targeting a ~$7B IPO valuation (₹58,000–70,000 crore; Dhan / Multibagg analyst range, May 2026) must hold itself to.

The 10-minute promise is won or lost in the checkout loop. This is where the product must be ruthless about friction.


Sources