About the Role
You'll be the most senior engineer on a five-person engineering team (2–3 full-stack engineers, 1 QA engineer, 1 UI/UX engineer). You'll own the most complex and critical systems — the backend architecture, real-time matching engine, payment infrastructure, and production deployment pipeline. You'll write code daily, review every PR that touches money or ride state, and make architectural decisions that the rest of the team builds on.
This is not a management role. You'll be hands-on in the codebase every day. But the team will look to you for technical direction, code quality standards, and guidance on how to build things right.
What You'll Own
Backend core & architecture:
- Fastify API server (TypeScript) with modular monolith structure — 10 domain modules (auth, rides, matching, payments, ratings, safety, drivers, riders, notifications, admin)
- PostgreSQL + PostGIS database design and optimization
- Redis for caching, geospatial driver search, and real-time state
- Drizzle ORM for type-safe database access
Matching engine & real-time systems:
- Driver search algorithm using Redis GEOSEARCH with sequential dispatch
- Socket.IO for real-time ride tracking, driver location streaming, and ride dispatch
- Reconnection handling, auto-offline detection, and state recovery
Payment infrastructure:
- pawaPay integration for mobile money — MTN MoMo and Orange Money in Douala; Vodacom M-Pesa, Airtel Money, and Orange Money added when Kinshasa launches in Year 2
- Driver wallet system with double-entry bookkeeping (integer arithmetic, no floating point)
- Asynchronous payment lifecycle — callback handling, idempotency, timeout recovery
- RFC-9421 signature verification for payment webhooks
Infrastructure & deployment:
- Docker containerization, Kamal 2 for zero-downtime deploys to Vultr Paris (primary region; Johannesburg added when Kinshasa launches in Year 2)
- Cloudflare Pro configuration (DNS, SSL, WebSocket proxying, rate limiting)
- CI/CD pipeline (GitHub Actions — typecheck, lint, test, deploy)
- Monitoring stack: Sentry, Grafana Cloud, Pino structured logging
Code quality & team enablement:
- Set and enforce module boundary rules (no cross-module table access, service function contracts)
- Review all PRs touching payments, wallet, fare calculation (two-reviewer requirement)
- Maintain the team's AI coding guidelines and quality gates (TypeScript strict, Biome, Zod)
- Pair with the mid-level engineer on complex subsystems to reduce knowledge silos
Requirements
- 5+ years of professional software engineering experience
- Strong TypeScript/JavaScript proficiency (both backend and frontend)
- Experience building and operating Node.js backend services in production
- Experience with PostgreSQL (schema design, query optimization, migrations)
- Experience with real-time systems (WebSockets, Socket.IO, or similar)
- Experience with payment integrations or financial systems (handling money, ledgers, idempotency)
- Experience with Docker and CI/CD pipelines
- Comfortable owning infrastructure — you can SSH into a server, read logs, and diagnose production issues
- Strong code review skills — you can catch logic errors, security issues, and architectural violations
- Fluent English (written and verbal) — all code, documentation, and technical communication is in English
Nice to Have
- Experience with Fastify (or Express/Koa — Fastify is similar but faster)
- Experience with PostGIS or geospatial queries
- Experience with Redis beyond basic caching (geospatial, pub/sub, streams)
- Experience with mobile money APIs or African payment providers (pawaPay, Flutterwave, Paystack)
- Experience with React Native / Expo (you'll collaborate closely with mobile development)
- Experience building for low-bandwidth, low-end device environments
- Experience with Drizzle ORM (or Prisma/TypeORM — transferable)
- French language ability (Douala is officially bilingual — French-first with English as a first-class locale in v1.0 and Cameroonian Pidgin landing in v1.2. Strongly helpful, not required.)
What Matters More Than Your Resume
- You've built systems that handle real money and understand why idempotency, double-entry, and integer arithmetic matter
- You've operated production systems and know the difference between code that works in development and code that survives real users
- You can make pragmatic architectural decisions — choosing simplicity over elegance, shipping over perfecting
- You're comfortable being the most senior technical person in the room and setting standards others follow
Tech Stack
- Backend — TypeScript, Fastify, Node.js (production) / Bun (development)
- Database — PostgreSQL + PostGIS, Drizzle ORM
- Cache & real-time state — Redis
- Real-time — Socket.IO
- Mobile apps — React Native + Expo (you'll collaborate, not necessarily lead mobile)
- Payments — pawaPay: MTN MoMo and Orange Money in Douala; Vodacom M-Pesa, Airtel Money, and Orange Money added for Kinshasa in Year 2
- Communications — Infobip (WhatsApp OTP, SMS)
- Maps — Mapbox (server-side directions/geocoding), Google Places (destination search)
- Infrastructure — Vultr (Paris primary; Johannesburg added for Kinshasa in Year 2), Docker, Kamal 2, Cloudflare Pro
- CI/CD — GitHub Actions + Expo EAS
- Monitoring — Sentry + Grafana Cloud + Pino logging
- Code quality — Biome, TypeScript strict mode, Zod validation
- AI tooling — Claude Code (Pro plan provided for all engineers)
How We Work
- Small team, high ownership. Five engineers. No layers of management. You own your modules end-to-end.
- Trunk-based development. Short-lived feature branches (hours, not days). Every merge to main triggers CI. Staging deploys are automatic. Production deploys happen at least twice weekly post-launch.
- One-week cycles. Monday: plan. Friday: ship. No story points, no velocity tracking, no ceremonies beyond a 30-minute weekly sync.
- Async-first. Slack for communication, Linear for issue tracking, Loom for async walkthroughs. One weekly video call. DMs are for personal topics — technical decisions happen in public channels.
- AI-assisted development. Claude Code (Pro plan) provided. AI-generated code meets the same review bar as human-written code. You'll help define the AI coding guidelines for the team.
- Field-tested in Douala. QA engineer in Douala tests every feature on real devices, real MTN/Orange 4G, and real mobile money accounts. You'll see Loom recordings of how your code performs on a Tecno Pop 8 in Ndokoti at 7 AM, or on a Bonamoussadi-to-Akwa ride crossing the Wouri Bridge at 5 PM.
Compensation & Benefits
- Salary: Competitive, commensurate with experience
- Impact: You're building critical transport infrastructure for ~4.3 million daily Douala commuters — and the same code base serves Kinshasa's 18M-person market when we expand in Year 2. This isn't a CRUD app; it's the product that determines whether someone gets to work safely today.
Apply for this role
Ready to join the team? Fill out the application form below and we'll be in touch.
Apply for Senior Full-Stack Engineer
We review every application carefully. We'll be in touch within a week.