Operations · Fintech · Automation

From a manual spreadsheet to an automated refund engine

Crypto refunds relied on a shared spreadsheet, manual decisions and constant coordination across five teams. I led the redesign into a rule-driven refund engine that automated routine refunds, surfaced only true exceptions and gave every team full visibility into the process.

Role
Product Manager
Teams
FinCrime, Compliance, Support, Treasury, Engineering
Outcome
Full automation + edge case handling

The Symptom

The spreadsheet wasn't the problem.

When customers' banks rejected crypto transactions, those funds had to be returned.

Over time, every team involved had created its own workaround. Support tracked customer updates. FinCrime manually checked compliance conditions. Treasury monitored wallet balances. Engineering relied on tribal knowledge to understand what the process actually looked like.

The spreadsheet wasn't causing the complexity.

It was where all of that complexity ended up.

Our goal wasn't to automate a spreadsheet. It was to understand why the spreadsheet had become necessary in the first place.

Manual refunds
Each transaction required individual handling by ops agents
Spreadsheet chaos
A shared spreadsheet tracked pending refunds — error-prone and hard to scale
Scattered ownership
FinCrime, Support, Treasury and devs all touched the process with no clear handoffs
No visibility
No one knew the exact liquidity needed to clear the backlog
Compliance risk
Manual condition checks meant things slipped through inconsistently
No edge case handling
Unusual transactions stalled the entire queue with no escalation path

The Real Problem

No one owned the end-to-end

The spreadsheet wasn't the problem — it was the symptom. Five teams each owned a slice of the refund process, but no one owned the outcome. FinCrime checked conditions. Compliance reviewed flags. Treasury managed wallets. Support handled customers. Engineering built what they were asked.

Without end-to-end ownership, each team optimised locally — and the gaps between them became the bottleneck. The spreadsheet filled the gap that a system should have covered.

The Investigation

We talked to everyone who touched this

Rather than designing a solution immediately, we started by interviewing every team involved in the refund process.

My initial assumption was that Support was the bottleneck. Those conversations quickly proved otherwise.

Each team experienced a different version of the problem, but together they revealed something much bigger: there was no shared understanding of how refunds should work end to end.

Instead of documenting individual pain points, we mapped every decision the system expected people to make.

FinCrime Ops
Spending hours on condition checks that could be automated
Compliance
Inconsistent manual reviews introduced regulatory risk
Support
No visibility to give customers accurate refund timelines
Treasury
Blind to liquidity needs — discovered shortfalls at the worst moments
Engineering
No clear spec for what the automation should do; working from tribal knowledge

The spreadsheet wasn't the problem. It was compensating for a system that couldn't make decisions on its own.

The Insight

The real problem wasn't manual work

The investigation changed how we thought about automation.

Most of the refund process didn't require people because it was complex.

It required people because the system had never been taught how to make predictable decisions. Once we separated routine refunds from genuine exceptions, the architecture became much simpler.

1.
Automate predictable decisions
The system should make every decision that follows clear rules.
2.
Surface only true exceptions
People should only be involved when judgement is genuinely required.
3.
Give every team visibility
Everyone should understand what is happening without relying on another team.

The Solution

Designing around decisions, not tasks

Once we understood where every manual decision came from, designing the solution became surprisingly straightforward. The goal wasn't to automate every step — it was to ensure the system made predictable decisions automatically, while giving people everything they needed to resolve genuine exceptions quickly.

Trigger
Transaction fails — bank rejects payment
Refund Engine listens for all failed crypto transactions in real time
Refund Engine
Compliance & Conditions Check
Automatically checks: user KYC status · KYT results · compliance flags · any open investigations
✓ All criteria met
Transaction passes automatically — no human review needed
auto-proceeds
✗ Criteria not met
FinCrime Ops Queue
Flagged for manual review
Agent sees full transaction context, user status and compliance history
Review & decision
Agent approves or rejects. On approval, transaction continues automatically.
approved →
Liquidity Check
Is there enough in the wallet?
Engine checks available crypto balance in the refund wallet against the transaction amount
✓ Liquidity available
Refund sent automatically
Transaction is pushed to the blockchain without human action
Email confirmation sent
Customer notified once blockchain confirmation is received
confirmed ↓
✗ Insufficient liquidity
Treasury Queue
Held — awaiting liquidity top-up
Treasury sees exactly which wallets are short and by how much
Treasury adds liquidity
Top-up made to the correct wallet. Cases auto-resolve on confirmation.
resolved →
Outcome
Refund delivered. Customer notified.
End-to-end: zero manual steps on clean transactions. Full audit trail throughout.
Humans only handle exceptions
Automation wasn't the objective
Reducing unnecessary human decisions was. Routine refunds completed without intervention, while unusual transactions arrived with all the context an operator needed to make a decision quickly.
Timing Control Engine
Configurable refund trigger windows
Controls when refunds are triggered to prevent system misuse — configurable per transaction type without a code change.

The Outcome

Zero manual steps on clean cases

The Refund Engine went live across the full transaction flow. Clean cases resolved automatically. Exceptions surfaced to the right team with full context. Treasury finally had visibility into liquidity before it became a problem.

Full automation
Clean transactions processed end-to-end with no human involvement
Team-specific queues
FinCrime and Treasury each saw only what was relevant to them — with all the context they needed
Liquidity visibility
Treasury knew exactly which wallets were short and by how much, before it became a blocker
Edge case handling
Unusual transactions had a dedicated flow — no longer stalling the main queue

The Lesson

What this project changed for me

This project fundamentally changed how I think about operational tooling.

Before discussing another internal tool or workflow, I now ask three questions:

1.

Can we avoid the work altogether?

2.

If not, can we automate it?

3.

If people still need to be involved, how can we make those decisions as fast and effortless as possible?

That way of thinking has shaped almost every operational product I've worked on since.