Systems that hold their shape.
I’m Oluwayemi Oyinlola Michael, a software engineer in Nigeria. I build backend APIs, data pipelines and developer tools — and the architecture that holds them together.
- Backend engineering
- Python & data engineering
- Distributed systems
- Developer infrastructure
- 79
- Go modules
- 39
- TS packages
- 31
- Case studies
- 3
- Core languages
Zudomart
A Go modular monolith for African social commerce — 79 modules across five domains, escrow and three-tier verification, with a Python service for ranking, recommendation and fraud detection.
- 79
- Go modules
- 5
- Bounded domains
- 13k+
- Go source files
Zudojs
A 39-package modular TypeScript framework — DI, lifecycle, config, HTTP, events, CQRS, queues, tenancy and observability, each usable on its own, with the dependency direction enforced by a build-time check.
- 39
- Packages
- 198k
- Lines of TypeScript
- 5
- Enforced tiers
I’m Oluwayemi Oyinlola Michael, a software engineer in Nigeria. I build backend APIs, data pipelines and developer tools — and the architecture that holds them together.
- Backend engineering
- Python & data engineering
- Distributed systems
- Developer infrastructure
- Go modules
- 79
- TS packages
- 39
- Case studies
- 31
- Core languages
- 3
01Selected work
7 systems, and the
decisions behind them.
Each case study covers the constraint that shaped the architecture, the structure it produced, and the trade-offs I would defend in a review. Numbers come from the repositories themselves.
02How I work
Opinions I can defend.
Not preferences — positions I have paid for, in projects that are still running.
Boundaries before frameworks
Most systems fail at the seams, not in the middle. I draw module boundaries and type contracts first, then pick the framework that fits them — which is why Zudomart is 79 Go modules in one deployable, not 79 services.
A monolith you can split
Modular monoliths get the operational simplicity of one process with the option to extract later. Every module owns its ports, adapters and data, so extraction is a build change rather than a rewrite.
Understand it underneath
Rather than only using Fastify or Express, I want to know how a framework should structure an application at all. That question is what Zudojs is — not another Node framework, but an attempt at the building blocks underneath one.
Ship the whole thing
An API without a storefront is a demo. I build the backend, the dashboard, the public site, the payment flow, the emails and the deploy — the last ten percent is where products actually get judged.
Trust is an engineering problem
Escrow, verification, dispute windows and audit trails are not policy documents — they are state machines. On a platform where people send strangers money, that state machine is the product.
Build for thin margins and slow networks
Almost everything I have shipped serves Nigerian schools, shops, savings groups and traders. That means small payloads, offline-tolerant flows, local payment rails, and no patience for a product that almost works.
03Engineering
Five layers, one problem.
Software engineering, databases, distributed systems, data and security are not five careers — they are one problem viewed from five angles.
04Lab
Or just ask the shell.
Most of what I do starts in a terminal, so the portfolio has one. It runs over a filesystem generated from this site's own content — cat a case study, then open it.
oyinlola@portfolio: ~
oyinlola@portfolio — interactive shell
31 case studies mounted at /work · 5 disciplines at /engineering
Type 'help' to begin, or 'neofetch' if you're in a hurry.
Let’s build something that lasts.
Open to backend, platform and software engineering roles — full-time or contract, remote or hybrid.