Beyond TDDEnabling Your Team to Continuously Deliver Software
Me•   Fightin’ Texas Aggie•   .Net and PHP Developer•   UNIX and Windows Sysadmin•   Senior Consultant at    Improving Ent...
Promotion
Promotion•   @neraath
Promotion•   @neraath•   #adn12
Promotion•   @neraath•   #adn12•   #tdd
Promotion•   @neraath•   #adn12•   #tdd•   #thisguyisawesome
Promotion•   @neraath•   #adn12•   #tdd•   #thisguyisawesome•   #bestspeakerever
Promotion•   @neraath•   #adn12•   #tdd•   #thisguyisawesome•   #bestspeakerever•   #terrbilepresenter
Promotion•   @neraath•   #adn12•   #tdd•   #thisguyisawesome•   #bestspeakerever•   #terrbilepresenter•   #worstpresentation
is hiring!
Overview•   No code or demonstrations•   TDD in your current environment•   Continuous Integration•   Continuous Delivery•...
Agile
in gB e       Agile
“Working software isthe primary measure of       progress”
Tests
Unit
Load
UI?
Performance
Unit
UnitTesting
UnitTesting
Unit leads toTesting
Unit leads to                 TDDTesting
Unit leads to                 TDDTesting
Challenges Getting Past         TDD
Who/What Broke My     Build?
Integration
IntegrationYou Don’t See the Forest thru the Trees
Code Quality
Coding Standards
using System;namespace BeyondTDD{   public class StringUtils   {      /// <summary>      /// Strips double quotes from the...
using System;namespace BeyondTDD{    public class StringUtils    {        /// <summary>        /// Strips double quotes fr...
using System;namespace BeyondTDD {public class StringUtils{/*** I had to change this method cause Im a n00b.   public stri...
I will hunt you down and shoot you like a duck dog.
Security             srsly?           what hacker           wears a tie?
Creating and Deploying a Releasable Package
The Feedback Loop is    Wide Open
How to Improve?
Continuous Integration
CI is a Practice
CI is a Practice•   Integrate now, and frequently, rather than    at the end of development•   Smaller surface area for in...
Martin Fowler
Practical CIinvolves Tools
What do you need?                            Build Server Accessible bySource Control                                   En...
What do you need?•   Automate your build    •   Manual steps increases risk of failure•   Make your build self-testing    ...
What does it do?
What does it do?Runs Tests
What does it do?Runs Tests
What does it do?               GeneratesRuns Tests             Documentation
What does it do?               GeneratesRuns Tests             Documentation
What does it do?               GeneratesRuns Tests                   Quality Analysis             Documentation
What does it do?               GeneratesRuns Tests                   Quality Analysis             Documentation
What does it do?
What does it do?
What does it do?               Integrates                projects
What does it do?                          Integrates                           projectsProject Status  is Visible    to th...
What does it do?                          Integrates                           projectsProject Status  is Visible    to th...
“Fail Fast”
“Fail Fast”This Closes our Feedback Loop
“Fail Fast”•   Every commit (to the trunk) should be    built•   Keep the build fast•   Notify (and make visible to) the e...
Word to the Wise: Don’t Break the Build!
Other CI         Considerations•   Repeatable & reliable•   Should be able to run the same build    process locally•   Bre...
If it’s difficult or painful,do it more often.
Continuous Delivery
Continuous Delivery isdeveloping in such a way that software is always ready for           release.
More on Being Agile
More on Being Agile
More on Being Agile“Our highest priority is to satisfy the customer through  early and continuous delivery of valuable sof...
More on Being Agile“Our highest priority is to satisfy the customer through  early and continuous delivery of valuable sof...
Users Drive Your Value      Much like beauty, value is    in the eyes of the beholder.
Get In Front of Users        Sooner
The “Last Mile” Problem“The further apart your releases are, the more risk you        introduce that the changes are wrong...
Strategies
Minimum Viable Product
Do the minimum amount of work    necessary
Get in front of users  immediately
Usage Patterns
Measure Conversion /Behavior Expectations
Why?•   We want constant feedback    •   How else do we know what we’re doing        is valuable?•   Constant testing and ...
What about Large   Features?
Incomplete Features
Incomplete Features•   Sometimes a feature is just too big
Incomplete Features•   Sometimes a feature is just too big    •   Incomplete features across releases
Incomplete Features•   Sometimes a feature is just too big    •   Incomplete features across releases•   Ship it anyways!
Incomplete Features•   Sometimes a feature is just too big    •   Incomplete features across releases•   Ship it anyways! ...
Incomplete Features•   Sometimes a feature is just too big    •   Incomplete features across releases•   Ship it anyways! ...
Feature Toggles
Feature Toggles
Feature Toggles
Feature Toggles
Feature Toggles
Clear the Delivery Path•   MVP helps to make the team think about going to    production as soon as possible•   Deal with ...
Everybody hasresponsibility for the   release process
DBAs          UX          QA          Everybody has      responsibility for the         release processOperations   Develo...
Everyone’s       Responsibilities•   How do I automate the testing and    validation after deploying?•   How do I make it ...
Developer       Responsibilities•   How do I keep my software releasable?•   What does it take to deploy my software?
DBA Responsibilities•   How do I automate schema deployments?•   How do I give the build server autonomy    to deploy?
Ops Responsibilities•   How do I want the software to be    deployed?•   How do I give the build server autonomy    to dep...
Tester Responsibilities•   Did the automated deployment succeed?    •   This is not the same as testing software.
Deploy
Deploy•   Use the same mechanism for every    environment•   Should be simple•   For products, use the same mechanisms as ...
Deployment for SaaS•   FTP/SCP•   PowerShell•   Shell Scripting•   MSBuild•   MSI/Installer Packages
Deployment for          Products•   Windows Installers    •   Built-in, InstallShield, Wise,VISE, etc.•   Installer (Mac OS)
Deployment Quality•   Important to establish trust•   End-to-end functional tests become more    valuable    •   Behavior-...
Deploy•   When you’ve deployed, have automated    smoke tests validate a successful    deployment•   If something’s wrong:...
If it’s difficult or painful,do it more often.
Is it worth it?•   By removing barriers, rehearsing, and    continuously improving the release    process, the risk of a r...
Is it worth it?•   Feedback determines the viability of your    feature    •   Increases confidence when it’s right    •   ...
Moving Forward•   Identify a single task    •   Something that is particularly time        consuming and/or painful•   Aut...
Moving Forward•   You need to talk to the business•   Ask these questions:    •   Would you like to set the release schedu...
Moving Forward•   Need help?    •   After the talk, or after hours party    •   askanagilist@improvingenterprises.com
Questions?
Thanks!spkr8.com/neraath
References•   http://www.informit.com/articles/article.aspx?p=1829417•   http://www.informit.com/articles/article.aspx?p=1...
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver Software
Upcoming SlideShare
Loading in …5
×

Beyond TDD: Enabling Your Team to Continuously Deliver Software

1,620 views
1,504 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,620
On SlideShare
0
From Embeds
0
Number of Embeds
69
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 90 seconds\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 4:00\n
  • Finish at 4:00\n
  • Finish at 4:00\n
  • Finish at 4:00\n
  • \n
  • \n
  • Finish at 5:30\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish no later than 10:00\n
  • \n
  • NO LATER THAN 12:00\n
  • \n
  • \n
  • Finish at 21:00\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 15:30\n
  • Finish at 15:30\n
  • Finish at 15:30\n
  • Finish at 15:30\n
  • \n
  • \n
  • Finish at 19:00\n
  • \n
  • \n
  • Finish at 23:00\n
  • Ask audience what Continuous Delivery is. 3 responses max. \nStop at 24:00. DO NOT ASK FOR AUDIENCE PARTICIPATION IF PAST 24:00.\n
  • Finish at 24:30\n
  • \n
  • \n
  • \n
  • \n
  • Finish at 26:30\nTalk about needing to understand value.\n
  • \n
  • Finish at 27:30\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 32:00\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 35:00\n
  • Finish at 35:00\n
  • Finish at 35:00\n
  • Finish at 35:00\n
  • IF STARTING AFTER 35:00, MOVE QUICK\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Finish at 36:00\n
  • \n
  • \n
  • SKIP IF AFTER 37:30\n
  • SKIP IF AFTER 38:00\n
  • Finish at 39:00\n
  • \n
  • Finish at 40:00\n
  • \n
  • Finish at 42:00\n
  • \n
  • \n
  • Finish at 45:00\n
  • \n
  • \n
  • \n
  • Beyond TDD: Enabling Your Team to Continuously Deliver Software

    1. 1. Beyond TDDEnabling Your Team to Continuously Deliver Software
    2. 2. Me• Fightin’ Texas Aggie• .Net and PHP Developer• UNIX and Windows Sysadmin• Senior Consultant at Improving Enterprises• chris@chrisweldon.net
    3. 3. Promotion
    4. 4. Promotion• @neraath
    5. 5. Promotion• @neraath• #adn12
    6. 6. Promotion• @neraath• #adn12• #tdd
    7. 7. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome
    8. 8. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever
    9. 9. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever• #terrbilepresenter
    10. 10. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever• #terrbilepresenter• #worstpresentation
    11. 11. is hiring!
    12. 12. Overview• No code or demonstrations• TDD in your current environment• Continuous Integration• Continuous Delivery• Is it worth it?• Your next steps
    13. 13. Agile
    14. 14. in gB e Agile
    15. 15. “Working software isthe primary measure of progress”
    16. 16. Tests
    17. 17. Unit
    18. 18. Load
    19. 19. UI?
    20. 20. Performance
    21. 21. Unit
    22. 22. UnitTesting
    23. 23. UnitTesting
    24. 24. Unit leads toTesting
    25. 25. Unit leads to TDDTesting
    26. 26. Unit leads to TDDTesting
    27. 27. Challenges Getting Past TDD
    28. 28. Who/What Broke My Build?
    29. 29. Integration
    30. 30. IntegrationYou Don’t See the Forest thru the Trees
    31. 31. Code Quality
    32. 32. Coding Standards
    33. 33. using System;namespace BeyondTDD{ public class StringUtils { /// <summary> /// Strips double quotes from the provided <paramref name="sourceString" />. /// </summary> /// <param name="sourceString">The source to strip quotes from.</param> /// <returns>A string without quotes.</returns> public string StripQuotes(string sourceString) { if (string.IsNullOrEmpty(sourceString)) throw new ArgumentNullException("sourceString"); return sourceString.Replace(", string.Empty); } }}
    34. 34. using System;namespace BeyondTDD{ public class StringUtils { /// <summary> /// Strips double quotes from the provided <paramref name="sourceString" />. /// </summary> public string StripQuotes(string sourceString) { if (sourceString == null) { throw new ArgumentNullException("sourceString"); } return sourceString.Replace(", ""); } // Look at all the spaces, ma! }}
    35. 35. using System;namespace BeyondTDD {public class StringUtils{/*** I had to change this method cause Im 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(", "");} } }
    36. 36. I will hunt you down and shoot you like a duck dog.
    37. 37. Security srsly? what hacker wears a tie?
    38. 38. Creating and Deploying a Releasable Package
    39. 39. The Feedback Loop is Wide Open
    40. 40. How to Improve?
    41. 41. Continuous Integration
    42. 42. CI is a Practice
    43. 43. 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”
    44. 44. Martin Fowler
    45. 45. Practical CIinvolves Tools
    46. 46. What do you need? Build Server Accessible bySource Control Entire Team Your Shell Scripts Commit totrunk / master / mainline often
    47. 47. 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
    48. 48. What does it do?
    49. 49. What does it do?Runs Tests
    50. 50. What does it do?Runs Tests
    51. 51. What does it do? GeneratesRuns Tests Documentation
    52. 52. What does it do? GeneratesRuns Tests Documentation
    53. 53. What does it do? GeneratesRuns Tests Quality Analysis Documentation
    54. 54. What does it do? GeneratesRuns Tests Quality Analysis Documentation
    55. 55. What does it do?
    56. 56. What does it do?
    57. 57. What does it do? Integrates projects
    58. 58. What does it do? Integrates projectsProject Status is Visible to the Team
    59. 59. What does it do? Integrates projectsProject Status is Visible to the Team
    60. 60. “Fail Fast”
    61. 61. “Fail Fast”This Closes our Feedback Loop
    62. 62. “Fail Fast”• 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
    63. 63. Word to the Wise: Don’t Break the Build!
    64. 64. Other CI Considerations• Repeatable & reliable• Should be able to run the same build process locally• Break up large testing suites • Remember, “Fail Fast”
    65. 65. If it’s difficult or painful,do it more often.
    66. 66. Continuous Delivery
    67. 67. Continuous Delivery isdeveloping in such a way that software is always ready for release.
    68. 68. More on Being Agile
    69. 69. More on Being Agile
    70. 70. More on Being Agile“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
    71. 71. More on Being Agile“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
    72. 72. Users Drive Your Value Much like beauty, value is in the eyes of the beholder.
    73. 73. Get In Front of Users Sooner
    74. 74. The “Last Mile” Problem“The further apart your releases are, the more risk you introduce that the changes are wrong.” - Jez Humble
    75. 75. Strategies
    76. 76. Minimum Viable Product
    77. 77. Do the minimum amount of work necessary
    78. 78. Get in front of users immediately
    79. 79. Usage Patterns
    80. 80. Measure Conversion /Behavior Expectations
    81. 81. Why?• We want constant feedback • How else do we know what we’re doing is valuable?• Constant testing and improving our delivery process
    82. 82. What about Large Features?
    83. 83. Incomplete Features
    84. 84. Incomplete Features• Sometimes a feature is just too big
    85. 85. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases
    86. 86. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways!
    87. 87. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways! • Beware the Beta
    88. 88. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways! • Beware the Beta • Solution: Feature Toggles
    89. 89. Feature Toggles
    90. 90. Feature Toggles
    91. 91. Feature Toggles
    92. 92. Feature Toggles
    93. 93. Feature Toggles
    94. 94. Clear the Delivery Path• MVP helps to make the team think about going to production as soon as possible• Deal with Production Gates • Work to cut, simplify, or work around organizational red tape • Find “creative solutions” that satisfy everyone while emphasizing the business goals
    95. 95. Everybody hasresponsibility for the release process
    96. 96. DBAs UX QA Everybody has responsibility for the release processOperations Developers Managers
    97. 97. Everyone’s Responsibilities• How do I automate the testing and validation after deploying?• How do I make it easier for the team to release?
    98. 98. Developer Responsibilities• How do I keep my software releasable?• What does it take to deploy my software?
    99. 99. DBA Responsibilities• How do I automate schema deployments?• How do I give the build server autonomy to deploy?
    100. 100. Ops Responsibilities• How do I want the software to be deployed?• How do I give the build server autonomy to deploy?
    101. 101. Tester Responsibilities• Did the automated deployment succeed? • This is not the same as testing software.
    102. 102. Deploy
    103. 103. Deploy• Use the same mechanism for every environment• Should be simple• For products, use the same mechanisms as your customers
    104. 104. Deployment for SaaS• FTP/SCP• PowerShell• Shell Scripting• MSBuild• MSI/Installer Packages
    105. 105. Deployment for Products• Windows Installers • Built-in, InstallShield, Wise,VISE, etc.• Installer (Mac OS)
    106. 106. 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
    107. 107. Deploy• When you’ve deployed, have automated smoke tests validate a successful deployment• If something’s wrong: • Turn off the feature or rollback • Don’t “hack” a fix
    108. 108. If it’s difficult or painful,do it more often.
    109. 109. Is it worth it?• 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• Everyone is involved in making the release process more automated & efficient
    110. 110. Is it worth it?• Feedback determines the viability of your feature • Increases confidence when it’s right • Decreases cost when it’s wrong
    111. 111. Moving Forward• Identify a single task • Something that is particularly time consuming and/or painful• Automate the task• Start collecting metrics• Build team confidence
    112. 112. 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!
    113. 113. Moving Forward• Need help? • After the talk, or after hours party • askanagilist@improvingenterprises.com
    114. 114. Questions?
    115. 115. Thanks!spkr8.com/neraath
    116. 116. 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/

    ×