First, a brief 2019 recap
We launched Tuple (a remote pair programming app for macOS), in January of 2019.
We began with a closed alpha of ~12 teams, and invited new cohorts from our waiting list every month or so. The app was invite-only until October, when we finally launched a self-serve sign up flow. (If you’re an indie hacker thinking you need to build out a sign up process early on, please consider that we hit five figures of MRR without so much as a pricing page.)
Overall, 2019 was about rapidly shipping basic, tent pole features: webcam support, 3-way calls, dual cursors, a marketing site, and similar.
At the end of the year, the team was still just us three cofounders, and the business felt fairly simple.
And then, 2020
The Ides of March
When we founded Tuple in 2018, it felt clear to us that remote development was on the rise. We figured the market would grow a bit each year, and we could create a nice little business serving this small but growing segment.
By the start of 2020, it looked like we had been correct: we had hundreds of happy, paying customers. If you’d asked me how the business was doing, I would have described our growth in enthusiastic terms.
Then, March happened.
Suddenly, the percentage of developers working remotely rose to “approximately everyone.”
For us, several things blew up at once:
- Our largest customer told all of its thousands of developers to immediately start working from home, and to use Tuple to support their frequent pairing practice. The intentionally-naive architecture we used to display the list of online users promptly fell over, taking the service offline for nearly everyone.
- What had been a slow trickle of inbound inquiries for our Enterprise plan turned into a torrent, and I was suddenly staring at an inbox full of leads that wanted to go through a full sales process.
- Our support volume tripled.
And so, we scrambled:
- We dropped everything to focus on the scaling issues. We spent a hectic day pushing out hotfixes and constantly refreshing performance graphs and background job queues. If you’d like a full description of that crazy day, check out this podcast episode.
- We hired a part-time sales person to take that responsibility off my plate (thank goodness).
- We started devoting a large chunk of time to getting through the support queue each day. Later, we hired part-time help here as well.
Fortunately, by the end of the month, we felt like we had things under control. We’d hired where needed and made our infrastructure more resilient. The business itself was also healthier: in March, we added more revenue than we had in the 14 previous months combined.
It feels weird to acknowledge that we benefited from something so terrible, and I’d trade this reality for one in which Covid never happened in a second. That said, I’m grateful that we were able to provide something that made this year a little easier for folks. We get messages nearly every day saying that pairing over Tuple has made mandatory working from home a bit more tolerable, and that feels great.
We added three awesome people to our team in 2020:
- A full-time macOS engineer, Mikey.
- A part-time sales person, Adam.
- A part-time support person, Lito.
Honestly, I had been skeptical about hiring until this year. We’re programmers wielding the awesome power of automation through code! Surely we could get by with just three founders, right?
Sure. Kind of. Except for two things.
First, we were getting close to burn-out. The huge influx of customers in the Spring didn’t just stress our infrastructure and support process, it added mental stress. Tens of thousands of people were suddenly relying on Tuple to get their work done every day. Bugs in production could mean widespread disruption, and we started to feel anxiety around shipping new things. We were also feeling the pain of the tech debt we’d created in 2019, and taking on the necessary refactors was similarly scary.
Second, while I intellectually grasped that adding people to our team would improve our capabilities, I hadn’t truly internalized just how big a difference it could make: Mikey, Adam, and Lito have improved our product and company.
Just one example: they’ve taken difficult work off our plates and done it better than we could. The parts of the sales process that drove me crazy barely bother Adam at all. Mikey dove into our large-scale refactorings and rewrites without fear. And Lito cranks through our sizable support queue while remaining pleasant and helpful.
On top of that, working with these folks has made our day-to-day experience far more fun. Turns out working with great people just makes things straight-up more enjoyable. Consider me a convert to the power of adding awesome people to your team.
If 2019 was about quickly shipping the first version of lots of features, 2020 was about coming back to battle-harden those things.
In 2020, we shipped near-complete rewrites of huge chunks of the Tuple client:
- We completely redesigned our UI.
- We massively refactored our signaling code (responsible for handling connections between clients).
- We fleshed out our three-player mode.
- We overhauled our mouse and keyboard handling.
- We rewrote much of our audio-handling code.
On top of these large-scale rewrites, we fixed a ridiculous number of bugs and crashes (turns out a real-time streaming application written in C++ that interacts with native OS APIs is, well, a bit tricky). We add more automated tests each month, and each production release is now reviewed by our QA firm before going live.
Fortunately, this hard work has paid off: we’re seeing fewer crashes than ever, and our median call quality rating is a preposterous 5 out of 5.
To be completely honest, I wish we’d shipped more large-scale user-facing features in 2020. But with our cleaner codebase, I think we’re well poised to do a ton of it next year.
A bright future
I think 2021 is going to be a great year for Tuple.
We’ve got a strong team, a clean codebase, and infinite runway. I can’t wait to tackle some of the larger projects we’ve been dreaming about for years now.
Also, I’m having a great time working on this company. My cofounders are amazing, and our team just keeps getting stronger. What’s more, our customers continue to blow me away with how kind and helpful they are. I’m so glad I get to work on something that’s attracted such a great group of users.
I’m excited about the future, and I hope you are too.
Thanks for reading!