WhyLayer — Decision Report
Quick Commerce App · 15 conversations · 40h turnaround

Users didn't order. Here's why.

Based on 15 user conversations

41% Minimum order forced unwanted items
28% Key item out of stock, killed the trip
19% Delivery time broke the urgency

The app's real competition isn't Zepto or Blinkit.
It's the kirana store downstairs.

Do this next (this week)
“I just needed milk and eggs. I'm not adding random stuff to hit Rs. 199.” Participant 4
Have a drop-off you're trying to understand? Diagnose your drop-off
Full Breakdown
  • The minimum-order wall punishes small baskets — users need 1-2 items but are Rs. 50-150 short. Adding random items to meet the threshold feels wasteful, so they walk to the kirana store instead. The app loses the order entirely.
  • One missing item kills the entire session — 28% of users opened the app for a single trigger item (specific milk brand, a particular snack). When that item was out of stock, nothing else mattered. They didn't substitute — they left.
  • Delivery time breaks the "quick" contract — users opened the app expecting 10-minute delivery. When ETA showed 25-35 minutes, the kirana store 2 minutes away became the rational choice. The promise that got them to open the app was violated before checkout.

The app loses whenever it adds friction to a small, urgent need.

What To Fix

Start here to convert daily app openers into daily orderers:

If you only do one thing this week, do this

1. Smart top-up suggestions when cart is below minimum

"Add Rs. 62 more. Here are items you usually buy: Amul Butter (Rs. 55), Parle-G (Rs. 10)"

The current UX shows a dead-end ("Add Rs. X more to proceed") with no help. Users who see their own purchase history as suggestions don't feel they're adding junk — they're pulling forward tomorrow's purchase.

Then

2. "Notify when back" for out-of-stock trigger items

Push notification: "Amul Gold 500ml is back in stock. Order now — 11 min delivery."

Users who leave because of one missing item aren't lost — they're deferred. A restock notification converts a dead session into a delayed order within hours.

3. Show real-time ETA on the home screen before cart

"Delivering in 12 min to your location" visible as the first thing on app open

Users who know the ETA upfront either accept it and order, or don't start a cart. Both outcomes are better than building a cart for 3 minutes and then seeing "32 min" at checkout — which wastes time and creates negative sentiment.

Small-basket daily buyers 41% · highest frequency

Need 1-3 items daily (milk, bread, eggs). Hit minimum-order wall every time. Currently solving this by walking to the kirana store. Will churn permanently if not addressed.

“I just needed milk and eggs. But then it says add Rs. 89 more. I'm not buying chips I don't want.”

Trigger-item shoppers 28% · binary outcome

Open the app for one specific item. If it's there, they build a full cart around it. If not, the entire session dies. No substitution behavior observed.

“I wanted the Amul Gold 500ml. It wasn't there. So I just thought I'll go downstairs.”

Time-sensitive orderers 19% · promise-dependent

Open the app because they believe in 10-minute delivery. When ETA exceeds 20 minutes, the app fails its core promise and the kirana store wins on speed.

“It said 30 minutes. My dukaan is 2 minutes away. What's the point then?”

All three segments share a structure: the user had genuine purchase intent, opened the app to buy, and was deflected by a friction that made the nearby kirana store the better option.

  • User needs milk + eggs (Rs. 85) → opens app → "add Rs. 115 more" → refuses to add junk → walks to kirana
  • User needs specific brand/SKU → searches → "out of stock" → no substitute accepted → goes downstairs
  • User needs item for cooking now → opens app → sees "25-35 min" ETA → kirana is 2 min away → closes app
  • User hits minimum-order wall → browses suggestions → nothing relevant → feels forced → abandons with irritation
The minimum-order intervention alone (lever 1) addresses 41% of non-ordering sessions. These are users who open the app daily and have active purchase intent — converting even half of these blocked sessions into orders would increase daily order volume significantly. The key insight: these aren't users who need convincing. They're users who need the wall removed.
High Minimum-order friction (6 of 15 users, unprompted, identical language)
High Trigger-item dependency (4 of 15 users, session died when item absent)
Medium ETA disappointment (3 of 15 users, but strong causal language)

If the minimum is lowered or removed, do these users order daily — or was the minimum the excuse for an underlying habit gap?

If they order daily after removal, the minimum was the sole blocker and the revenue from frequency increase outweighs the margin loss. If they still don't order daily, the kirana habit is stickier than the friction suggests.

Are trigger items consistently out of stock, or did users hit a one-time availability gap?

If certain SKUs (Amul Gold 500ml, specific atta brands) are chronically understocked, the fix is supply chain prioritization. If it was random, the "notify when back" feature is sufficient.

Do users check ETA before or after building a cart?

If they check before (and leave immediately), the wasted effort is low but the session is lost early. If they check after building a cart (current behavior), the frustration is compounded by time invested. The placement of ETA information determines which problem to solve.

Supporting Evidence

When a user needs 1-3 items totaling less than the minimum order value

they open the app, add their items, hit the minimum-order wall, scan suggestions for something useful, find nothing they actually need, and abandon — because adding Rs. 80 of unwanted items to buy Rs. 85 of needed items feels irrational when the kirana store requires no minimum

→ The minimum order doesn't "encourage bigger baskets" for this segment. It simply sends them to the store downstairs. Every blocked session is a lost order, not a deferred one.

When the specific item that triggered the app open is marked "out of stock"

the user's entire purchase intent collapses — they don't browse for alternatives, don't accept substitutes, and don't check back later. The trigger item was the reason for the session; without it, no session exists.

→ Substitution suggestions don't work because the user's relationship is with the specific SKU, not the category. "Amul Taaza" is not a substitute for "Amul Gold" in this user's mental model.

When delivery ETA exceeds 20 minutes for a user who opened the app for an immediate need

the user performs an instant mental calculation: "kirana is 2 minutes, app is 30 minutes" — and the app loses on the only dimension that justified its existence for this occasion. The "quick" in quick commerce was the entire value proposition.

→ Showing ETA late (at checkout) is worse than showing it early (at app open). Late ETA wastes the user's time and creates resentment. Early ETA lets the user self-select and preserves brand trust for occasions when speed is available.

3 interventions ranked by impact and effort:

#1

Replace the minimum-order dead-end with a smart top-up experience: progress bar + personalized suggestions from purchase history

Targets: Small-basket daily buyers (41% of non-ordering sessions, 6 of 15 users)

Mechanism Instead of "Add Rs. 89 more" with generic suggestions, show a progress bar and items the user has bought before. "You usually buy Amul Butter (Rs. 55) — add it?" converts the minimum from a wall into a useful prompt that pulls forward tomorrow's purchase to today.

Expected Meaningful increase in minimum-order completion rate for small baskets. Users add items they actually want (not junk), improving satisfaction and repeat behavior. Some users may still abandon — the Rs. 30-50 gap is more recoverable than Rs. 100+.

Why first Highest-confidence finding (6/15 unprompted), addresses highest-frequency segment, front-end change with recommendation logic, and directly removes the #1 reason users cite for going to kirana.

High confidence Medium effort Days to test
#2

Add "Notify when back in stock" for out-of-stock items, with automatic push notification + pre-built cart when item returns

Targets: Trigger-item shoppers (28% of non-ordering sessions, 4 of 15 users)

Mechanism When a user searches for an item that's out of stock, offer a one-tap "notify me" button. When restocked, send a push with the item + ETA. Optionally pre-populate their usual basket around that item to reduce friction further.

Expected Won't prevent the initial session abandonment (the item is genuinely unavailable) but converts a dead session into a delayed order within 2-6 hours. Also provides supply chain signal: which SKUs cause the most session kills?

Why first Binary outcome makes this clean: if the item comes back, the user orders. No persuasion needed. Implementation is standard (notification + stock webhook). Also reveals high-value SKUs that should never be out of stock.

High confidence Low effort Days to test
#3

Show real-time delivery ETA on the home screen / app open, before the user builds a cart

Targets: Time-sensitive orderers (19% of non-ordering sessions, 3 of 15 users)

Mechanism Display "Delivering in ~12 min" or "Busy now — ~28 min" as the first visible element on app open. Users self-select: if ETA is acceptable, they shop. If not, they leave immediately without wasting time building a cart they'll abandon.

Expected May reduce session depth (users leave earlier when ETA is high) but eliminates the frustrated "I just spent 3 minutes building a cart and NOW you tell me 30 minutes" experience. Preserves trust for the brand. Doesn't increase conversion during slow periods but prevents negative sentiment.

Why first Ranked third because it doesn't create new orders — it prevents bad experiences. But long-term it protects the "quick" brand promise that drives all user acquisition. Trade-off: some sessions will end at app open instead of at checkout.

Medium confidence Low effort Days to test

What's the minimum-order gap distribution? Are most blocked users Rs. 30-50 short, or Rs. 100+ short?

If most are Rs. 30-50 short, smart suggestions will easily bridge the gap with one relevant item. If most are Rs. 100+ short, the gap is too large for "top-up" framing — the fix may need to be a lower minimum or a small-order fee instead.

Which specific SKUs are "trigger items" that kill sessions when absent?

If 5-10 SKUs account for most session kills (likely: specific milk brands, eggs, bread), these should be treated as never-out-of-stock items with priority restocking. The cost of holding extra inventory is far less than the revenue lost from dead sessions.

Do users who see high ETA upfront return later when ETA drops — or do they forget?

If they return when ETA improves, the early-ETA display is a pure win (prevents frustration, user comes back). If they forget, the app needs a "delivery speed is back to normal" notification to recapture the intent.

Blocked at the Wall

High confidence
Based on 6 of 15 conversations

User opens the app for a small daily need, adds 1-3 items, hits the minimum-order requirement, scans suggestions, finds nothing useful, and walks to the kirana store.

What We Saw

Across 6 conversations, users described a near-identical daily pattern: open app for milk/eggs/bread, add items totaling Rs. 60-120, encounter "Add Rs. X more to proceed" message, scroll through suggested add-ons (chips, chocolates, random FMCG), reject them as wasteful, and close the app. All 6 mentioned the kirana store as their immediate alternative. 4 of 6 said this happens "almost every day" or "3-4 times a week." Language used: "forced," "waste," "why should I buy what I don't need."

What We Think It Means

The minimum-order requirement is designed to ensure delivery economics work. But for the daily small-basket user, it creates a daily rejection event. Each rejection reinforces "this app isn't for me" and strengthens the kirana habit. The suggestions shown at the wall are generic (chips, cola, biscuits) rather than personal — so they feel like the app trying to upsell rather than trying to help. The critical insight: these users aren't price-sensitive. They'd pay a small delivery fee. They're rational-allocation sensitive — they refuse to spend Rs. 80 on items they don't want to get Rs. 85 of items they do.

“Every morning it's the same drama. I need doodh and anda, that's Rs. 80. They want Rs. 199. So I add some random namkeen, feel stupid about it, and then just go to the shop.” Participant 4
The Journey
What They Expected
To order 1-3 items for immediate need. Assumed quick commerce means "any order, fast." Didn't expect a purchase minimum.
How They Judged It
"Add Rs. 89 more" felt like a tax on convenience. Suggestions weren't relevant. The math (Rs. 80 of junk to get Rs. 85 of need) felt irrational.
Where They Stopped
At the minimum-order message. Decision was made within 5-10 seconds of seeing the wall. No extended browsing.
What Got In The Way
Not the minimum itself — but the lack of useful suggestions to bridge the gap. Generic add-ons made the wall feel like a dead end.
What They Did Instead
Walked to the kirana store (all 6). None tried a competitor app. The alternative is physical, not digital.
What Would Change This
"If it showed me things I actually buy — like butter or bread I'll need tomorrow — I'd add it. But random chips? No." (Participant 4)
Why This Matters

This is the highest-frequency segment. They open the app daily with genuine intent. Each blocked session is not just a lost order — it's a reinforcement of the "kirana is easier" habit. Over weeks, this segment will stop opening the app entirely. The fix isn't removing the minimum — it's making the bridge to the minimum feel useful rather than wasteful.

New From Conversations

The Trigger Item Is Everything

High confidence
Based on 4 of 15 conversations

User opens the app for one specific item. That item is out of stock. The entire session collapses with no substitution, no browsing, no recovery.

What We Saw

4 users described opening the app specifically for one item: Amul Gold 500ml (2 users), a specific atta brand (1 user), and Britannia brown bread (1 user). In all 4 cases, the item was out of stock. All 4 closed the app immediately. None accepted the substitution offered by the app. None browsed other categories. When asked why they didn't try the suggested alternative, responses were: "it's not the same," "I only use that one," "my family won't drink the other one."

What We Think It Means

For these users, the app session has a single purpose, and that purpose is an exact SKU. The app treats "Amul Taaza" as a substitute for "Amul Gold" because they're both milk. The user doesn't. Brand loyalty at the SKU level is absolute for daily staples. When the trigger item is absent, the user doesn't have a "grocery need" that other items can fulfill — they have a "this specific item" need that nothing else satisfies. The session is binary: trigger item exists = full cart built around it. Trigger item absent = zero order.

“I wanted the Amul Gold 500ml. It showed Amul Taaza. That's not the same thing. My kids won't drink it. So I just went to the shop.” Participant 9
The Journey
What They Expected
Their specific item to be available. This is a daily staple — they expect it to always be in stock.
How They Judged It
"Out of stock" = session over. No evaluation of alternatives. The judgment is instant and binary.
Where They Stopped
At the search result or product page showing "out of stock." Average time from app open to close: under 30 seconds.
What Got In The Way
Inventory gap for a specific SKU. Not a UX problem, not a pricing problem, not a discovery problem.
What They Did Instead
Went to the kirana store which stocks their item reliably. "Woh hamesha rakhta hai" (He always keeps it).
What Would Change This
"If they told me when it's back, I'd order then. But I'm not going to keep checking." (Participant 11)
Why This Matters

This segment reveals that a small number of SKUs likely drive a disproportionate share of session starts. If the app can identify and never-out-of-stock these 10-20 trigger items, it prevents the highest-intent sessions from dying. The "notify when back" feature is a recovery mechanism, but the real fix is supply chain: these items should be treated as must-stock, even at the cost of holding extra inventory.

New From Conversations
Needs 1-2 items Adds to cart Hits minimum wall Scans irrelevant suggestions Walks to kirana

The daily friction arc. Happens 3-5x per week per user. Each occurrence reinforces the kirana habit and weakens app stickiness. The user never considers a competitor app — their alternative is physical proximity.

Wants specific SKU Searches "Out of stock" Rejects substitute Closes app in <30 sec

The binary-outcome arc. No partial conversion possible. The session either succeeds completely (trigger item available, full cart built) or fails completely (zero order). Recovery requires restock notification, not UX improvement.

Immediate need Opens app expecting ~10 min Builds cart (3 min) Sees "28 min" at checkout Kirana wins on speed

The broken-promise arc. The user invested time building a cart under the assumption of quick delivery. The late ETA reveal compounds frustration: they wasted 3 minutes AND don't get the speed. Double negative.

Already Known
  • Minimum-order thresholds create friction for small baskets — standard quick commerce trade-off.
  • Out-of-stock items cause session abandonment — observable from search-to-exit analytics.
  • Delivery ETA affects conversion — well-documented in on-demand commerce.
New From This Research
  • The real competitor is the kirana store, not Zepto/Blinkit. Users don't switch apps — they switch to physical. This changes the competitive frame entirely.
  • Users would accept a small delivery fee over forced top-ups. "Rs. 15 delivery fee for a Rs. 80 order? Fine. Buying Rs. 80 of chips I don't want? Never." The minimum-order model assumption is wrong for this segment.
  • Trigger items create binary sessions — substitution is rejected 100% of the time for daily staples. The category-level substitution logic is irrelevant for brand-loyal daily buyers.
  • Generic top-up suggestions feel like upselling and create negative brand sentiment. Personalized suggestions from purchase history feel like "helping me plan tomorrow" and are accepted willingly.

Have a drop-off you're trying to understand?

Give us a cohort of users who didn't act.
We'll tell you why — and what to fix. In 48 hours.

Diagnose your drop-off

Or just send us a list of users — we'll take it from there.