At the very heart of Actual is a custom syncing engine. Recently I implemented full end-to-end encryption (not released yet) and it inspired me to audit the performance of the whole process. In the future I'll blog more about using CRDTs for syncing, but for now I'd like to talk about a PostgreSQL feature that enabled a 9-10x performance improvement. Actual is completely a local app and syncing…
I just released a new version of Actual and a big change is a rewrite of the budget table. It might not look like much, but it pays down a lot of technical debt and is a big improvement in many ways. The previous design resulted in a poor user experience despite good intentions. This is a look at how I approach product design and all the considerations you need to think about. First, the before…
I made a big change recently: I joined Stripe as a developer on a team that works on the dashboard. Today is my first day! First, let me say that I'm really excited. I talked to Alex Sexton 5 years ago about joining Stripe, but the timing wasn't quite right. It's always been on my list of companies (which is quite small) that I would work for if I was to make a change. The problem is interesting,…
There's a horrifying realization as you work with software of how fragile it is. Failures can happen almost anywhere, and a lot of code isn't equipped to deal with it. We can at least assume, in JavaScript, that when your code is executing it will keep executing until it either ends or waits for something. Your OS could still crash so JavaScript technically isn't "run-to-completion". That's…
I posted a follow-up twitter thread with a final spreadsheet and learnings. In my last post I showed my process for forecasting costs and profits for Actual based on various metrics. This helps me find much-needed answers to questions like "how much cost for acquiring users can I afford?" I'm new to this and I learned a lot from my first attempt. There's still a lot to improve on though. This post…