December 19, 2017

Running a Side Business as a Programmer: The story of Later for Reddit

How I grew my side project to $1000/mo revenue in just 5 years.

For the past 5 years, I’ve run a website called Later for Reddit. For the past 2 years, it’s actually been making money. Here’s how that happened.

I used to spend a lot of time on Reddit (insert Mitch Hedberg joke here). I also used to spend a lot of time writing side projects, often late into the night. One problem I frequently had at the intersection of those two hobbies was that, when I posted my sweet new thing to Reddit after I finished getting it ready at 2am, it never had a chance of getting seen.

See, Reddit’s ranking algorithm is designed to penalize age; if it wasn’t, the front page would be full of the same thing, day after day. As a consequence of this, posting something at 2am means that by the time anyone is up to see it, it’s too old to gain traction. And so, Later for Reddit was started with a simple goal: help me post the stuff I was up late working on at the right time in the morning.

I launched what was then RedditLater (later changed to “Later for Reddit” to comply with Reddit’s API terms) in 2013, as an entirely free project – just sign in with Reddit, and you can schedule up to one post per week. I put that limit on because it was immediately obvious that without a limit I would quickly be overrun by spammers. After a little bit, I started granting anyone that asked me one post per day, instead of one per week. (I actually put this on the front page – just contact me to get one post per day. Many people did, but I think many more didn’t read that far. Oh well.)

However, even after this I would get requests for more posts, from people who wanted to pay me. For a while, I started offering unlimited posts for $20 per month, paid via Gumroad with sales conducted entirely over email. It took a few of these before I finally decided to add the option to the site at the end of January 2016. My initial pricing followed my informal scheme from previously, with numbers chosen out of thin air: $8/mo for 1 post per day, and $20 for unlimited posts. (I grandfathered in all those people who I had added to the 1/day whitelist. It just seemed like the right thing.)

Uptake of the ability to pay for the service was immediately encouraging, netting some $120 in the first month – not exactly a retirement fund, but a substantial percentage improvement over zero dollars. I spent a few hours on support and maintenance each month over 2016, and by September 2016 that grew to around $400 MRR, which prompted me to start development of a second version of the software, most of which I did during Christmas break in December 2016.

This new version was a substantial rewrite of the entire project. Among other changes:

  • I rewrote the UI as a single-page app, with Typescript+React on the frontend communicating with a GraphQL API driven by Clojure
  • I split the backend codebase into several logical components, which run on independent docker containers. This means that the API, marketing site, dashboard, scheduler, etc. components are logically separated.
  • I re-did the plans to use per-month limits, rather than the existing weekly/daily system. This allowed a lot more flexibility. I also removed the unlimited plan – it turns out that most reasonable use cases are well-served by fewer than infinity posts.

I started testing the beta with a few users (thanks guys!) during January and February, and launched the new version on March 2016.

The new version was a clearly superior product, but coincided with a slight drop in revenue for a few months, which was pretty disheartening. But in May I beat February’s revenue again, and it’s been on a generally upwards track after that. In November I topped $1000 in revenue for this first time, which was pretty exciting.

Today, Later for Reddit is running happily. I’ve just released a round of new features, and am on my way to match November’s revenue. I have dozens of satisfied customers, and over 24,000 people have signed in with Reddit to schedule a post.

Was it worth it?

Yes. But I have the numbers, too, so we can do better than that.

My time spent on the project exists in two modes. The first is active development, during which I probably spend another 20 or 30 hours per month writing code and/or doing marketing tasks and/or writing blog posts about it. The second is passive maintenance, which is most months. This takes a few hours each month, just responding to emails and making sure the servers are still running. I’d guess that, over Later’s almost 5-year lifetime, I’ve spent 6 months in active mode, and the rest in maintenance.

Or, to put it another way, I’ve made about $20 per hour spent on it. Hmm. On the other hand, if I stopped working on it today, revenue would probably keep up for a good long while, so I think in the end I’m making out OK.

Some lessons I took 5 years to learn

Get paid!

I should have installed the feature that let people pay me way sooner. Ideally before the first person asked about it, but certainly before the third or fourth.

In retrospect, it was clear way sooner that this was something that could be useful to people.

Oh yeah, and use Stripe. There’s really no other choice.

Be patient

Software operates on computer timescales. Businesses operate on human ones. I used to get disappointed when I added fancy new features that didn’t immediately bump up my revenue or subscriber count or pageviews. I’ve since learned that fancy new features/marketing are an investment in the long term, and in general won’t pay off until later.

The upside is that adding (good) features and/or creating evergreen content will continue to pay off forever. If you are running a low-bandwidth side project like I am, you should definitely concentrate on this.

GET YOU SOME METRICS

If you’re a DIY software guy like me, I would heartily recommend my current setup: A Riemann instance running along InfluxDB, with Grafana on top to let me make visualizations. All of that runs just fine on one 512MB Digital Ocean instance. I know that part got a bit technical, but you can’t really tell what effect your changes

I have two uses for metrics: keeping track of how the service is running, and providing marketing data. Among the things I keep track of:

  • Post scheduling successes and (especially) errors. This does dual duty as a metric, letting me keep track of the scheduler’s up-ness and providing me with feedback about which posts go where.
  • New user signups
  • Job runs and durations.
  • Conversion-relevant events: card captures, subscription changes, “please upgrade” nag modals shown, etc.

Having good measurements will help you prioritize your efforts.

Keep your tech in check

In 2013, I used Clojure to write Later for Reddit because it was fun and new and exciting. In 2017, I use it because it offers a balance of stability, performance, and rapid development that I think is ideal for people in my position.

That said, I don’t think your stack matters. What you need is software that runs without your intervention! It’s not a side gig if you have to fix it every day.

Marketing is more than cold calling

Marketing is not just advertising and promotion. The shy programmers in the audience might be surprised to learn that you can do a lot of marketing without ever interacting directly with a person, simply by focusing on the product half of the job. Who is using your product? How are they using it? What sort of value does it provide for them? Sure, you can answer these questions by just asking people, but you also can get pretty close just by looking at the data you already have about them.

Another marketing tip that can be done without direct interaction with other humans: Make a related and free tool or utility, which can drive people to your site.

Don’t just trust some internet rando about this stuff

If you must take just one person’s word, don’t make it mine. I recommend you take patio11’s, who was where I am about 10 years ago and has appropriately more insight by now.