Workshop: Tweet"Continuous Delivery"
                          Getting software released to users is often a painful, risky, and 
time-consuming process. This tutorial sets out the principles and 
technical practices that enable rapid, incremental delivery of high 
quality, valuable new functionality to users. Through automation of the 
build, deployment, and testing process, and improved collaboration 
between developers, testers and operations, delivery teams can get 
changes released in a matter of hours–sometimes even minutes–no matter 
what the size of a project or the complexity of its code base.
Inthis tutorial we take the unique approach of moving from release back 
through testing to development practices, analyzing at each stage how 
toimprove collaboration and increase feedback so as to make the delivery
process as fast and efficient as possible. There will be interactive 
exercises where the audience practices using these techniques for 
themselves. At the heart of the tutorial is a pattern called the 
deployment pipeline, which involves the creation of a living system 
thatmodels your organization's value stream for delivering software. We 
spend the first half of the tutorial introducing this pattern, and 
discussing how to incrementally automate the build, test and deployment 
process, culminating in continuous deployment.
In the second halfof the tutorial, we introduce agile infrastructure, 
including the use of Puppet to automate the management of testing and 
production environments. We'll discuss automating data management, 
including migrations. Development practices that enable incremental 
development and delivery will be covered at length, including a 
discussion of why branching is inimical to continuous delivery, and how 
practices such as branch by abstraction and componentization provide 
superior alternativesthat enable large and distributed teams to deliver 
incrementally.
                        
