BlogCloud

The FinOps playbook for Nigerian businesses migrating to Azure

Cloudsa Systems··
#finops#azure#cost-optimisation#nigeria
Financial data visualisation

Most FinOps advice assumes you bill and earn in the same currency. Buy reservations, rightsize instances, tag your resources, review monthly. All correct. All written for a company whose revenue and whose cloud bill move together.

A Nigerian business runs on a different set of constraints. Azure bills in USD. You earn in NGN. The exchange rate moves more, and more violently, than your actual resource consumption does. A textbook FinOps practice that ignores this will optimise the small number and miss the big one.

This is the playbook we run with clients operating on NGN balance sheets. The standard tactics are here, tuned. The currency-specific ones are the part that actually moves the needle.

Start with the FX problem, because it dominates

Your Azure bill has two variables. How much you consume, and what the dollar costs in naira when the invoice lands. The second one swings harder.

A 15% NGN depreciation against the USD raises your effective Azure cost by 15% next month, with zero change in what you deployed. Through 2023 and 2024 the naira moved further than that. No amount of rightsizing absorbs a currency shock of that size.

So the first FinOps decision is treasury, not engineering. Decide how much of your cloud spend you want fixed in USD terms versus floating. Fixed spend, locked through reservations, gives you a predictable USD number you can hedge or budget against. Floating spend rides the spot rate every month. The right mix depends on how stable your workloads are and how much FX risk your CFO is willing to carry.

The practical rule we use: everything you are confident you’ll run for the next twelve months should be a candidate for fixing in USD. Everything experimental stays floating.

Reserved instances under FX uncertainty

Reservations save 30-60% on compute and database. That’s the headline. The subtler benefit for a Nigerian business is that they convert a floating monthly USD cost into a fixed commitment you can plan treasury around.

But FX uncertainty changes the buying strategy. Three rules.

First, only reserve steady-state workloads. Wait until you have three months of consumption data before committing to a one or three year term. Reserving an SKU you outgrow in six months wastes the commitment and the naira you paid for it.

Second, prefer one-year terms over three-year when the FX outlook is uncertain. The three-year term saves more in USD, but it locks you into funding that USD commitment for three years across whatever the naira does. A one-year term costs a little more per hour and gives you an annual decision point to reassess.

Third, time the purchase. Reservations are paid up front or monthly in USD. If you have a treasury view that the naira is at a relatively strong point, that’s the moment to commit the up-front payment. We schedule reservation purchases into quarterly windows precisely so the treasury team can pick the timing rather than buying reactively mid-month.

Auto-shutdown, with WAT on the clock

Non-production compute that runs 24/7 is the most common waste we find. Dev and test machines don’t need to be on overnight or at weekends.

Tag-based auto-shutdown fixes it. Tag everything non-production with Environment=Dev or Environment=Test. An Azure Automation runbook or a simple Logic App shuts those resources down at 19:00 WAT and starts them at 07:00 WAT on weekdays. Nothing runs over the weekend unless someone explicitly opts out.

Do the arithmetic on Lagos hours. A dev VM left on continuously runs 168 hours a week. On a weekday 07:00-19:00 schedule with weekends off, it runs 60 hours. That’s a 64% cut on that machine’s compute, for a workload nobody uses while the team is asleep. Across a dev fleet it’s typically a 30-40% reduction in non-production compute spend.

Set the timezone explicitly in the automation. WAT is UTC+1 with no daylight saving, which is simpler than most, but pin it so a machine in South Africa North doesn’t shut down on UTC and confuse everyone an hour early.

Storage lifecycle, tuned to retention rules

Storage creeps. Logs, backups, audit exports, old database dumps. Most of it is written once and read almost never, but it sits on hot-tier storage paying hot-tier prices.

Lifecycle management policies move blobs down the tiers automatically. The pattern we apply by default: hot for 30 days, cool from 30 to 90 days, archive beyond 90. Cool storage is meaningfully cheaper than hot. Archive is cheaper again, with the trade-off that retrieval takes hours, which is fine for compliance archives you hope never to read.

For a Nigerian business, the retention horizon is often set by regulation. CBN and NDPR retention requirements can mean holding audit and transaction records for years. That data should never sit on hot tier. A lifecycle policy that archives it after 90 days, with an immutability policy to satisfy the auditor that it can’t be tampered with, gets you compliant retention at a fraction of the cost.

Azure Hybrid Benefit, which most clients leave on the table

If you run Windows Server or SQL Server, and most Nigerian enterprises do, you almost certainly own licences with Software Assurance already. Azure Hybrid Benefit lets you apply those existing licences to Azure compute and cut the rate substantially. On SQL workloads the saving can reach 40-55% versus pay-as-you-go.

This is found money. The licences are already paid for. We routinely audit tenants running Windows and SQL VMs at full retail rate with Hybrid Benefit available and switched off. Enabling it is a per-resource setting and an Azure Policy to enforce it on new deployments. Check it on every Windows and SQL workload you run.

Tag-based showback

You cannot manage what you cannot attribute. Tagging is the foundation everything else stands on.

Enforce four tags at deployment via Azure Policy: CostCentre, Owner, Environment, DataClassification. No resource group gets created without them. With those tags, Azure Cost Management produces showback reports per team, per environment, per cost centre, without anyone in finance having to ask engineering where the money went.

Showback changes behaviour on its own. When a product team sees their own monthly number, the idle dev cluster and the oversized database get noticed without a central FinOps team chasing them. Retrofitting tags onto an untagged estate is painful and never fully accurate. Set the policy before the first resource lands.

Regional pricing is not uniform

The region you deploy to changes the price. For African workloads the realistic choices are South Africa North, South Africa West, and West Europe, and they do not cost the same.

South Africa North typically runs a premium over West Europe on several SKUs, sometimes 10-20% on compute. That premium buys you lower latency to West African users and data residency on the continent. For a latency-sensitive or sovereignty-bound production workload, it’s worth paying. For a batch job, a build agent, or an analytics workload that nobody interacts with directly, West Europe is cheaper and the latency is irrelevant.

The point is to decide per workload rather than defaulting everything to one region. Production transactional systems in South Africa North for the user experience and the residency story. Background and non-production workloads in whichever region is cheapest for that SKU.

Egress will surprise you

Ingress is free. Egress is not, and it’s the line item that catches teams out. Data leaving an Azure region to the internet, or crossing between regions, costs per gigabyte, and at volume it adds up faster than people expect.

The classic traps: a backup job replicating across regions, a chatty integration pulling large payloads out to an on-premises system, or media served directly from blob storage to users instead of through a CDN. We’ve seen egress quietly become 15% of a monthly bill.

Avoid it by design. Keep data and the services that read it in the same region. Use private endpoints and service endpoints so traffic to PaaS services stays on the Microsoft backbone rather than egressing. Put a CDN in front of anything serving large files to users. And monitor egress as its own metric, because it’s the cost that grows silently.

The cadence that keeps it honest

FinOps is not a one-time cleanup. It’s a rhythm.

Monthly: a cost review. Pull the showback report, look for anomalies, catch the dev cluster someone forgot to shut down, confirm the month tracked to budget in both USD and NGN terms.

Quarterly: a reservation window. Review consumption data, decide what’s stable enough to reserve, and let treasury pick the timing within the quarter based on the FX view.

Annually: a reservation refresh. Existing reservations expire, workloads have shifted, SKUs have changed. Reassess the whole reserved estate once a year rather than letting it ossify.

This cadence costs a few hours a month and consistently returns far more than it takes.

A worked example

Take a hypothetical Lagos fintech. Production runs in South Africa North: an AKS cluster for the application tier, an Azure Database for PostgreSQL flexible server, a couple of Windows VMs for a legacy reporting component, blob storage for documents and audit logs. Non-production is a smaller mirror in West Europe.

Before FinOps, this lands somewhere around $6,500 a month, paid at spot NGN every time the invoice clears.

Apply the playbook. Reserve the PostgreSQL server and the steady AKS node pool on one-year terms, bought in a quarterly window: roughly 35% off that compute. Apply Azure Hybrid Benefit to the Windows reporting VMs: another cut on those. Auto-shutdown the non-production estate on a WAT schedule: a third off non-production compute. Lifecycle the audit logs to cool and archive: storage costs drop and the retention requirement is satisfied. Move the non-production environment’s batch workloads to West Europe pricing.

The bill settles closer to $4,200 a month, and a large slice of it is now fixed in USD through reservations, so treasury can budget and hedge against a known number instead of a moving one. Same workloads. Same performance. Roughly a third less spend, and far more predictable in naira terms.

The numbers are illustrative, but the proportions match what we see. A first-pass FinOps engagement on a Nigerian Azure estate usually finds 30-50% in the first six months, and the bigger win is turning an unpredictable USD exposure into a planned one.

If you’re moving to Azure and want this built in from the start rather than retrofitted, our cloud team runs FinOps as part of every managed engagement. Request a quote and we’ll scope your estate, model the savings, and give you a written plan with the numbers worked through for your actual workloads.