Wednesday, November 11, 2009

Lean startup tools for Rails apps

A few months ago I was invited to dinner with the Geeks on a Plane crew when they stopped in Washington, and had the opportunity to meet one of my heroes, Eric Ries, author of the Startup Lessons Learned blog. His descriptions of lean startup techniques and philosophies have had a big influence on the way I design and build software.

Eric asked me what specific tools Rails developers could use when building a lean startup. Here's a revised version of what I emailed in response, garnered while building OtherInbox and other Rails apps:
  • First and foremost, I find Rails itself to be very useful for building a product for a lean startup; the expressiveness of Ruby and the conventions of Rails help developers more quickly build a minimum viable product. I'm still able to surprise people who have worked with me for awhile with how quickly I can turn their feature ideas into
    something they can play with and show customers.

  • For continuous integration, like many Rails shops, we use CruiseControl.rb - it's easy to install and customize, but I don't think people are especially enamored of it. But it works. Two very promising alternatives to rolling your own CI server are Devver and RunCodeRun. I've tried both but our app has grown too complex for either of them (we use a lot of gems and have a pretty customized test environment). For Github users, RunCodeRun exposes a post-commit hook so the tests run automatically after every commit which is pretty useful.

  • Speaking of Github, I'd love for them to implement pre-commit hooks, because then you could prevent developers from making commits any time the build is broken, which prevents people from ignoring problems in a large code base and just tunneling on building their one little feature. Right now if you want to implement this, you need to setup your own source control repository that can talk to the continuous integration system.

  • To monitor exceptions, we use the excellent Hoptoad app. This tool adds a lot of context to bug discussions, because nonprogrammers can reference the exact Hoptoad URL containing all of the information a programmer needs to fix a bug (including backtraces). Because it has an RSS feed, one could also use "Unresolved Hoptoad Errors" as a metric influencing the continuous deployment system. If a release goes out and suddenly there are new errors, that's a sign that the batch was bad and needs to be reverted. There's a drop-in Rails plugin but this service could be used with any language.

  • There are two A/B testing plugins for Rails: 7 Minute ABs and A/Bingo. I haven't used either and am not sure there are any better than rolling your own. Update: Charlie Park in the comments mentions the new plugin Vanity which came out just after I wrote this.

  • There are several good unit testing frameworks for Rails, each with their own devotees. What comes with Ruby and Rails is plenty good enough but some people like the greater expressiveness afforded by things like Rspec and Shoulda. For my next product I'd like to try Shoulda because it uses Ruby's built-in test facilities (making for one less dependency to worry about, as is the case with Rspec) and because I really like the examples I've seen on the Thoughtbot blog.

  • We love Cucumber for higher level testing. When coupled with Webrat, which simulates a real browser, you get a pretty nice mechanism for exercising the entire app in a test environment before deployment. Webrat even has a Selenium adapter, so you actually can run your tests inside of a browser to make sure all is well before deploying a change.

  • This isn't Rails-specific, but we use SimpleDB for dumping a lot of important metrics data, like performance measurements, which we then turn into metrics. This keeps us from having to hit our database too much. The RightAWS gem makes interacting with SimpleDB pretty easy.

  • For our metrics we mainly use Graphite, the graphing and analysis system open-sourced last year by Orbitz. Our whole team is falling more in love with it every day.

  • New Relic has a nice plugin for Rails that reports all kinds of useful data to their service, which could become part of a cluster immune system for Rails apps. They measure average responsiveness and compute an aggregate statistic called Apdex which can be a good indicator of site health (at minimum, any significant changes to Apdex should be investigated, and they will email you alerts about such changes).

  • Capistrano is still the standard way most developers are deploying Rails apps (but also check out Vlad the Deployer), but I think there's an opportunity for someone to build a Ruby library to facilitate continuous deployment that would work better than Capistrano. It would definitely be built using Rake like Vlad does.

  • Update: I haven't used Heroku, but as Ryan points out in the comments it definitely belongs on this list as a compelling, get-up-and-running fast deployment platform.


Anonymous said...

I'm near baltimore, and very creative as yourself. I'd like to network with you and see where things go..........
I'm a lighting audio and video designer...

Ryan said...

I thought Heroku would be on your list.

charliepark said...

A new A/B testing tool for Rails is Vanity:

Brian Armstrong said...

Yeah Heroku is great for getting an app up for free. Can't beat that in terms of bootstrapping.

Another one I'm testing lately is which solves the often difficult problem of mail server setup on a new app.

Anonymous said...

Your Capistrano link is mistyped - it should be, not :)

Mike Subelsky said...

Ryan, you're right, I just added it.

Charlie, thanks for pointing out Vanity, looks really cool!

StartBreakingFree, also looks like a worth addition.

Anonymous, thanks for the typo, I just fixed it!

Jay Godse said... is excellent.

Rack-bug is a great tool to help debug apps.

Unknown said...

An alternative for CC.rb is Signal and an alternative for Capistrano is Inploy. I think the seconds are much more simple and powerful than the firsts.

emu boots said...
This comment has been removed by a blog administrator.
NBA basketball shoes said...
This comment has been removed by a blog administrator.
Anonymous said...

We have full range of Nike shoes,The famous Nike Air Force One,Kinds of Nike women shoes and the Nike men shoes,Lightweight Nike Air Max 2009,Advanced technology Nike Air Max 90,Fashion cute Nike Air Max Women 2009 and Nike Air Max Women TN .

Chris said...

but whatev the case wholesale ed hardy shoes ,We'd love to know if MaxMara approv of Hudgens' reinvent of their classic black gown nike shox R4. in do so, the young star found herself at the forefront of a new style trend that' sweep through Hollywood -- glamor mini dress with diaphanous, nike air max 2009 drape skirts. Kristen Stewart first sport the look at the Costum Institut Gala in May nike air max 2010, and though her daring, sheer Chanel Haut Coutur gown divid the fashion community, wholesale nike air max we see it as the style-savvi star mere show how fashion-forward she is.

Unknown said...

Good post!As i was passing by here and i read your post.
It's quite interesting.I will look around for more such post.Thanks for sharing.
nike outlet
nike shoes outlet
all star shoes
nike shoes
adidas outlet

Good post!As i was passing by here and i read your post.
ED hardy clothing
ED Hardy Outlet
ED Hardy
online ED Hardy
ED Hardy cheap

Gucci bags
Gucci handbags
Gucci outlet
sale Gucci
Gucci store

sasha said...

where from I can get discounted Shoes uk?

Unknown said...
This comment has been removed by the author.
Unknown said...

well i was killing My time on surfing the UGG Australia I always prefer to read the quality content and this thing I found in you post.

Jively said...

All apps need to be load tested at some point, the amount of new startup webapps that simply don't scale or can't handle volume when they reach critical mass is quite poor. Saving money in the long term from having to re-architect your solution later is worth it.

Would be good to have a load testing solution in the list, such as Loadzen, which offers low-cost, high-utility load testing solutions for startups.