http://robots.thoughtbot.com/refactoring-with-an-apprentice