InfoQ Homepage Presentations Functional / Microservices in Real-Time Financials
Functional / Microservices in Real-Time Financials
Summary
Vitor Olivier presents how Nubank has built the system of record based on functional programming principles, the tools they used (Clojure, Datomic, Kafka), the challenges they faced when taking it to scale, and the benefits of their approach, including data science modeling, real-time customer visibility, guaranteed conservation of money, and customer account histories.
Bio
Vitor Olivier is a Software Engineer and Partner at Nubank (Brazil's leading fintech startup). Over the years, he has helped build, maintain, and scale Nubank’s accounting systems, financial products, and securitization strategy.
About the conference
Software is changing the world. QCon empowers software development by facilitating the spread of knowledge and innovation in the developer community. A practitioner-driven conference, QCon is designed for technical team leads, architects, engineering directors, and project managers who influence innovation in their teams.
Community comments
Are the benefits worth the complexity?
by Nick C,
Re: Are the benefits worth the complexity?
by Vitor Olivier,
Are the benefits worth the complexity?
by Nick C,
Your message is awaiting moderation. Thank you for participating in the discussion.
Great to see a presentation on event driven microservices that also looks at the complexities and consistency issues that need to be solved for. Microservices while currently the poster child for the architecture community should not always be the default choice. Vitor if you happen to be reading, what things would you do differently if you had the opportunity to build Nubank from scratch again?
Re: Are the benefits worth the complexity?
by Vitor Olivier,
Your message is awaiting moderation. Thank you for participating in the discussion.
That's a great question! In many ways I actually got the opportunity to build Nubank from scratch (to a certain extent). We just launched a new savings/checking account product (called NuConta) that is mostly independent from our credit card operations.
The big things we did differently:
- Our services tend to be a lot smaller and focused than the old ones
- Each entity has one clear owner through its entire lifecycle (so one specific service is the source of truth for that entity).
- Whenever entities only make sense if you look at them in combination to another, they should reside in the same service (for example a deposit and a deposit redemption)
- Enforcing the rule above makes it so a few services end up being a lot bigger than our average service. The gain, however, is that it's very rare for a service to request mutable data from another.
- Every write comes asynchronously through kafka, which means it has a clear representation of the write request. If the client needs it to look synchronous, we have probing logic to ensure it looks synchronous for them.
- We have a backend for frontend graphql service which was a game changer when developing the app.
- We used react-native, relay, and typescript for mobile clients.
After this stack matures I'll give an update on what we learned from it.
Hope this helps and thanks for watching my video!