What Nobody Tells You About Building Web Products for African Users
Most web development tutorials assume a set of defaults that quietly break down the moment your users are in Nairobi or Johannesburg instead of London or San Francisco. Iβve spent a lot of time researching how students a
Most web development tutorials assume a set of defaults that quietly break down the moment your users are in Nairobi or Johannesburg instead of London or San Francisco. Iβve spent a lot of time researching how students and everyday users in South Africa and Kenya interact with digital products β payment flows, student portals, university platforms β and the gap between βworks fine in the demoβ and βworks for your actual African userbaseβ is bigger than most product teams expect.
Hereβs what I wish more dev tutorials flagged upfront.
PayPal is not a universal payment layer
This one catches a lot of teams building products with African market reach. PayPal has significant limitations in both Kenya and South Africa that donβt exist in the US or EU:
β’ In Kenya, PayPal supports receiving payments but heavily restricts withdrawals to local bank accounts. The workaround most Kenyan users rely on is linking PayPal to M-Pesa via platforms like Equity Bank β but thatβs a multi-step process that a meaningful chunk of your users wonβt complete.
β’ In South Africa, PayPal receiving limits and currency conversion rules create friction that most checkout UX doesnβt account for.
If your product assumes PayPal works the same way it does in a US/EU checkout, youβre silently excluding or frustrating a large portion of your African userbase β not because they canβt pay, but because your payment layer doesnβt match how money actually moves in their context.
M-Pesa is the default payment rail in Kenya β not a niche option
This is the flip side of the PayPal problem. For Kenyan users, M-Pesa isnβt an alternative payment method β itβs the first and most natural way they move money. Offering it as a secondary option below a card checkout that most of your users donβt have is backwards UX.
If youβre building anything that accepts payments from Kenyan users, Safaricomβs Daraja API (specifically STK Push) should be your primary integration, not your stretch goal. The STK Push flow sends a payment prompt directly to the userβs phone β they enter their PIN, done. No card details, no PayPal account, no bank redirect. For mobile-first markets, this is about as frictionless as payments get.
The most common integration pitfall: callback URLs. Darajaβs STK Push is asynchronous β your server finds out the transaction result via a callback, not via the initial API response. If that callback fails silently (usually because the URL isnβt HTTPS, isnβt publicly reachable, or isnβt whitelisted in the Daraja portal), your order gets stuck in βpendingβ forever. Thatβs worth planning for before you hit production.
Your users are almost certainly on mobile β and on constrained data
South Africa and Kenya both have smartphone penetration well above what many people expect, but the data cost context is very different from Western markets. Mobile data in South Africa is expensive relative to income; in Kenya, itβs cheaper but still a real consideration for everyday users. This has a few practical implications:
JavaScript bundle size matters more than you think.
A 400KB JS bundle that loads in 1.5s on a US connection might take 6-8 seconds on a mid-range Android on a South African mobile network. Googleβs Core Web Vitals are stricter about this than most dev teams realize, but more importantly, real users drop off well before any benchmark kicks in.
Images need to be treated as a cost, not just a UX element.
WebP, lazy loading, and explicit width/height attributes arenβt nice-to-haves for African-targeted products β they directly affect whether a user on a prepaid data plan decides to stay on your page.
Test on actual mid-range Android devices, not just Chrome DevTools throttling.
DevTools throttling simulates network speed but doesnβt simulate the CPU and memory constraints of a low-to-mid-range Android phone, which is a much more representative device for a South African or Kenyan user than an M1 MacBook with throttling turned on.
University portals are a special class of pain
This one is specific to edtech or any product that integrates with African university infrastructure. South African and Kenyan university student portals are often hosted on legacy systems with inconsistent uptime, especially during peak periods like registration and exam results. If your product depends on scraping or polling a university portal, build in aggressive retry logic and clear βweβre waiting for the portal to respondβ states β users will understand this, because they deal with it themselves.
For Kenyan universities in particular, M-Pesa paybill integration is the primary fee payment mechanism rather than a bank portal or card system. If youβre building anything in the Kenyan edtech space that touches fee payment, M-Pesa paybill number lookup and verification should be in your integration scope.
The broader point
Building for African users isnβt harder β itβs just different in ways that matter. The main shift is treating mobile-first and M-Pesa-first as the defaults rather than the edge cases, and not assuming that PayPal or Stripe will land the same way on the continent as they do in the West.
Iβve written more about the PayPal β M-Pesa landscape from a user perspective here. if itβs useful context.
Happy to go deeper on any of these in the comments β particularly the Daraja callback handling, since that trips up a lot of first-time integrations.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.