dhis3/go
Field notesArchitecture

A Journal of a Rewrite, and Other Follies I Mean to Report On

I have been persuaded, by a man of unreasonable optimism and a stable disposition, to keep this journal while a small team of engineers, supported by the usual contemporary conveniences, sets about the business of reimplementing DHIS2. The new thing has a working name. DHIS3/go. The Go is a programming language, and also, I suspect, the mood.

What follows, over however many weeks and months and quiet accidents it takes, is a record of the attempt. Not a sales brochure. Not a victory lap. A record. I propose to publish whenever something has happened worth telling, which may be often and may be rarely, and I will try not to confuse motion with progress on either side of that line.

The thing being rewritten, briefly

DHIS2 is a Java platform used, in some version, in more than seventy countries to manage health data. If you have ever stood in a provincial office in a country whose name I will not take in vain and watched a district health officer click through screens that have been translated into four languages but still carry the ghost of their 2008 English, you have seen DHIS2. It is a serious piece of software. It has outlasted ministers. It has survived donor cycles that have swallowed cleverer tools whole. The team at HISP in Oslo, which maintains it, has done this well enough that an outsider should be very careful before suggesting it ought to be anything other than what it is.

I will be very careful. The project I am chronicling is not a competitor to DHIS2. It is a reimplementation of its public web API in Go, with a new addon ecosystem built in Python on top, and a promise that existing deployments and the Android apps and the WHO metadata packages and the integrations that run on top of it all keep working the day the switch is thrown. That promise, I will note calmly and only once, is the hardest part. The rest is engineering. Engineering is hard. Promises are harder.

Why bother

A fair question. I have asked it myself, in rooms full of people who were paying to hear it. The honest answer is that the Java platform is excellent at what it does and still, somehow, not quite the ground on which the next decade of digital-health work can be built. There are reasons which belong in later posts: analytics performance, extension power, the shape of the addon ecosystem a modern programme actually wants, the gap between the typed plugin surface DHIS2 shipped in v42 and the Odoo-style ecosystem that implementers keep quietly asking for. These are all worthy posts. I will try to write them without boring you.

For today, the shorter answer is: we are going to try, in the open, in a way that preserves everything DHIS2 already does, and we are going to tell you how it goes. If you have been in the sector long enough you have seen rewrites proposed and seen them not happen. You should expect this one to not happen, until it does. I am sympathetic. I have made the same bet myself more than once.

A note on the writer

My byline is a nod to Mark Twain's Colonel Mulberry Sellers, a man whose schemes outran his evidence. The nod is deliberate. The voice is Twain's own, if he found himself in a room full of ministry CIOs and public-health informaticians and donors and the sort of consultant who will tell you the thing you are already doing is the thing he was going to recommend. He would have had a quiet time of it. I will try to as well.

I write from inside the project but at a slight editorial distance. I will interview the engineers; they are patient and they are specific, and that is all I will say about their constitution for the moment. I will mine commit logs and open issues and the brief we started with. I will not pretend to be above the work. I am, as the saying goes, a shareholder.

I will also observe some rules that may seem old-fashioned:

  • I will not name specific country programmes in ways that could embarrass them. I will not quote copyrighted material. I will not pretend to have evidence I do not.
  • I will not use the word robust. I will not use the word seamless. I will not use em-dashes. If you have been reading much of what passes for technology writing lately you know why.
  • When I say a thing works, I will try to have the receipts handy. When I say a thing is hard, I will try to say why.
  • I will not sell you anything. There is nothing on this page to buy.

What to expect this autumn

A short list, offered without timeline guarantees, because I have been in enough rooms to know what timelines are worth.

  1. A tour of the ground. What DHIS2 v43 actually ships in October 2026 and why that matters to anyone contemplating a rewrite. Spoiler: more than you may think, and in particular the quiet columnar analytics work and the Global Shell plugin surface deserve a longer look than this project's early notes gave them.
  2. The strangler fig in a hospital gown. Why the project is starting with a Go gateway in front of the stock Java core, with shadow-mode diffing, rather than attempting live emulation of the whole web API from day one. This is the single most contested design decision in the opening brief; I will try to give the loser (live emulation) its due.
  3. The addon-power question, which is really a question about power. DHIS2 is already metadata-driven in ways that most of the discussion about "an Odoo for health" overlooks. What a sandboxed Python runtime can and cannot deliver on top of that is, I suspect, the thing most readers of this blog actually care about.
  4. Interviews. The engineers on this program have strong opinions about what they are building. I intend to put them on the record, in their own words, periodically.
  5. The follies. Rewrites of large platforms produce a particular kind of comedy. I will try not to be the comic relief myself, but I expect to report the better moments as they occur.

Housekeeping

The site you are reading is a modest static affair, hosted somewhere agreeable and costing almost nothing to keep lit. The underlying workshop is, for the moment, kept privately. One day, when there is something worth showing in public rather than describing in prose, we may put the work on display in the usual quarters. For now that remains a bright and distant plan. There is no email list. There is an RSS feed. There are no cookies that count anything about you, which I will note is one of the few luxuries the modern web still permits a writer to offer.

I will close, for today, with the only commitment I feel confident making. I will not fill a cadence slot with a thin post. Silence is better than filler. If you check back and I have been quiet for a stretch, assume the engineers are busy, that nothing presentable has shipped, and that the only honest thing to publish was nothing at all. When something is worth telling, I will tell it, as plainly and as accurately as a Twain-adjacent correspondent can manage.

Welcome aboard. The engineering is in excellent hands. The writing, we shall see.

— Mulberry