Skip to content

Open to senior backend rolesLagos, Nigeria · UTC+1

Backends that other people’s money, mail and models run on.

I’m Micheal Macaulay — a backend engineer in Lagos. 5 years in Node.js, NestJS and TypeScript, mostly on the parts that are expensive to get wrong: payment integrations, email infrastructure, and the API contracts other teams build against.

Full overlap with London and Dublin. Afternoons overlap New York.

Micheal Macaulay standing in front of two monitors showing code
GET /v1/me200 OK
{
  "name": "Micheal Macaulay",
  "role": "Senior Backend Engineer",
  "based": "Lagos, Nigeria",
  "years": 5,
  "stack": [
    "NestJS",
    "Node.js",
    "TypeScript"
  ]
}

Measured outcomes

Three numbers, not eleven. These are the ones I can reconstruct on a call — the instrument, the baseline and the window. The rest of my work is described by what it does rather than by a percentage.

Selected work

All projects

Experience

Full CV

Working with AI

I have shipped model-backed features into three clients’ production workflows, across text, vision and speech. The interesting engineering is never the API call — it is everything around it.

Shipped into production

How I actually use it

Where I use it
Daily, across the stack — scaffolding, unfamiliar APIs, test cases I would otherwise skip, and frontend work that is not my strongest suit. It is why I can take a full-stack ticket end to end rather than handing the UI to someone else.
Where I don’t
Schema design, auth boundaries, anything touching money, and any decision I would have to defend in a review. Not because a model cannot suggest one, but because I have to be able to explain why it is right, and reconstructing that after the fact is slower than deciding it up front.
The rule I hold to
I don’t ship what I can’t explain. That is the same rule this site runs on — the case studies stay unpublished until I have described the systems in my own words, rather than filling them with a plausible account of what they probably did.
What it doesn’t change
Reviewing a diff you did not type is still reviewing a diff. The failure mode is accepting something that looks right, and the defence is the same as it has always been: types, tests, and reading the thing before it goes in.

About

Most of what I build is invisible when it works. That is the job.

I started in electrical engineering and moved to backend work because the problems were more interesting: a payment that must not be charged twice, a mailbox sync that has to survive being interrupted, an API that half a dozen people are already building against.

I work with teams across the UK, Europe and the US from Lagos, which means my day already overlaps most of theirs. What I care about in a codebase is whether the next person can read it — so I document the contract, keep the error shapes consistent, and write the test that proves the thing I claimed.

Right now I’m deepening the operational side — the metrics, tracing and alerting I have not had to run before. There is a page on this site that says plainly what I have and have not done.

Micheal Macaulay seated at a desk in an open-plan office

Contact

If you’re hiring for a backend or platform role, or you have a system that needs untangling, send me the details. This form posts to the NestJS API documented alongside this site — validated, rate limited, and stored before it is emailed, so nothing gets lost on the way.

or email macaulaymich@gmail.com