A poultry farming platform running subscriptions, inventory, dispatch, and supply orders as one system instead of spreadsheets. Backend-primary contract, full-stack when it needed to be.
Built RBAC, inventory, dispatch and supply orders, and subscriptions from scratch — staging and production running across admin, services, sales, and UI, with CI/CD wired through all of it. Also owned the offline architecture (backend built, currently in an open PR pending merge) and an authentication architecture overhaul mid-contract — refresh tokens, now merged and live.
Staging came in when the team actually needed a real pre-prod environment to test against — not on day one just because “you're supposed to have one.” Designed and built the subscription and billing system end to end: dual Stripe/Paystack processing behind one abstraction, trial provisioning, upgrades and downgrades, seat-based licensing, and cron-driven renewal and expiration, plus a full billing audit trail.
Auth requests started timing out under load. The obvious suspect was traffic. It wasn't.
The real cause was a @Transactional annotation placed too broadly on the auth path — it held a database connection checked out for the entire call, not just the query inside it. HikariCP's pool wasn't overloaded, it was exhausted: every connection was in use, doing nothing. The fix wasn't a bigger pool, it was finding where a connection was held past its need, narrowing the annotation's scope, and retuning the pool to match real usage instead of guessed usage. Full-service outage, all users locked out, resolved in about 1.5 hours — then written up as a postmortem so the next engineer doesn't have to rediscover it at 2am.
A similar pattern showed up in billing: a successful Paystack payment could leave a subscription stuck mid-update, because the code assumed failures would always throw an exception, then caught and retried. Some failures didn't throw — the data just drifted, silently. Fixed by replacing exception-driven control flow with upsert semantics, so the operation became idempotent by construction. Part of a wider sweep that caught 13 billing edge cases, including a double-charge pricing defect fixed by switching to delta-based billing.
A connection pool is a queue with a ceiling — if anything upstream holds a resource longer than it needs to, that ceiling arrives faster than the pool size on paper suggests. And if a bug can only be patched by catching more exceptions, the bug usually isn't the missing catch block, it's the control-flow model underneath it. Both lessons came from watching real usage outgrow assumptions baked in early.