Welcome to “How It Started”, a feature where I talk about how different sites around the internet were built to give an idea of what’s involved in a real world web application. I hope to illustrate that some of the biggest websites today had very humble beginnings that are achievable by learning the basics of web development.


The first site I want to look at is Ravelry, an online knitting and crocheting community site where users can share and track projects they’re working on and talk about different topics of interest with others in the community. It currently has over 4 million registered users (one of them being my wife) and is a very popular niche site on the internet. I think this site is a great example of bringing technology to niche markets.

What It Did

Ravelry has grown a lot since it was first launched in 2007. Back then, all users could do was keep track of what projects they were working on and the supplies they had to do it with. Basically, it was a very simple CRUD app for knitters. From that, it quickly added features during the beta test and has continued to expand to include a built-in forum, a knitting pattern marketplace, a database of different yarns and contests and meetups for its members.

© Jessica Forbes

The idea was originally born in 2005 and is immortalized in this blog post: Knitters! Help! From those humble beginnings, Casey Forbes and his wife didn’t get serious about it until about 2007 when Casey spent a couple of months of nights and weekends working on the site and putting out a less than 100 user beta program. Once it went invite-only, the number of requests for new members skyrocketed. By using an invite system, Casey was able to add more hardware and fix performance issues on the site incrementally while adding new users slowly over time.

Ravelry is a great case study showing that you can learn the basics to get something live and then grow your site and your skills as your users request more features.


Casey built Ravelry in Ruby on Rails, a language Casey wanted to learn. Casey worked a day job as a Java web coder but was getting a little sick of it and wanted to try something new. Knowing that doing is the fastest way to learning, he took the idea for Ravelry and put a site together in a few months of nights and weekends. It was a very typical CRUD app setup with Ruby on Rails connecting to a MySQL database.

The front-end is still very simple even today and shows that even popular sites don’t need fancy, cutting edge functionality. It’s mainly XHTML and CSS with a little bit of JavaScript for a couple of dynamic UI elements on the pages. Prototype is used to help build a lot of the functionality and handle in-page calls back to the server.


When Ravelry was first launched, they used a single virtual server, called a VPS, or Virtual Private Server. VPSes are cheap because multiple users are on the same physical machine, but it looks to each user as if they are on their own server, which improves security and reduces downtime over a Shared Host. These servers are usually under powered for big applications, but the wonderful thing about web applications is, you can handle performance problems when they come up, not dump a bunch of money into a large infrastructure “just in case”.

As Casey said in an interview with Tim Bray:

It would have been silly and expensive for us to build out our systems before we needed them, so we started with a small VPS.

This carried them along until they needed something bigger. In March of 2007, they moved to a larger dedicated server and they’ve just been growing from there.

So What Was Involved?

Right out of the gate, Casey needed to know:

  • HTML
  • CSS
  • JavaScript
  • Ruby on Rails
  • MySQL


  1. Casey had some web skills already, but Ruby on Rails was brand new to him.
  2. Start small and grow from there. Most of the features and high-end servers came later once they were off the ground, were getting user feedback and had raised money.
  3. Getting feedback early is important. They wanted to build a community site and you need to invite the community in to help build it.

Other Sources