Last month's lazy update got me thinking a little bit about how I could be lazy more often. I ended up focusing most of my February development efforts on that mission: AUTOMATE ALL THE THINGS.
I send quite a few emails through IntroCave, but only a few were automated (registration and order emails). I started sending out a monthly newsletter when I took over the site, but new signups weren't automatically going into the email list. I've been doing that manually—every month, I would export new signups from the database and run a ruby script to add those to the mailing list 100 at a time. Mailgun doesn't automatically unsubscribe bounced emails, so I would then go and export all the bounces and run another script to add them to my list as unsubscribes. It's not the hardest task in the world, but it's a great example of something a human shouldn't need to do.
Adding new users to the right email list is just a single API call, so it's a bit embarrassing that it took this long to wire that up. Handling the bounces required a bit more thought. I ended up hooking up a new route to listen to Mailgun's webhooks and then firing off an API call to update bounced emails to be globally unsubscribed. Side note: one of my long-running initiatives is to start sending some lifecycle emails (registration help, welcome sequence, cart abandonment, order follow-ups). That makes this code a double whammy in that I'll save about a half-hour each month and it will lay the groundwork for some other things I want to build.
In February, I got 38 support requests. For roughly half of those, I ended up sending the customer a coupon to do another render (recreating an old lost video, changing some text, render errors). I've sent enough of those emails that I can write one from scratch pretty quickly... but I don't actually need to type out the same thing over and over again and attach the same helper graphic over and over again. This month I finally set up a template (Gmail calls them a "canned response"). HubSpot has a mostly up-to-date article on setting up canned responses.
I still need to make a coupon and fill in a bit of text to respond to their specific issue, but I'm hoping my average time-per-response will go from something like 5 minutes to more like 2 minutes. That's an hour or two each month!
I post these recaps near the beginning of each month. I like to include a few stats at the bottom of these posts—top searches, top keywords, and the top-selling previews from the previous month. The searches and keywords come from Google Analytics. I could probably create a report for these in Google Analytics, but I like poking through this data at least once a month anyway.
The "Top Intro Videos" list is a bit more obnoxious. I manually run a SQL query (updating the dates to be last month's start/end) to pull the top 3 videos, but then I need to manually fill in the image, title, and copy for all those videos. This means looking up the template in the database and then copy/pasting about eight fields manually. This is a task that's much better suited to a computer. I went into my admin code and added a new view that renders these for the last 3 months. Using Chrome, I can just inspect a "row" of data and copy the pre-generated HTML instead of writing this by hand each month. I expect will save me around 15-20 minutes every month!
When you add up all these minor improvements, it should save me 2-3 hours each month. That hardly seems worth blogging about, but for me side hustles are all about small incremental improvements. If I can keep chipping away on a bunch of different channels at once (marketing, conversion rates, server stability, customer support), the site will continue to grow in value. Someday it might not be a side hustle!
Top Intro Videos in February