Last week my company reflect.app launched.
Reflect is bootstrapped. Opposite approach than my last company Clearbit where we raised venture-capital and now have a ~200 person team.
Let me tell you about the ups and downs on our bootstrapped journey...
๐งต๐
I started Reflect in late 2020 after resigning as CEO of Clearbit. My goal was simple: after five years of management I needed to get back into coding.
I wanted to work on a UI heavy app that I personally used everyday.
Note-taking was the clear winner because I love writing.
I coded it on it for six months in a little cabin in New Zealand.
In April 2021 I announced to the community what I was building.
getrevue.co/profile/reflect/issues/introducing-reflect-872703
It felt cathartic. I was making progress. But it was time to bring on more help.
So I started hunting around for contractors.
I tweeted out. @_vojto answered. He'd been building productivity apps, was familiar with the stack, and wanted to lend a hand.
At first @_vojto contracted on the side of his day job. But then he decided to join full-time.
Then we needed some design help. I keep a list of incredible designers that I come across over the years. I've always wanted to work with @Gavmn. I DMed him on Twitter, we got chatting, and he agreed to make the icon.
All this time I was paying for this all out of pocket. While doing a lot of the engineering and product-design myself saved money, it was still costing a pretty penny.
Fortunately I had some savings to draw upon after years of running Clearbit.
twitter.com/maccaw/status/1414708148825382915
It was time to get serious. I setup a Delaware LLC through Stripe Atlas, got a Mercury bank account, setup Stripe, and added a payments form to Reflect.
At this point I realized I'd made a major mistake: I had picked the wrong WYSIWYG editor.
The editor is the life and soul of a notes app. Half of Reflect's codebase is editing.
Building our own editor was unfeasible so I had picked an existing lib. But I had chosen poorly.
The editor I'd picked wasn't really maintained and had bad mobile support. We needed to switch. But this would take months and months of work. Months I could barely afford.
This was a massive unforced error. I kicked myself for not doing more upfront research.
This time I did my homework. I talked to lots of experts including @ccorcos, the first engineer at Notion.
He suggested Remirror, a React framework built around a battle-tested editor called Prosemirror.
We kicked off the rewrite.
We coded and coded and coded.
There was many late nights.
But we were making progress. And the silver lining of all of this was that I met @ocavue, an incredible engineer.
I found @ocavue through GitHub. He was the maintainer of Remirror.
We hired him to help with the editor port. At first he joined part-time, but a few months later he loved it so much he joined full-time.
In June 2021 we finally finished the new editor and started onboarding users.
Although we weren't enforcing charging, people were finding that little Stripe form. Payments started trickling in.
Word started getting around.
Suddenly we had 40 customers and a little Discord community. 3,000 people signed up to our waitlist.
How did people find us? Purely word of mouth through Twitter.
Rather than launch and deal with scaling, we'd release to a limited subset of the community and iterate with them.
That let us hone and polish the experience. Super important for something like Reflect where we live and die by the quality of our product.
We only had one annual plan: $160/year. The fact that it was annual really helped cashflow.
We enforced payments. Suddenly we were making $5k a month, then $10k, then $25k. We were close to breakeven.
But there were big issues. Our mobile client was slow and under-performant.
On top of that we were running into sync issues between online and offline that were sometimes causing data loss.
If there's one thing you can't do with a notes app it's lose data.
So, for the second time, we decided to do a massive re-architect. @_vojto spearheaded this and created a sync engine that would manage conflict resolution.
This was a highly complex project.
We had hundreds of users on the old system that needed to be ported over seamlessly. It was like replacing a tire on a moving car. It needed to happen without a hitch.
It took months, but we finally did it. We deployed. It went seamlessly.
The last step was putting together a beautiful website.
I went back to my list of designers. @jamesm, a product designer at Tailwind, was always someone I wanted to work with. I think he's one of the best designers in the world.
I pinged James on Twitter.
Luckily @jamesm had some spare time between projects. We got designing and a couple of weeks later he created a stunning landing page: reflect.app
So, more than a year later, Reflect is finally launching.
I'm really proud of what we've built, and I hope you enjoy using it.
I've learnt a lot of lessons along the way. I think if I had just been more methodical about framework and data choices we could have saved six months.
But hindsight is always 20/20.
And I'm just so lucky that I met such talented people along the way.
@ocavue, @_vojto, @Gavmn, @jamesm, and @ccorcos.
And all our early adopters who gave us feedback. Thank you!
In the coming weeks I'll do a breakdown of our launch stats and trial conversion.
Follow along if you're curious about bootstrapping your own business.