Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Just leave this up as
              people filter in to the
              room.




Bunk Monkey   Start off panel with
    ...
Just leave this up as
                 people filter in to the
                 room.




Bunk Monkey      Start off panel ...
Just leave this up as
                          people filter in to the
                          room.


                 ...
be sure to start the
                   meetronome at the
                   beginning.




  Waxing Ballroom
Floors on th...
OG Consulting

http://ogtastic.com/
http://ni.hili.st/
http://b.logi.cx -or- http://bl.ogtastic.com/
http://github.com/flogic/
OG Consulting?
  Awesomeness   Competitors
Who we’re not
http://www.gamespot.com/pages/unions/forums/show_msgs.php?topic_id=26319887&union_id=16254
http://scotlandon...
This shit is hard
This shit is hard
     that’s what she said
Do your best
http://www.indorphyn.com/wp-content/uploads/2007/01/Sisyphus.jpg
No matter what the odds
The Karate Kid, Columbia Pictures
Here’s how
http://www.morningtoast.com/index.php/2007/08/im-sorry-i-missed-the-miss-teen-usa-pageant
t3h sinking ship
t3h project: goals
Clinical system: 40,000+ patients / year
HIPAA, clinical trials, Sarbanes-Oxley
Full medical billing sy...
t3h project: goals
Clinical system: 40,000+ patients / year
HIPAA, clinical trials, Sarbanes-Oxley
Full medical billing sy...
This picture you’ve all
                       seen, we’re the source.

                       Look, there’s actually
    ...
t3h specs

                                                                            we want the same
                  ...
please consult org chart
              for portrait and name to
              accompany statue. thx.

              --t3h ...
What they want
                                                             (t3h sinking ship)
http://www.talendforge.org/...
Problems




                                                        (t3h sinking ship)
http://www.nsc.org/statinfo/odds_d...
(t3h sinking ship)
http://z.about.com/d/politicalhumor/1/0/u/L/bush_strategery.jpg
so we push to meet with
          the actual people who
          supposedly know what
          the business does and
   ...
and, months later, when
                                            we get meetings with
                                 ...
and if that’s not enough,
             the CIO (who is a
             consultant) sets up his
             own Mega-Synerg...
or “How to waste time
           and demoralize people.”




                                                             ...
one way to make it clear
                      how much of a waste of
                      time meetings are is to
      ...
The Enterprise Strikes Back




                                                                                          ...
Perceived progress                                                                        this was presented in
          ...
The ice under the Titanic
goodage




                                                                                    ...
Do your best
                                                                     (t3h sinking ship)
http://www.sffringe.o...
Hiring



A great person is
available and you have 5
shitty people on your
team? No firing in t3h
enterprise.




         ...
10 Interview Questions
       For Developers




                        (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?




                            ...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?




   ...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Per...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Per...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Per...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Per...
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Per...
10 Interview Questions
                      For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Pe...
10 Interview Questions
                      For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Pe...
10 Interview Questions
                      For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Pe...
10 Interview Questions
       For Sysadmins




          “Puppet or Cfengine” may
          be the only question
        ...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?




                      ...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availabili...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availabili...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availabili...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availabili...
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availabili...
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or A...
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or A...
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or A...
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or A...
Quality




                                                     Always strive for EPIC mfn quality.

                    ...
Transparency




                                                                  Be 100% transparent
                   ...
Transparency




                    Publicizing your transparency means never having to answer the
                      ...
t3h rules


            (t3h sinking ship)
The Gantt Chart




                                                           (t3h sinking ship)
http://openproj.org/wiki...
Mr. Gantt Chart




                                                             (t3h sinking ship)
http://www.gantt-chart...
t3h Cant Chart




                 (t3h sinking ship)
Mr. Cant Chart




                                                            (t3h sinking ship)
http://www.flickr.com/pho...
t3h Cant Chart


• Identify all the tasks
  that you are
  responsible for.




                                 (t3h sink...
t3h Cant Chart


• Plot out what
 depends on what.




                               (t3h sinking ship)
t3h Cant Chart

• From those tasks, find
  the CANT™ – who
  is holding up the
  works, and what are
  their excuses.

• A ...
t3h Cant Chart


• Separate the tasks
  you will do from
  those with CANTs.




                               (t3h sinki...
t3h Cant Chart
• Apply the secret
  sauce CANT formula.

• The big tasks are
  where you need to
  be focused.

• Your ene...
t3h Cant Chart


• You either won or
 failed hardcore.




                               (t3h sinking ship)
10 Interview Questions
      For the company




                        (t3h sinking ship)
10 Interview Questions
                    For the company

•   How’s your test coverage?




                            ...
10 Interview Questions
                    For the company

•   How’s your test coverage?
•   Oracle or SQLServer?




   ...
10 Interview Questions
                    For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Fog...
10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogB...
10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogB...
10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogB...
6
    10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
• ...
Plowing a new field
Donald Miralle/Getty Images, http://recipes.howstuffworks.com/salt5.htm
this is Karl, or a we call him
                       Karlsbad (at testing)




Any code can be legacy code
Legacy Code
def associate( association, options = {} )
  return false unless association &&
                      associat...
Legacy Code




              (plowing a new field)
Characterization Tests
class RecursiveMock
  def initialize(args = {})
    @stubs = {}.merge(args)
  end

  def method_mis...
Characterization Tests

module Spec::Example::ExampleGroupMethods
  def currently(name, &block)
    it(quot;*** CURRENTLY ...
Characterization Tests
describe YourMom do
  before :each { @your_mom = YourMom.new }

 currently quot;is at my housequot;...
Characterization Tests
YourMom
- *** CURRENTLY *** is at my house

YourMom when at my house
- should take the bus home (PE...
Characterization Tests

currently quot;has a summary which includes the amount truncated to dollarsquot; do
  @payment.stu...
Legacy Code




              (plowing a new field)
old-school cod3rz




                                                                (plowing a new field)
http://www.gen...
Feedback Loops
(feedback loops)
(feedback loops)
(feedback loops)
Feedback
         •      Cruisecontrol.rb; flog, heckle,
                flame; Use EC2 or slices if
                needed;...
What Rails gets wrong
    and when you should care
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures == Cargo Cult




                   (rails == wrong)
Solution?




                                                                      (rails == wrong)
http://www.imagechef....
object_daddy


http://github.com/flogic/object_daddy




                                (rails == wrong)
Object Daddy
class Category < ActiveRecord::Base
  has_many :items

  validates_presence_of   :name
  validates_uniqueness...
Object Daddy
class Category < ActiveRecord::Base
  has_many :items

  validates_presence_of   :name
  validates_uniqueness...
Object Daddy
class Item < ActiveRecord::Base
  belongs_to :category

 validates_presence_of :category

  validates_presenc...
Object Daddy
                                                some unexpected
                                             ...
Object Daddy
                                                some unexpected
                                             ...
Object Daddy
                                                some unexpected
                                             ...
Object Daddy
                                                      some unexpected
                                       ...
Object Daddy
                                                      some unexpected
                                       ...
Object Daddy
                                                      some unexpected
                                       ...
Object Daddy
                                                      some unexpected
                                       ...
Object Daddy

class Employee
  # calls Employee.next_username
  generator_for :username, :method => :next_username

 # cal...
The New Hotness
The New Hotness




                                                                  Sinatra

http://www.amazon.com/Capit...
The New Hotness




                                                        Hobo

http://akugel.wordpress.com/2007/03/27/t...
The New Hotness




                                                                Camping

http://fiberfib.com/en/benicass...
The New Hotness




                                                           Merb

http://www.pastdeadline.com/2007/08/m...
The New Hotness




                                                         Ramaze

http://www.geocities.com/athens/2962/...
The New Hotness
Documentation
Questionable
The if expression
- evaluates body if expression is true
- does not evaluate body if expression is false
- does not evalua...
Useful
or not
w00t
                              Then                                               Now




                            ...
Metrics
Metrics




                                               Transactions Per Second
http://www.flickr.com/photos/edame/35183...
Metrics
Metrics
Consider the following numbers.
(expected)
Metrics
Consider the following numbers.
(expected)


• Transactions per second
Metrics
Consider the following numbers.
(expected)


• Transactions per second
• Users per year
Metrics
Consider the following numbers.
(expected)


• Transactions per second
• Users per year
Which is larger?
Metrics
One more important number to consider.
Metrics
One more important number to consider.


•   Dollars per transaction
Metrics
One more important number to consider.


•   Dollars per transaction
What has OG done for me lately?

•   object_daddy
•
                                          Check it out on github

    ...
Free Shizzle
The 2 Down Days in pr0n


That’s what she said.




                        (free shizzle)
What does OG stand for?




                     (free shizzle)
What does OG stand for?




http://www.hermes-press.com/music_portal.htm
                                               (f...
What does OG stand for?




                     (free shizzle)
What does OG stand for?




                                                        (free shizzle)
http://www.freefoto.com...
What does OG stand for?




                                                                              (free shizzle)
h...
What does OG stand for?




                                                            (free shizzle)
http://www.samsquan...
How much did this meeting cost?




It’s all about the cheddar.




                                  (free shizzle)
In a landmark Bon Jovi song, why
 does Jon Bon “play for keeps?”
Questions?
and as promised...
Waxing Ballroom Floors on the Titanic
Waxing Ballroom Floors on the Titanic
Waxing Ballroom Floors on the Titanic
Upcoming SlideShare
Loading in …5
×

Waxing Ballroom Floors on the Titanic

3,018 views

Published on

Our talk from RailsConf 2008 goes over our experience in large-scale enterprise applications, leaving the enterprise, and finding similar problems as indepedent consultants.

Published in: Business, Technology
  • Be the first to comment

  • Be the first to like this

Waxing Ballroom Floors on the Titanic

  1. 1. Just leave this up as people filter in to the room. Bunk Monkey Start off panel with “This really has no bearing on anything. It’s just here to give you a taste of what’s to come for the next 45 minutes.”
  2. 2. Just leave this up as people filter in to the room. Bunk Monkey Start off panel with “This really has no bearing on anything. It’s Spunk Monkey just here to give you a taste of what’s to come for the next 45 minutes.”
  3. 3. Just leave this up as people filter in to the room. smegma Bunk Monkey Start off panel with “This really has no bearing on anything. It’s Spunk Monkey just here to give you a taste of what’s to come for the next 45 minutes.”
  4. 4. be sure to start the meetronome at the beginning. Waxing Ballroom Floors on the Titanic and other less seaworthy vessels OG Consulting Kevin Barnes Rick Bradley Yossef Mendelssohn
  5. 5. OG Consulting http://ogtastic.com/ http://ni.hili.st/ http://b.logi.cx -or- http://bl.ogtastic.com/ http://github.com/flogic/
  6. 6. OG Consulting? Awesomeness Competitors
  7. 7. Who we’re not http://www.gamespot.com/pages/unions/forums/show_msgs.php?topic_id=26319887&union_id=16254 http://scotlandonrails.com/speakers
  8. 8. This shit is hard
  9. 9. This shit is hard that’s what she said
  10. 10. Do your best http://www.indorphyn.com/wp-content/uploads/2007/01/Sisyphus.jpg
  11. 11. No matter what the odds The Karate Kid, Columbia Pictures
  12. 12. Here’s how http://www.morningtoast.com/index.php/2007/08/im-sorry-i-missed-the-miss-teen-usa-pageant
  13. 13. t3h sinking ship
  14. 14. t3h project: goals Clinical system: 40,000+ patients / year HIPAA, clinical trials, Sarbanes-Oxley Full medical billing system Share with 6-7 other large organizations Common research community Research-enabled clinical data (t3h sinking ship)
  15. 15. t3h project: goals Clinical system: 40,000+ patients / year HIPAA, clinical trials, Sarbanes-Oxley Full medical billing system Share with 6-7 other large organizations Common research community Research-enabled clinical data Save the world, yo (t3h sinking ship)
  16. 16. This picture you’ve all seen, we’re the source. Look, there’s actually attribution. © Darrin Weissinger (darrin.weissinger@centerstone.org) (t3h sinking ship)
  17. 17. t3h specs we want the same system as we currently have, only AWESOME, and OURS, so we can prove to everyone we’re the best in the world. oh, and do some good. (t3h sinking ship) http://i160.photobucket.com/albums/t189/rossmcgrath16/redneck-mansion.jpg
  18. 18. please consult org chart for portrait and name to accompany statue. thx. --t3h boss What is expected (t3h sinking ship)
  19. 19. What they want (t3h sinking ship) http://www.talendforge.org/wiki/doku.php?id=what_is_new1_1
  20. 20. Problems (t3h sinking ship) http://www.nsc.org/statinfo/odds_dying.jpg
  21. 21. (t3h sinking ship) http://z.about.com/d/politicalhumor/1/0/u/L/bush_strategery.jpg
  22. 22. so we push to meet with the actual people who supposedly know what the business does and wants Meetings (t3h sinking ship) http://www.business-marketing.com/store/termination.html#5578
  23. 23. and, months later, when we get meetings with them, it’s a series of months of meetings with mostly Managers (t3h sinking ship) http://www.growingcoaches.com/webinar.htm
  24. 24. and if that’s not enough, the CIO (who is a consultant) sets up his own Mega-Synergy Task Force™ (t3h sinking ship) http://www.brandascension.com/Elevation_Products.html
  25. 25. or “How to waste time and demoralize people.” (t3h sinking ship) http://alternative-gifts.haluy.co.uk/product,details,,63e9efe53d8cd9167025f239b675592e.html
  26. 26. one way to make it clear how much of a waste of time meetings are is to track them via meetronome. compare with the cost of the most recent denied request for, say, keyboards, wireless router, non-paralyzing desk chairs, etc. show the running meetronome now. Be sure to quantify value (t3h sinking ship)
  27. 27. The Enterprise Strikes Back (t3h sinking ship) http://www.startrekdesktopwallpaper.com/wallpapers/StarTrek_starship_Enterprise_NCC1701A_firing_phasers_freecomputerdesktop_wallpaper_1024.shtml
  28. 28. Perceived progress this was presented in RailsConf 2006, some snazzy unfolding left to right, showing all the things that were improving Rails analysis patterns hire new developers Rake continuous integration continuous integration migrations nightly conversions switchtower getting more “Real” svn trac public svn goodage public trac domain driven design wifi public releases STI unit tests AJAX continuous builder IRC Postgres mac laptops voluntary tickets cvs auto deployments stories public IRC relocating pair-on-demand time Oracle assigned tickets 1,000 meetings SQL schemae suckage Big Design Up Front JUnit, etc. JBoss CruiseControl CTI Ant “deployments” lose technical lead Java EJB3.0 Hibernate for-profit partner (t3h sinking ship)
  29. 29. The ice under the Titanic goodage time wishful thinking by mgmt visionquests t3h webinar Long-hidden incompetence Budget padding Blame Shifting Can’t-Do Attitude Turf That Which Shall Not Be Named suckage Fear of Change Ass-Covering Croneyism Finger-pointing Old age and treachery Corporate Politics That Which Should Not Be (t3h sinking ship)
  30. 30. Do your best (t3h sinking ship) http://www.sffringe.org/fringe06/06pix/sisyphus.jpg
  31. 31. Hiring A great person is available and you have 5 shitty people on your team? No firing in t3h enterprise. that’s what she said Hiring is purely about budgets and politics. A slot is open? Fill it with a warm body. A great person is available? No slot, no hire. that’s what she said (t3h sinking ship)
  32. 32. 10 Interview Questions For Developers (t3h sinking ship)
  33. 33. 10 Interview Questions For Developers • How’s your test coverage? (t3h sinking ship)
  34. 34. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? (t3h sinking ship)
  35. 35. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? (t3h sinking ship)
  36. 36. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? (t3h sinking ship)
  37. 37. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? (t3h sinking ship)
  38. 38. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? (t3h sinking ship)
  39. 39. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? • Spolsky or Arrington? (t3h sinking ship)
  40. 40. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? • Spolsky or Arrington? • Have you implemented final, destructors, or xdoclet in Ruby? (t3h sinking ship)
  41. 41. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? • Spolsky or Arrington? • Have you implemented final, destructors, or xdoclet in Ruby? • Have you ever written an empty if just to use the else? (t3h sinking ship)
  42. 42. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? • Spolsky or Arrington? • Have you implemented final, destructors, or xdoclet in Ruby? • Have you ever written an empty if just to use the else? • Who owns the code? (t3h sinking ship)
  43. 43. 10 Interview Questions For Sysadmins “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  44. 44. 10 Interview Questions For Sysadmins • What’s your deployment process? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  45. 45. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  46. 46. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  47. 47. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  48. 48. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  49. 49. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  50. 50. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer (t3h sinking ship)
  51. 51. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? (t3h sinking ship)
  52. 52. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? • Puppet or Cfengine? (t3h sinking ship)
  53. 53. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? • Puppet or Cfengine? • CI? (t3h sinking ship)
  54. 54. Quality Always strive for EPIC mfn quality. (t3h sinking ship) http://stuartscustoms.freeyellow.com/Fairmont.html
  55. 55. Transparency Be 100% transparent (t3h sinking ship) http://www.brianmicklethwait.com/index.php/weblog/computer_transparency/
  56. 56. Transparency Publicizing your transparency means never having to answer the question: “Why didn’t I know about this?” (t3h sinking ship) http://drinkingliberally.org/blogs/idahofalls/archives/2007/02/his_head_will_g.html
  57. 57. t3h rules (t3h sinking ship)
  58. 58. The Gantt Chart (t3h sinking ship) http://openproj.org/wiki/index.php?title=Gantt_Chart
  59. 59. Mr. Gantt Chart (t3h sinking ship) http://www.gantt-chart.biz/gantt-charting-made-easy/
  60. 60. t3h Cant Chart (t3h sinking ship)
  61. 61. Mr. Cant Chart (t3h sinking ship) http://www.flickr.com/photos/atmos/217012352/
  62. 62. t3h Cant Chart • Identify all the tasks that you are responsible for. (t3h sinking ship)
  63. 63. t3h Cant Chart • Plot out what depends on what. (t3h sinking ship)
  64. 64. t3h Cant Chart • From those tasks, find the CANT™ – who is holding up the works, and what are their excuses. • A task can have many CANTs. • Tally the CANTs. (t3h sinking ship)
  65. 65. t3h Cant Chart • Separate the tasks you will do from those with CANTs. (t3h sinking ship)
  66. 66. t3h Cant Chart • Apply the secret sauce CANT formula. • The big tasks are where you need to be focused. • Your enemies are those jerks with the highest CANT scores. (t3h sinking ship)
  67. 67. t3h Cant Chart • You either won or failed hardcore. (t3h sinking ship)
  68. 68. 10 Interview Questions For the company (t3h sinking ship)
  69. 69. 10 Interview Questions For the company • How’s your test coverage? (t3h sinking ship)
  70. 70. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? (t3h sinking ship)
  71. 71. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? (t3h sinking ship)
  72. 72. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? (t3h sinking ship)
  73. 73. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? • What’s your HR department like? (t3h sinking ship)
  74. 74. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? • What’s your HR department like? • Who owns the code? (t3h sinking ship)
  75. 75. 6 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? • What’s your HR department like? • Who owns the code? (t3h sinking ship)
  76. 76. Plowing a new field Donald Miralle/Getty Images, http://recipes.howstuffworks.com/salt5.htm
  77. 77. this is Karl, or a we call him Karlsbad (at testing) Any code can be legacy code
  78. 78. Legacy Code def associate( association, options = {} ) return false unless association && association.account_id == self.account_id && association.uniq_id != self.uniq_id options = { :update_record => true }.merge( options ) self.associations.each do |a| if association.uniq_id == a.uniq_id return false end end associations << association self.save_with_validation false association.associate( self, :update_record => false ) self.save_with_validation false if options[:update_record] if self.record self.record.update_build() if self.record else self.record = Record.build_with self end end end (Legacy Code)
  79. 79. Legacy Code (plowing a new field)
  80. 80. Characterization Tests class RecursiveMock def initialize(args = {}) @stubs = {}.merge(args) end def method_missing(meth, *args) if @stubs.has_key?(meth.to_sym) return @stubs[meth.to_sym] end self end end (Legacy Code)
  81. 81. Characterization Tests module Spec::Example::ExampleGroupMethods def currently(name, &block) it(quot;*** CURRENTLY *** #{name}quot;, &block) end alias_method :she, :it end (Legacy Code)
  82. 82. Characterization Tests describe YourMom do before :each { @your_mom = YourMom.new } currently quot;is at my housequot; do @your_mom.should be_at_my_house end describe quot;when at my housequot; do before :each do @your_mom.stubs(:at_my_house?).returns(true) end she quot;should take the bus homequot; end end (Legacy Code)
  83. 83. Characterization Tests YourMom - *** CURRENTLY *** is at my house YourMom when at my house - should take the bus home (PENDING: Not Yet Implemented) Pending: YourMom when at my house should take the bus home (Not Yet Implemented) Finished in 0.174782 seconds 2 examples, 0 failures, 1 pending (Legacy Code)
  84. 84. Characterization Tests currently quot;has a summary which includes the amount truncated to dollarsquot; do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = 1234 @payment.summary.should match(/$12b/) end currently quot;has a summary which fails if payment amount is not setquot; do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = nil lambda { @payment.summary }.should raise_error end (Legacy Code)
  85. 85. Legacy Code (plowing a new field)
  86. 86. old-school cod3rz (plowing a new field) http://www.geneontology.org/images/go-database-ER-diagram.png
  87. 87. Feedback Loops
  88. 88. (feedback loops)
  89. 89. (feedback loops)
  90. 90. (feedback loops)
  91. 91. Feedback • Cruisecontrol.rb; flog, heckle, flame; Use EC2 or slices if needed; Do short iterations, perform post-mortems (feedback loops) http://www.etsu.edu/philos/classes/rk/postmodern/htmdescriptionpages/30paik2desc.jpg
  92. 92. What Rails gets wrong and when you should care
  93. 93. Fixtures (rails == wrong)
  94. 94. Fixtures (rails == wrong)
  95. 95. Fixtures (rails == wrong)
  96. 96. Fixtures (rails == wrong)
  97. 97. Fixtures (rails == wrong)
  98. 98. Fixtures (rails == wrong)
  99. 99. Fixtures == Cargo Cult (rails == wrong)
  100. 100. Solution? (rails == wrong) http://www.imagechef.com/ic/make.jsp?tid=Bling+Necklace
  101. 101. object_daddy http://github.com/flogic/object_daddy (rails == wrong)
  102. 102. Object Daddy class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :name end class Item < ActiveRecord::Base belongs_to :category validates_presence_of :category validates_presence_of :code validates_uniqueness_of :code validates_format_of :code, :with => /^[a-zA-Z]+-d+$/ end Models (rails == wrong)
  103. 103. Object Daddy class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :name end Model class Category generator_for :name, :start => 'test' do |prev| prev.succ end end Exemplar (rails == wrong)
  104. 104. Object Daddy class Item < ActiveRecord::Base belongs_to :category validates_presence_of :category validates_presence_of :code validates_uniqueness_of :code validates_format_of :code, :with => /^[a-zA-Z]+-d+$/ end Model class Item generator_for :code, :start => 'test-001' do |prev| prefix, number = prev.split('-') [prefix, number.succ].join('-') end end Exemplar (rails == wrong)
  105. 105. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> tests, not the console. This is just an example for illumination. It’s kind of difficult to write tests for how something works in a non-test setting. (rails == wrong)
  106. 106. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> It’s kind of difficult to write tests for how something works in a non-test setting. (rails == wrong)
  107. 107. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> something works in a non-test setting. (rails == wrong)
  108. 108. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> (rails == wrong)
  109. 109. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> (rails == wrong)
  110. 110. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> Category.generate(:name => 'things') => #<Category id: 29, name: quot;thingsquot;> >> (rails == wrong)
  111. 111. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> Category.generate(:name => 'things') => #<Category id: 29, name: quot;thingsquot;> >> Category.generate => #<Category id: 30, name: quot;teswquot;> (rails == wrong)
  112. 112. Object Daddy class Employee # calls Employee.next_username generator_for :username, :method => :next_username # calls SSNGenerator.next generator_for :ssn, :class => SSNGenerator generator_for(:hired_on) { Date.today } generator_for :nickname, 'Bruce' generator_for :fingers => 5 end (rails == wrong)
  113. 113. The New Hotness
  114. 114. The New Hotness Sinatra http://www.amazon.com/Capitol-Years-Frank-Sinatra/dp/B000002UWM
  115. 115. The New Hotness Hobo http://akugel.wordpress.com/2007/03/27/the-hobo-code/
  116. 116. The New Hotness Camping http://fiberfib.com/en/benicassim/where-to-sleep/camping-areas/
  117. 117. The New Hotness Merb http://www.pastdeadline.com/2007/08/merv-a-man-for-.html
  118. 118. The New Hotness Ramaze http://www.geocities.com/athens/2962/colourbook/ http://www.descendingashtray.com/index.php?s=labyrinth
  119. 119. The New Hotness
  120. 120. Documentation
  121. 121. Questionable
  122. 122. The if expression - evaluates body if expression is true - does not evaluate body if expression is false - does not evaluate else-body if expression is true - evaluates only else-body if expression is false - returns result of then-body evaluation if expression is true - returns result of last statement in then-body if expression is true or Trustworthy
  123. 123. Useful
  124. 124. or not
  125. 125. w00t Then Now (rails == wrong) http://www.juixe.com/techknow/wp-content/uploads/2008/04/ruby_books.png
  126. 126. Metrics
  127. 127. Metrics Transactions Per Second http://www.flickr.com/photos/edame/351834048/
  128. 128. Metrics
  129. 129. Metrics Consider the following numbers. (expected)
  130. 130. Metrics Consider the following numbers. (expected) • Transactions per second
  131. 131. Metrics Consider the following numbers. (expected) • Transactions per second • Users per year
  132. 132. Metrics Consider the following numbers. (expected) • Transactions per second • Users per year Which is larger?
  133. 133. Metrics One more important number to consider.
  134. 134. Metrics One more important number to consider. • Dollars per transaction
  135. 135. Metrics One more important number to consider. • Dollars per transaction
  136. 136. What has OG done for me lately? • object_daddy • Check it out on github timely user: flogic • shmemeter • autochronic • freshtrack • nihilist_bot (& http://ni.hili.st/) • ultrasphinx_search_wrapper • flame (aka flog w/ tests & blame)
  137. 137. Free Shizzle
  138. 138. The 2 Down Days in pr0n That’s what she said. (free shizzle)
  139. 139. What does OG stand for? (free shizzle)
  140. 140. What does OG stand for? http://www.hermes-press.com/music_portal.htm (free shizzle) http://www.hermes-press.com/ice-t.jpg
  141. 141. What does OG stand for? (free shizzle)
  142. 142. What does OG stand for? (free shizzle) http://www.freefoto.com/preview/09-14-57?ffid=09-14-57
  143. 143. What does OG stand for? (free shizzle) http://www.nypost.com/seven/03032007/tv/so_easy__even_abc_can_do_it_tv_.htm
  144. 144. What does OG stand for? (free shizzle) http://www.samsquanch.ca/images/Friends/the%20riddler.jpg
  145. 145. How much did this meeting cost? It’s all about the cheddar. (free shizzle)
  146. 146. In a landmark Bon Jovi song, why does Jon Bon “play for keeps?”
  147. 147. Questions?
  148. 148. and as promised...

×