Backend API for a logistics startup in Lagos
A logistics startup was starting a pilot in Lagos and needed a backend from scratch. Different types of users would be working on the same deliveries, payments had to be right every time, and the setup had to stay lean.
- My role
- Backend Developer - API design, build and deployment
- Team
- Worked with product leadership and the frontend team
- Timeline
- About 6 weeks to a working pilot backend
- Constraint
- A small infrastructure budget, and user data handled under the Nigeria Data Protection Act (NDPA)

The problem
The platform had several user roles, each with their own part to play in a delivery. If a step was missed or recorded twice, things would go wrong for real people and real money.
I built the backend as one NestJS app split into clear modules, so each part of the product could grow without breaking the others. I kept a full history of every change to an order, so nothing could happen without a record of it. I also added role-based access, payment handling, email notifications and location-based search.
The tradeoff I made
I had users upload files straight to cloud storage instead of sending them through our server. Passing files through the API would have been simpler to build and easier to control, but it would have used up server memory and bandwidth on work the storage service already does well.
A few extra steps in the upload flow in exchange for a server that stays light.
Outcomes
Backend modules built and running in one codebase with enforced boundaries between them
From first commit to a deployed backend
Type checks, linting, builds and end-to-end tests against a real database run in CI
What I would do differently
I would walk through each user's full journey before building their endpoints. After launch we found a couple of screens the frontend needed that the API didn't support yet. They were easy to add, but they should have been caught at the start.
I would also set up deployment in the first week instead of near the end. Small hosting issues are easy to fix early, but finding them late took time I didn't plan for.