All posts

Why Government Software Is Hard

I've been building applications for Ethiopian government agencies for three years now. MIS platforms, financial systems, asset tracking, construction project management. I keep running into the same problems, and almost none of them are technical.

The real constraints

Internet connectivity is unreliable. Power goes out. Computers are shared between three or four people. The person who approved the requirements left the agency six months ago and their replacement has different priorities. Training sessions happen once, and the manual you wrote gets filed somewhere nobody will ever look.

You can't design around these constraints by pretending they don't exist. Web apps that require constant connectivity don't work when the connection drops twice a day. UIs that assume each user has their own machine don't work when four people share one desktop and forget to log out.

Two things I've changed

Offline-first thinking. Even for web apps, I've started building in local caching and graceful degradation. If the connection drops mid-form, don't lose the data. Queue it. Sync later. Users shouldn't have to understand network architecture to do their job.

Training the trainers. Instead of running training sessions for end users — who rotate, get reassigned, or simply forget — I've started focusing on finding one person in each department who actually cares about the system. Train them deeply. Give them the tools to train others. One invested champion in the finance office is worth twenty people who sat through a mandatory two-hour session.

It's not a tech problem

The hardest part of government software isn't the code. It's understanding that your software lives in an ecosystem of bureaucracy, staff turnover, infrastructure limitations, and competing priorities. You can write the cleanest code in the world, and it won't matter if nobody uses it because the person who was supposed to enter the data got transferred to another office.

I don't have solutions for all of this. But acknowledging the constraints honestly has made me a better engineer than any framework or design pattern.