This week’s podcast features a chat with Vitor Olivier. Olivier is a partner at NuBank (a technology-centric bank in Brazil). This podcast hits on topics from several of Nubank’s recent QCon talks and includes things like: Nubank’s stack, functional programming, event sourcing, defining service boundaries, recommendations on reasoning about services, tips (or tweaks) on the second iteration of their initial architecture and more.
Key Takeaways
- Property-based testing and Schemas (or Clojure.Spec) are complementary.
- Clojure’s functional nature and Datomic’s features are a match for Nubank’s requirements.
- A (micro)service needs to be able to create the full representation of the core feature it’s handling.
- GraphQL is useful to abstract away the distributed system complexity from the mobile (or frontend) developers.
- NuBank’s uses a combination of monitoring and sanity checks in real time at various levels to keep systems consistent. Once an invariant is broken, the system will try to fix it automatically.
- Event sourcing architecture offers time-series debugging and improves confidence in the system.
Subscribe on:
Show Notes
- 1:24 - What is Nubank?
- 2:32 - Compete by continuously improving the product.
- 4:15 - Functional programming a good fit for banking logic.
- 5:30 - Datomic as persistence layer.
- 8:03 - Consistency considerations.
- 9:17 - Accounting view of the world. Maintaining consistency between Nubank’s microservices through monitoring and sanity checks in real time at various levels.
- 14:30 - Functions get applied to incoming events, stored in temporary version of database; perform sanity checks. If sanity checks pass, the changes are committed, if not, check which invariants are broken and try to fix automatically.
- 16:12 - Property-based (or generative) testing to find corner cases. Schemas exist for various types and can be used to generate tests.
- 19:12 - Why use Clojure? Because of Datomic. Clojure makes imperative code look bad; it's useful to stick to functional practices.
- 21:08 - The Nubank team.
- 25:14 - Lessons learned building microservices, both building services that did either too much or services that could have been combined into one.
- 27:18 - How to choose boundaries for microservices. A service needs to be able to create the full representation of the core feature it’s handling.
- 34:39 - How Nubank uses GraphQL. Abstracts away the distributed system complexity from the mobile developers.