Rulebook.io Postmortem

or How I Learned to Stop Worrying and Finish a Damn Project

After five months of work, my pet project was ready to be shared with the world. I wrote a description, added some fancy screenshots, and submitted Rulebook.io to Product Hunt.

A couple hours later, my post was removed.

Um… say what now?

It was time to do a little detective work. I donned my deerstalker, grabbed my magnifying glass, and… started a chat with Product Hunt support.

I got a response a few hours later:

Talk about an emotional rollercoaster!

Long story short, I reached #5 that day (Christmas! 🎅) with 171 upvotes. Pretty cool!

The rest of this post will mostly be a technical postmortem — feel free to skip to the end where I’ll share some statistics, interesting data, and final thoughts about Rulebook.io.


Postmortem

I started working on Rulebook.io on August 6, 2017. My most recent commit (a small bug-fix) was on December 29, 2017 — all-in-all, about five months of working part-time on this project.

It started as a neat idea: a community-driven website for board-game and sports rules.

Like most other projects of mine, Rulebook.io was born as a Bear note into which I dumped a slew of random ideas.

Bear is ❤️

Surprisingly, a quick Google search for similar projects yielded no results. Turns out, there weren’t any projects that quite aligned with my vision for Rulebook.io. I was off to the races!

One of the first things I did was to spend an afternoon transcribing my notes into a Trello board, and then adding some more concrete technical requirements that I hadn’t thought of initially.

Not exactly an enterprise-level workflow!

My guiding principles for building Rulebook.io:

  • First and foremost, it has to be easy to add a new rulebook. The barrier to contribution should be as low as possible.
  • The site must be mobile-friendly. After all, I don’t often play board games with a computer nearby.
  • Rulebooks should be shareable — meaning users should be able to link to specific sections of a rulebook.
  • The site should be searchable. When users visit Rulebook.io, nine times out of ten they’ll have a specific rulebook in mind, so they should be able to locate that rulebook quickly and easily.

And more concretely, my personal development goals:

  • Write my Webpack config completely from scratch — no starter kits, create-react-app, etc.
  • Figure out how to actually launch a project all the way through… hosting, deployment, DNS management — the whole shebang.

Finally, since I guess we’re doing lists now, here’s the tech stack I used:

Back-end

  • Docker + Dokku (deployment)
  • Redis (caching)
  • Express + Node (server + API)
  • GitHub API (persistence — more on that later)

Front-end

Misc


Over the next five months, I probably spent about 5–10 hours per week on this project.

Here’s what went well, and what didn’t work out exactly as planned.

What went well?

  • I didn’t over-plan. Normally with projects like these, I’ll try to plan everything out and then run out of steam or get bored when I’m finally ready to start developing.
  • In a similar vein, I adopted an MVP-first mindset. After doing my Trello idea dump, I spent some time culling ideas that weren’t absolutely necessary. I attribute this step, which took about an hour, to the project’s overall success. Getting stalled on unnecessary features has burned me in the past.
  • GitHub as a storage platform ended up being perfect. It does raise the barrier to contribute rulebooks, but it’s a great solution, especially considering that I originally wanted to write a whole WYSIWYG editor for editing rulebooks.
  • In a similar vein, I think I did an OK job at streamlining the contribution process. Read more about that process here: https://rulebook.io/how-to-help (Warning: lots of data-consuming gifs on this page).
  • I had fun designing the logo!
  • Docker and Dokku ended up being pretty straightforward to work with (besides some memory issues). While I know I didn’t take advantage of many of Docker’s features, I love that I can define everything I need (dependencies + commands) to build+run my app in one place.
  • DigitalOcean could not have been easier to set up and use, and linking my Namecheap domain to DigitalOcean’s nameservers was positively breezy.

What would I do differently in the future?

  • Caching — this project was my first real, hands-on experience with caching, so I fumbled quite a bit along the way. Initially, my caching coverage was pretty low, so there wasn’t too much complexity. However, as soon as I started hitting GitHub’s rate limits, I had to scale up my caching to cover almost every part of the app. I should have done some heavy refactoring once I realized how much caching logic I had repeated throughout my code. That said, writing the caching code manually taught me a lot about using Express middleware.
  • If I were to do this all over again, I would have put more effort into drumming up an audience before I launched. The extent of my “marketing campaign” was posting about the project on Reddit and Product Hunt. I also started a small, targeted AdWords campaign to middling results:
  • Many people commented that having images / diagrams is essential for rulebooks. I do agree with the sentiment, but ripping images from rulebooks and re-hosting them is problematic. I would love to incorporate a way in a future update to easily add custom drawings to avoid the legal issue altogether.
  • A lot of the architecture I built out around GitHub could have been done easier using existing solutions. For example, most of the static content and config for Rulebook.io lives in another repository (https://github.com/camden/rulebooks) which I query when needed. Today, I would use something like Gatsby to pull in my static files. In fact, I like Gatsby so much that I’m planning on using it to rewrite Rulebook.io at some point in the future.

Public response + stats

Now for the fun part!

The public reaction to Rulebook.io was mostly positive. And (spoiler alert!) Rulebook.io did not become a huge success, nor did it make waves in the board game community. I’m still immensely proud of the impact it did have!

For example:

HOW. COOL. IS. THIS??? CSS Tricks (the CSS Tricks!) tweeted about my project! So rad.

Contributors

I contributed the first 13 rulebooks.

As of writing this post, there were 4 rulebook contributors besides me:

@andrewmassengale — 13 rulebooks
@arnoudplantinga — 4 rulebooks
@rigard — 2 rulebooks
@cardflopper — 1 rulebook

I never could have imagined (although I certainly hoped) that so many rulebooks would be contributed. Feels good!

If you’re reading this, consider adding the rulebook to your favorite game! It’s easy!

More info: Contributors to camden/rulebooks · GitHub

Analytics Data

As of writing these post, Rulebook.io has roughly 50–100 users per month. Not exactly stellar, but I’m super proud that there are actual people out there using my site (probably).

Overview

3800+ individual people visited my site… pretty cool! I often wonder how I can encourage more repeat traffic.

Top Referring Pages

Search Traffic


Final thoughts

A few takeaways:

  • Turns out, knowing what people want in a product is important. There’s even a whole field dedicated to it! Had I spent more (read: any) time doing user research, I believe I would see a higher rate of repeat users. I hope to incorporate plenty of user research and prototyping in Rulebook.io v2.
  • Writing this postmortem was the perfect way to put a bow on Rulebook.io. I plan on doing a doc like this for all of my future projects. Shout out to Piper Chester and Jordan Scales for motivating me to write about this project!
  • Maybe Rulebook.io is not as polished or as feature-rich as I would like, but actually finishing it feels pretty good! Project fatigue nearly killed the project towards the end, but I’m so happy I pushed through that.

Thank you for reading! I’m new to writing posts like this, so I would really appreciate some comments and criticism! ❤️