Joining Stripe

April 6, 2020

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, lots of great people work there, and they are remote friendly.

This comes with a tinge of sadness, though. Over 3 years ago I quit my job to explore contracting and focus more on building a product. That product eventually become Actual, and I focused hard on it for the last year and a half. "Getting a job" feels like quitting.

I've struggled to identify my goals. Am I a startup? Should I get funding? Do I need to find a cofounder? What happens in 5 years?

The truth is: I love building products. I love talking with customers and solving their needs. I love figuring out how to market it. But when it comes down to it, building a business is not something I want to do. There's so much work involved and it's just too stressful for my family.

I had a goal of reaching 1000 users which would start to be financially sustainable. It seems like a modest goal, but I've learned how hard it is to actually sell software. I've only reached 155 users, and there's tons of reasons why I haven't grown faster. The biggest problem is trying to do this alone — besides amplyifying my weaknesses, there's simply too much work to do.

I didn't want to do it alone, but I failed at finding a cofounder or somebody who would be significantly involved without funding. I thought about getting funded, and even talked to a few investors, but it exposed my feelings deep down that I didn't really want to be in the business of building a business.

I just want to make a great product that users love. And I'm going to keep doing that.

What does this mean for Actual?

In short: Actual is still very much alive, but I won't have as much time to work on it. Let me try to explain why that might be a good thing.

Actual is a personal finance tool focusing on providing the most power and flexibility in the simplest tool possible. The simplicitly is expressed in a fast and streamlined UX, and the goal is to provide powerful tools for managing your finances how you like (choose your budgeting method, write custom reports, and more).

Actual is the hardest thing I've ever done. I like to rethink things from the bottom up, and Actual is no exception. Inside of Actual is a syncing engine that keeps all of your data local and uses smart techniques for robustly syncing changes across devices. There's so much cool stuff in there, like end-to-end encrypting the changes so you have full privacy.

The entire app is what's called "local-first": literally everything is happening against local data, and syncing to the cloud is just a background service that happens when it can. This changes everything.

One of the biggest advantages is the app is super fast. Since everything is local, reading and writing data is stupidly fast. You can try the app for yourself here.

It's all custom built because nothing out there met all my requirements. And I don't regret building it at all. I'm confident that I wouldn't be able to do everything I've done with anything else.

Just a sampling: full undo/redo (like, the real thing, not some cheap version), running the app in the background that multiple tabs/windows connect to, using the app with literally nothing going over the network, and lots more.

Note how all of these benefits are user-facing. I wouldn't invest so much in this if I didn't think it made a huge impact on the capabilities of the product itself. A driving motivation for this architecture is the ability to write custom reports in a simple language, and it'll be easy since it has access to all your data right there.

The thing I'm most proud of is that the syncing engine has reached almost 100% stability. Any problems are now caused by external factors, like a bug in the code that initially downloads your data when logging in. The layer that actually commits changes and syncs them across devices is nearly 100% reliable: if you make a change, sync to the cloud, and sync other devices, you are guaranteed to see the same data. And it's all totally seamless.

Unfortunately, it's costly to build things up from scratch. Here's what surprised me: writing the code itself didn't take too long. However, when you've done something different, it takes a lot of work to explain it to users and build up a coherent UX.

For example, now that everything is local, what does the login process look like? Do I authenticate a user, and then get them to manually copy over data from another device to get started? Well… of course not. I built a system for tracking which files are available to download, but what happens once you're all set up if you use "reset sync" on one device? "Reset sync" deletes all syncing info and starts fresh, but now other devices won't sync and need to be re-setup.

It sure would be nice if I didn't have to worry about all this, but moving fully to the cloud just gets rid of too many nice features. I had to rebuild the whole user experience for managing data, write documentation, and explain all of this to users, which took far too long.

I want to focus more on the features of Actual itself. And here's where my new role might help: now that I'm not betting my family's income on Actual, I don't need to worry about a lot of things. I can focus more on the product itself.

It impacts all decisions around Actual. For example, I was going to raise the prices to somewhere around $7/month for annual plans when bank syncing launches. I still plan on raising prices, but not as much.

Bank syncing is still going to launch. Custom reports is still going to launch. I have a lot of improvements already done and coming soon. I'm still working on scheduled transactions. Actual isn't going anywhere.

There's no getting around the fact that I won't have as much time for Actual. To my existing and future customers: it's up to me to prove that I am still going to work on it and make it worth your subscription. I fully intend to do so. There's no way I'm going to let a multi-year investment into such an awesome product die.