All writing
Essay 12 May 2026 3 min read

Africa Is Not Poor — It Is Poorly Optimized

The continent's markets are not short of demand or effort. They are short of systems. Whoever removes the friction owns the market.

Walk through any trading centre in Kampala and you will not find a shortage of work. You will find the opposite — people moving constantly, carrying stock, counting cash, chasing payments, reconciling by memory. The effort is total. The output is a fraction of it.

That gap is the whole story.

Africa is not poor — Africa is poorly optimized. The one who solves friction owns the market.

A market is a system

A market moves goods from where they are to where they are wanted, and money back the other way. When that movement is smooth, a small amount of capital does a large amount of work. When it is not, the same capital is consumed by the journey itself — by every reconciliation done twice, every order placed on a hunch, every payment that takes three days to confirm.

The mistake is to read the symptom as the cause. Thin margins, stockouts, unbanked traders — these are outputs of an unoptimized system, not the nature of the place. Change the system and the outputs change with it. That is the premise behind every product the studio builds.

Where the friction hides

Friction is rarely dramatic. It hides in the ordinary:

  • Inventory that lives in one person’s head, so the business cannot grow past that person’s attention.
  • Three separate ledgers — shop, phone, notebook — that never agree.
  • A creditworthy trader who is invisible to lenders because nothing recorded their reliability.
  • Distribution that depends on who you happen to know.

None of these is a money problem. Each is a systems problem wearing a money problem’s clothes.

A worked example

Consider a retry. A mobile-money payment fails — the network blinked. In an unoptimized shop, that failure becomes a lost sale and an argument. In a system, it becomes a line of code:

async function settle(payment: Payment): Promise<Result> {
  for (const attempt of backoff({ tries: 4, base: 2_000 })) {
    const res = await provider.charge(payment);
    if (res.ok) return res;
    if (!res.retryable) break;
  }
  return queueForReconciliation(payment);
}

The friction did not disappear — networks still blink. But it stopped being the trader’s problem. That is what optimization means in practice: moving a cost from a person who cannot absorb it into a system that can.

Friction is measurable

The reason this matters is that friction has a price, and the price is legible. A rough accounting for a typical SME:

Source of frictionWhere the cost landsRecoverable?
Manual reconciliationHours per day, errorsYes
Stockouts / overstockLost sales, dead capitalYes
No credit historyCapital priced too highYes
Ad-hoc distributionSlow, uneven reachYes

Every row is recoverable. That is the opportunity — not aid, not sympathy, but optimization with an owner.

Two paths from supply to demand — one direct, one routed through friction.
The same supply and the same demand. The only variable is the path between them.

So the work, in order, is plain:

  1. Make the ordinary parts of commerce — selling, stock, payment — work as one system.
  2. Let that system record what was previously invisible.
  3. Use the record to unlock the next constraint, usually capital.

This is not a story about a poor continent waiting for help. It is a story about an under-built one waiting for systems. The friction is real, it is large, and it is recoverable — and recovering it is a market, not a charity.

Whoever builds the system that removes it does not just serve the market. They own it.

The writer

Aheebwa Ramadhan is a software engineer of eight years and the founder of Badrama, a software studio building infrastructure for African commerce. He is a technical lead working on payments and messaging infrastructure in East Africa, and writes here when an idea has earned the time to be written well.

All writing