My talk (Using MetricFu to make your Rails code better) went well. I'd say there were 200ish people in the crowd and they all seemed to enjoy it. There were a bunch of questions and some verbal commitments to contribute to MetricFu.
Rails in the Large: How We're Developing the Largest (Enterprise) Rails Project in the World Neal Ford (ThoughtWorks), Paul Gross
Full disclosure: Paul and Neal are friends of mine from my ThoughtWorks days.
The talked about the trials and tribulations of developing a very large Rails project over a few years. The project is called Online Vehicle Exchange (OVE) and it's a sort of EBay for car dealers (it isn't open to the public).
The have 11 dev pairs (22 devs). And started out with mac minis but later switched to mac pros -- they probably should have switched over earlier.
Testing:
Fully disconnected unit tests. They use UnitRecord (which reads your schema.rb file to). If you accidentally hit the db then UnitRecord fails the test
They run 9000 unit tests in 41 seconds.
The run 4000 functional tests in 248 seconds. There is no mocking the db in functional tests. Now tests that hit the db are slow so they had to invent some strategies for
They use Deep Test (open sourced) to parallelize your test suites. 8 cores on a mac pro -- so 8 parallel test runners. They also used Distributed Deep test (also open sourced) - to run the tests on another computer. They had 3 linux boxes in the corner that just ran tests from developer mac minis.
Selenium grid (more open source) was used to spilt selenium across multiple cores and machines. As many boxes as you want to parallelize out the tests.
Always fight the battle to keep tests fast.
They used a projector to throw Mingle up on the wall so they can keep an eye on the cards and the progress of the iteration.
They wrote cc_board -- an open source project that aggregates multiple cc.rb instances to give an overall view.
jukebox.rb -- plays a song when the build breaks and random music other times.
No email installed on the pairing stations -- giant time sink.
Software is more about communication than technology.
Co-location Rocks (war room style programming)
Pairing is vital to this large project so that everyone has some idea of what's going on.
One click deployment to any environment. Rake commit to check in (runs all tests then commits for you).
They used radmind to keep all of their mac's software identical to each other.
Monkey patches for the project live in a specific folder and are modularized.
It took 1 pair 6 weeks to upgrade from Rails 1.2.3 to 2.2 -- Large projects can be tough to upgrade.
Interfaces are Dumb (and that's a Very Good Thing) Erik Kastner (Wine Library / Meta | ateM)
Electricity -- has a dead simple interface. Plug it in and it works.
Your APIs should be the same way.
Why expose an API? You are not as smart as the collective intelligence of all your users.
Twitter and Flickr both have really easy to use APIs. It's probably responsible for some of their explosive growth.
GitHub has a webhook that will post every time someone pushes to a repo.
Keep in mind that the map is not the territory. A developers mental map often does not match the users mental map. This leads to API confusion. Make pains to keep your API simple and solicit lots of outside feedback when people start using it.
Time for Uncle Bob's Keynote now...
Subscribe to:
Post Comments (Atom)
About Me
Backstop Solutions (current job)
Obtiva (old job)
ThoughtWorks (old job)
Object Mentor (apprentice)
Apprenticeship at Object Mentor Blog
Obtiva (old job)
ThoughtWorks (old job)
Object Mentor (apprentice)
Apprenticeship at Object Mentor Blog
Blog Archive
- December 2010 (1)
- August 2010 (3)
- July 2010 (5)
- June 2010 (4)
- May 2010 (4)
- August 2009 (21)
- July 2009 (22)
- June 2009 (19)
- May 2009 (12)
- April 2009 (12)
- March 2009 (4)
- January 2009 (1)
- December 2008 (1)
- November 2008 (12)
- October 2008 (2)
- September 2008 (10)
- August 2008 (5)
- June 2008 (3)
- May 2008 (3)
- April 2008 (2)
- March 2008 (3)
- February 2008 (2)
- January 2008 (5)
- November 2007 (1)
- October 2007 (1)
- September 2007 (1)
- August 2007 (6)
- July 2007 (3)
- June 2007 (4)
- May 2007 (5)
- April 2007 (4)
- March 2007 (10)
- February 2007 (13)
- January 2007 (7)
Categories-
- Code (61)
- Apprenticeship (57)
- Rails (53)
- commentary (48)
- Ruby (31)
- RSpec (20)
- Metrics (17)
- metric_fu (13)
- Flog (9)
- complexity (9)
- testing (9)
- RailsConf2009 (8)
- git (8)
- RubyConf2008 (7)
- test_coverage (7)
- Bugs (6)
- Mocking (6)
- craftsman_swap (6)
- not_code (6)
- Agile2009 (5)
- Amazon (5)
- refactoring (5)
- ActiveRecord (4)
- JRuby (4)
- Linux (4)
- LoneStarRubyConf2008 (4)
- RailsConf2010 (4)
- Saikuro (4)
- XP (4)
- churn (4)
- design (4)
- Fixtures (3)
- LoneStarRubyConf2009 (3)
- Math (3)
- Obtiva (3)
- RailsConf2007 (3)
- Rake (3)
- Rcov (3)
- RubyKaigi2010 (3)
- RubyMidwest2010 (3)
- Svn (3)
- legacy_code (3)
- Flay (2)
- GLSEC (2)
- Mingle (2)
- SQuiD (2)
- TextMate (2)
- Windows (2)
- WindyCityRails (2)
- javascript (2)
- lean (2)
- Backstop (1)
- Bundler (1)
- DUST (1)
- EVDO (1)
- GC (1)
- IO (1)
- MacRuby (1)
- MongoDB (1)
- OSS (1)
- OSX (1)
- Routes (1)
- RubyWorks (1)
- Tomcat (1)
- attachment_fu (1)
- cache-fu (1)
- citcon (1)
- consulting (1)
- craftsmanship (1)
- css (1)
- db (1)
- iPhone (1)
- interview (1)
- mac (1)
- memcached (1)
- memprof (1)
- oracle (1)
- ord_sessions (1)
- ostatus (1)
- pairing (1)
- redis (1)
- restful_authentication (1)
- singleton_class (1)



0 comments:
Post a Comment