César Noreña

All work

iFood Staff Software Engineer, Fintech 2021–2023

One card, several balances

Problem

Employee benefits in Brazil arrive as separate balances with separate rules — a meal voucher cannot be spent like a food voucher, which cannot be spent like a transport allowance. The usual answer is separate cards, and the employee carries all of them.

iFood Benefícios had already launched a card that held several of those balances at once. I joined a few months after, and the problem by then was not proving the idea — it was that the mobile product underneath it had to become something a growing team could keep building on, while the money movement behind it stayed correct under rules that are not the same for any two employers.

Approach

A new Flutter app on a clean multi-package architecture with Bloc for state, and Kotlin services behind it — hexagonal, on Postgres, Redis, Kafka and SNS/SQS, running on Kubernetes with Terraform, including the BFF and several of the consumer-facing services.

The multi-package split was the decision that paid for itself. It let the app be worked on by several people without them colliding, and it made a mock API in Dart possible inside the same structure — so mobile development stopped being blocked on whether a backend endpoint existed yet.

A large part of the job was not code. I worked with around ten engineers, from junior to senior, through pair programming, code review and 1:1s. I refactored legacy services to the company's own RFC standards rather than to my preferences, decoupled parts of the app that had grown together, and moved the codebase onto null safety so a class of runtime crash stopped being possible.

Then the unglamorous reliability work: Grafana dashboards that showed service health rather than decoration, and Sentry wired so an error reached the person who owned that code, in Slack, instead of a shared inbox nobody reads.

Result

The app I worked on shipped and carried the product forward — the multi-balance card itself predates me, and what I contributed was the mobile product around it and several of the services behind it.

The architecture held up — decoupling and the multi-package split meant the app kept being workable as the team grew, which is the thing that usually fails quietly. Mobile releases became something I coordinated with product and engineering management as routine rather than as an event.

The mentoring is the part I would point at. Ten engineers who are better than they were outlast any particular service I wrote.

Stack

Flutter and Dart with Bloc, multi-package. Kotlin with hexagonal architecture, Postgres, Redis, Kafka, SNS/SQS, Kubernetes, AWS, Terraform. GitLab CI/CD, Grafana, Sentry.