Eliminating duplicate payments
Reece Group
Australia's largest plumbing and bathroom supplies business
My role
As Principal UX Designer, I:
Was the sole designer
Led discovery, strategy and solution design
Steered cross-functional alignment
Used this as a clear example of the value of UX, bolstering UX maturity in the organisation
Team
The team I worked with:
Product manager
Tech lead
Full stack engineer
Stakeholders
Internal stakeholders included:
Finance
Operations
The problem
Customers were unintentionally making duplicate online account payments, often multiple times, due to a lack of clarity about whether their first payment went through. These payment errors had real consequences:
Customer pain: maxed-out cards, repeated charges, time lost chasing refunds.
Business impact: at least 200 duplicate payments per quarter (~$120k/month in refunds), plus manual workload across Accounts Receivable, Branch Ops, Tech, and Customer Success.
Strategic friction: hindered the company’s goal of shifting more payments online to free up branch staff.
Customers just didn’t trust that their payment had been submitted
Discovery & problem framing
Though product and engineering leads initially assumed a simple UI fix would suffice (“just block the payment”), I advocated for discovery to uncover root causes and identify the most effective, sustainable solution.
Framing the problem was the the most efficient way to nip it in the bud for good.
What I lead
Stakeholder interviews with Accounts Receivable and Branch Ops to hear real-world pain firsthand.
Quantitative analysis of payment data to uncover behavioural patterns:
50% of duplicate payments occurred within 20 seconds
Majority involved saved cards
Higher repeat behavior on mobile apps
44% of users returned to the dashboard after submitting a payment
If it's clear payment was submitted, they won't attempt to pay again
The solution
Since this was a low-risk 'just do it' fix once we understood the cause, my design efforts focused on mapping complexity and ensuring robust coverage across all payment flows.
Key contributions
Mapped 3 distinct user flows: invoice payments, statement payments, unauthenticated 'punchout' payments.
Created a journey map to visualise how duplicate payments affected customers, AR teams, and branch staff, surfacing shared pain points and systemic bottlenecks.
Defined a 72-hour block logic: once a payment was submitted, users were blocked from repeating it until it was either processed or bounced.
UX/UI interventions
Added a 'Processing' state next to paid items across the dashboard, transaction history, and punchout screens.
Designed platform-specific enhancements for iOS and Android, where confusion was highest, making the confirmation screen far more prominent.
Delivered responsive mockups for web, iOS, and Android to ensure consistency across all touch points.
If a payment is submitted, remove the call to action & indicate it is processing
Challenges
Initial resistance from product & tech: PM and TL believed this was a simple button fix. I had to advocate for time to investigate root causes and push for a discovery-led approach.
Payment processing lag: Payments take 1–2 days to clear with banks and financial institutions, so we couldn’t just remove items from the dashboard or mark them as 'paid' immediately. We had to allow for the delay while still preventing accidental resubmissions, which I solved by introducing a 'Processing' state and a 72-hour block window.
Complexity of payment logic: Each payment flow (invoice, statement, punchout) had its own behaviour and edge cases. Mapping this complexity was key to ensuring coverage and preventing unintended consequences.
No way to trace invoice payments: This part of the app was built on outdated tech that didn’t support basic analytics. We couldn’t track key metrics like device type or payment method, and had to infer behavior based on other payment types (e.g. statements) when sizing the problem and designing the solution.
Outcome & impact
Problem eliminated: Duplicate online payments dropped from 1.2% to zero immediately.
Efficiency win: AR team no longer spends time issuing refunds (~18/month previously).
Cross-functional praise: Engineering Tech Lead called it “really impressive analysis”
UX visibility: I showcased the case study to product and department leads as a model for data-driven, discovery-led design.





