March 29, 2021
I got a surprising amount of work done in the past week on pay-what-you-want! This is good. This kind of feature work is not what I am particularly good at lately: the ratio of “staring and thinking” to “coding” weighs heavily in the favor of the former, and I am guilty of getting bored of staring and thinking and trundling off to some well-scoped problem that I can just crank out in a few hours.
In fact, if you wanted to, you could enable PWYW right now — it’s live in Paid Subscriptions. This is also the kind of feature where me saying “oh I’m done!” presages the majority of the work. Wiring together the billing code and the settings code is the easy part: then it’s like, oh right I need to update four FAQ pages and write a blog post and also most of the subscription interface is built on the assumption that everyone is on the same price so I need to add more details to the NotesModal and also the subscription confirmation email and I’ve been meaning to revamp the premium subscription email to look nice and have GIFs so I might as well roll that into this work and oh this means I need to start slurping up custom plans from Stripe to populate the various modals and emails so — [exhales].
You get the idea. Functionality is the easy part; resisting the urge to just throw the PR over the fence and let it bake out in perpetuity is the hard part. I wonder how I can get better at this: the obvious answer is to have something like a “playbook” for feature launches where I have a pre-baked checklist of all of the various sundries of work I need to do, so as to defray the activation energy of each one. (But then I fall into the trap of thinking that compiling the playbook is worthier work than execution of the playbook itself, in much the same way I spent a week building out a metrics deck and have since stopped actually checking the metrics deck regularly.)
I mentioned focusing on performance a bit last week as well, and thankfully most of that is defrayed now. The two problematic endpoints were the generic subscribers list endpoint (much better now, but will be even better once I denormalize “tags” onto the subscriber object itself) and the generic analytics list endpoint (the improvements to which are not quite pithy enough to fit in a single parenthetical, but I will say this: there is nothing quite so gratifying as poking around a few hundred lines of Python and then changing a single list to a set and having things run twenty times as fast.)
Lastly, the deluge of new users from the ongoing brouhaha has turned into a steady-but-manageable rivulet. I am selfishly grateful for this: there are no more spikes of waking up to fifty emails, but expansion revenue is still skyrocketing. I need to shift some last bits of my day-to-day here to self-service: I still need to manually run commands when writers connect existing Stripe accounts, I still need to manually run migrations when writers shift their payment plans. But doing a few of those every morning is less painful than having to do a dozen of them and answer an onslaught of questions.
Overall, a good week, but one that definitely pushed me to my edge a bit. Now that things are a little less stochastic, I’m spending this week trying to return to routine a bit, and be disciplined with how I’m spending my time instead of being in a purely reactive mode. (This also means a stretch goal is cleaning up my Roadmap, as is tradition. We’ll see if we get there…)