Building compliance software for a continent that rewrites its tax code every year
Nigeria rewrote its entire tax code on 1 January 2026. A founder's argument for why African compliance software has to be built to expect the law changing, not resist it.

Ask a software team in most parts of the world how often the tax code changes, and the honest answer is "rarely, and slowly." Ask the same question about Nigeria, Ghana, Kenya, or Rwanda, and the honest answer is closer to "constantly, and without much warning." The Nigeria Tax Act 2025 rewrote PAYE brackets, reliefs, and the regulator's own name, effective 1 January 2026. Kenya has amended its social security and housing-levy structure more than once in recent years. Ghana's PAYE bands are reviewed annually. This isn't instability — it's a continent of governments actively modernising their revenue systems, often for good reason. But it means a very specific thing for anyone building payroll or compliance software here: the tax code is not a fixed input. It's a variable you have to design around.
We built AnooreHR around that premise from day one, and I want to explain why, because it shapes almost every architectural decision underneath the product.
Most software treats tax rules as a known constant
Here's the failure mode we set out to avoid. A team builds a payroll product, encodes the current year's brackets and reliefs directly into the application logic, tests it thoroughly, and ships something genuinely correct. For a while, it is correct. Then a Finance Act or a Tax Act passes, and the software is still computing last year's numbers — confidently, and with no error message, because nothing crashed. The code didn't get worse. The world changed underneath it.
The deeper problem is that fixing this the usual way — a developer edits the calculation, a reviewer checks it, QA verifies it, it ships in the next release — puts an engineering team on the critical path between a law taking effect and the software being correct. Real payroll doesn't wait for a sprint. The first payroll run under the new rules is often due before the patch is.
Rules as data, not code
Our answer is architectural: every country's tax rules — brackets, reliefs, pension and social-security contributions, statutory levies, filing calendars — live in a country profile pack, a structured data file the payroll engine reads, not code the engine executes. Updating a rate is editing data. It doesn't require a new build, a new deploy, or an engineer to touch the calculation logic at all.
That single decision changes what a tax-law change costs us. Instead of "rewrite and redeploy the engine," it's "author and validate a new version of the data the engine already knows how to read." The hard work — reading the new Act carefully, encoding it precisely, checking it against worked examples — doesn't disappear. But it's contained to understanding the law, not also fighting the software's own architecture at the same time.
Effective dates matter as much as the rates themselves
There's a second design decision that matters just as much and gets talked about far less: a tax change has an effective date, not a switch. When NTA 2025 took effect on 1 January 2026, a correct system needed the old rules and the new rules to coexist — because corrections, back-pay, and audits for December payroll kept arriving well into the new year. Software that only holds one version of the rules at a time has to pick which month to get wrong.
Profile packs are versioned by effective date for exactly this reason. Run a December payroll, get the old regime. Run a January payroll, get the new one. No manual toggle, no "which mode are we in" question for a human to get wrong under deadline pressure.
What this buys, and what it doesn't
I want to be precise about what this architecture actually solves, because it's tempting to oversell it. Rules-as-data does not make the underlying legal work disappear — reading a new Act closely, understanding what actually changed, and validating the new numbers against real calculations is still serious, careful work, and we don't shortcut it. What the architecture removes is the second problem layered on top: having to rebuild and re-test the engine itself every time the data changes. It keeps "the law changed" and "the software broke" from being the same event.
It also means expanding to a new country is fundamentally a data-authoring exercise on a proven engine, not a rewrite. The proration logic, the payslip generation, the posting into a shared ledger — all of that is country-agnostic machinery, built once, inherited by every new profile pack. Nigeria runs on this today. Every additional country we bring on is us describing that country's rules to an engine that already knows how to run payroll — not reinventing payroll for each new market.
The honest takeaway
If you are evaluating compliance software anywhere on this continent, the question worth asking isn't "is this correct today?" Almost everything will say yes, and most of it will even be right. The question that actually separates the tools is: what happens the day after the law changes? Does a developer have to touch the calculation code, or does someone update a file? Can the system hold last year's rules and this year's rules at the same time, or does it have to guess which month you meant? We built AnooreHR on the belief that in this part of the world, the tax code changing isn't the exception to design around occasionally — it's the normal operating condition to design for from the start.
Does AnooreHR handle this?
Yes — this is the architecture underneath AnooreHR: country profile packs, versioned by effective date, running on one shared payroll engine. Nigeria is live today, date-routed across the 2026 tax change; other countries come online as validated profile packs on the same engine, never claimed live before they are.
If your team has been burned by a tax-law change breaking your payroll numbers, book a quick demo and we'll walk you through exactly how a rule change becomes a data update here, not a fire drill.
Related reading: Country profile packs: how we add a new country's tax engine in JSON, not code · NTA 2025 broke every Nigerian payroll system overnight · Africa is not one market — stop building payroll like it is
AnooreHR is free for teams up to 3.
PAYE, Pension, NHF, NSITF, ITF — all handled. No setup fee, no card.
Get started freePan-African payroll, HR, and accounting specialists. Every rate and rule is checked against the primary regulator before it ships.
More about our editorial team

