SlideShare a Scribd company logo
1 of 68
Download to read offline
ThoughtWorks




                                    Rails in the Large:
                                Building the Biggest (Enterprise)
                                   Rails Application in the World

   PAUL GROSS          software developer / consultant     NEAL FORD        software architect / meme wrangler



             ThoughtWorks                                            ThoughtWorks
                                                         nford@thoughtworks.com
pgross@thoughtworks.com                                  3003 Summit Boulevard, Atlanta, GA 30319
200 E. Randolph St, 25th Floor, Chicago, IL 60601-6501   www.nealford.com
pgross@thoughtworks.com                                  www.thoughtworks.com
www.pgrs.net                                             blog: memeagora.blogspot.com
www.thoughtworks.com                                     twitter: neal4d
coming   RSN
metrics


       feedback
        loops




        automation
                                   time & space




                                    demonstration
communication
                       non-




                     intuitivity
what OVE.com does
the pursuit




Go for the one that’ll beat the
one that’ll beat the one you
last did
.NET   Rails
quick start: october 2006


Project manager   Business Analyst




      Tech Lead    Developer
inception: Jan 17, 2007



Started with 2 pairs
Added one pair every 2 weeks

                               8 or 9 pairs by July
now

  11 pairs of developers             8 business analysts



                 iteration manager

                                         client principle
6 quality assurance   project manager
lessons learned
technology isn’t as important as responsiveness
to business needs


don’t try to convince too early


spikes are your friends!


demonstration over arguments
infrastructure




                 Rock is for Rookies:
                       males have a
                   tendency to lead
                  with Rock on their
                      opening throw
physical infrastructure
                         BA

                         standalone QA

                         integrated QA
pairing workstations
                         UAT
                         (sneak peak)
XServe (Selenium Grid)
deployment stack



  10 web boxes      2 image servers
                                      4 database
                                        servers


background server     memcache
technical stats
feedback
 loops
environment
lessons learned
scale infrastructure opportunistically...


...but don’t wait too long


Mac OS X rocks


have fun
testing




        Scissors on First:
    play scissors as your
 opening move against a
more experienced player
disconnected unit tests

UnitRecord and the evolution of unit
  tests that don’t hit the database

 http://github.com/dan-manges/unit-record
unit tests
the rule:

unit tests don’t hit the
       database

   mock everything
functional tests
no mocking allowed in
   functional tests

tests that hit the database are
           slooooow
feedback
 loops




               DeepTest

         http://github.com/qxjit/deep-test
metrics




automation                     time & space




             DistributedDeepTest
                                    demonstration
      non-




   intuitivity
Selenium grid

           time & space
lessons learned
fight the battle to keep tests fast


invent stuff if you have to


write smart tests

scale development infrastructure just like
production infrastructure
knowledge transfer




Paper is the least obvious
   of opening moves.
project Mingle on the
         wall
cc_board




http://github.com/qxjit/cc_board/
play a song when a
    build breaks
         communication




    play theme song upon
      successful checkin
jukebox.rb




            currently in alpha
http://subversion.hammersforge.com/
          jukebox.rb/trunk/
pairing stations
     adium

    no email
internal Jabber server
     chat rooms
            devs
            BAs
            QAs
      shared buddy list
automatically set pair
       name
         adium

Mingle card (upon commit)
feedback
             lessons learned
   loops


software is more about communication than
technology

use information radiators

co-location rocks
                                  communication

pairing really rocks

have fun
automate
everything


    When playing with
   someone who is not
experienced at the RPS,
look out for double runs
  or, in other words, the
    same throw twice.
1-click deploy to any
      environment

using cc.rb as easy deployment
              tool
rake commit

run all unit tests

run all functional tests

verification (language keys)

commit

http://github.com/pgr0ss/rake_commit_tasks
canonical pairing station
     maintenance

    cap pairing_stations
radmind
http://rsug.itd.umich.edu/software/radmind/
strict rules for
advanced
language
features

Tell your opponent
what you are going to
throw and then actually
throw what you said.
Try playing the throw that would have
                  lost to your opponents last throw




background               processing
evolution
 of



            asynchronous
              messaging
progress bars &
 async upload




     backgrounDrb
     http://backgroundrb.rubyforge.org/
3 kinds
use backgroundrb for
simple message queue
 backed by database
(Starling)




 switch to a real
 messaging queue
don’t know what we don’t know
 “buy the fanciest one we
 can” (just in case)




project time
technical debt

    when you        when you
    add it          start using it




project time
don’t know what we don’t know
 “buy the fanciest one we
 can” (just in case)
 pay $$$ for technical debt…

 …that you may never justify


project time
trying to predict the
future leads to over-
     engineering
lessons learned
avoid anticipatory design

gradually add complexity

don’t use databases as message queues (for too
long anyway)

DBA’s can sometimes get grumpy
performance &
                 optimization




When all else fails, go with paper: Statistically, in competition play, it
   has been observed that scissors is thrown the least often.
not that many page
      views...

...really complex pages!
daily web trends
monthly web trends
why all the
rochambeau stuff?
view builds are fragile =>
separate cc.rb build =>
view builds are slow =>
1 pair assigned as view
        masters
worst...job...ever
today’s view master
    assigned by
   yesterday’s...

 ...or play RPS
http://www.worldrps.com/
ThoughtWorks




                                      ?’s
                                     This work is licensed under the Creative Commons
                                            Attribution-Share Alike 3.0 License.

                                       http://creativecommons.org/licenses/by-sa/3.0/us/


   PAUL GROSS          software developer / consultant                NEAL FORD        software architect / meme wrangler



             ThoughtWorks                                                       ThoughtWorks
                                                                    nford@thoughtworks.com
pgross@thoughtworks.com                                             3003 Summit Boulevard, Atlanta, GA 30319
200 E. Randolph St, 25th Floor, Chicago, IL 60601-6501             www.nealford.com
pgross@thoughtworks.com                                            www.thoughtworks.com
www.pgrs.net                                                       blog: memeagora.blogspot.com
www.thoughtworks.com                                               twitter: neal4d
metrics


       feedback
        loops




        automation
                                   time & space




                                    demonstration
communication
                       non-




                     intuitivity

More Related Content

Similar to Rails in the Large - Neal Ford

10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
guestebde
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
ThoughtWorks Studios
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
Thoughtworks
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
Thoughtworks
 
refORM: Death to ORMs in .NET
refORM: Death to ORMs in .NETrefORM: Death to ORMs in .NET
refORM: Death to ORMs in .NET
James Hughes
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedive
magda3695
 

Similar to Rails in the Large - Neal Ford (20)

10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 
How to get started with Site Reliability Engineering
How to get started with Site Reliability EngineeringHow to get started with Site Reliability Engineering
How to get started with Site Reliability Engineering
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
 
Comparing groovy and_j_ruby(neal_ford)
Comparing groovy and_j_ruby(neal_ford)Comparing groovy and_j_ruby(neal_ford)
Comparing groovy and_j_ruby(neal_ford)
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?
 
What is quality code? From cruft to craft
What is quality code? From cruft to craftWhat is quality code? From cruft to craft
What is quality code? From cruft to craft
 
Apcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go languageApcera Case Study: The selection of the Go language
Apcera Case Study: The selection of the Go language
 
refORM: Death to ORMs in .NET
refORM: Death to ORMs in .NETrefORM: Death to ORMs in .NET
refORM: Death to ORMs in .NET
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
 
Dev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and FlickrDev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and Flickr
 
Java Tools and Techniques for Solving Tricky Problem
Java Tools and Techniques for Solving Tricky ProblemJava Tools and Techniques for Solving Tricky Problem
Java Tools and Techniques for Solving Tricky Problem
 
3stages Wdn08 V3
3stages Wdn08 V33stages Wdn08 V3
3stages Wdn08 V3
 
Os Solomon
Os SolomonOs Solomon
Os Solomon
 
Super Sizing Youtube with Python
Super Sizing Youtube with PythonSuper Sizing Youtube with Python
Super Sizing Youtube with Python
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedive
 

More from Kmanthei (9)

Distributed Agile
Distributed AgileDistributed Agile
Distributed Agile
 
Design in Practice (V1)
Design in Practice (V1)Design in Practice (V1)
Design in Practice (V1)
 
Evolutionary architecture
Evolutionary architectureEvolutionary architecture
Evolutionary architecture
 
We Can't Do That Here
We Can't Do That HereWe Can't Do That Here
We Can't Do That Here
 
Agile Dependency Management
Agile Dependency ManagementAgile Dependency Management
Agile Dependency Management
 
Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
4 tales of enterprise agility
4 tales of enterprise agility4 tales of enterprise agility
4 tales of enterprise agility
 
Rebecca parsons agile east
Rebecca parsons   agile eastRebecca parsons   agile east
Rebecca parsons agile east
 
Introduction to Continuous Delivery
Introduction to Continuous DeliveryIntroduction to Continuous Delivery
Introduction to Continuous Delivery
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Rails in the Large - Neal Ford