Launching (and open sourcing) a microsite with 20,000 users in the first week

Best Buddies is a microsite I built to find which of your friends like your photos the most on Instagram. Since launch, it's been used by over 20,000 people and has analyzed over 30 million likes by nearly 7 million different accounts on Instagram. The majority of traffic and usage occurred in the first three days after launch.

Soon after launch, Best Buddies was featured on the home page of Product Hunt and stayed on the popular page for close to a week. Best Buddies was also written about in numerous other places, like Business Insider, where it was listed on the home page. It was also shared extensively on social media sites, which was the goal.

Not the worst launch!

When I used to work on political campaigns, I built many "microsites" for candidates running for Congress and state races. While those sites had different goals (like generating coverage in traditional media about an issue), for the sake of comparison Best Buddies had many multitudes larger traffic and usage.


If you look through the code, it's a pretty standard Rails app. Since analyzing each account takes some time, the jobs are pushed into the background, handled by Delayed Job, and polling occurs to find when it is finished.

Images are generated via PhantomJS to make it easy for users to easily share their results to Facebook, Twitter, Instagram, and elsewhere.

Since I expected heavy usage and the need to easily scale, I chose to host the site with Heroku, which I am super glad I did. I've had nothing but good experiences with Heroku and they've written about how I've used their service before with Sweeble.

At one point soon after launch when traffic was high, there were 10 web servers and 50 background servers running. Since the first traffic to it started around midnight, and I was busy with work during the day the next few days, I monitored how the microsite was doing with Heroku's amazing Saber iOS app which let me easily spin up and down servers and run rails console on my phone to keep an eye on how many background jobs were in the queue.

Within a few hours of launch some of the tables had over a few million records and I desperately needed to change an index on one of the tables to speed things up. With Heroku, I was able to scale up the background servers up to handle the backlog until I was able to make the change.

The database is Postgres and has close to 4GB's of data in it now. When I ended up needing to run a bunch of servers to handle the traffic, I was able to easily bump up to a larger database server with Heroku's amazing setup to handle more simultaneous database connections. The total offline time for the site was about 10 seconds during the switch.

Caching is done with MemCachier. Images are stored on S3 and Cloudfront is used as a CDN for assets. Phusion Passenger with Nginx is used as the web app server. Raygun and New Relic are used for monitoring errors and the servers.


Note: All in all, it's just a microsite I put together quickly, so yes, if you look at the code, some of it is pretty ugly. I'm going to open source it anyway in case anyone finds it interesting and to point out that no, you don't need the prettiest code to launch or open source something.

If you have any questions or comments, feel free to ask me on Twitter at @tylerpearson.


The site is located at https://bestbuddies.sweebleapp.com and the code is now open sourced at https://github.com/tylerpearson/best-buddies.


Screenshot