Gustavo Bicalho

Professional experience

08/2022 to Present – Software Engineer @ LiveFlow

Using Elixir and TypeScript to build tools for accountants and finance teams, integrating with accounting systems and spreadsheets.

11/2015 to 04/2022 – Software Engineer/Senior Staff Software Engineer @ Nubank

Designed and implemented systems for NuConta, the company’s digital bank account product, which I helped build from scratch. In 2022, NuConta had over 50 million customers. I contributed architectural decisions and code to the whole stack and lead technical decisions for our core backend services.

As a Staff Engineer, I built a team to own NuConta's product platform: the core services, UX and tools to provide a solid base for all the fancy features a modern bank account can provide.

I worked mostly with functional programming building microservices. I also did some frontend development now and then. Here is some of the tech I have used:

  • Clojure (and ClojureScript), TypeScript and Dart
  • DynamoDB, Datomic, a little bit of Redis for caching.
  • REST and GraphQL APIs, and Kafka for asynchronous messaging.
  • React Native and some Flutter to build mobile UIs and re-frame to build internal tools.

Over the years I have worked on a lot of stuff. Click here to see some highlights: Here are some highlights: You can find a more detailed list of highlights at https://gusbicalho.com.br/cv.html#nubank-highlights.

2021/early 2022 – Staff/Senior Staff Software Engineer

Technical leader in NuConta's product platform team, writing code and design documents, setting priorities and assisting and mentoring other engineers.

  • Planned and led large refactors to adapt NuConta systems for use in other countries. This internationalization effort required deep knowledge of existing systems, a lot of upfront planning and good documentation to ensure all stakeholders were aligned.
  • Developed a Clojure-based DSL to build server-driven UIs with Flutter. This allowed much of Nubank's mobile app behavior to be defined in backend services, such that many features can be implemented without an update to the mobile app.
  • Developed a TLA+ model of a critical banking system, in preparation for a refactor.
  • Designed and led implementation of a scalable materialized view of a customer timeline, using AWS DynamoDB.
2020 – Staff Software Engineer

Founded NuConta's product platform team. Identified sources of operational and scaling problems and worked to solve them. Mentored engineers and onboarded new team members, including the team's Product Manager and Engineering Manager.

  • Planned and built a service to track money movements related to canceled accounts.
  • Refactored core systems to support freezing assets automatically in response to court orders.
  • Implemented a transparent caching layer for NuConta's Backend-for-frontend.
  • Developed parts of Nubank's Pix integration.
  • Reorganized and led NuConta's technical discussion forum for a quarter.
2019 – Senior Software Engineer
  • Worked on integrating NuConta with MasterCard to provide Debit cards. This also required large refactors to Nubank's card management systems.
  • Implemented an on-demand materialized view for the service responsible for calculating account balances, to improve performance and reduce scaling costs. Wrote a public blog post explaining the solution.
  • Talk at Clojure/south 2019: Consistent updates in Datomic.
2017-2018 – Software Engineer
  • Worked on prototypes and MVP development alongside designers and other engineers to build NuConta first version.
  • Worked on the mobile UI for NuConta, built with React Native using TypeScript.
  • Contributed to many core microservices in Clojure, including accounting systems, transaction processing and a GraphQL-based backend-for-frontend.
  • Developed back office tools used by Nubank customer service using ClojureScript.
2016 – Software Engineer
  • Developed systems for managing collections: actions to get in touch with customers that did not pay their credit card bills on time.
  • Investigated and fixed multiple bugs in payments processing and accounting.
  • Built back office tools for customer service analysts working in collections.
2014 – Lawyer @ FCDG Advogados

My brief stint working on corporate and contract law, right after I got my Law degree. It turned out I really wanted to build stuff, and I found that that career would not be a great fit.

After I left FCDG, I took a year off before I started my career as a Software Engineer at Nubank.

Side Projects

I am a big fan of the Haskell programming language, having used it in multiple small side projects. I am also interested in interpreters and distributed systems. Here are some interesting things I have built outside of work:

uncertain-gantt - estimating project time under uncertainty

Given estimates of duration for each task in a project and the dependencies between these tasks, we can estimate the duration of an entire project.

Estimates are probability distributions, instead of single numbers, therefore we can talk about "what are the chances of this being done by May?" instead of simply "when will it be done?"

I have used this to successfully estimate the duration of large projects at Nubank.

Code available at GitHub.

Decision Theory implementations in Haskell

Exploration of DSL and algorithms implementing decision theories such as CDT and EDT over causal graphs.

Code available at GitHub.

Lox interpreter in Haskell

An interpreter for the Lox programming language, from the book Crafting Interpreters.

Code available at GitHub.

Core Join Calculus implementation in Haskell

Minimal, local implementation of the Core Join calculus, as described in The Join Calculus: a Language for Distributed Mobile Programming

Code available at GitHub.

Education

2009 to 2014 — Law degree at Universidade de São Paulo

2006 to 2008 — Information Technology technical high school at Universidade de Campinas

Talks and writings

Personal blog at https://gusbicalho.com.br.

I write on diverse subjects, including programming and rationality. Some of the content is in Portuguese. Built with Hugo

Consistent updates in Datomic databases @ Clojure/south 2019 (video)

Described the consistency models available for Datomic-based applications, along with tips for how to take advantage of them without compromising consistency.

Building NuConta @ QCon São Paulo 2018 (video in Portuguese)

The talk about how we built the bank account product at Nubank had the second-largest audience in the conference and 94% of approval.

Languages