Back to work
FintechProduct DesignUX Research

Payment Resolution (2026)

One resolution case for stuck payments in Nigeria and India, so the customer, payments ops and support all see the same truth about where the money is.

Client

Self-initiated concept

Role

Product designer, solo: research, PRD, Figma, prototype, testing

Timeline

5-day sprint

Platform

Mobile app · Ops console · Support inbox

Payment Resolution

TL;DR

When a transfer fails, the money leaves your account and the app just says "Pending": people can't tell whether it arrived, whether it's coming back, or whether to pay again. I designed one resolution case behind three views: a customer tracker that answers "should I pay again?", an ops console that won't reverse a payment that already landed, and a support inbox that reads the same facts. In testing, 8 of 10 customers chose to wait rather than pay again, and the one who would have paid twice is the first thing I'd fix.

“How am I supposed to know whether I should pay again?”

Paytm user, 1-star Google Play review

The Challenge

What needed solving.

That review is the whole problem. Across Google Play reviews from six storefronts, the same patterns kept coming up: transfers stuck on "Pending" for days, disputes that went quiet for almost a month, and support agents who could only reply with templates because they couldn't see the case.

The rules make it urgent. In India, a failed UPI payment must be reversed by T+1, then ₹100 a day is owed automatically. In Nigeria, banks face a ₦10,000 sanction per failed NIP transfer not reversed in 24h (a secondary source; I mark it that way in the product too).

The Approach

How I solved it.

The institution usually knows more than the customer. It's re-querying the rail, reconciling settlement, preparing a reversal. None of that reaches the customer or the support agent, and that gap is what makes people pay twice, contact support again and again, and push for refunds that can go wrong.

So instead of a support ticket, every ambiguous debit opens one resolution case, and each person reads the part they need.

Left: a bank transfer screen showing only Processing. Right: the Checking tracker.
Before and after. A typical "Processing" screen (Careem, via Mobbin) says only when the money should arrive. The tracker also says whether it arrived, what the bank is doing, and whether to pay again.

Key Insights

What I found.

01 — Finding

Customers need a decision, not a status

The reviews weren't asking "what stage is this?" They were asking "what should I do?"

What I did about it

Unknown is a state, not a failure. Most apps flatten uncertainty into "Failed" or leave it as "Pending". I made "we don't know yet" its own state. The customer sees "Checking with their bank", when the next update is due, and the latest time the money comes back if it didn't go through.

"Should I pay again?" is its own decision. The easy option was to read the advice off the progress step. I didn't, because the two can disagree: the tracker can say "Returning your money" while paying again would still send the money twice, until the ledger confirms the return. So the advice is decided separately, and "Safe to pay again" only appears once the money is back, with a push notification to say so. In prioritization it scored as a Quick Win, so I built the simplest form: a card of its own above the tracker.

The rules show up on the screen. For UPI payments in India, the RBI rule becomes a line the customer can read: compensation owed so far, ₹100 for each day past the deadline, paid automatically with no claim needed. That turns a compliance footnote into a reason not to chase support.

The full loop in motion: checking, the return in progress, then the push when the money is back.
Returning your money, with the advice still saying don't pay again yet
Money returned, with a push notification and Safe to pay again
India UPI case showing 200 rupees of compensation owed, paid automatically
Returning: the advice holds until the ledger confirms. Returned: the advice changes and a push says so. India: past the RBI deadline, the compensation already owed, with no claim needed.

02 — From the payment rules

The dangerous moment is a late credit

This one didn't come from the reviews. It came from how failed transfers resolve: if a payment marked failed actually lands, an automatic reversal pays the money twice.

What I did about it

Safety beats automation. I designed the queue around deadline risk and the case panel around evidence. Before any reversal, a final check looks for a late credit. If the recipient was credited after all, the reversal is blocked, and the analyst gets two safe options: mark it delivered, or send it to manual review.

Reversals of 500,000 naira or 40,000 rupees and above need a second person, and the person who prepared one can't approve it.

Blocked reversal on PD-1020 and maker-checker approval on PD-1022
Left: blocked reversal on PD-1020. Reversing would pay ₦150,000 twice, so the action is blocked and two safe options are offered. Right: maker-checker approval on PD-1022. One analyst prepared the ₦800,000 reversal; a different one has to approve it.
The ops console in motion: the final check blocks PD-1020, then a checker approves PD-1022, and every step lands in the audit log.

03 — Finding

Support is a dead end because it's blind

The template replies in the reviews come from agents with nothing to look at.

What I did about it

Support reads from the same case. Agents see the facts ops sees, and a reply template fills from them, so it can't promise anything the case doesn't support.

I chose state-based templates over AI drafting, because the reviews showed people already distrust AI support replies.

The support inbox in motion: a reply from the case facts, a private note, then an unknown sender linked to her case.

Process

How I worked through it.

01

Evidence from real complaints

First-hand 1-star Google Play reviews, read in each app's home storefront, plus the regulator rules that set the clocks. I noted the gaps too: I aimed for 10 voices beyond Nigeria and found 6 that fit.

02

PRD, state table and hard cuts

I wrote the PRD and a canonical state machine, then scored every candidate feature. The UK scam workflow was parked as a different problem outside the MVP markets, and AI reply drafting was swapped for state-based templates.

03

Figma, critique and a second pass

I designed the customer screens, then reworked them into a v2 after a design critique. The ops console got 11 frames, including the empty, loading and error states.

04

Designed in Figma, built with code

I designed every screen in Figma, then built one coded prototype that all three views share. Reviewing the build, I caught that whoever prepared a reversal could also approve it, and restricted approval to the checker. When the tracker's fill line crossed the check icons, I split it to stop at each step.

Selected Screens

A closer look.

Payment Resolution — screen 2
Payment Resolution — screen 3

Outcomes

What testing showed.

8 of 10

said wait instead of paying again (target: everyone)

4 of 5

Lagos customers understood the case (target 4 of 5)

1 of 10

would still contact support (target 1 in 5 or fewer)

On Day 4 I ran an unmoderated study in Maze with 10 customers on their own phones, 5 in Lagos and 5 in India, using the Figma prototype. They looked at the case for a timed moment, then answered from memory. I also ran moderated sessions with 5 customer support agents on the ops console and the support inbox.

What didn't land

The miss that matters most. One person would have paid again while the bank was still checking, the exact double payment this design exists to prevent, and one more wasn't sure. The advice card already warns that paying again would send the money twice, so the warning was on screen but didn't land for them. An unmoderated test can't tell me why, so the first thing I'd test next is stronger wording and placement for that card.

Certainty is the other gap. The one person who would still call support wanted to be certain. The payment reference that proves it sits behind the Details tab, so next I'd bring it onto the Updates view.

What held

The safety check held. On PD-1020, the final check blocked the reversal for every tester, and each chose a safe option. Nobody paid ₦150,000 twice.

Everything else met its target. Testers found the oldest breached case and read the India rule correctly, support replied to Tunde from the case facts with no invented dates, and 4 of 5 customers sent proof directly, the fifth by another route, in about 20 seconds.

The honest limits. Ten customers is a small sample, India comprehension wasn't scored separately, and the test used the Figma design, so motion wasn't tested. My ops testers were support agents, not payments-ops analysts, so the queue results carry less weight than the support results.

What changed after testing: apart from the pay-again miss, nothing blocked people, so I didn't change the design yet. The miss and the certainty gap are the two changes I'd test first.

Reflection

What I'd do differently.

I'd talk to payments ops before designing the console. My research came from customers' reviews, and my testers were support agents, so the ops queue is the part of this design with the least first-hand evidence behind it.

The safety check held in testing, but I don't yet know whether a real analyst would sort the queue the way I did, or trust the final check enough to stop double-checking it by hand. Next time, I'd sit with one or two analysts during a shift before drawing the queue.

Now you know.

You've seen the work. Let's build your next success story.

If you've read this far, you already know whether we're a fit. Currently taking two projects. Tell me what you're building — I'll tell you if I'm right for it.

Next Project

Troski (2026)

Designed a multimodal transit companion for Accra commuters — turning queue guesswork into live visibility, and cash fares into a tap-to-pay wallet.

View case study