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.
Here are some 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.
|
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.
|
2019 – Senior Software Engineer |
|
2017-2018 – Software Engineer |
|
2016 – Software Engineer |
|
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.
Decision Theory implementations in Haskell
Exploration of DSL and algorithms implementing decision theories such as CDT and EDT over causal graphs.
Lox interpreter in Haskell
An interpreter for the Lox programming language, from the book Crafting Interpreters.
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
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
- Portuguese – Native
- English – Fluent
- German – Basic