LIVE
1.29°S / 36.82°E  ·  Nairobi

Opacity as the root cause

The problem is never the people

Every project in this portfolio started from the same observation, arrived at from a different direction.

County governments in Kenya generate detailed budget absorption reports every quarter. They submit them to the Controller of Budget. The Controller of Budget publishes them. They are public documents, available at cob.go.ke, free to download. And yet the residents of those counties — the people whose roads didn't get built, whose clinics didn't get equipped, whose schools sat half-finished — have no way to know that the money existed, was allocated, and was not spent.

The data is there. The institution is there. The people who would act on it are there. What's missing is the layer between them.

I call this opacity. Not corruption — though opacity enables corruption. Not incompetence — though opacity looks like incompetence from the outside. Opacity is something more structural: the absence of legibility. The data exists but can't be read. The institution functions but can't be seen. The right to know exists in law but not in practice.

Thirteen tools, one problem

Hesabu tracks county budget absorption — which counties are spending their development funds and which are not. Macho ya Wananchi tracks MP attendance and CDF utilisation — which representatives show up and which constituencies get their money. Jibu answers questions about Kenyan law in plain Kiswahili — what are your rights and how do you use them. WapiMaji translates drought and water stress data into SMS alerts for farmers on basic phones — what is happening to the water in your county, right now.

These look like different tools. They are the same tool, aimed at the same problem from different angles.

In each case: the underlying information already exists. KNBS publishes water data. The Controller of Budget publishes county budgets. Parliament publishes attendance records and bill statuses. The Kenya Meteorological Department publishes rainfall forecasts. The problem is not that the information doesn't exist. The problem is that it exists in a form that requires a lawyer, a data scientist, or a government employee to read it — and then it stops there.

The missing layer is legibility infrastructure. The translator between what institutions know and what the people affected by those institutions can act on.

The diaspora lens

I built these tools from the diaspora, which gives you a particular kind of clarity about what's missing. When you're inside a system, you adapt to its opacity. You learn the workarounds. You know which cousin works at the county office, which WhatsApp group has the real information, which journalist to call. The opacity becomes invisible because you've built human infrastructure around it.

From outside, you see it clearly. Not because you're smarter, but because you don't have the workarounds. The gap between what should be legible and what is actually legible becomes visible precisely because you can't fill it with local knowledge.

This is also why the diaspora is a meaningful design constituency. A Kenyan in Germany trying to send money home, understand their rights if they return, keep track of what's happening to their county's development budget — they have the same information problem as a Kenyan in Garissa, but without the local informal layer that usually compensates for the opacity. Design for the diaspora case and you end up with something more universally useful.

Why it's not a data problem

The standard framing for this kind of work is "open data." Make the data available, and civic participation will follow. This is wrong, or at least incomplete.

The Controller of Budget's data is open. You can download the full county budget implementation report as a PDF. It is 300 pages long. The absorption figure for your county is in a table on page 147, expressed as a percentage of a budget figure that requires you to understand the difference between development and recurrent expenditure, and to know what "absorption" means in the context of Kenyan public finance law.

Making data open is necessary but not sufficient. The work is in the translation — taking the 300-page PDF and turning it into: Kisumu County spent 61% of its development budget last year, ranking 38th out of 47. KES 890 million in development funds was not deployed.

That sentence takes three seconds to read. It contains everything a citizen, a journalist, or a county official needs to ask the next question. The 300-page PDF contains the same information, but in a form that stops most people before they start.

Opacity is not the absence of data. It is data in a form that cannot be acted on.

The constraint is the point

All thirteen tools run on Streamlit Cloud's free tier. No servers, no infrastructure costs, no DevOps. This is not an apology — it's a design decision.

The communities these tools serve are not well-resourced. The NGOs doing water monitoring in Turkana county are not well-resourced. The journalists covering county government in Kakamega are not well-resourced. The parish administrators managing giving records for a diaspora congregation in three countries are not well-resourced. Building on expensive infrastructure would mean building for well-resourced users, which would mean building for the wrong people.

The constraint forces better architecture. When you can't afford to store everything, you build better caching. When you can't afford heavy JavaScript, you build for basic phones. When you can't afford custom infrastructure, you compose from existing public data sources. The tools that result are simpler, faster, and more honest about what they know and don't know than tools built without constraints.

What comes next

Each tool in this portfolio is a seed, not a finished product. Hesabu covers 46 counties using FY2022/23 data — the next version should pull the Controller of Budget's live RSS feed and update when new reports are published. Macho ya Wananchi covers 15 MPs — the next version should cover all 290 constituencies. WapiMaji reaches farmers via SMS — the next version should reach them via USSD, which works on feature phones without data.

The roadmap for each tool is the same: more real data, closer to the people who need it, in the language they actually use.

The underlying problem — the opacity between institutions and the people they serve — is not going to be solved by software alone. It requires institutions that want to be legible, not just institutions that are legally required to publish. It requires journalists who can read the data and ask the right questions. It requires citizens who know the data exists and know how to use it.

The tools are infrastructure for that process, not a replacement for it.

That distinction matters. The claim is not that an app solves county budget accountability. The claim is that an app makes the information readable enough that accountability becomes possible. The people who do the accountability work — the journalists, the civil society organisations, the engaged citizens — still have to do it. The tools just remove one of the layers of friction between them and the information they need.

That's enough. Removing friction at the right point in a system changes what the system can do.


Gabriel Mahia builds decision infrastructure for East Africa. The tools described here are at gabrielmahia.github.io. The engineering guide for building on the East African stack is at nairobi-stack.

Responses