90POE · Enterprise fintech · Payments

Launching a B2B payment system with every payment in one place

Following one payment meant an old system that did not talk to the others, and checking it two or three times to be sure. I took the payment system 0 to 1, to a live MVP, and put every payment in one place

Read
$500Minvoice processing in the five months after the MVP launched
100%of invoices sent on time, none missed
Many → onescreens to read a payment, the morning check
Owned

The payment system, 0 to 1. I identified the parts the MVP needed to function in its first five months, found the gaps and got the leadership buy-in. The pattern went into the design system and the whole product, and three other teams picked it up immediately

Scope
  • Payment status & tracking, invoicing & approvals, document workflows
  • The PDF generator and the one-screen payment view
Method
  • Lifecycle mapping with the product manager, finance, ops and engineering
  • Tested with 32 users, so data made the decision
ProblemThe finance team ran on a legacy system that worked but was old, slow to use and not connected to the rest of their software. To be sure where a payment stood, people checked it two or three times across systems, so trouble showed up late
ConstraintsMaritime B2B payments carry their own edge cases, and the client was moving its whole company off a legacy finance system. The platform had no finance module to build on. The module passed five gates to go live, up to the C-suite and the client’s own leadership, and the permission model passed the client’s IT and security review
DecisionThe lifecycle map showed the problem was in reading a payment. The design took things away: one place to read a whole payment, the share link gone, the PDF generator built inside the MVP. I tested both versions with 32 users and the data settled it. One of the world's largest ship managers was moving its whole company onto it, so the invoice their customers knew kept its design
ResultIn the five months after the MVP launched, $500M moved through the system. Every invoice went out on time. Automated document generation ended the retyping errors, a stalled payment surfaced on its own, and the morning check went from several systems to one screen, for hundreds of users across finance and operations
The Voyage Manager invoice view, approval and payment history on one rail beside the generated invoice document.
One payment's whole lifecycle on a single rail, beside the generated invoice
The bank-and-payment form, from bank details down to the stamp-requirement task
The bank-and-payment form, from bank details down to the stamp-requirement task
The Build invoice screen, the document beside it generated live

Cross-functional lifecycle mapping showed the problem was reading a payment

The finance team raised and paid invoices every day on a legacy system that worked but was old, slow to use and not connected to the rest of their software. To be sure where a payment stood, invoiced, paid, settled or past its deadline, people checked it two or three times across systems that did not talk to each other. I started by mapping the whole lifecycle with the product manager, finance, operations and engineering, from estimate to settlement. The finding reset the project.

See where the money is, at a glance.

Before · five places to look
  • Approvals screen
  • Payments screen
  • Legacy finance system
  • Email, to chase status
  • Document folder
After · one place to look

Progress and Notes

The whole payment on one rail. Status, approvals and notes, in the order the team works, so you always know where a payment stands.

Five places became one.

I consolidated each payment’s history into one view

I pulled a payment's whole history into one view, Progress and Notes, sitting right beside its invoice. Status, approvals, comments and whatever still needed attention, in the order the team worked. I built it in high fidelity against real invoice data, because what mattered was how it read at full scale.

View my comment

Leadership had asked for a share link instead, to hit the MVP date, so the decision needed more than my opinion. I tested both versions with 32 users and brought the data. That made it an easy decision for everyone to stand behind.

The Voyage Manager invoice view, approval and payment history on one rail (draft created, submitted, approved, payment recorded) beside the generated invoice document.
One invoice's lifecycle on a single rail, draft created to payment recorded, with the generated document alongside.

The invoice kept its familiar design to protect cash collection

One thing had to stay still: how the invoice looked. 90POE is a B2B SaaS product, and one of the world's largest ship managers, a fleet of around 200 vessels, was moving its whole company onto it as part of a wider transformation programme. Their invoices go out to their own customers, and a customer who has to hunt for a familiar line pays late. At their scale a delay means millions. They asked for a new invoice that stayed consistent with the one their customers already knew.

I held one rule with their transformation team: the invoice stays still, everything around it changes. The document kept its familiar design while we automated everything around it. Generated PDFs, checked fields, no retyping. Engineering's first answer was that the PDF generator could not be built in time. I asked what the constraint was. The team had not built one before, so the only risk was time. I brought the user testing to leadership, the sprint plan made room for it, and it shipped inside the MVP. Seeing the final document before sending was what made teams trust the automation.

View my comment

A modern redesign would have demoed well. But these invoices go out to the client's own customers, and a document that suddenly looks different is one people hesitate to pay. Keeping the design consistent kept the money arriving on time.

The bank-and-payment form, from bank details down to the stamp-requirement task
The bank-and-payment form, from bank details down to the stamp-requirement task
The invoice stays still while the form does the work, generated live down to the stamp task it raises.

Department-aware views served two operational teams in one product

Two teams used the module every day and needed different things from it. The wet team, tankers and disbursements, and the dry cargo team each had their own columns and filters. Neither needed to see the other's. Two products would have doubled every change for ever, so I tested one combined view first. Once the flow settled, the module started recognising which department was looking and showing that team's part, with its own filter settings saved. One product, two views. After launch, the analytics showed no drop-off and no unusual editing in either team.

Three-tier permissions and two-approver sign-off passed the client’s security review

I designed the permission model: three tiers, from view-only to full sign-off, and a two-approver chain on every invoice and payment, with a separate flow for a director's signature. It went through the client's IT and security review. Both 90POE and the client signed it off. Once something was approved, the status updated on its own, with no more chasing by email. Testing made the screen simpler. A four-level action footer became one line of buttons.

The status view I rebuiltInteractive
$1.42Mcleared this week
7on track
InvoiceCounterpartyAmountStatusDetail
INV-2051Meridian Chartering$486,200Cleared
INV-2048Port of Valencia$512,800Cleared
INV-2044Aurora Shipping Ltd$164,900On track
INV-2039Hanse Bunker GmbH$421,0009 days waiting

Evidence from 32 users settled the share-link trade-off

I mapped the lifecycle before drawing anything. The mapping showed the problem was in reading a payment, which was already scattered across five places. Another screen would have made it six. The design took things away. Leadership had proposed a share link in place of a status view, to save engineering time for the MVP. This is money moving between companies, and a link sits unopened in an inbox. The testing settled it. The share link went. The whole payment sat on one screen, easy to read and to change, and engineering built the PDF generator inside the MVP.

0 to 1: $500M processed in the first five months

In the five months after the MVP launched, $500M moved through the system. Every invoice went out on time. The platform had no finance module before this. The people on it: the operators who raised and matched invoices every day, the reviewers and approvers above them, and the client's own customers, who received the generated invoices. What shipped went well past the single view this page opens on: the full finance module, a programme of automation upgrades across invoicing, approvals and document workflows. Automated document generation ended the retyping that had caused the errors. Exception detection meant a stalled payment surfaced on its own. The pattern went into the design system and across the whole product. Three other teams picked it up immediately.

This was a 0 to 1 build. I owned it end to end. Payments sat at the centre of an integration ecosystem, where every design decision rippled into other systems and external APIs. I led design through delivery with the product manager, a solutions architect and a 15-strong engineering team. I mapped the lifecycle, shaped the scope and priorities, set the design direction, and led the invoice generator from design through build: a year of sprint-by-sprint delivery with user testing throughout, working with the client's transformation team to land the change across their company. The module went through five gates to go live, from the team's product review to the C-suite and the client's own leadership. The client's finance team signed off every flow. I stayed with engineering through QA, checking edge cases before each release.

Programme-scale judgement means knowing what to push into the background

What survived was one rail to read, and an invoice that kept the design customers already trusted. On a programme this size the judgement that matters is knowing what to push into the background, and you only earn it by learning the whole lifecycle first.