$30 off During Our Annual Pro Sale. View Details »

Beyond TDD - Enabling Your Team to Continuously Deliver Software

neraath
November 14, 2012

Beyond TDD - Enabling Your Team to Continuously Deliver Software

Many project teams have adopted unit testing as a necessary step in their development process. Many more use a test-first approach to keep their code lean. Yet, far too often these teams still suffer from many of the same impediments: recurrent integration failures with other enterprise projects, slow feedback with the customer, and sluggish release cycles. With a languishing feedback loop, the enterprise continues to put increasing pressure on development teams to deliver. How does an aspiring agile team improve to meet the demands of the enterprise?

Continuous integration is the next logical step for the team. In this talk, you’ll learn how continuous integration solves intra and inter-project integration issues without manual overhead, the value added by continuous integration, and how to leverage tools and processes to further improve the quality of your code. Finally, we discuss the gold standard of agile teams: continuous deployment. You’ll learn how continuous deployment helps close the feedback loop with your customers, increases visibility for your team, and standardizes the deployment process.

neraath

November 14, 2012
Tweet

More Decks by neraath

Other Decks in Technology

Transcript

  1. Beyond TDD
    Enabling Your Team to Continuously Deliver Software
    Wednesday, November 14, 12

    View Slide

  2. Me
    • Fightin’ Texas Aggie
    • C# and PHP Developer
    • Agilist since 2007
    • Senior Consultant at
    Improving Enterprises
    [email protected]
    Wednesday, November 14, 12

    View Slide

  3. Twitter Promotion
    Wednesday, November 14, 12

    View Slide

  4. Twitter Promotion
    • @neraath
    Wednesday, November 14, 12

    View Slide

  5. Twitter Promotion
    • @neraath
    • #AgileATX2012
    Wednesday, November 14, 12

    View Slide

  6. Twitter Promotion
    • @neraath
    • #AgileATX2012
    • #beyondtdd
    Wednesday, November 14, 12

    View Slide

  7. Twitter Promotion
    • @neraath
    • #AgileATX2012
    • #beyondtdd
    • #thisguyisawesome
    Wednesday, November 14, 12

    View Slide

  8. Twitter Promotion
    • @neraath
    • #AgileATX2012
    • #beyondtdd
    • #thisguyisawesome
    • #awesomesauce
    Wednesday, November 14, 12

    View Slide

  9. Twitter Promotion
    • @neraath
    • #AgileATX2012
    • #beyondtdd
    • #thisguyisawesome
    • #awesomesauce
    • #terrbilepresenter
    Wednesday, November 14, 12

    View Slide

  10. Twitter Promotion
    • @neraath
    • #AgileATX2012
    • #beyondtdd
    • #thisguyisawesome
    • #awesomesauce
    • #terrbilepresenter
    • #worstpresentation
    Wednesday, November 14, 12

    View Slide

  11. Agile, Microsoft, Open Technologies, UX
    Applied Training, Coaching, Mentoring
    Certified Consulting
    Rural Sourcing
    Recruiting Services
    Wednesday, November 14, 12

    View Slide

  12. Overview
    • No code or demonstrations
    • TDD in your current environment
    • Continuous Integration
    • Continuous Delivery
    • Is it worth it?
    • Your next steps
    Wednesday, November 14, 12

    View Slide

  13. Agile
    Wednesday, November 14, 12

    View Slide

  14. Agile
    Being
    Wednesday, November 14, 12

    View Slide

  15. “Working software is the
    primary measure of
    progress”
    Wednesday, November 14, 12

    View Slide

  16. Tests
    Wednesday, November 14, 12

    View Slide

  17. Unit
    Wednesday, November 14, 12

    View Slide

  18. Load
    Wednesday, November 14, 12

    View Slide

  19. UI?
    Wednesday, November 14, 12

    View Slide

  20. Performance
    Wednesday, November 14, 12

    View Slide

  21. Unit
    Wednesday, November 14, 12

    View Slide

  22. Unit
    Testing
    Wednesday, November 14, 12

    View Slide

  23. Unit
    Testing
    Wednesday, November 14, 12

    View Slide

  24. Unit
    Testing
    leads to
    Wednesday, November 14, 12

    View Slide

  25. Unit
    Testing
    TDD
    leads to
    Wednesday, November 14, 12

    View Slide

  26. Unit
    Testing
    TDD
    leads to
    Wednesday, November 14, 12

    View Slide

  27. Challenges TDD Doesn’t
    Solve
    Wednesday, November 14, 12

    View Slide

  28. Who/What Broke My
    Build?
    Wednesday, November 14, 12

    View Slide

  29. Integration
    Wednesday, November 14, 12

    View Slide

  30. Integration
    You Don’t See the Forest thru the Trees
    Wednesday, November 14, 12

    View Slide

  31. Code Quality
    Wednesday, November 14, 12

    View Slide

  32. Coding Standards
    Wednesday, November 14, 12

    View Slide

  33. using System;
    namespace BeyondTDD
    {
    public class StringUtils
    {
    ///
    /// Strips double quotes from the provided .
    ///
    /// The source to strip quotes from.
    /// A string without quotes.
    public string StripQuotes(string sourceString)
    {
    if (string.IsNullOrEmpty(sourceString))
    throw new ArgumentNullException("sourceString");
    return sourceString.Replace('\"', string.Empty);
    }
    }
    }
    Wednesday, November 14, 12

    View Slide

  34. using System;
    namespace BeyondTDD
    {
    public class StringUtils
    {
    ///
    /// Strips double quotes from the provided .
    ///
    public string StripQuotes(string sourceString) {
    if (sourceString == null) {
    throw new ArgumentNullException("sourceString");
    }
    return sourceString.Replace('\"', "");
    }
    // Look at all the spaces, ma!
    }
    }
    Wednesday, November 14, 12

    View Slide

  35. using System;
    namespace BeyondTDD {
    public class StringUtils
    {
    /*** I had to change this method cause I'm a n00b.
    public string StripQuotes(string sourceString)
    {
    foreach(char c in sourceString) {
    if (c == '\"')
    { sourceString[c] == ""; }
    }
    return sourceString;
    }
    */
    // comments? what comments? this makes sense, right?
    public string StripQuotes(string sourceString)
    {
    if (sourceString == null)
    {
    //throw new ArgumentNullException("sourceString");
    // I <3 Exception more than anything else.
    throw new Exception("sourceString");
    }
    return sourceString.Replace('\"', "");
    } } }
    Wednesday, November 14, 12

    View Slide

  36. I will hunt you down and shoot you like a duck dog.
    Wednesday, November 14, 12

    View Slide

  37. Wednesday, November 14, 12

    View Slide

  38. Security
    srsly?
    what hacker
    wears a tie?
    Wednesday, November 14, 12

    View Slide

  39. Creating and Deploying a
    Releasable Package
    Wednesday, November 14, 12

    View Slide

  40. The Feedback Loop is
    Wide Open
    Wednesday, November 14, 12

    View Slide

  41. How to Improve?
    Wednesday, November 14, 12

    View Slide

  42. Continuous Integration
    Wednesday, November 14, 12

    View Slide

  43. CI is not a Tool
    Wednesday, November 14, 12

    View Slide

  44. Wednesday, November 14, 12

    View Slide

  45. Martin Fowler
    Wednesday, November 14, 12

    View Slide

  46. CI is a Practice
    Wednesday, November 14, 12

    View Slide

  47. CI is a Practice
    • Integrate now, and frequently, rather than at the end
    of development
    • Smaller surface area for integration problems
    • Devs can rapidly fix when they occur
    • Reduces “Integration Hell”
    Wednesday, November 14, 12

    View Slide

  48. Practical CI
    involves Tools
    Wednesday, November 14, 12

    View Slide

  49. What do you need?
    • Automate your build
    • Manual steps increases risk of failure
    • Make your build self-testing
    • Writing unit tests is not enough
    • Must be able to execute tests with a single
    command
    Wednesday, November 14, 12

    View Slide

  50. Source Control
    Build Server Accessible by
    Entire Team
    Your Shell Scripts
    Commit to
    trunk / master / mainline
    often
    What do you need?
    Wednesday, November 14, 12

    View Slide

  51. What does it do?
    Wednesday, November 14, 12

    View Slide

  52. What does it do?
    Integrates projects
    Wednesday, November 14, 12

    View Slide

  53. What does it do?
    Integrates projects
    Wednesday, November 14, 12

    View Slide

  54. What does it do?
    Integrates projects
    Runs Tests
    Wednesday, November 14, 12

    View Slide

  55. What does it do?
    Integrates projects
    Runs Tests
    Wednesday, November 14, 12

    View Slide

  56. What does it do?
    Integrates projects
    Runs Tests
    Quality Analysis
    Wednesday, November 14, 12

    View Slide

  57. What does it do?
    Integrates projects
    Runs Tests
    Quality Analysis
    Wednesday, November 14, 12

    View Slide

  58. What does it do?
    Wednesday, November 14, 12

    View Slide

  59. What does it do?
    Generates
    Documentation
    Wednesday, November 14, 12

    View Slide

  60. What does it do?
    Generates
    Documentation
    Wednesday, November 14, 12

    View Slide

  61. What does it do?
    Generates
    Documentation
    Project Status
    is Visible
    to the
    Team
    Wednesday, November 14, 12

    View Slide

  62. What does it do?
    Generates
    Documentation
    Project Status
    is Visible
    to the
    Team
    Wednesday, November 14, 12

    View Slide

  63. “Fail Fast”
    Wednesday, November 14, 12

    View Slide

  64. “Fail Fast”
    This Closes our Feedback Loop
    Wednesday, November 14, 12

    View Slide

  65. • Every commit (to the trunk) should be built
    • Keep the build fast
    • Notify (and make visible to) the entire team
    • Intrusively notify the team of failures
    • Make sure to fix the build after it’s broken
    “Fail Fast”
    Wednesday, November 14, 12

    View Slide

  66. Wednesday, November 14, 12

    View Slide

  67. Word to the Wise: Don’t Break the Build!
    Wednesday, November 14, 12

    View Slide

  68. Wednesday, November 14, 12

    View Slide

  69. Other CI Considerations
    • Repeatable & reliable
    • Should be able to run the same build process locally
    • Break up large testing suites
    • Remember, “Fail Fast”
    Wednesday, November 14, 12

    View Slide

  70. If it’s difficult or painful,
    do it more often.
    Wednesday, November 14, 12

    View Slide

  71. What’s Next?
    Wednesday, November 14, 12

    View Slide

  72. Continuous Delivery
    Wednesday, November 14, 12

    View Slide

  73. Continuous Delivery is
    developing in such a way that
    software is always ready for
    release.
    Wednesday, November 14, 12

    View Slide

  74. More on Being Agile
    Wednesday, November 14, 12

    View Slide

  75. More on Being Agile
    Wednesday, November 14, 12

    View Slide

  76. More on Being Agile
    “Our highest priority is to satisfy the customer through early and
    continuous delivery of valuable software.”
    Wednesday, November 14, 12

    View Slide

  77. More on Being Agile
    “Our highest priority is to satisfy the customer through early and
    continuous delivery of valuable software.”
    Wednesday, November 14, 12

    View Slide

  78. Users Drive Your Value
    Much like beauty, value is
    in the eyes of the beholder.
    Wednesday, November 14, 12

    View Slide

  79. Get In Front of Users
    Sooner
    Wednesday, November 14, 12

    View Slide

  80. The “Last Mile” Problem
    “The further apart your releases are, the more risk you introduce
    that the changes are wrong.”
    - Jez Humble
    Wednesday, November 14, 12

    View Slide

  81. Strategies
    Wednesday, November 14, 12

    View Slide

  82. Wednesday, November 14, 12

    View Slide

  83. Wednesday, November 14, 12

    View Slide

  84. Minimum Viable Product
    Wednesday, November 14, 12

    View Slide

  85. Do the minimum
    amount of work necessary
    Wednesday, November 14, 12

    View Slide

  86. Wednesday, November 14, 12

    View Slide

  87. Get in front of users
    immediately
    Wednesday, November 14, 12

    View Slide

  88. Wednesday, November 14, 12

    View Slide

  89. Usage Patterns
    Wednesday, November 14, 12

    View Slide

  90. Wednesday, November 14, 12

    View Slide

  91. Wednesday, November 14, 12

    View Slide

  92. Wednesday, November 14, 12

    View Slide

  93. Why?
    • We want constant feedback
    • How else do we know what we’re doing is
    valuable?
    • Constant testing and improving our delivery process
    Wednesday, November 14, 12

    View Slide

  94. So
    Wednesday, November 14, 12

    View Slide

  95. Assume The Team Agrees
    Wednesday, November 14, 12

    View Slide

  96. You Deploy
    Regularly
    Wednesday, November 14, 12

    View Slide

  97. Wednesday, November 14, 12

    View Slide

  98. Wednesday, November 14, 12

    View Slide

  99. What about Large
    Features?
    Wednesday, November 14, 12

    View Slide

  100. Incomplete Features
    Wednesday, November 14, 12

    View Slide

  101. Incomplete Features
    • Sometimes a feature is just too big
    Wednesday, November 14, 12

    View Slide

  102. Incomplete Features
    • Sometimes a feature is just too big
    • Incomplete features across releases
    Wednesday, November 14, 12

    View Slide

  103. Incomplete Features
    • Sometimes a feature is just too big
    • Incomplete features across releases
    • Ship it anyways!
    Wednesday, November 14, 12

    View Slide

  104. Incomplete Features
    • Sometimes a feature is just too big
    • Incomplete features across releases
    • Ship it anyways!
    • Beware the Beta
    Wednesday, November 14, 12

    View Slide

  105. Incomplete Features
    • Sometimes a feature is just too big
    • Incomplete features across releases
    • Ship it anyways!
    • Beware the Beta
    • Solution: Feature Toggles
    Wednesday, November 14, 12

    View Slide

  106. Feature Toggles
    Wednesday, November 14, 12

    View Slide

  107. Feature Toggles
    Wednesday, November 14, 12

    View Slide

  108. Feature Toggles
    Wednesday, November 14, 12

    View Slide

  109. Feature Toggles
    Wednesday, November 14, 12

    View Slide

  110. Think about how to get to
    Production Sooner
    Wednesday, November 14, 12

    View Slide

  111. Production
    Gates
    Wednesday, November 14, 12

    View Slide

  112. Wednesday, November 14, 12

    View Slide

  113. Wednesday, November 14, 12

    View Slide

  114. Wednesday, November 14, 12

    View Slide

  115. Clear Your Path
    Wednesday, November 14, 12

    View Slide

  116. Find “Creative”
    Solutions
    Around Gates
    Wednesday, November 14, 12

    View Slide

  117. Everybody has
    responsibility for the
    release process
    Wednesday, November 14, 12

    View Slide

  118. Everybody has
    responsibility for the
    release process
    Developers Managers
    Operations
    DBAs QA
    UX
    Wednesday, November 14, 12

    View Slide

  119. Everyone’s Responsibilities
    • How do I automate the testing and validation after
    deploying?
    • How do I make it easier for the team to release?
    Wednesday, November 14, 12

    View Slide

  120. Developer
    Responsibilities
    • How do I keep my software releasable?
    • What does it take to deploy my software?
    Wednesday, November 14, 12

    View Slide

  121. DBA Responsibilities
    • How do I automate schema deployments?
    • How do I give the build server autonomy to deploy?
    Wednesday, November 14, 12

    View Slide

  122. Ops Responsibilities
    • How do I want the software to be deployed?
    • How do I give the build server autonomy to deploy?
    Wednesday, November 14, 12

    View Slide

  123. Tester Responsibilities
    • Did the automated deployment succeed?
    • This is not the same as testing software.
    Wednesday, November 14, 12

    View Slide

  124. Deploy
    Wednesday, November 14, 12

    View Slide

  125. Use the same mechanism for
    every environment
    Wednesday, November 14, 12

    View Slide

  126. Wednesday, November 14, 12

    View Slide

  127. Repeatable
    Wednesday, November 14, 12

    View Slide

  128. Deployment for SaaS
    • FTP/SCP
    • PowerShell
    • Shell Scripting
    • MSBuild
    • MSI/Installer Packages
    Wednesday, November 14, 12

    View Slide

  129. Deployment for Products
    • Windows Installers
    • Built-in, InstallShield, Wise, VISE, etc.
    • Installer (Mac OS)
    Wednesday, November 14, 12

    View Slide

  130. Deployment Quality
    • Important to establish trust
    • End-to-end functional tests become more valuable
    • Behavior-Driven Development helps to realize this
    • Other quality metrics become just as useful
    • Performance, compatibility, security
    Wednesday, November 14, 12

    View Slide

  131. When It Goes Wrong
    • Turn off the feature or rollback
    • Don’t “hack” a fix
    Wednesday, November 14, 12

    View Slide

  132. If it’s difficult or painful,
    do it more often.
    Wednesday, November 14, 12

    View Slide

  133. Is it worth it?
    Wednesday, November 14, 12

    View Slide

  134. Risk
    Wednesday, November 14, 12

    View Slide

  135. Risk
    • By removing barriers, rehearsing, and continuously
    improving the release process, the risk of a release is
    reduced
    • Becomes a regular occurrence rather than a
    traumatic procedure
    Wednesday, November 14, 12

    View Slide

  136. Risk
    • Feedback determines the viability of your feature
    • Increases confidence when it’s right
    • Decreases cost when it’s wrong
    Wednesday, November 14, 12

    View Slide

  137. Moving Forward
    • Identify a single task
    • Something that is particularly time consuming and/
    or painful
    • Automate the task
    • Start collecting metrics
    • Build team confidence
    Wednesday, November 14, 12

    View Slide

  138. Moving Forward
    • You need to talk to the business
    • Ask these questions:
    • Would you like to set the release schedule?
    • Would you like to minimize risk during deployments?
    • Would you like to maximize investment on features our
    customers really want?
    • Be sure to alert them of the up-front investment required!
    Wednesday, November 14, 12

    View Slide

  139. Moving Forward
    • Need help?
    • After the talk
    • Ask me about Lunch ‘n Learns or Assessments!
    Wednesday, November 14, 12

    View Slide

  140. Questions?
    Wednesday, November 14, 12

    View Slide

  141. spkr8.com/neraath
    Thanks!
    Wednesday, November 14, 12

    View Slide

  142. References
    • http://www.informit.com/articles/article.aspx?p=1829417
    • http://www.informit.com/articles/article.aspx?p=1750200
    • http://kief.com/the-conflict-between-continuous-delivery-and-traditional-agile.html
    • http://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/
    Wednesday, November 14, 12

    View Slide