Case Study · 04 of 06

Masspay: thousands of payments, one operations console.

A high-density console for running bulk payment batches — designed for finance operators who upload thousands of payouts at a time. Built around reconciliation, maker-checker approvals, and an audit trail that holds up under regulatory review.

Role
Lead Product Designer
Timeline
6 months · 2023
Team
1 designer + me, 5 engineers, 1 PM
Platform
Web (desktop-only by design)
Masspay batch payments console

When a single mistake costs the company a regulator.

Masspay handles payment batches — sometimes 5,000 transactions in a single upload. A misread row, a wrong currency code, a duplicate IBAN: any one of them can cost real money or trigger an AML review. The product had to be calm, scannable, and honest about what was about to happen.

My job was to redesign the operator console around three jobs: prepare a batch, approve a batch, and prove what happened. Every other screen had to support those three goals or be removed.

A console that hid the dangerous moments.

Before · Hidden Risk

  • CSV upload with no preview — operators submitted and hoped
  • Failed rows aggregated into a single "errors" badge with no detail
  • Approve / reject buttons styled identically to neutral table actions
  • Audit log lived in a separate exports portal, accessed by a different team
  • Statuses ("processing", "pending", "complete") with no clarity on what each meant

After · Risk On the Surface

  • Drag-to-upload with row-level preview, schema validation, and inline fix
  • Error states surface per-row with severity, reason, and a suggested correction
  • High-impact actions (Approve, Reject) styled distinctly with confirm dialogs and dual signoff
  • Audit log embedded in the batch detail view, exportable as a signed PDF
  • Plain-language status microcopy and a hover-to-explain on every state

Designing for operators, not "users".

Masspay operators look at this console for hours a day. They develop muscle memory and pattern recognition. The design choice that mattered most was density: we kept information dense, type small (but legible), and white space disciplined. We stopped chasing the consumer-app look and leaned into something closer to a trading terminal.

What we shipped

  • Pre-flight review — every batch goes through a structured review screen showing totals, fee preview, error count by severity, and a sample of rows. No batch leaves without an operator explicitly clicking past this screen.
  • Maker-checker built in — operators can prepare but not release. A second approver sees a diff-style view of the proposed batch and signs off with their own auth.
  • Status colors with strong semantics — Complete (green), Processing (teal), Waiting on network (amber), Pending approval (blue), Failed/Cancelled (red). Defined once in the design system, used everywhere.
  • Searchable, filterable batch report with column controls, saved views, and per-row download of original file + result file for any audit period.

A look inside the operations console.

A console operators trust enough to relax in.

-67%
Row-level error rate after upload validation went live
40h
Operations time saved per week across the customer base
99.8%
Uptime maintained across the operator console
100%
Audit-pass rate for batches generated through Masspay
"I used to dread Fridays. Now batches run themselves and I just sign off." — Senior Operator, MSC Logistics

Lessons from designing for high-consequence work.

Friction can be the feature. A confirm dialog with a typed amount-match is annoying in consumer apps. In Masspay, it prevented at least three near-misses in the first month.

Document the language of statuses. "Pending" can mean four different things in a payments backend. We wrote a one-page glossary, shipped it to the design system, and used it as the source of truth for tooltip copy.

Design for the worst day. The default screen state shouldn't be "everything is fine". It should be "everything is fine, but here's where you click if it's not."

Next Case Study · 05 of 06

iSX Pay Checkout →

Embeddable card checkout for 800+ merchants