Adding a second card gateway to TipTip’s checkout, so card payments cost less and keep working when one gateway fails.
Card payments were a major revenue driver for TipTip, and one of its biggest cost and risk factors. Every card payment ran through a single gateway.
When an incident took away our cheaper processing route, every card payment fell back to a more expensive setup, with no backup. It exposed two weak spots:
As the sole designer in the Payments squad, I owned the end-to-end card journey and worked closely with the PM, backend engineers and QA.
The existing gateway answered instantly and had retry built in. Harsya didn’t, so the design had to absorb the difference:
The card form, saved card and error states follow the same layout and flow as the existing checkout, even where Harsya’s rules differ. Switching gateways never means relearning checkout.

A Verifying Payment screen covers the delay while we wait for the callback. If one arrives, the buyer lands on the specific reason, like an expired card or not enough limit. If none arrives, a general error removes the uncertainty.

Since buyers can’t switch method mid-checkout, a failed payment offers Change Card, with details pre-filled for a quick retry, or Cancel Order to start again with another method. Success goes straight to the ticket.

Because verification can take a moment, email, push and in-app notifications carry the payment status and ticket details, so buyers aren’t left wondering.

An internal tool lets the team choose the active gateway for each ticket SKU. That allowed a controlled rollout, and a fast reroute whenever a gateway has trouble.
Exact fees and success rates stay confidential.
Lining up UI states with asynchronous payment logic only worked because PM, backend and QA were in the room from the start.
The hardest part wasn’t the happy path. It was adapting to the gateway’s limits while keeping checkout feeling exactly the same for buyers.