Engineering & delivery

Payments that hold up on your busiest day

Compliant payment infrastructure built into your platform, from one-off transactions through to subscription billing that handles the edge cases quietly.

The awkward cases

Anyone can take a payment that works first time

The happy path is an afternoon of work. Everything below is what separates an integration that holds up from one that quietly loses money for six months before anyone notices.

Payment edge cases, what a naive integration does, and how we handle each one
What happensA naive integrationHow we handle it
Card issuer requires 3-D SecurePayment fails silently and the customer leavesChallenge presented inline, then the original basket is restored on return
Soft decline from the issuerTreated as a hard failure, sale lostAutomatic retry on a schedule that does not trip fraud rules
Customer pays twice on a slow connectionTwo charges, one angry emailIdempotency keys, so the second attempt returns the first result
Webhook arrives before the order is writtenOrder marked unpaid despite money takenEvents queued and replayed until the order exists
Subscription card expires mid-termSilent cancellation and churn you never seeDunning sequence with retries and a notice before access ends
Partial refund on a multi-item orderManual adjustment in the gateway dashboardRefund mapped back to line items, so reconciliation still balances
Chargeback raised weeks laterFound during month-end, evidence already lostEvidence assembled automatically and the order flagged at the time

None of this is exotic. It is the list you build up after shipping payment systems and being called about them afterwards. If a supplier cannot talk through this table with you, they have not run one in production for long.

What we do

Payment capabilities

Gateway integration

Stripe, Adyen, Braintree and others, integrated so the money and your records agree.

Subscription billing

Renewals, upgrades, pauses, proration and dunning. The parts that get built last and break first.

Multi-currency

International pricing, settlement and the tax treatment that follows it.

Compliance

SCA, PCI scope kept as small as possible, and audit trails that hold up.

Reconciliation

Payouts matched against orders automatically, so finance is not exporting CSVs every month.

Flow optimisation

Retries, fallbacks and wallet support, so a soft decline does not end as a lost sale.

How we work

Unhappy paths first

Most payment problems are not bugs in taking money. They are gaps in what happens when taking money does not go to plan.

See how we optimise the checkout around it
  1. 01

    Map the money

    Every state a payment can be in, and who is responsible at each one. Before any code.

  2. 02

    Keep PCI scope small

    Card data should never touch your servers. The cheapest compliance is the kind you avoid needing.

  3. 03

    Build the unhappy paths first

    Declines, retries, partial refunds and webhook races. The happy path is the easy part.

  4. 04

    Reconcile automatically

    If finance has to check it by hand, it will eventually not get checked.

  5. 05

    Test with real failure

    Forced declines, delayed webhooks and duplicate submissions, in staging, before launch.

Payments behaving strangely?

Tell us what you are seeing. Half the time it is one of the cases in that table, and we can usually tell you which from the symptoms.