Your SlideShare is downloading. ×
0
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
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
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
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
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
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
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
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
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
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
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
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
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Beyond TDD: Enabling Your Team to Continuously Deliver Software

1,327

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 …

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,327
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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
  • Transcript

    • 1. Beyond TDDEnabling Your Team to Continuously Deliver Software
    • 2. Me• Fightin’ Texas Aggie• .Net and PHP Developer• UNIX and Windows Sysadmin• Senior Consultant at Improving Enterprises• chris@chrisweldon.net
    • 3. Promotion
    • 4. Promotion• @neraath
    • 5. Promotion• @neraath• #adn12
    • 6. Promotion• @neraath• #adn12• #tdd
    • 7. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome
    • 8. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever
    • 9. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever• #terrbilepresenter
    • 10. Promotion• @neraath• #adn12• #tdd• #thisguyisawesome• #bestspeakerever• #terrbilepresenter• #worstpresentation
    • 11. is hiring!
    • 12. Overview• No code or demonstrations• TDD in your current environment• Continuous Integration• Continuous Delivery• Is it worth it?• Your next steps
    • 13. Agile
    • 14. in gB e Agile
    • 15. “Working software isthe primary measure of progress”
    • 16. Tests
    • 17. Unit
    • 18. Load
    • 19. UI?
    • 20. Performance
    • 21. Unit
    • 22. UnitTesting
    • 23. UnitTesting
    • 24. Unit leads toTesting
    • 25. Unit leads to TDDTesting
    • 26. Unit leads to TDDTesting
    • 27. Challenges Getting Past TDD
    • 28. Who/What Broke My Build?
    • 29. Integration
    • 30. IntegrationYou Don’t See the Forest thru the Trees
    • 31. Code Quality
    • 32. Coding Standards
    • 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. 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. 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. I will hunt you down and shoot you like a duck dog.
    • 37. Security srsly? what hacker wears a tie?
    • 38. Creating and Deploying a Releasable Package
    • 39. The Feedback Loop is Wide Open
    • 40. How to Improve?
    • 41. Continuous Integration
    • 42. CI is a Practice
    • 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. Martin Fowler
    • 45. Practical CIinvolves Tools
    • 46. What do you need? Build Server Accessible bySource Control Entire Team Your Shell Scripts Commit totrunk / master / mainline often
    • 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. What does it do?
    • 49. What does it do?Runs Tests
    • 50. What does it do?Runs Tests
    • 51. What does it do? GeneratesRuns Tests Documentation
    • 52. What does it do? GeneratesRuns Tests Documentation
    • 53. What does it do? GeneratesRuns Tests Quality Analysis Documentation
    • 54. What does it do? GeneratesRuns Tests Quality Analysis Documentation
    • 55. What does it do?
    • 56. What does it do?
    • 57. What does it do? Integrates projects
    • 58. What does it do? Integrates projectsProject Status is Visible to the Team
    • 59. What does it do? Integrates projectsProject Status is Visible to the Team
    • 60. “Fail Fast”
    • 61. “Fail Fast”This Closes our Feedback Loop
    • 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. Word to the Wise: Don’t Break the Build!
    • 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. If it’s difficult or painful,do it more often.
    • 66. Continuous Delivery
    • 67. Continuous Delivery isdeveloping in such a way that software is always ready for release.
    • 68. More on Being Agile
    • 69. More on Being Agile
    • 70. More on Being Agile“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
    • 71. More on Being Agile“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
    • 72. Users Drive Your Value Much like beauty, value is in the eyes of the beholder.
    • 73. Get In Front of Users Sooner
    • 74. The “Last Mile” Problem“The further apart your releases are, the more risk you introduce that the changes are wrong.” - Jez Humble
    • 75. Strategies
    • 76. Minimum Viable Product
    • 77. Do the minimum amount of work necessary
    • 78. Get in front of users immediately
    • 79. Usage Patterns
    • 80. Measure Conversion /Behavior Expectations
    • 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. What about Large Features?
    • 83. Incomplete Features
    • 84. Incomplete Features• Sometimes a feature is just too big
    • 85. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases
    • 86. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways!
    • 87. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways! • Beware the Beta
    • 88. Incomplete Features• Sometimes a feature is just too big • Incomplete features across releases• Ship it anyways! • Beware the Beta • Solution: Feature Toggles
    • 89. Feature Toggles
    • 90. Feature Toggles
    • 91. Feature Toggles
    • 92. Feature Toggles
    • 93. Feature Toggles
    • 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. Everybody hasresponsibility for the release process
    • 96. DBAs UX QA Everybody has responsibility for the release processOperations Developers Managers
    • 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. Developer Responsibilities• How do I keep my software releasable?• What does it take to deploy my software?
    • 99. DBA Responsibilities• How do I automate schema deployments?• How do I give the build server autonomy to deploy?
    • 100. Ops Responsibilities• How do I want the software to be deployed?• How do I give the build server autonomy to deploy?
    • 101. Tester Responsibilities• Did the automated deployment succeed? • This is not the same as testing software.
    • 102. Deploy
    • 103. Deploy• Use the same mechanism for every environment• Should be simple• For products, use the same mechanisms as your customers
    • 104. Deployment for SaaS• FTP/SCP• PowerShell• Shell Scripting• MSBuild• MSI/Installer Packages
    • 105. Deployment for Products• Windows Installers • Built-in, InstallShield, Wise,VISE, etc.• Installer (Mac OS)
    • 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. 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. If it’s difficult or painful,do it more often.
    • 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. Is it worth it?• Feedback determines the viability of your feature • Increases confidence when it’s right • Decreases cost when it’s wrong
    • 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. 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. Moving Forward• Need help? • After the talk, or after hours party • askanagilist@improvingenterprises.com
    • 114. Questions?
    • 115. Thanks!spkr8.com/neraath
    • 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/

    ×