I'm going to be really sad when this whole John Wick pink/purple/neon lighting trend goes away.
2019 Roundup: How Did I Do?
If you want to see the 2018 roundup, you can visit last year's roundup.
2019 has been a bit of an emotional rollercoaster. The first three months were entirely up and to the right. Right around March, things went sideways in two big ways. The big search algorithm update in March took my traffic to almost nothing. With visions of setting $120k on fire, I put all other plans on hold and dove into learning all I could about SEO for most of the summer. In parallel to this dumpster fire, my email list kept growing. I continued just naively sending a single blast to 20k, 30k, 40k, 50k users. It turns out the big email companies don't like it when you do that, and my open rates plummeted just as hard as my organic traffic. Everything was on fire and nothing was working. In the last four months of the year, things have started to stabilize. It's hard to say whether that's because of anything I did, but I'll talk through some of those struggles below.
Before setting some goals for 2020, I wanted to check back and see how last year's goals went.
Finish the New Render Servers
I made a little bit of progress on this in the first few months of the year but put it almost completely on hold once SEO and email took over my life. This goal stays on the list—I'm about 2/3 of the way through updating the current templates to the new system (and then I'll need to dive back into that code and finish/test it thoroughly).
Keep Growing Traffic and Revenue
This was a big failure, but that doesn't mean there were no improvements to the site. This time last year, about 35% of visitors created a preview video. This month, that number is sitting up around 65%. That's a huge improvement to a key part of the funnel. I was pulling in around $0.07 per visit last year, but only around $0.04 per visit this year. So... the funnel got worse?
I would actually say the traffic got worse. I de-ranked completely for my highest converting keywords, and the keywords that I still rank for are just lower quality traffic (in marketing-speak, there's less purchasing intent). Without that near-doubling of intro conversions, I might be making closer to $0.02 per visit.
Start adding new templates to IntroCave
This one is a complete whiff, but it will stay on the list. I was in "hair on fire" mode too much of the year to think about sourcing new content. I reached out to 3-4 animators to talk about creating intros for me, but I didn't progress to the "things actually getting done" stage with any of them.
Create a Knowledge Center for more evergreen articles and tutorials.
It's hard to evaluate this one. The four articles (combined) in the knowledge center get about 1/4 of the traffic that the entire blog gets. Compared to a blog post, that's a great result! The blog drives hardly any traffic, though, so overall I'd say neither one is living up to expectations. Part of this is a writing problem. I need to stop writing about the things I want to write about and write actually useful content that's worth sharing. Good content takes time, though, so that means either hiring that out or cutting the frequency. I already decided last month that the blog traffic wasn't really justifying two posts a month, so cutting that down to once a month should free up some time to work on "hero content" or more templates.
Migrate to a more fully-featured email service and put a welcome sequence in place.
Partial whiff. I'll dive more into what I did with email below, but I was never able to justify this one. With the number of users on IntroCave, most "fully-featured" email services would be in the $400-$500/month range, and (frankly) I still suck at email. Based on my current attribution models, I'm driving an average of around $80 in sales for every newsletter I send. I came close several times, but I think I've basically built my own email service at this point for much less than I would have to pay one of the more managed services. I've got automation and newsletters working pretty much just how I want them, so calling this one a whiff might be a little too harsh.
Grow net income to $45k (in a world without taxes, that would put me on a path to have the loan paid off at the 3-year mark). This is probably a bit ambitious.
"Ambitious" was correct. Net income was about 1/3 of the goal (I'll get more into the numbers below), so this one was a big whiff. I'm not going to set a revenue goal for 2020. Revenue is pretty clearly tied to traffic right now, so I'd like to more tangibly tie my goals to increasing traffic. Part of that is diversification of traffic sources (email, social, ads?), but a big part of it is also going to be doing more outreach and trying to get the IntroCave name a little more out there on the broader internet.
Start work on IntroMaker.com
Whiff. I have some really cool ideas for this and even talked to a couple of people about an exchange of dollars to build some starting pieces, but I just wasn't able to focus on this in 2019. I'm confident in my vision for Intro Maker, but it's hard to say whether I'll be able to make time for it in 2020. 2021?
Make IntroCave better in 2019 than it was in 2018
This one is pretty subjective. From a purely financial direction, IntroCave is performing worse than it was in 2018. I'm going to call this one a success, though. I learned a lot this year, and I'm pretty happy with the site itself right now. I know where I want the site to go, and I'm much closer to that than I was a year ago. From an operational perspective, I'm ironing out some of the more annoying kinks and making the site easier to run. The amount of time I have to dedicate to IntroCave has remained pretty constant, so putting processes in place for the repetitive tasks allows me to do more work in the same amount of time.
2019 Actuals: Email and SEO
I knocked off a lot of small improvements and ran some fun experiments this year, but when I think back over the whole year there are only two things that come to mind: Email and SEO. I worked quite a bit on my Twitter account this year, but arguably that was a response to the organic traffic drop (an attempt to diversify away from search traffic).
A nice customer support person at Mailgun reached out to me around March or April's newsletter blast to say: "Hey, you know most of your messages are erroring out, right?" I didn't know, actually! It turns out once you get above 20-25k users on your newsletter, it's no longer practical to just send them all out in one burst. It certainly would've been more time-effective to switch to a managed newsletter service at this point, but I wanted to figure out how to "do it right."
Email Automation and Daily Lists. When you only send a single newsletter every month, your email server is never really "warm." I send a fair bit of transactional emails for signups and orders, but it's on the order of 100-200 per day. Going from 100-200 per day to 50,000 in a day is just too much. The email providers were categorizing most of my messages as spam. The first thing I decided to do was attack this from both ends. Instead of just a single welcome email, I would add a couple of automated sequences:
- A 3-4 email welcome sequence.
- An abandoned cart sequence (it can actually be kind of hard to find an intro you created).
- A post-purchase sequence.
All of these are good practices on their own, but the real motivation here was to increase my overall send volume so I wasn't starting completely cold every month with the newsletter. I would say this has mostly worked! I added two messages to my welcome sequence and three to a cart sequence. They could use a little performance tuning, but this got my "normal" volume up closer to 400-500 emails per day.
Besides increasing my "usual" volume, I wrote a bunch of code using Mailgun's API to split my "master" newsletter into sub-newsletters. I already had a bit of this built, as I typically segment out a few thousand users into their own lists to run multiple subject line tests. I took that initial code and built a model of a graceful "warmup" ramp starting with a few thousand (which I was safely sending before) and increasing by about 30% a day.
The daily lists were an improvement, but I noticed that things would go for a day or two (up to around 10k emails sent) and then just slam into a wall where everything AFTER that would get marked as spam. At this point, I'd already queued the whole batch of newsletters and there was no easy way to walk it back. The sub-lists were already created and subdividing them further to adjust the warmup rate was not really feasible. Instead of daily lists, then, I decided to divide everything into hourly lists.
Hourly Lists. I built a new warmup schedule. Instead of sending 1000/day on the first day, I would send 100/hour for ten hours. A single list ballooned into 10 lists (or 30-40 for the first day while I was running subject line tests). For a few of these email blasts, I had close to 100 sub-lists and I needed to press the send button on each one individually. It was a mess, but I did this for a couple of months before rebuilding the sending interface to make scheduling a lot easier.
I noticed that at high enough volumes, even the hourly sends would start to get delivery errors when Mailgun would try to send out 2000 emails at once. I rewrote this hourly send code yet again to bypass the newsletter system and queue each email directly. Instead of sending out 2000 emails in one burst with hour-long breaks in between, the system would now divide the hourly volume by 60 and queue that many messages every minute.
This system was much more successful than the daily bursts, but I was still noticing that I would get 10-15k emails into my newsletter and then hit a wall where open rates would plummet.
Current Strategy: Source-Based. It turns out that there's not really a "safe" ramp-up rate. Companies like GMail are constantly monitoring how their users interact with your messages (open/click/spam) and throttling you in realtime. I ultimately abandoned all the list-splitting tech that I'd been building all year (spanning multiple interfaces) but kept the idea of individual queuing. That brings me to my current system, which requires a little bit of babysitting still but seems to be performing well enough.
The first thing that I'm now doing is culling the list. Anyone who hasn't logged in for 3 months or opened an email in the last 6 months is not eligible for the newsletter (although I did sort them onto a slower-sending reactivation campaign). I might tighten this even more aggressively in the future, as it currently takes about 15 days to get the whole newsletter sent out. From the remaining 40k or so users who should receive the newsletter, I split them by "gmail" (most of them) and "other" so that I can throttle these two buckets independently of each other. Instead of queuing days or hours worth of email at once, I now have an hourly cron job. Every hour, it checks to see if any newsletters are active (this is a new database model I built). If there are any newsletters active, it checks their "source" (the "gmail" bucket or the "other" bucket). Each newsletter source has a slider (well, actually a text field) where I can tune that hourly volume or send out bursts of emails. I keep an eye on the open rates and continue increasing volume as long as open rates stay in the acceptable range. If I run into the "wall" that I was seeing with the previous systems, I can immediately throttle back for a day or two and start ramping again from scratch.
My latest improvement on this system is to implement my own internal analytics. Mailgun's analytics are okay out of the box, but they segment data by email tag instead of by the day or by the hour. If your entire newsletter is sent with a single tag, it's not super obvious when your open rates drop precipitously. To correct for this, I was updating the "tag" used in each newsletter every morning ("day1", "day2", "day3", etc). By implementing webhooks on the data I care about, I now have better Analytics that what Mailgun provides out of the box. I can stick to a single convenient tag per newsletter and just filter the data by the last 24 hours.
It's hard to say whether all this trial and (mostly) error has been worth it compared to just switching over to Mailchimp, but it's been a pretty educational year when it comes to email. With the giant traffic drop, I know I would've felt really shitty about spending $300-$400/month on email when the site was only bringing in $800. My current system does most of what those fancier systems do for under $50/month at the low low cost of a shitload of engineering hours from me.
SEO took up a lot of my brainpower in 2019, but it's hard to quantify specific things I did to make the site better. I spent a lot of time reading about SEO best practices and implementing deeply unsexy things like canonical URLs and updated JSON schemas. There aren't really "quick wins" in this area—the only truly effective strategy is to play the long game and try to create quality content and build backlinks. Traffic has started coming back in the back part of the year, so my rough strategy seems to be paying off:
Knowledge Center. I built out a small series of longer-form content that answer some really basic questions. Some of these are meant to draw search traffic and some of them are meant to act as customer support articles (something I can point someone to if they have a question).
Email Outreach. I'm still pretty passive here. I signed up for HARO (Help-A-Reporter-Out) and try to respond to at least 1-2 article requests each week. I started this in June and responded to 38 requests in the last half of the year. It's hard to quantify how many of these turned into articles or links (especially since I don't control that end), but I'd like to continue this strategy and pace in 2020.
It's worth noting that I tried this earlier in the year but gave up until the traffic drop. The HARO emails are pretty noisy (50-100 calls for questions in each email), and it can be pretty stressful to read through hundreds of completely irrelevent questions every day. I started building a tool to better filter/organize these, but ended up finding a Chrome extension called Multi-Select that does most of what I want. After reading through thousands of questions, I have a pretty good idea what keywords are likely to be relevant to IntroCave. Multi-Select allows me to save those keywords and flip a toggle to highlight them all on the page at once. Instead of reading every question (not sustainable), I now open the HARO emails and just scan for highlighted keywords.
Site Speed I've put a lot of hours into improving page performance this year, and I think this is likely the biggest win from an SEO perspective. I still have a few TODOs on my performance checklist (mostly server-side things at this point), but this is a task that is never really "done."
I go back and forth on whether my social media efforts are an offshoot of SEO or a completely different channel. In some ways, it's an attempt to diversify traffic off of the search engines. In others, it's purely an educational effort meant to teach people that I exist and create backlinks.
Aspiring YouTubers hang out pretty regularly in a few places: Twitter, Reddit, and (I suspect) Facebook groups. For now, I'm mostly focusing on Twitter and Reddit. I use them both a ton, whereas with Facebook groups I don't spend much time on Facebook. Reddit's ad targeting is still pretty basic, so I haven't done much there yet. I've done a few organic posts without much success. I've had better luck on Twitter, growing my IntroCave account from around 100 followers back in August to almost 850 today. Twitter's API is great, and I've been able to build some content filtering tools to help me find prospective customers.
In terms of actually diversifying traffic, this has been a bit of a dud. I see a fairly linear conversion of "time spent interacting" to new followers and traffic, but I haven't been able to convert that into much beyond direct responses. One one hand, spending 15-20 minutes a day on Twitter interactions for 15 visits and 3 followers doesn't seem like a good exchange of time for reward. On the other hand, it's something I can do to help the business from my phone whenever I have down time between meetings or while I'm waiting for an Apex Legends game to start. I suspect the flywheel doesn't really get going until your followers are in the thousands or tens of thousands, so (for now) the plan is to keep plugging away and keep experimenting with new types of content.
One thing that is on my mind here: ad spend. I'm not driving a ton of traffic through Twitter yet, but I feel like I have a pretty good handle on who my target audience is on that platform. Rather than spending 30 minutes a day on Twitter, it might be a better use of time/energy to start doing some ad tests on the platform. If I can continue to drive a trickle of traffic and followers (I've averaged around 150 new followers/month since August) for a reasonable price, this is probably a worthwhile thing to automate.
The most successful part of growing my Twitter account has actually been outreach. I talk to a LOT more customers now than I did before through DMs. I've always had a contact form, but getting a question is pretty rare. I get around 2-3 people a week messaging me questions on Twitter, and that gives me a really good chance to talk to current and potential customers. People on Twitter are also not shy about asking for free intro videos. I get similar requests through the contact form or through email, but there's a lot more hassle there—it usually takes 2-3 emails back and for to get info like their YouTube channel and why they want a free video. A Twitter DM is tied to a profile, which usually links directly to a YouTube channel. From the first message, I can size up whether the person I'm talking to is worth my time or not. That probably makes me sound like a complete asshole, but I only have so many hours in the day to work on IntroCave. I've given out around 8-10 free intros through talking to people on Twitter, usually just asking for a link back to the site in their descriptions. I can't say for sure whether this is actually helpful for SEO purposes, but the direct feedback and gratitude I get from talking to people definitely helps with my motivation to work on the site.
2019 in Numbers
For 2019, I worked out that I made around $20/hour for working on IntroCave. I spent about a month getting up to speed full-time on it, but the rest of the year averaged closer to 20 hours a week. I'd say I kept that average this year, minus the 4-week ramp-up. That means I estimate roughly 1,000 hours on IntroCave in 2019. That's against a net income of right around $15,000. That's higher than last year! But on twice as many days... whoops! The big SEO update in March knocked out a ton of my traffic and lead to a pretty large decline in revenue... but I'm optimistic! After focusing on SEO and email for the rest of the year, I'm happy with the direction that traffic is going. This year is slightly better from a cash-in-my-pocket point of view because of a full year's depreciation, but my $20/hour in 2018 has dropped to around $15/hour in 2019.
This net income figure is inclusive of interest, which was higher this year (12 months instead of 6.5). Without interest, I would've pulled in closer to $20k ($20/hour, woohoo!). Between an accounting credit (I bombed the final earnout after the traffic drop) and plowing all of the net cash flow back into the debt, my balance for IntroCave currently sits at -$90k. I'm less nervous about that number than I was back in March.
Reflections After One Full Year
I'd say the biggest thing I've learned after running IntroCave as a side business for a whole year is that things just move a lot slower than I'm used to. Because I started out last year with a dedicated month to work on the site, I never really felt that. I think the product has gotten better this year and I have a clear vision for where I want to take both IntroCave and IntroMaker... but sometimes it feels like everything is standing still.
Part of this is being older and having kids that take up a lot of my "free" time. Some of the things I want to build are pretty ambitious from a technical point of view, and things of that size just take a lot of dedicated time and headspace. That probably means I should be focusing more on the content-related operational tasks (new videos, tutorials, etc) and less on the big huge technical pieces... but I'm not sure I can do the "logical" thing here. I bought the site because I thought it would be fun to work on these big technical challenges, so I'm just not sure if running and optimizing a content treadmill is going to keep me engaged for years. Maybe!
Let's Go 2020!
Enough looking back, let's look ahead. Here are some of my goals for 2020:
- Finish the new render servers (and update all the templates to use the new system).
- Start adding new video intros to the IntroCave.
- Build at least one free intro tutorial (either for IntroCave or IntroMaker).
- Continue using HARO to grow backlinks.
- Continue growing my IntroCave Twitter following.
- Test paid ads at low volumes on Twitter and Reddit.