Jez Humble (@JezHumble) is a Principal Consultant with ThoughtWorks, and co-author of Jolt Award winning book Continuous Delivery (http://continuousdelivery.com/). He got into IT in 2000, just in time for the dot-com bust. Since then he has worked as a developer, system administrator, trainer, consultant, manager, and speaker. He has worked with a variety of platforms and technologies, consulting for non-profits, telecoms, financial services, and online retail companies.
His focus is on helping organisations deliver valuable, high-quality software frequently and reliably through implementing effective engineering practices in the field of Agile delivery.
1. How does continuous delivery improve collaboration between developers, testers, and operations?
Continuous delivery improves collaboration between everybody involved in software delivery by requiring it. It’s impossible to achieve high quality systems without developers and testers physically working together, and without developers being accountable for how the systems they build perform in real life. When testers work in silos physically separated from developers, quality always gets worse. When operations work in silos and don’t collaborate with developers, deployment is always going to be a high-risk, painful activity.
2. How do you sell the benefits of continuous delivery to clients who have infrequent releases?
The HP LaserJet firmware team just brought out a book that describes how they implemented continuous delivery: “A Practical Approach to Large-Scale Agile Development“. Obviously you don’t ship new firmware that often, but implementing continuous delivery provided enormous benefits for them. They measured team activity over the three years it took them to implement continuous delivery and found it reduced development costs by 40% and increased the amount of time the teams were spending on feature development (as opposed to non-value-add activities such as integration and manual testing) by a factor of 5. They implemented continuous integration and extensive test automation – they have 30,000 automated functional tests that run in virtual and emulated environments on logic boards – and if somebody checks in a change to version control that breaks the tests, the change gets automatically reverted straight back out of version control. The most important benefits of continuous delivery are second order – giving developers fast feedback so they can take responsibility for their actions, so they get rewarded for delivering work that is integrated, tested and production-ready, rather than “dev complete”. That forces teams to architect their systems with automated testing and deployment in mind, and to perform those activities frequently from early on. If you’re doing it right, you completely remove the integration and testing phase – your software is in a deployable state from day 1 of the build phase, which means releases are low risk, you can get feedback much more quickly and avoid working on features that aren’t valuable to your customers, and you can measure your progress and identify risks in a transparent way.
3. What are some of the challenges teams face when adopting continuous delivery?
The main challenges to adopting continuous delivery are organizational and architectural, and these two problems are tightly coupled (which is what Conway’s Law tells us). It’s usually best to start with continuous integration, which means every developer is checking in to trunk at least once a day, we build and test the complete, integrated system every time a change is made to version control, and if there is a problem everybody pays attention and we prioritize fixing it straight away. Doing everything in that one sentence is still a tall order for most organizations. Often there aren’t enough automated tests, the ones that exist are flaky, they’re expensive to create and maintain, and nobody cares much if they fail. Production-like integration environments are often expensive to provision and hard to get access to. Developers don’t work on trunk because it slows down the rate at which they can declare their crappy, buggy, undeployable code “dev complete”. It’s hard to retrofit automation to systems that aren’t designed for it, and it’s hard to retrofit CD into silo-based organizations. So adoption is usually impossible unless management is bought in and at least some of the engineers are willing to change the way they work. It’s always the organizational issues that kill you in the end.
4. What is the take away for the attendees of the workshop?
The low-down on how to implement continuous delivery in real life, even in large, distributed organizations. I cover everything from continuous integration to patterns for low-risk releases, with material on automated infrastructure management, managing databases, and how to create maintainable suites of automated acceptance tests. I also discuss organizational issues and the value proposition so practitioners are equipped to talk to their management. That’s a lot of ground to cover so there’s no hands-on coding, but the advantage is that it’s at a high enough level that anybody can benefit – developers, infrastructure people, dbas, managers, testers. One of the benefits is that just by getting all those different roles into one room, we can get an appreciation for the problems we each face, which usually leads to some interesting discussions.
Past Talks: http://continuousdelivery.com/talks/