The Problem We Were Actually Solving
We were trying to bring online payment solutions to creators in the developing world. Specifically, we wanted to make it easy for freelancers in countries like Nigeria, Pakistan, and Ghana to get paid on our platform. Our users already had bank accounts, but our traditional payment gateway providers had high fees and requirements that were inaccessible to them. We tried all the usual tricks - online money transfer services, digital wallets, and even cryptocurrency. But nothing seemed to work.
What We Tried First (And Why It Failed)
At first, we went with a hosted payment page solution, thinking it would be easy and scalable. But when we saw our users were getting error messages and failing to complete payments, we realized that the traditional payment services we were using were a relic of Western banking systems. They required phone numbers, addresses, and other information that our users just didn't have. Our users would click "Pay now" only to be redirected to a page that said "Sorry, we can't complete your transaction." And we would get paged in the middle of the night, wondering what to do.
The Architecture Decision
So we started from scratch, working with our users to understand what they needed. We built an API-based payment system that used our own merchant account and allowed users to pay directly to our platform. We also implemented a retry system for when the payment network was down, because let's face it - most of our users don't have broadband internet. Our system had to work over mobile networks, which meant we had to handle lots of dropped packets and server-side retries.
What The Numbers Said After
After six months of development, our new payment system was up and running. We saw a 90% reduction in failed payments and a 50% reduction in user complaints. Our users could finally get paid and we could finally build a platform that worked for them. Our server-side retries worked so well that we only saw an average of 3 failed payments per hour, down from 500.
What I Would Do Differently
In hindsight, I wish we had started with the right architecture decision from the beginning. We tried to shoehorn traditional payment services into our platform, thinking it would be easier. But in the end, we had to build something new and bespoke to meet our users' needs. If I had to do it again, I would start by talking to our users and figuring out what they actually needed. I would also invest in a proper payment gateway provider that understood developing-world banking. And I would make sure to include lots of retries in our system, to handle the usual outages and errors that come with our kind of work.
Top comments (0)