How I designed Pathao Food's Customer Lifecycle Management program from the ground up: scoring every user on Recency, Frequency, and Monetary value, building a 28-segment matrix out of it, and turning that matrix into a budget-governed, always-on reactivation engine - not a one-off promo blast.
Pathao is Bangladesh's leading super-app - rides, deliveries, and food ordering under one roof. Pathao Food, the food delivery vertical, had built up a user base in the millions over several years of acquisition pushes, seasonal campaigns, and organic growth riding on the rest of the super-app.
What it hadn't built was a systematic way to manage that base over time. Retention activity existed, but it was campaign-shaped: a promo push around a holiday, a blanket "we miss you" notification, a discount code blasted to everyone regardless of whether they needed the nudge. There was no persistent model of who a user was in their lifecycle - newly acquired, loyal and active, drifting, or already gone - and no infrastructure that let the growth team target spend at the users who actually needed it.
I proposed and built the RFM-based Customer Lifecycle Management (CLM) engine to close that gap: a persistent segmentation model that scores every user on Recency, Frequency, and Monetary value, and a treatment framework built directly on top of it - so retention spend goes where it changes behaviour, not where it's easiest to send a push notification.
The product vision: Replace one-off retention campaigns with a persistent lifecycle infrastructure - one that classifies every user into a value-and-recency segment, prescribes the right treatment for that segment, and measures success on cohort migration and long-term behaviour change, not just short-term redemption.
When I pulled the full active-user base and looked at it through a recency and value lens for the first time, three problems became impossible to ignore.
RFM segmentation scores every user on three independent dimensions and combines them into an addressable structure. I defined how each axis would be measured for Pathao Food specifically, then combined them into the matrix that drove every downstream decision.
The number that reframed the whole program: once I ran the scoring, 3,913,386 users fell into the addressable base. Of those, 83% sat in the lowest-value Rust tier, and 78% hadn't ordered food in 200+ days. This wasn't a loyalty program for an already-engaged base - it was overwhelmingly a reactivation problem for a long, dormant tail, and that single insight changed where I put the program's priority and budget.
Every one of the 3.9M+ users falls into exactly one of 28 cells - one of 7 value tiers crossed with one of 4 recency bands. Each cell shows its population and whether it received a promotional treatment or was deliberately held out as a control.
| Value Tier | 0–30 days | 31–90 days | 91–200 days | 200+ days |
|---|---|---|---|---|
| Diamond | 244 Control |
45 Treated |
12 Treated |
503 Treated |
| Platinum | 2,053 Control |
1,095 Treated |
330 Treated |
5,760 Treated |
| Gold | 2,090 Treated |
1,026 Treated |
1,625 Treated |
35,782 Treated |
| Silver | 9,755 Control |
8,520 Treated |
1,531 Treated |
7,952 Treated |
| Bronze | 9,716 Treated |
7,772 Treated |
13,961 Treated |
50,167 Treated |
| Iron | 48,360 Treated |
57,557 Treated |
67,504 Treated |
313,406 Treated |
| Rust | 137,978 Treated |
188,635 Treated |
283,477 Treated |
2,656,530 Treated |
Bottom-right cell - Rust tier, 200+ days dormant - is the single largest segment in the base at 2,656,530 users, 68% of the entire addressable population on its own.
I named the tiers after a familiar loyalty-ladder convention - Diamond at the top, Rust at the bottom - specifically so non-technical stakeholders could reason about segment value at a glance. Underneath the names, each tier is a composite Frequency + Monetary score band, computed against the full active base.
The distribution isn't a gentle pyramid - it's a cliff. Diamond through Bronze together hold less than 4% of the base. Iron and Rust alone account for over 96% of all users. That shape told me something a flatter distribution wouldn't have: this program couldn't be designed primarily around rewarding the top of the ladder. The real product problem, and the real budget, needed to live at the bottom of it.
Why I kept seven tiers instead of collapsing them: it would have been simpler to run this as three buckets - high, medium, low. I kept seven because the treatment logic genuinely differs between adjacent tiers, especially near the bottom: Iron and Rust needed materially different discount depths and messaging even though both sit in the "low value" region of a simpler model. Collapsing them would have hidden exactly the granularity the campaign needed to act on.
I didn't design one promo and apply it everywhere. Each of the 28 segments has its own combination of: whether it's treated at all, the discount depth and minimum order value, the usage cap, whether curated collections accompany the push, and which RFM dimension the treatment is designed to move - recency alone, or recency and frequency together.
Within the most recent recency band, I split treatment on food-usage category, not just tier. Users who were already ordering food as their primary app behaviour got no promo at all, regardless of value tier - they were already converting organically, and spending budget on them would have been pure margin loss. Users who were active on Pathao but not yet primary food users got treated, specifically to cross-sell them into the food vertical.
| Tier | Food status | Treatment | Offer | Target |
|---|---|---|---|---|
| Diamond | Primary | No treatment | — | Organic, no intervention needed |
| Platinum | Primary | No treatment | — | Organic, no intervention needed |
| Gold | Not yet primary | Treated | 30% off, up to Tk80, MOV Tk349, cap 2 uses + collections | Recency & frequency (cross-sell to food) |
| Silver | Primary | No treatment | — | Organic, no intervention needed |
| Bronze | Not yet primary | Treated | 30% off, up to Tk80, MOV Tk249, cap 2 uses | Recency & frequency (cross-sell to food) |
| Iron | Secondary | Treated | 20% off, up to Tk80, MOV Tk249, single use | Recency |
| Rust | Secondary | Treated | 20% off, up to Tk80, MOV Tk249, single use | Recency |
At the other end of the recency axis, every tier gets treated - the priority flips entirely to just getting one order placed again. Discounts here are the deepest in the entire matrix, minimum order values are lowered to reduce friction, and usage caps are raised so a single reactivation can turn into a short habit-forming streak.
| Tier | Food status | Treatment | Offer | Target |
|---|---|---|---|---|
| Diamond | Primary | Treated | 50% off, up to Tk100, MOV Tk349, cap 3 uses | Recency |
| Platinum | Primary | Treated | 50% off, up to Tk100, MOV Tk349, cap 3 uses | Recency |
| Gold | Primary | Treated | 50% off, up to Tk100, MOV Tk349, cap 3 uses | Recency |
| Silver | Secondary | Treated | 50% off, up to Tk100, MOV Tk249, cap 3 uses | Recency |
| Bronze | Secondary | Treated | 50% off, up to Tk100, MOV Tk249, cap 3 uses | Recency |
| Iron | Secondary | Treated | 50% off, up to Tk100, MOV Tk249, cap 3 uses | Recency |
| Rust | Secondary | Treated | 50% off, up to Tk100, MOV Tk249, cap 3 uses | Recency |
The control-holdout decision: only 5 of 28 segments - the already-primary, already-fresh, higher-value tiers in the 0–30 day band - were held out as control, covering roughly 24,000 users, under 1% of the base. Every other segment, including all four recency bands of the dominant Rust tier, received a tailored treatment. That's a deliberate, asymmetric holdout: protect margin on the small slice that doesn't need spend, and commit budget everywhere else, especially the dormant tail that makes up the majority of the base.
A 28-segment matrix with differentiated discount depths is only useful if finance will actually fund it. Before this went to sign-off, I built a burn model across every segment - projecting cost under three redemption scenarios and two different discount-cap structures, so the conversation with finance started from numbers, not intuition.
I also stress-tested two different discount-cap ceilings - a higher-cap structure (Tk80–100 max discount per order) and a lower-cap structure (Tk50–70 max discount per order) - across every tier and cohort, so the eventual budget decision could weigh reactivation strength against cost efficiency directly, rather than guessing at the trade-off.
What this modelling changed: the worst-case exposure across the matrix looked alarming in isolation - well over Tk100M under the higher-cap structure. Framed against the realistic 12.55–16% redemption range, the expected spend landed roughly an order of magnitude lower. Presenting both numbers together, instead of just the ask, was what got the program funded without a drawn-out negotiation.
Segmentation and offers only work if the delivery cadence gives users more than one reason to come back. I designed a 12-week rolling sequence that alternates between direct promo pushes, curated content collections, and cuisine-specific moments - so the same dormant user sees several different reasons to open the app, not the same discount code on repeat.
North Star: the % of treated users whose RFM value improved after the campaign - not the redemption rate. A user can redeem a promo once and never return; a user whose recency and frequency genuinely improve is the actual product of a lifecycle program. I designed the full measurement framework around this distinction before launch.
| Category | Metric | Why it's on the dashboard |
|---|---|---|
| Engagement | PN open rate, app engagement rate, promo utilisation rate | The funnel's first checkpoint - did the communication even land and get noticed before any behaviour could change? |
| Conversion | Order conversion rate; first-time conversion rate for non-food users | Distinguishes users who converted to an order from users who merely engaged with the message - and separately tracks whether the cross-sell into food for non-food users actually worked. |
| Monetary | Average order value, campaign revenue | The direct commercial return on the promo spend - the number finance cares about most immediately. |
| Retention | Repeat purchase rate; post-campaign retention rate | Whether a reactivated user placed one order and vanished again, or kept ordering after the promo incentive disappeared - the real test of whether the intervention worked. |
| Cohort Improvement | Recency, frequency, and monetary improvement rate; % of users with any RFM improvement | The North Star category - measures whether a user's underlying behaviour genuinely shifted, independent of any single order. |
| User Category Transition | Promotion to primary food user rate; demotion to non-food rate; lateral movement; transition success rate | Tracks the cross-sell objective specifically - are Secondary and Non-food users actually becoming Primary food users, or just placing an isolated promo order? |
| Cohort Stability | Cohort stability rate; improvement-to-demotion ratio | Checks the program isn't just shuffling users sideways - are more users improving tier than falling to a lower one? |
| RFM Distribution Shift | Average RFM value increase; RFM segmentation retention | The macro view - is the entire user-base distribution shifting up and to the right over time, or is the same 83% still sitting in Rust six months later? |
User stories, acceptance criteria, and the segmentation-to-measurement pipeline as specified in the CLM program design.
| ID | As a… | I want… | So that… |
|---|---|---|---|
| US.1 | Growth manager planning a retention campaign | every user pre-classified into a recency and value segment | I can target spend at the segments that need it instead of blasting the entire base uniformly |
| US.2 | Dormant user who hasn't ordered food in over 200 days | a compelling, low-friction offer that acknowledges I've been away | re-entering the app to order food feels worth the switching cost back from habits I've formed elsewhere |
| US.3 | Finance stakeholder approving campaign budget | a modelled cost range across realistic and worst-case redemption scenarios | I can approve spend against a defensible ceiling, not an optimistic single estimate |
| US.4 | Product/growth lead reviewing the campaign after launch | metrics on cohort migration and tier stability, not just redemption count | I know whether the program changed user behaviour or just gave away margin to users who'd have ordered anyway |
| # | Criteria | Owner | Verified by |
|---|---|---|---|
| AC.1 | Every active user must be scored and placed into exactly one of the 28 recency x value-tier segments, with no unclassified users in the eligible base. | Data / Growth | QA: row count of scored users reconciles to full active-base count with zero nulls on tier or recency band |
| AC.2 | Each segment's treatment - offer, MOV, usage cap, control/treatment status - must be resolvable from the treatment mapping without manual lookup at send time. | Growth / CRM | Config review: treatment mapping table validated against comms tooling before each scheduled send |
| AC.3 | Burn projections must be produced for worst-case, average-case (~12.55% redemption), and good-case (~16% redemption) scenarios across both discount-cap structures before budget sign-off. | Growth / Finance | Finance review: all three scenarios present and reconciled against approved budget ceiling |
| AC.4 | Control-holdout segments must be excluded from every promotional touchpoint for the full campaign window, with no cross-segment code leakage. | CRM / Eng | Audit: holdout segment IDs checked against every send list prior to dispatch |
| AC.5 | All eight metric categories must report at segment level, not just campaign-aggregate level, so cohort migration is visible per tier and per recency band. | Data / Analytics | Dashboard review: each of the 28 segments individually selectable in the reporting view |
How a raw order history becomes a targeted treatment, and how that treatment's impact is measured back into the model.