March 22, 2021
There are quite a few apocryphal quotes around “overnight success taking ten years”, and that’s kind of what this past week felt like: it took me I think around a year and a half to get my first $1,000 MRR on Buttondown (still one of my proudest moments as a developer ever!) and then things happen and I get a marginal $1,500 MRR in the span of a single week. Phrasing this as “MRR went up nearly 25%” is less visceral and more directionally accurate, but also much less fun.
Mostly what that meant was randomization: I wrote last week about my humble ambitions of puttering around on some small paper cuts and tech debt tasks while I set my brain to work thinking about a revised analytics stack in the background. Neither parts of that came to pass: I spent a tremendous amount of time on the operational and onboarding side (pulling in archives is easy; matching existing Stripe subscriptions is less so) and what little time remained was on figuring out what a new revised roadmap would look like.
“Change your roadmap entirely based on an influx of one specific customer demographic” is kind of a giant warning sign, and I don’t think I did anything too drastic: the top two items on my new list are things that I slated for this half anyway, they just seem suddenly new and more important.
A brief digression: Pay-what-you-want is an interesting design space. This is something that I feel like I am perhaps overthinking a bit: there is a bunch of prior art here, with Gumroad being perhaps the most prominent. I am going to kick things off by starting to clean up the Paid Subscriptions page, which is now probably the most ugly of the various settings pages, and then placing in the various setup instructions does a good job of helping me get a better sense of what the data model needs to be: okay, you need a Newsletter.is_permitting_pay_what_you_want
field, okay also a Newsletter.optional_minimum_amount_for_pay_what_you_want
field, and then we need to be able to store the specific amount that subscribers are paying on Subscriber.periodic_payment_amount
rather than just relying on the backing Stripe subscription. This of course begs the question: should we allow PWYW of monthly and yearly? Should the author choose or the subscriber? And so on and so on — and that’s without getting to what the actual interface of choosing an amount looks like.
That was rambly, wasn’t it? My brain feels rambly. I am looking forward to a week — probably not this week, but next week — of calm and return to routine. But this week will be about making sure my head is above water and that the backlog of customer onboards I have on my plate — six, at the time of this writing — remains in the low single digits.
One small coda: Buttondown, despite the huge influx of traffic and growth over the past few weeks, has been at its most stable in a few years. I am proud of this (and, again, a little bit angry that I didn’t take the time to spend a week on stability work in the first place.) The lingering timeouts are just coming from the analytics endpoints now, which is half-known work (no more omnibus endpoints!) and half-unknown work (do I need to start moving some of this to an offline job?)