Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Put a Button on it: Removing Barriers to Going Fast.

kastner
September 26, 2011

Put a Button on it: Removing Barriers to Going Fast.

For most companies, pushing code to production is a slow and painful process that can span hours or days, and is done very infrequently because of this and other general anxieties behind public facing launches. At Etsy, we built a tool called Deployinator to make it a painless process for everyone to push code at will. We pair this with a suite of tests, graphs, and metrics to make high velocity change safe and transparent.

kastner

September 26, 2011
Tweet

More Decks by kastner

Other Decks in Technology

Transcript

  1. [email protected] / @kastner
    [email protected] / @johngoulah
    Put a Button on it
    Removing Barriers to Going Fast

    View Slide

  2. View Slide

  3. 1+ Billion Pageviews
    Per Month

    View Slide

  4. Speed

    View Slide

  5. ~80 Engineers

    View Slide

  6. Barriers

    View Slide

  7. Deployinator

    View Slide

  8. View Slide

  9. We’re Hiring
    http://etsy.com/jobs

    View Slide

  10. View Slide

  11. Optimization

    View Slide

  12. Happiness

    View Slide

  13. Sad Engineers
    are Bad Engineers

    View Slide

  14. Barriers

    View Slide

  15. Process

    View Slide

  16. “Process is an embedded
    reaction to prior stupidity”
    – Clay Shirky

    View Slide

  17. Fear

    View Slide

  18. View Slide

  19. Correctness

    View Slide

  20. Text
    "My strategy has always been: be wrong as
    fast as we can, Which basically means, we're
    gonna screw up, … Let's not be afraid of that."
    – Andrew Stanton

    View Slide

  21. Legacy

    View Slide

  22. How?

    View Slide

  23. Communication

    View Slide

  24. Trust

    View Slide

  25. Openness

    View Slide

  26. Constant Improvement

    View Slide

  27. Then vs. Now

    View Slide

  28. 2009

    View Slide

  29. 2009 2011

    View Slide

  30. 2009
    Single Deploy
    Master

    View Slide

  31. 2009 2011
    Single Deploy
    Master
    Anyone Can
    Deploy

    View Slide

  32. 2009
    Rollback in
    Fear

    View Slide

  33. 2009 2011
    Rollback in
    Fear
    Roll Forward
    to Victory

    View Slide

  34. 2009
    All Day
    Deploys

    View Slide

  35. 2009 2011
    All Day
    Deploys
    Deploy All
    Day

    View Slide

  36. How… for reals

    View Slide

  37. So, what does Etsy
    optimize for?

    View Slide

  38. MTTR vs. MTBF

    View Slide

  39. Default to Open

    View Slide

  40. Culture First

    View Slide

  41. If it’s your first day at
    Etsy, you must deploy!

    View Slide

  42. View Slide

  43. Doing the dumbest thing
    that can possibly work

    View Slide

  44. Committing to Trunk

    View Slide

  45. Branching in Code

    View Slide

  46. if ($cfg["new_search"]) {
    // new hotness
    $resp = search_solr();
    } else {
    // old busted
    $resp = search_grep();
    }

    View Slide

  47. Configuration is Code

    View Slide

  48. $cfg["new_search"] = true;

    View Slide

  49. Blameless
    Post-mortems

    View Slide

  50. Databases are Different

    View Slide

  51. Does it Work?

    View Slide

  52. View Slide

  53. View Slide

  54. 6 Change-related
    incidents in 2010

    View Slide

  55. November code-freeze

    View Slide

  56. November code-freeze
    721 Deploys

    View Slide

  57. Deployinator

    View Slide

  58. View Slide

  59. View Slide

  60. View Slide

  61. Capistrano

    View Slide

  62. Puppet
    Capistrano

    View Slide

  63. Fabric
    Puppet
    Capistrano

    View Slide

  64. Fabric
    Chef
    Puppet
    Capistrano

    View Slide

  65. View Slide

  66. View Slide

  67. View Slide

  68. View Slide

  69. View Slide

  70. “Framework”

    View Slide

  71. STACK=search rake new_stack

    View Slide

  72. run_cmd %Q{cap deploy}

    View Slide

  73. log_and_stream "Starting Web deploy
    "

    View Slide

  74. log_and_shout({
    :old_build => old_build, :build => build,
    :send_email => true
    })

    View Slide

  75. Communication

    View Slide

  76. View Slide

  77. View Slide

  78. View Slide

  79. View Slide

  80. View Slide

  81. View Slide

  82. Dashboard Driven
    Development

    View Slide

  83. View Slide

  84. 5:27 < devbot> PRODUCTION deployed by vthommeret version:
    7f08b7a-20110722-191739-UTC took: 131.042598 seconds
    diff: http://deployinator.etsycorp.com/diff/web/0cbf2f0/7f08b7a

    View Slide

  85. Etsy Confidential

    View Slide

  86. Deployinator Deploy Host
    Web 1 Web 2 Web N

    View Slide

  87. Deployinator Deploy Host
    Web 1 Web 2 Web N
    ssh

    View Slide

  88. Deployinator Deploy Host
    Web 1 Web 2 Web N
    ssh
    dsh

    View Slide

  89. Deployinator Deploy Host
    Web 1 Web 2 Web N
    ssh
    dsh

    View Slide

  90. Deployinator Deploy Host
    Web 1 Web 2 Web N
    ssh
    dsh
    Rsync

    View Slide

  91. What’s Stopping You?

    View Slide

  92. Know what you’re
    optimizing for

    View Slide

  93. Deployinator is Open
    Source Software!

    View Slide

  94. Deployinator is Open
    Source Software!
    http://github.com/etsy/deployinator

    View Slide

  95. Deployinator is Open
    Source Software!
    http://github.com/etsy/deployinator
    (right after this talk)

    View Slide

  96. Thank you

    View Slide

  97. Thank you
    http://github.com/etsy/deployinator

    View Slide