Heading image for post: Open-Sourcing Today I Learned

Hashrocket Projects

Open-Sourcing Today I Learned

Profile picture of Jake Worth

Today I Learned is an open-source project.

Before we introduced Today I Learned, it was a small Rails application with a handful of posts. Few people within the company had even seen it.

Here is a screenshot of the site, pre-Hashrocket makeover:

Original TIL

Today, this application features over 500 posts from Rocketeers across the company. We have written about Vim, design, Rails, Ruby, testing, Bash, Git, HTML/CSS, JavaScript, Clojure, SQL, mobile, DevOps, Go, Elixir, and Ember.js. It's been awesome watching this project grow. Learning and communicating every day is a part of the Hashrocket culture, and this site helps us do that.

We've decided to open-source the codebase. In this post, we'll cover the rationale behind this decision, as well as the steps we took to prepare. I hope it helps people who are considering open-sourcing their own work.

Rationale

Open-sourcing a private project is a decision that deserves some serious thought. We've gotten a lot of requests to publish this code, so it was on our mind from the beginning. The application has even been impressively reverse-engineered in the meantime.

The idea was always intriguing because open-source is a core idea at Hashrocket. Our tools are mostly open-source, and we try to give back to that community.

A second argument was that some of the features of TIL are pretty nice— it is well-designed, includes Slack and Twitter integration, has an RSS feed, and features a very simple, useful post creation page. We wanted to share the implementation of those features.

That somebody else might contribute, including aspiring Rocketeers and junior developers trying to get into open source, won the day. If somebody used this repo as inspiration to build something new, that would be awesome. If that's your intention, fire away!

Step 1: Create Pivotal Chore

Because we used Pivotal Tracker to build this site, building a Pivotal chore to track the progress toward public release was our first step.

Here is our TIL Pivotal project:

https://www.pivotaltracker.com/n/projects/1299990

Having something to attach commits to increases transparency. By adding #[<Git SHA>] to each commit message, combined with a Github integration hook, all our progress could be tracked in the Pivotal story.

Step 2: Generalize Documentation

The TIL README was targeted at Rocketeers; generalizing it included:

  • Adding generalized setup instructions and language
  • Moving as many Hashrocket-specific variables into environmental variables as possible
  • Adding contributing guidelines
  • Adding a license
  • Adding a changelog
  • Tagging v1.0.0 via Semantic Versioning

Synergy Alert! We wanted people to be able to find the repository from the site, so we added a link in the footer. We wanted people to be able to find the site from the repository, so we added a link in the Github repo.

Step 4: Scan the Repo

As a security precaution, we did a general audit of the site, upgraded to the latest versions of Rails and Ruby, and ran Brakeman against it.

We also scanned the code for usernames, passwords, and API keys, removing a few files that were no longer relevant. This is pretty simple if you think about security from the first commit. If you do encounter a file in your repo you shouldn't have checked in, change your passwords and keys immediately, then follow this guide:

Github Help - Remove Sensitive Data

Step 5: Add Metrics

An open-source project should have transparent metrics, so we added Circle CI, SimpleCov, and Code Climate to help evaluate our builds.

Step 6: Release

You are here. After completing all the other steps, we tagged the last commit and clicked 'Make this repository public' on the Github repo's settings page.

Conclusion

Today we covered why we open-sourced TIL and the steps we took to get there.

Thank you to everybody who helped build this application and its content. Thank you to our readers and retweeters. I hope people find the code interesting, consider building their own TIL or contributing to ours, and continue learning and communicating every day.

More posts about Hashrocket Projects

  • Adobe logo
  • Barnes and noble logo
  • Aetna logo
  • Vanderbilt university logo
  • Ericsson logo

We're proud to have launched hundreds of products for clients such as LensRentals.com, Engine Yard, Verisign, ParkWhiz, and Regions Bank, to name a few.

Let's talk about your project