Pathao Food Search · Personalisation Ranking · NLP 2023–2024

Experiments to improve
food search

A structured programme of search improvements at Pathao Food - Bangladesh’s largest food delivery platform. Six experiments designed to close the gap between what users type and what makes them order: typo correction, personalisation signals, smart ranking, and deal visibility.

6 experiments
Scoped and spec’d end-to-end
5 Must-have
Features prioritised for first release
3 signals
Personalisation layers built into ranking
0→1 build
Search intelligence built from scratch
01 — Context

Pathao Food is Bangladesh’s largest food delivery platform. Search is where intent converts or dies.

Pathao operates as a super-app across ride-hailing, parcel delivery, and food delivery in Bangladesh. The food vertical competes directly with the local arms of regional players and several domestic challengers. At this scale, even marginal improvements in search quality compound into significant order volume.

I owned the food product experience as PM and identified search as an under-invested surface relative to its conversion importance. A user who types a query and gets irrelevant results doesn’t complain - they leave. The search-to-order funnel was leaking in ways that were invisible without deliberate instrumentation.

Platform

Pathao Super-App

Operating across ride-hailing, parcel, and food in Bangladesh. Food delivery is one of the highest-frequency verticals, with returning users placing multiple orders per week. Search is a primary entry point for discovery - not just reordering.

My Role

Product Manager, Food

I was the PM responsible for the food delivery product experience. This initiative was self-initiated - I identified search quality as a high-leverage opportunity, built the case, wrote the CRD, and drove the experiment programme from problem framing to spec.

Why search specifically: Conversion funnels in food delivery have a well-understood structure - open app, discover or search, select restaurant, add items, checkout. Most optimisation attention goes to checkout and restaurant pages. Search sits upstream of all of it: a failed search means no restaurant page visit, no menu browse, no order. I treated search quality as a funnel multiplier, not a secondary feature.


02 — The Problem

Users searching in Banglish, with typos, or without context weren’t getting results that matched their intent.

Food search in Bangladesh has characteristics that make it harder than search in most other markets. Bangladeshi users routinely write in Banglish - Bengali words rendered in English script. “Biriyani” might be typed as “biryani”, “biriani”, “biriany” or “biryanee”. A search engine that requires exact matches fails a significant share of real user intent.

Beyond language, search results at the time were broadly ranked without personalisation. A new user and a returning user with fifty orders see the same list. A restaurant a user orders from weekly appears in the same position as one they’ve never visited. There were no signals for favourites, no indicators of deal availability, no acknowledgment of order history in the results layer.

The four problem areas I scoped

01
Language and typo mismatch
Banglish spellings and common phonetic variations fail to match restaurant or item names in the database. A user who types “kacchi” instead of “kachchi” may get zero results or degraded results for one of Bangladesh’s most-searched dishes. Every failed or degraded search query is a conversion loss.
02
No personalisation in results
Search returned the same ranked list to all users regardless of order history, saved restaurants, or past ratings. Returning users - who represent the highest-value cohort - got no signal that a restaurant they’ve ordered from before was in the results. The most loyal users received the most generic experience.
03
Rating signals not weighted in ranking
Restaurant quality signals - both rating value and rating volume - were not adequately factored into search ranking. A restaurant with 4.8 stars across 2,000 orders could appear below one with 3.9 stars and 20 orders. Quality ranking matters both for user trust and for downstream order satisfaction metrics.
04
Deal visibility buried in results
Restaurants running active discounts or offers had no differentiated visibility in search results. Deals are one of the strongest conversion accelerants in food delivery - a user browsing the same search query converts at materially higher rates when they can easily identify which restaurants have offers. This signal was invisible at the search layer.

03 — My Approach

Before writing a single spec, I built the evidence case that each experiment was worth building.

The biggest mistake a PM can make with a list of “improvements” is to start building without validating that the improvements will move the right metrics. I structured this programme around a deliberate sequencing: prove the ROI case first, then write the spec.

For each experiment, I defined the statistics needed to confirm the intervention would produce a return before engineering invested any time. This framework borrowed from classic hypothesis testing: identify what you need to measure, define what outcomes would justify the build, and only proceed when the data supports it.

The discipline I imposed on myself: For every experiment, I asked “what data would tell me this is not worth building?” before I asked “how do we build it?” A search fix that affects 1% of queries and improves conversion by 0.1% is not worth an engineering sprint. A fix that affects 30% of queries and improves conversion by 5% absolutely is. I didn’t want to build a backlog of features - I wanted to build the right features.

How I worked cross-functionally

Data & Analytics

Quantifying the problem

I worked with the analytics team to pull the baseline metrics: what % of search queries contain typos or Banglish spellings, and what the conversion rate gap looks like between users who search normally vs. those who make typo errors. These numbers determined which experiments to prioritise.

Engineering

Feasibility and spec review

Each experiment spec went through a feasibility review with engineering before being locked. I wrote the functional requirements; the eng team validated implementation complexity and flagged any dependencies on backend data availability (e.g. whether order history and favourites were already accessible to the search ranking layer).

Design

UI patterns for new signals

Several experiments required new UI elements - icons for previously-ordered items, favourite badges, deal indicators, currency tier symbols. I worked with design on the iconography, ensuring each new signal was visually distinct and legible without cluttering the results card.


04 — ROI Framework

I defined a data-first decision matrix before any experiment entered the spec stage.

The most rigorous element of this initiative was the statistical framework I built to gate which experiments we built. Rather than relying on intuition or stakeholder enthusiasm, I defined a two-variable test for each experiment: the prevalence of the problem, and the conversion cost of the problem.

The Banglish/Typo Case - the clearest example: Metric A: what % of search queries are typos or Banglish variations? Metric B: do users who make typo searches convert at a meaningfully lower rate? The outcome matrix below is exactly how I framed it to stakeholders. This wasn’t a gut call - it was a decision tree that any stakeholder could understand and challenge.

Decision matrix for the typo experiment

Scenario 1
High prevalence, Low conversion loss (A high, B low)
Many searches have typos, but users still convert at the same rate. This tells us the search engine is already handling typos adequately, or users are self-correcting. Not worth building - fixing it won’t move conversion.
Do not build
Scenario 2
Low prevalence, High conversion loss (A low, B high)
Typo searches hurt conversion badly, but they’re rare. The absolute volume of lost orders is small. Potentially worth building depending on A value - even a 2% prevalence rate on a high-volume platform still represents thousands of lost orders per week.
Depends on A value
Scenario 3
High prevalence, High conversion loss (A high, B high)
Many searches have typos, and those searches convert at substantially lower rates. This is the unambiguous “build it” case. The product is failing a large share of user intent, and fixing it has a direct, measurable conversion uplift. Absolutely worth building.
Build immediately
Scenario 4
Low prevalence, Low conversion loss (A low, B low)
The problem is both rare and low-impact. Engineering effort here has near-zero ROI. There are almost certainly higher-value improvements available. Do not build - revisit if either metric changes over time as the platform scales.
Do not build

I applied the same logical framework across all six experiments - defining the measurable conditions that would justify each build before writing any functional requirements. This is the habit that separates roadmaps grounded in evidence from backlogs driven by enthusiasm.


05 — The Experiments

Six experiments. Each specced with a clear hypothesis, measurable success condition, and defined UI behaviour.

Below are all six search experiments from the Change Requirement Document I authored. Each was assigned a spec ID (SE-1 through SE-7, excluding SE-2 which was merged), a priority, and a full behavioural description. The priority was set collaboratively with stakeholders using the ROI framework above.

SE-1
Indicators for previously ordered items
Must Have UX Signal

If a user has ordered from a restaurant previously, the search result for that restaurant displays an icon on the right side of the card indicating prior purchase history. The icon differentiates between a single prior order and multiple prior orders - giving the user an at-a-glance signal of their relationship with that restaurant.

Why this matters: Returning users are the highest-conversion segment in food delivery. They already trust the restaurant. A small icon that reminds them “you’ve ordered here before” reduces decision friction at precisely the moment a user is scanning results. It’s a nudge, not a feature - but nudges at high-intent moments compound into measurable conversion lift.

Target user
Returning users
Conversion lever
Reduce scan friction
UI element
Single or multiple order icon
SE-Banglish
Banglish & typo correction mapping
Must Have NLP / Matching

Map Banglish words (Bengali rendered in English script) and common phonetic variations to canonical search targets. A user typing “biriyani,” “biriany,” or “bryani” should resolve to the same target as “biryani.” Similarly, “kacchi,” “khichuri,” and other culturally-specific dish names need robust variant coverage.

The evidence gate I set: I required two data points before greenlighting this build. First: what % of search queries are Banglish or contain typos? Second: do these queries convert at a lower rate than “clean” queries? High prevalence + low conversion = unambiguous build case. The decision matrix in Section 04 was built specifically for this experiment.

Why this is a Bangladesh-specific problem: Most search algorithms are trained on English-language corpora. Banglish is not phonetically consistent - the same Bengali word is romanised differently by different users. A standard fuzzy-match approach underperforms because the variants aren’t just typos; they’re culturally-specific linguistic patterns. I specified that the mapping layer needed explicit curation for the most common dish and cuisine categories in the Pathao Food catalogue.

Target user
All users (especially vernacular)
Conversion lever
Zero-result and low-result recovery
Data gate
Typo % + conversion delta
SE-3
Rank restaurants with higher ratings higher
Should Have Ranking Signal

Add a quality-weighted scoring component to search ranking. Restaurants above a threshold rating value and above a threshold rating count receive additional ranking score points. This is a combined signal - a restaurant needs both a high rating and a meaningful volume of ratings to receive the boost.

Why the dual threshold matters: A restaurant with 5 stars from 3 orders is statistically meaningless. A restaurant with 4.6 stars from 800 orders is a genuine quality signal. Using count alone disadvantages newer-but-excellent restaurants; using rating alone amplifies noise from low-volume outliers. The dual threshold creates a quality signal that is both reliable and fair to the catalogue.

I defined this as “Should have” rather than “Must have” because the ROI depends on how correlated current ranking quality is with ratings. If the default ranking already surfaces high-rated restaurants, the marginal lift is lower. The data review was required to confirm the gap before committing engineering resources.

Signal type
Rating value + count dual threshold
Expected outcome
Higher post-order satisfaction
Priority gate
Current ranking quality baseline
SE-4
Badge for restaurants ordered earlier and rated highly
Must Have Personalisation

Identify restaurants in search results where the user has a prior order and where the restaurant’s rating exceeds a defined threshold. Mark those restaurants with a distinct icon in the search result card. This combines the personalisation signal from SE-1 with a quality filter - surfacing restaurants the user already trusts and that have objectively high satisfaction scores.

The compounding effect: SE-1 tells a user “you’ve ordered here before.” SE-4 tells them “you’ve ordered here before, and this restaurant is highly rated.” The combined signal reduces the research burden for a returning user making a familiar decision. It’s the difference between recognising a restaurant and being confidently directed back to one you already know is good.

Signal type
Prior order + quality threshold
Target user
High-frequency returning users
UI element
Combined badge icon on card
SE-5
Badge for favourite restaurants
Must Have Personalisation

If a search result contains a restaurant the user has saved to their favourites list, display a “favourite” icon on that restaurant’s search result card. This makes the favourites feature visible at the discovery layer rather than buried in a separate profile tab.

Why this closes a loop: Users save restaurants to favourites because they intend to return. But if they don’t navigate directly to the favourites tab, that signal is invisible at the point of discovery. Surfacing the favourite badge in search results means the act of saving a restaurant actually changes the future search experience. This makes favourites a more valuable behaviour to encourage, which has upstream effects on engagement and app stickiness.

Data dependency
Favourites list accessible to search layer
UX impact
Makes favourites visible in discovery flow
Flywheel effect
Increases value of saving favourites
SE-6
Rank restaurants with deals higher + offers filter
Must Have Ranking + Filter

Restaurants with active deals receive a ranking boost in search results. Additionally, an “Offers” filter chip appears at the top of search results. When activated, the filter shows only restaurants with active deals; when deactivated, all restaurants reappear in the default ranked order.

The conversion rationale: Deals are one of the highest-intent conversion signals in food delivery. A user who can see “20% off” on a restaurant they were already considering will convert at a materially higher rate than one who doesn’t know a deal exists. Burying deals inside restaurant pages means most users never discover them. Surfacing deal availability at the search layer closes the discovery gap.

The filter chip also addresses a specific user behaviour: deal-seekers who open the app with the explicit goal of finding offers. These users currently have no efficient way to filter for deals except by browsing. The filter turns a manual hunt into a one-tap action.

Ranking lever
Deal-weighted score boost
New UI
Offers filter chip at search top
Target behaviour
Deal-seeking sessions
SE-7
Price tier indicator (taka symbol) on restaurant cards
Must Have Discovery Signal

Add a price tier indicator to each restaurant search result card, using one, two, or three currency (৳) symbols to represent the restaurant’s relative price range. The tier is calculated from the restaurant’s median basket size, classified into three buckets: lower, mid-level, and higher median basket.

Why median basket size: A restaurant’s average order value is a better proxy for a user’s expected spend than item prices, because it reflects real ordering behaviour - including add-ons, portions, and typical combination orders. Median (rather than mean) is used to reduce the effect of outlier orders. The three-tier classification keeps the signal simple and actionable without requiring users to process exact numbers.

The discovery problem it solves: Without a price signal in search results, a user browsing results for “pizza” has no way to distinguish a casual fast-food option from a premium restaurant before clicking through. This leads to click-throughs that end in drop-off when the user sees the price range. The ৳/৳৳/৳৳৳ indicator reduces this friction by setting price expectations at the search layer, before a user invests attention in a restaurant page.

Data source
Median basket size per restaurant
Tiers
৳ · ৳৳ · ৳৳৳
UX benefit
Reduce uninformed click-through drop-off

Priority summary across all experiments

ID Experiment Priority Signal category
SE-1 Indicators for previously ordered items Must Have Personalisation
SE-Banglish Banglish & typo correction mapping Must Have NLP / Language
SE-3 Rank restaurants with higher ratings higher Should Have Quality Ranking
SE-4 Badge: prior order + high-rated restaurant Must Have Personalisation
SE-5 Badge for favourite restaurants Must Have Personalisation
SE-6 Rank deal restaurants higher + offers filter Must Have Deal Discovery
SE-7 Price tier indicator (৳/৳৳/৳৳৳) Must Have Price Discovery

06 — Metrics

How I would measure success - and what I’d monitor to know if something was going wrong.

North Star metric: Search-to-order conversion rate - the % of search sessions that result in a completed order. All six experiments are designed to move this metric. Sub-metrics exist per experiment to diagnose which lever is working and which isn’t.

Metric category Metric Why it’s tracked
Core conversion Search-to-order conversion rate (overall) The single metric that tells us whether the search improvements are producing business value. Measured pre/post experiment launch and monitored weekly. Any regression triggers immediate investigation.
Language quality Zero-result query rate & typo/Banglish query share Baseline for the Banglish experiment. Post-launch, zero-result rate should decline as more variant spellings resolve to valid restaurant matches. We also track what % of queries are detected as Banglish or typo-type to validate the initial ROI assumption.
Personalisation Click-through rate on results with personalisation badges vs. without Validates that the prior-order, favourite, and high-rated badges are actually influencing user behaviour. If badged results don’t show a higher CTR than undecorated results, the badge design may need revisiting before we invest in further personalisation depth.
Deal engagement Offers filter usage rate & conversion rate on filtered sessions If the filter is never used, the deal-seeker hypothesis was wrong. If it’s used but doesn’t improve conversion, the deal inventory may be too thin. Both scenarios tell us something different about the business health of the deals programme, not just the search UX.
Quality Post-order satisfaction score (ratings given after orders from search) SE-3 and SE-4 are designed to surface higher-quality restaurants. If they’re working, the orders they generate should produce higher satisfaction scores than the baseline. A drop in post-order ratings after the ranking change is a signal we’ve over-optimised for the wrong quality signal.
Discovery Uninformed click-through bounce rate (users who view & exit restaurant page without ordering) SE-7 (price tier) is specifically designed to reduce click-throughs that end in drop-off due to price mismatch. If the price indicator is working, the bounce rate from restaurant pages for users who arrived via search should decline. A stable bounce rate post-launch suggests price wasn’t the primary drop-off driver.

07 — Risks

What could go wrong - and how I designed against each risk.

High
Banglish mapping creates false positives and breaks valid searches
An overly aggressive typo correction that remaps a legitimate rare query to a common one will frustrate users with genuine unusual search intent. Mitigated by: building the correction layer as a candidate-expansion system (adds matches, doesn’t replace them), requiring a confidence threshold before remapping, and staging rollout with close monitoring of the zero-result rate post-launch.
High
Personalisation badges increase cognitive load and clutter the results UI
Three new badge types (prior order, high-rated prior order, favourite) simultaneously appearing on a results page could make the UI feel noisy. Mitigated by: clear visual hierarchy in the design (priority order: favourite > high-rated prior > prior order), constraining badges to a single icon per card, and A/B testing the badge density with a holdout group before full rollout.
High
Deal ranking boost disadvantages quality restaurants without active promotions
A restaurant with 4.9 stars and no active deals could be ranked below a mediocre restaurant running a discount. Mitigated by: capping the deal ranking boost so it cannot overcome a large quality signal differential; the boost helps deal restaurants surface, not override the quality baseline.
Medium
Price tier (৳/৳৳/৳৳৳) miscalibration leads to user price mismatch
If the median basket thresholds are set incorrectly, a restaurant could display the wrong tier, leading to misaligned price expectations. Mitigated by: validating the threshold calibration against a stratified sample of restaurants before launch, with manual QA spot-checks across the catalogue. The tiers should be reviewed and recalibrated as restaurant menu pricing shifts over time.
Medium
ROI data collection delays slow down the experiment gating process
The ROI framework requires analytics data (typo query %, conversion delta by query type) before experiments can be greenlit. If data infrastructure is not in place to measure these inputs, the framework stalls. Mitigated by: identifying the required data points early and confirming availability with the analytics team before the CRD was finalised, not after.
Low
Experiment interactions cause attribution ambiguity in results
Launching six experiments simultaneously makes it difficult to attribute conversion changes to any specific change. Mitigated by: sequencing experiments in priority order with a holdout group, and using flagging in the analytics layer to distinguish sessions that triggered each specific feature. Complex interaction effects would require full-factorial A/B testing, which I noted as a future iteration if attribution ambiguity became material.

08 — Lessons

What this initiative taught me about evidence-based product decisions and local market depth.

01
The best PM question is “what data would tell me not to build this?”
Every PM wants to build features. The discipline is knowing which ones not to build. The ROI decision matrix I created for this initiative - defining the statistical conditions that would either justify or kill each experiment - is the most transferable thing I took from it. Features built without a falsifiable hypothesis are bets, not decisions. The matrix forced every experiment to earn its place on the roadmap.
02
Localisation is a product requirement, not a translation task
Banglish is not a quirk of the Bangladeshi market - it’s how a large share of educated, digitally-fluent users type. Treating it as a translation problem (map Banglish to English) misses the point. It required explicit product thinking: what is the user’s actual intent? What variations of that intent will my system encounter? How do I handle the ones it doesn’t recognise? These are PM questions, not engineering questions.
03
Personalisation earns its complexity only when it changes behaviour
Adding three personalisation badge types to search results is technically straightforward. What made the spec rigorous was tying each badge type to a specific behavioural hypothesis: favourites are clicked more when they’re visible; prior-order badges reduce the decision cost for returning users. Without the behavioural hypothesis, personalisation is decoration. With it, it’s a testable intervention with a measurable outcome.
04
Ranking changes require holding the quality floor
Every time you adjust search ranking - for deals, for ratings, for personalisation - you risk eroding the quality baseline for users who aren’t in the target segment. I specified explicit caps on ranking boosts throughout the CRD to prevent any single signal from overwhelming the quality signal. The goal of ranking experiments is to surface better options for more users, not to reward the loudest signal.
05
A CRD is a conversation tool, not just a documentation artefact
The Change Requirement Document for this initiative served as the primary alignment artefact across data, engineering, design, and stakeholders. Writing it forced me to be specific about every assumption I was making. Every “TBD” in the document was a conversation I still needed to have. Ambiguity in a spec is always cheaper to resolve before development than during it.
Appendix
Spec Reference
Formal spec IDs, descriptions, and acceptance notes from the original Change Requirement Document authored for this initiative.
Appendix A — Full Experiment Spec Reference (from CRD)
#TitleDescriptionPriority
SE-1 Indicators for previously ordered items If a user has ordered an item previously, there will be an icon at the right side of the item search result indicating that the item has been bought previously. A single icon for a single prior order transaction; a multiple-order icon for multiple prior transactions. Must have
SE-3 Rank restaurants with a higher number of ratings higher Add extra score points to restaurants whose rating value is above a threshold rating value AND whose rating count is above a threshold rating count. Both conditions must be met. Should have
SE-4 Add badge to restaurants where I have ordered earlier and rated highly Identify restaurants where the user has ordered previously and the restaurant has a rating value above a threshold. Mark those restaurants with icon specifications in the search result card. Must have
SE-5 Add badge to restaurants which are favourite If the search result contains any restaurant that is in the user’s favourite list, mark those restaurants with a “favourite” icon in the search result card. Must have
SE-6 Rank restaurants with deals higher + offers filter Pull restaurants with active deals to the top of search results. Add an offers filter chip at the top of results. When activated, show only restaurants with active deals; deactivate to return to full ranked list. Must have
SE-7 Add currency (taka) symbol to search results at restaurant level A currency icon will appear with each restaurant in results: single (৳), double (৳৳), or triple (৳৳৳) based on classified median basket size. Lower median basket = ৳; mid-level = ৳৳; higher = ৳৳৳. Must have
Appendix B — Statistics Required to Prove ROI (from CRD)
ExperimentMetric AMetric BBuild condition
Banglish / Typo % of search queries that are typos or Banglish variations Conversion rate for erroneous queries vs. clean queries A high + B high = build. A high + B low = skip. A low + B high = depends on A value. A low + B low = skip.