FinTech × Food Cross-Product 0->1 Sole PM, Both Products Spec Complete · Pre-Development

Split Pay
Designing Money-Splitting Across Two Products

How I spec'd proportional bill-splitting, escrow-backed settlement, and instant rider payout across Pathao Food and Pathao Pay - as sole PM on a feature that touches two codebases, two wallets, and one shared bill. The PRD, UX, calculation model, and cross-team acceptance criteria are complete; this case study documents the design work, not a live launch.

8
Feature specs (S-1 to S-8) I owned end-to-end, spanning Food's cart and Pay's wallet
2
Products coordinated in a single checkout - Pathao Food and Pathao Pay
70%+
Target split-completion rate at launch - projected, pre-development
0
Poisha of unreconciled remainder per split, by design - explicit rounding rule

Split Pay is fully specified and designed - PRD, UX flows, and the calculation model are complete - but engineering has not started. Every figure in this case study marked Projected or Target is a pre-launch estimate with its methodology shown, not a measured result.

01 -- Situation

Splitting a food order meant doing the math yourself, then chasing five people for money.

Pathao Pay already had a "Request Money" tool that let any user ask a friend for a specific amount. For a group food order, that meant the person who placed the order had to manually work out everyone's share - including how to fairly divide VAT, the delivery charge, and any discount across people who ordered different things - and then fire off individual, disconnected money requests with no link back to the order itself.

In practice this broke down in one of three ways: the initiator gave up on splitting and simply absorbed the full bill; they split it informally and roughly, quietly under- or over-charging whoever added the tax and delivery portion in their head; or the group stopped ordering together altogether and placed smaller, individual orders instead - which is worse for order value and worse for the group-ordering use case Pathao Food wants to encourage.

Group food ordering - offices, hostels, family dinners - is a normal and recurring behaviour on the platform. The gap wasn't that people didn't want to split bills; it was that the only tool for it lived in a different app, understood nothing about the order, and made the requester do all the arithmetic.

Why this needed order-grouping, not just a better calculator: A generic "split this amount N ways" tool can't apportion VAT, delivery charge, and discounts fairly when people order different items at different prices. Getting the math right required Split Pay to know the actual cart - which meant building it inside Pathao Food, not inside Pathao Pay alone.

My constraints: This wasn't a single-team feature. Pathao Food owns the cart, the order flow, and the UX; Pathao Pay owns the wallet, payment requests, and money movement. I was the PM authoring the PRD on the Food side, writing acceptance criteria that a separate Pay engineering team and a separate Pay PM stakeholder had to build against, with no shared backlog and no precedent inside Pathao for a feature that debits one wallet, holds funds in escrow, and pays out a rider - all while the underlying order still has to ship on time, regardless of what the initiator's friends decide to do.


02 -- Task

Design a payment flow that touches two products and one non-negotiable constraint: the rider gets paid regardless of what friends do.

I needed to spec a feature that let a user tag cart items to themselves and their friends, calculate each person's fair share automatically, request payment from each friend through Pathao Pay, and surface the outcome clearly in order history - while never letting the social uncertainty of "will my friend actually pay" put the order, the merchant, or the rider's payout at risk.

The brief was "add split pay to food orders." The actual product problem was harder: how do you let N people jointly fund a single order, when acceptance from any one of them is optional and can arrive after the food is already being prepared?

What the initial ask sounded like

"Let people split the bill in the app"

A UI layer on top of Pay's existing Request Money tool - tag items, fire off requests, done. Treated as a checkout feature, not a money-movement design problem.

What I believed we needed

A settlement model that never blocks delivery

An architecture where the order's fulfilment - and the rider's payout - can never depend on whether an initiator's friends respond in time. Split completion and order completion had to be two separate, decoupled outcomes.


03 -- Approach

Six decisions that shaped the feature before a single screen was built.

01
Payment Architecture
Decoupled the order's payment guarantee from split completion

The obvious design treats "friend accepts payment request" as a step the order waits on before it can be confirmed as paid. I rejected that model outright.

My reasoning: A rider can't wait on three strangers to individually decide whether to pay before picking up food that's already cooked. So I specified that Split Pay can only be entered with Pathao Pay as the confirmed payment method, and the full order amount is captured against the initiator's Pathao Pay balance at checkout - the order is fully funded the moment it's confirmed, independent of anyone else's response. Friends' "payment requests" are not a precondition for the order; they're a parallel reimbursement flow into the initiator's wallet that succeeds or fails on its own timeline.

The trade-off: The initiator carries real short-term financial exposure the instant they confirm the order - not a small ask when a group order can run into several thousand taka. But it converts a multi-party, partially-completable payment problem into a single, always-resolved one: the order is paid, full stop, and everything after that is reimbursement bookkeeping.

My call: "The rider's payout can never be a function of my friends' Wi-Fi, notification settings, or mood. I specified that the order is financially whole at the moment of checkout - splitting is something that happens to the initiator's balance afterwards, not something the order depends on."
Consequence traced through the spec: this single decision is why S-6 (rider payout) needed almost no special-case logic, and why S-3's "if any friend rejects, the initiator pays the total bill" rule is nearly free to implement - the initiator already paid it.
02
Split Math
Chose item-price-weighted splitting over an equal split

The fastest thing to build is "divide the total by the number of people." I specified proportional, item-based splitting instead.

My reasoning: An equal split is unfair the moment two people order differently priced items - and it's the single most common complaint about informal, manual splitting today. If Split Pay reproduced that unfairness natively, it wouldn't be solving the actual problem, just moving it into the app. Item-level tagging lets each participant's share track exactly what they ordered, with VAT, delivery charge, and discounts apportioned by the same ratio (S-2, S-8) - not divided evenly regardless of who ordered the biryani.

The trade-off: Tagging every item to a person is more UI work for the initiator than tapping "split 4 ways." I accepted that friction deliberately - it's the cost of the split actually being correct - and offset it with sensible defaults (unassigned items default to the initiator, not to an even split across everyone).

Worked in detail in Section 05, using the exact bill-calculation example from the PRD.
03
Failure Mode
Made friend rejection all-or-nothing, not partial

A tempting "smarter" design lets a split partially succeed - two of three friends pay, the initiator only covers the third person's share. I specified the opposite: if any single friend fails to accept their payment request, the entire split is cancelled and the initiator becomes liable for the full bill.

My reasoning: Partial settlement sounds friendlier but multiplies the number of reconciliation states the system - and the initiator - has to track: which of N requests are pending, accepted, rejected, or expired, and what does "partially split" even mean in order history six months later? All-or-nothing collapses every outcome into two: split completed or split cancelled, initiator pays. Combined with Decision 1, this is also financially safe - the initiator already funded the order, so "cancelled" just means no reimbursement arrived, not a collections problem.

The trade-off: One unresponsive friend can sink an entire group's split. I mitigated this - not solved it outright - with two upstream guardrails: an invalid-account alert at the moment of tagging (Section 07) so obviously-doomed splits fail early, not after checkout, and a "recently added contacts" surface so initiators default to friends who've reliably paid before.

This is a real usability risk I flag directly in Section 10 (Risks) rather than glossing over - it's the single biggest trade-off in the whole feature.
04
Cross-Product Gate
Required a Pathao Pay account before entering the flow - with inline registration, not a dead end

Split Pay could theoretically support other payment rails for the initiator. I restricted it to Pathao Pay only, for both the initiator and every tagged friend.

My reasoning: Every alternative - card-on-file transfers, mixed rails per participant - multiplies the settlement paths Pay's engine has to support and multiplies the ways a split can half-succeed. A single settlement rail keeps the money-movement contract between Food and Pay to one shape. Since this would otherwise exclude any user or friend without a Pay account, I specified that a Food user without Pay is redirected straight into Pay's registration flow rather than being told "not available" - and any tagged friend without a Pay account triggers an inline invalid-account alert at the moment of tagging, not a failure discovered later.

The trade-off: This adds a hard registration step for new users mid-checkout. I judged that acceptable because Split Pay is opt-in - a user who doesn't want to register can simply pay normally - and because it turns Split Pay into a genuine acquisition channel for Pathao Pay, not just a Food feature that happens to use it.

This is also the feature's cross-sell case for Pay - quantified as a projected metric in Section 09.
05
Cart Mutation Policy
Cart edits after tagging cancel the split - they never silently re-split

Once items are tagged and requests may already be in flight, the cart can still change - a customer adds an item, support (CX) adjusts an order, an out-of-stock item gets removed. I specified that any post-tagging cart change that increases a participant's payable amount cancels the split entirely and reverts liability to the initiator; a change that decreases it triggers an automatic partial-escrow release back through Pay - it never silently re-splits.

My reasoning: Silently recalculating and re-sending requests after a friend has already agreed to pay one amount is a consent problem, not just an engineering one - nobody should discover they owe more without being asked again. Cancelling and re-collecting from the initiator alone is the option that never bills a participant for something they didn't explicitly agree to.

The trade-off: A single cart edit - even a CX-initiated one the initiator didn't cause - kills a split that might already have three friends' agreement. I accepted this because the alternative (auto-adjusting live financial commitments between people) is a worse failure mode than "please redo the split."

Full increase/decrease/CX-triggered logic detailed in Section 07 (Guardrails).
06
Privacy
Scoped what secondary participants can see in order history

Once a friend is tagged into a split, they have a legitimate reason to track the order. I specified that they see only delivery status in their timeline view - never the payment distribution, other participants' shares, or payment status details.

My reasoning: Being tagged into someone else's order shouldn't grant visibility into that order's full financial breakdown - who paid what, who's still pending, what the total bill was. That's the initiator's information to hold, not something every tagged friend inherits by being on the split. The initiator retains full visibility (Section 06); everyone else gets exactly what they need to know their food is coming.

A small decision with an outsized trust payoff - it's the difference between "convenient" and "everyone can see my order history."

04 -- Two Products, One Transaction

One checkout, two systems of record - split cleanly along a single line: money math vs. money movement.

Customers experience Split Pay as one continuous flow inside Pathao Food. Underneath, it's built across two products that don't share a database or a release calendar, and I drew the boundary between them deliberately, so each side had exactly one job.

Product 01
Pathao Food - Order & Cart Layer
Owns the pre-payment experience · source of truth for the bill
Cart & tagging UI Order confirmation Order history
Owns the entire journey before money moves: the Split Pay entry point on the order confirmation screen, the introductory education screen shown until a user completes their first successful split, cart-item-to-friend tagging, contact selection, and the split view in order history. Every ratio and share calculation (S-2, S-8) happens here, against Food's own cart data - Pay never independently recomputes the bill.
Product 02
Pathao Pay - Wallet, Requests & Settlement
Owns everything once cash needs to move
Payment requests Escrow hold / release Rider payout
Settlement & Escrow Layer
Owns everything from the moment funds are captured: account verification and the registration redirect, generating and dispatching individual payment requests to each tagged friend, holding the initiator's captured payment, adjusting or releasing that hold when the cart changes, and settling the rider's payout independent of how the friend-side requests resolve.

Why I insisted on this boundary: Food owns the bill math exactly once - Pay trusts the amount it's told to move, rather than re-deriving it. Pay owns money movement exactly once - Food never touches a wallet balance directly. The trade-off is that every state change (a cart edit, a rejected request, a cancellation) needs a precise, versioned contract between two backlogs I didn't fully control - which is why the acceptance criteria in the Appendix specify a system-of-record for each field, not just a UI behaviour.


05 -- Split Calculation Engine

The math has to be specified before the UI - because the UI is just a way of collecting inputs to this formula.

Every participant's payable amount is a function of the ratio of item prices tagged to them against the full order. I specified the exact sequence: tag items -> compute each person's raw item total -> compute the ratio across all participants -> apply that same ratio to the full bill (after VAT, delivery, and discounts) -> the payable amounts always sum back to the total, to the poisha.

Worked example, as specified in the PRD

Three friends split a food order. P1 is tagged to a pizza; P2 is tagged to a second pizza and a burger; P3 is tagged to a kacchi; P1 and P2 share a biryani between them.

ParticipantItems taggedItem subtotal
P1 Pizza (qty 1 @ 200) + half of shared Biryani (qty 1 @ 300, split with P2) 200 + 150 = 350
P2 Pizza (qty 2 @ 200 = 400) + Burger (qty 3 @ 100 = 300) + half of shared Biryani = 150 400 + 300 + 150 = 850
P3 Kacchi (qty 2 @ 300 = 600) 600
Order total Sum of all item lines 1,800
StepCalculationRunning total
Item subtotal 200 + 400 + 300 + 600 + 300 1,800
+ VAT, SD & delivery charge + 300 2,100
- MOV-based discount - 100 2,000
- Promo - 100 1,900 (final bill)
ParticipantSplit ratioPayable amount
P1 1 (1 / 6) × 1,900 = ৳316.67
P2 2 (2 / 6) × 1,900 = ৳633.33
P3 3 (3 / 6) × 1,900 = ৳950.00
Total 1 : 2 : 3 ৳1,900.00 - reconciles exactly

Fidelity note: The 1:2:3 ratio above is the simplified working ratio used in the original spec's example (derived from each participant's item-price contribution, including their half-share of the shared Biryani). I've kept the worked numbers exactly as specified rather than "correcting" them - the discipline of getting a spec's own arithmetic right is part of the job.

Discount distribution follows the same ratio (S-8)

Discounts aren't a flat deduction applied once - they're distributed proportionally across participants using the same split ratio, so nobody's share of the savings is disconnected from their share of the bill.

ParticipantRatioDiscount received (of ৳100 total)
P1 1 (1 / 3) × 100 = ৳33.33
P2 2 (2 / 3) × 100 = ৳66.67

A gap I found and closed: rounding policy. The example above reconciles cleanly, but proportional division of real bills rarely lands on a whole poisha for every participant - the PRD didn't specify what happens to the fractional remainder. I specified that any leftover fraction after ratio-based division is added to the initiator's payable amount, never distributed silently across friends. That way the sum always reconciles exactly to the total bill, and the "extra poisha" always has one clearly accountable owner instead of being invisible rounding drift.


06 -- Payment Lifecycle & Settlement

From "Split Pay" tap to rider payout - the full sequence I specified.

This is the order the feature actually runs in, stitched together from S-1 through S-6. The critical property, carried through from Decision 1: steps 6 and 7 never wait on step 5.

01
Entry & first-time education
"Split Pay" appears as a clearly visible option on the order confirmation screen. A first-time user sees an introductory walkthrough explaining how splitting works - and it reappears on every attempt until they complete a successful split at least once, rather than a one-time tooltip they might miss.
Food · FE
02
Pathao Pay account verification
The flow only proceeds if the initiator has a registered Pathao Pay account. If not, they're redirected straight into Pay's registration screen rather than being blocked - turning a hard requirement into an acquisition moment for Pay.
Food → Pay handoff
03
Cart items shown as taggable rows
Cart items render as separate rows by quantity - a "qty 3" burger becomes three individually taggable rows - so each unit can be assigned to a specific person rather than tagging at the line-item level.
Food · FE
04
Tagging friends from contacts
The initiator assigns items to themselves or friends by picking from contacts or entering a mobile number. Their own contact always appears first; recently-added contacts surface above the full list; tagging a friend without a Pathao Pay account triggers an inline invalid-account alert immediately, not after checkout.
Food · FE / BE
05
Defaults, clearing, and checkout
Any item left untagged defaults automatically to the initiator - nothing can reach checkout unassigned. A "clear all splits" control lets the initiator restart tagging from scratch. The order cannot be confirmed unless Pathao Pay is set as the payment method.
Food · FE
06
Order confirmed & fully funded
The full order amount is captured against the initiator's Pathao Pay balance at the moment of confirmation (Decision 1). The order is now financially complete, independent of anything that happens next.
Pay · BE
07
Payment requests fan out to friends
Individual payment requests are dispatched to each tagged friend through Pathao Pay, in parallel with order preparation - not blocking it. Each friend can accept or reject independently.
Pay · BE
08
Rider payout - unconditional
Because the order was already fully funded in step 6, the rider is paid instantly on delivery through the standard digital-payment path, regardless of whether every friend request has resolved. Pathao Food reconciles the underlying float with Pathao Pay separately - the rider never sees or waits on this.
Pay · BE / Ops
09
Requests resolve - split completes or cancels
If every friend accepts, their share is transferred and reimburses the initiator's wallet. If any single friend fails to accept, the whole split is cancelled and the initiator's original charge simply stands (Decision 3) - the initiator is notified of the specific reason.
Pay · BE
10
Order history, timeline & reorder
Split orders are clearly marked in order history, showing success/failure and the full distribution to the initiator, and the cancellation reason where relevant. Tagged friends see only delivery status in their own timeline (Decision 6). Reordering carries the existing split distribution forward automatically.
Food · FE / BE
Pathao Food Split Pay item tagging screen showing cart items assigned to contacts
Item tagging · cart rows by quantity, tagged to self or a friend from contacts
Pathao Food Split Pay payment status screen showing per-friend payment distribution
Payment status · per-friend Pending / Complete / Rejected, with distribution

07 -- Guardrails & Edge Cases

The cases that break a naive split - specified before they became support tickets.

A split that only handles the happy path isn't a fintech feature, it's a demo. I specified explicit behaviour for every way the underlying cart or the friend-response cycle can go sideways.

Cart amount increases after tagging
Any cart update - by the customer or by CX support - that raises a participant's payable amount cancels the split entirely. The initiator becomes liable for the full, updated bill, so no participant is ever billed more than what they explicitly agreed to.
Consent-first
Cart amount decreases after tagging
If a cart update lowers a participant's amount, Pathao Food notifies Pathao Pay to release the reduced portion from escrow back to the merchant settlement and refund the difference to the customer - handled automatically, not manually reconciled after the fact.
Self-correcting
⚠️
Friend without a Pathao Pay account
Tagging a friend who has no registered Pathao Pay account triggers an immediate, inline invalid-account alert at the moment of tagging - not a failure discovered after the order is placed and requests have already gone out.
Fail early

Unaccepted requests and recovery

If a friend doesn't accept their request, the split is cancelled and the initiator is notified with the specific reason - not a generic failure message. Because the initiator's payment method was already locked to Pathao Pay for the order, no separate "change payment method" step is needed to complete the order itself; that control exists for the narrower case where a customer needs to resolve a payment issue on an ongoing order outside the split flow (S-4).

A gap I found and closed: request expiry. The original spec described what happens when a friend "fails to accept" a request but didn't define a timeout - in theory, a request could sit open indefinitely. I specified an explicit expiry window tied to a defined SLA before the order's preparation timeline completes, so every split resolves to a definite state (completed or cancelled) within a bounded time, rather than staying ambiguous while the food is already on its way.

Deliberately out of scope for v1: multi-address group orders (splitting across more than one delivery drop-off), splitting across payment rails other than Pathao Pay, and re-splitting a cancelled split automatically after a cart edit. The original PRD left "Not Doing / Out of Scope" blank - these are the boundaries I set myself, to keep the settlement model to the single shape described in Decision 4.


08 -- Validation Plan

Because the feature hasn't shipped, this is the plan I designed - not results I can report.

Every claim in Section 09 rests on two kinds of pre-launch validation I specified: usability testing of the tagging and split-outcome flows, and exhaustive test-case coverage of the calculation engine itself. Both are scoped and ready to run against the first working build.

Planned usability testing

ScenarioMethod & sampleHypothesis / success criteria
First-time split, no prior exposure Moderated task-based test, n=8 users who've never used Split Pay ≥6/8 complete tagging and checkout without moderator prompting
Tagging a friend without a Pay account Same moderated session, seeded scenario Alert is understood and resolved (remove or ask friend to register) within one retry
All-or-nothing rejection consequence Scenario-based interview, n=8, before confirming checkout ≥7/8 can correctly state "I pay the full bill if any friend rejects" before submitting
Cart edit after tagging (cancellation) Moderated test with a seeded mid-flow cart change Cancellation reason is clear enough to generate <1 follow-up support question per session
Secondary participant timeline view Moderated test with a second test account as the tagged friend Friend confirms they can track delivery but correctly cannot see payment distribution

Calculation model test coverage

Edge caseWhy it mattersExpected behaviour
Single participant (initiator only) Split Pay entered but nothing tagged to anyone else Initiator pays 100%; Split Pay behaves identically to a normal Pathao Pay order
Shared item split across >2 people Fractional shares compound rounding risk Each share computed to the poisha; remainder rule (Section 05) applies once at the end
Discount exceeds a participant's share Proportional discount could theoretically push a payable amount negative Payable amount floors at zero; any residual is re-absorbed by the initiator, never a negative charge
Friend cancels mid-tagging (before checkout) Distinguish from a post-checkout rejection, which triggers the S-3 cancellation path Their items simply revert to unassigned and default to the initiator - no order-level cancellation, since no request was ever sent
Maximum group size UI and request-fan-out both need a sane upper bound Capped group size defined explicitly rather than left unbounded, to keep the all-or-nothing failure surface manageable

09 -- Projected Impact

What I expect to happen once this ships - and exactly how I'll know if I'm right.

These are pre-launch targets, not measured outcomes. Each one is tied to a specific mechanism in the design (not a hope), and each is meant to be checked against real data within the first 90 days of a phased rollout.

MetricTargetWhy I expect this
Split Pay adoption among group orders 18-25% within 90 days Proxy: existing manual "Request Money" usage tied to food-linked transfers, plus comparable split-bill adoption in peer delivery apps
Split completion (all-friends-accept) rate ≥70% Driven by the invalid-account pre-check removing the most common late failure, plus "recently added contacts" nudging toward reliable payers
Reduction in manual money-request flows for food orders -60% Native in-order requests replace the old two-app, manual-math workaround entirely for tagged users
New Pathao Pay accounts sourced from Food's registration gate 10-15% of split initiators without prior Pay accounts Benchmark from comparable mandatory-registration conversion funnels; Decision 4 turns a blocker into an acquisition moment
Rider payout delay caused by split status 0% - by design, not by luck Direct consequence of Decision 1 - payout is architecturally decoupled from split resolution, not merely "usually fast"
CX escalation rate on split orders <2% of split orders Explicit cancellation reasons, scoped timeline visibility, and a bounded request-expiry window remove the most common sources of "why did this happen" tickets

How I'd actually validate these: a phased rollout - internal dogfooding, then a capped-percentage cohort, then general availability - with each stage's real numbers checked against the targets above before proceeding to the next. Targets that miss by a wide margin (particularly split completion rate) would trigger a UX review of tagging and the invalid-account flow before scaling further, not a quiet redefinition of "success."


10 -- Risks

What could go wrong - and the design constraint I specified against it.

High
One unresponsive friend cancels an otherwise-agreed split
The direct cost of the all-or-nothing model (Decision 3). Mitigated by: the invalid-account pre-check that filters out the most predictable failures before checkout, and a bounded request-expiry window so the outcome is never left hanging.
High
Cross-product financial mismatch between Food's cart total and Pay's held amount
Any drift between what Food thinks the bill is and what Pay has captured is a reconciliation failure. Mitigated by: the cart-mutation policy (Decision 5) that cancels rather than silently re-splits, and a single system-of-record contract per field, specified in the Appendix.
High
Initiator's short-term financial exposure at checkout
Decision 1 means the initiator's balance funds the whole order upfront. Mitigated by: requiring the initiator to have sufficient Pathao Pay balance before Split Pay can be selected at all, so the exposure is never a surprise discovered mid-flow.
Medium
Rounding drift across proportional, N-way splits
Fractional poisha remainders after ratio division. Mitigated by: the explicit remainder-to-initiator rule specified in Section 05, so the ledger always reconciles exactly and the remainder always has a named owner.
Medium
Secondary participants inferring financial details they shouldn't see
Even with a scoped timeline view, indirect signals (delivery to a specific address, order timing) could leak context. Mitigated by: keeping the tagged-friend view strictly to delivery status, with no item, price, or participant-list data included at all.
Low
Low discoverability if Split Pay is treated as a buried checkout option
A feature with real financial complexity underneath is only useful if people find it. Mitigated by: a clearly visible entry point on the order confirmation screen and a mandatory-until-successful introductory walkthrough, rather than a one-time tooltip.

11 -- Lessons

What specifying a cross-product payment feature taught me before it even shipped.

01
Payment architecture decisions are UX decisions wearing a disguise
Decoupling rider payout from split completion wasn't a backend implementation detail I could leave to engineering - it's the reason the all-or-nothing rejection model (Decision 3) is acceptable at all. Get the money-movement model wrong and every downstream UX choice inherits the wrongness; get it right and several "hard" UX problems become nearly free.
02
Every proportional split needs an explicit rounding policy - you only find this by doing the arithmetic yourself
The PRD's own worked example reconciled cleanly, which is exactly why the rounding gap was easy to miss on a read-through. I only found it by manually re-deriving the calculation rather than trusting that a clean example meant a general policy existed. Reading a spec and computing a spec are not the same review.
03
Cross-product PRDs need a system-of-record for every shared field, not just a shared screen
Writing acceptance criteria that a separate product's engineering team builds against forced a level of precision - "who owns this number when it changes" - that a single-team spec can get away with leaving implicit. The Appendix's per-field ownership isn't bureaucracy; it's what makes two independent backlogs converge on the same behaviour.
04
Guardrails have to be legible to a second product's support team, not just your own
Pathao Pay's CX team will field disputes about a Food-initiated transaction they didn't originate. Every cancellation reason and status label had to make sense without Food-specific context loaded in the reader's head - a guardrail that only your own team understands isn't fully specified yet.
05
What I'd do differently
I specified an open-ended group size for v1. In hindsight, I'd cap the earliest rollout to 2-3 participants per split, to validate the all-or-nothing accept/reject psychology and its real cancellation rate on a small blast radius before it can affect a large group order and the rider waiting on it. I'd also have written the request-expiry window into the original PRD myself, rather than discovering the gap during my own review - a scoping conversation I should have forced earlier with the Pay stakeholder, not one I should have had to fill in solo.
Appendix -- The Evidence

Functional Spec Excerpts

User stories, acceptance criteria, and the full split-pay lifecycle as specified in the PRD (S-1 through S-8) - presented here without exposing internal implementation details.

Appendix A -- User Stories
IDAs a…I want…So that…
US.1 Pathao Food user placing a group order to tag each cart item to myself or a friend and see each person's fair share calculated automatically nobody has to do VAT, delivery, and discount math by hand to figure out what they owe
US.2 User who has placed a split order payment requests sent to each tagged friend automatically through Pathao Pay after checkout I don't have to leave the app or manually message anyone to collect what I'm owed
US.3 User whose split was cancelled because a friend didn't accept to see exactly why it was cancelled and know I'm responsible for the full bill there's no ambiguity about what happened or what I owe
US.4 Friend tagged into someone else's split order to see the delivery status of the order in my own timeline, nothing more I can track my food without gaining access to someone else's full payment details
Appendix B -- Key Acceptance Criteria
#CriteriaOwnerPlanned verification
AC.1 The order cannot be confirmed with Split Pay active unless the payment method is set to Pathao Pay; the introductory walkthrough must reappear on every attempt until one split completes successfully. Food FE QA: attempt checkout with a non-Pay method selected and confirm it's blocked; verify walkthrough re-triggers across sessions
AC.2 Tagging a friend without a registered Pathao Pay account must surface an inline invalid-account alert at the moment of tagging, not after checkout. Food FE / BE QA: tag a seeded test contact with no Pay account and confirm the alert fires before checkout is reachable
AC.3 A cart update that increases any participant's payable amount must cancel the split and revert full liability to the initiator; a decrease must trigger an automatic escrow-release notification to Pay. Food BE / Pay BE QA: simulate both directions of cart edit post-tagging and confirm the correct downstream Pay action fires each time
AC.4 The rider's payout on delivery must never be blocked, delayed, or made conditional on the status of any friend's payment request. Pay BE / Ops QA: force a pending/rejected friend request state and confirm rider payout still fires on delivery within standard SLA
AC.5 A tagged friend's own order timeline must display delivery status only - no item, pricing, or participant-distribution data. Food FE Design + QA review: verify the secondary-participant view against the initiator's full view side by side
Appendix C -- Split Pay Lifecycle

How a group order becomes a fully settled transaction across both products.

1
Tag & confirm
Initiator tags cart items to themselves and friends, sees each computed share, and confirms checkout with Pathao Pay as the payment method.
2
Capture & fulfil
The full amount is captured from the initiator's Pathao Pay balance; the order enters preparation and delivery on the normal timeline, independent of friends' responses.
3
Requests dispatched
Payment requests fan out to each tagged friend through Pathao Pay, running in parallel with fulfilment, with a bounded expiry window.
4
Rider paid, unconditionally
The rider receives instant digital payment on delivery, funded by the initiator's original capture - never waiting on the split's outcome.
5
Split resolves
If every friend accepts, reimbursement flows to the initiator's wallet. If any friend fails to accept, the split cancels and the initiator's original charge stands.
Recorded, transparent, reusable
Order history shows the initiator the full outcome and reason if cancelled · tagged friends see delivery status only · a reorder carries the same distribution forward automatically.