We have 5419 guests and 12 members online
Home > Articles > Columns > Articles > FEATURED BOOK: Continuous Delivery - Reliable Software Releases Through Build, Test, and Deployment Automation

FEATURED BOOK: Continuous Delivery - Reliable Software Releases Through Build, Test, and Deployment Automation

E-mail
Written by Russell Pannone   
Friday, 29 October 2010 14:00

Continuous Deliveryby Jez Humble and David Farley

Continuous Delivery is one of the best books I have read and I have read hundreds of books in my 25+ years as a system-software development professional.

This book pragmatically, clearly and concisely describes how to deliver quality and value-adding system-software.

The book is divided into three parts and fifteen chapters:

Part I - Foundations

1 - The Problem of Delivering Software
2 - Configuration Management
3 - Continuous Integration
4 - Implementing a Testing Strategy

Part II - The Deployment Pipeline

5 - Anatomy of the Deployment Pipeline
6 - Build and Deployment Scripting
7 - The Commit Stage
8 - Automated Acceptance Testing
9 - Testing Nonfunctional Requirements
10 - Deploying and Releasing Applications

Part III - The Delivery Ecosystem

11 - Managing Infrastructure and Environments
12 – Managing Data
13 – Managing Components and Dependencies
14 – Advanced Version Control
15 – Managing Continuous Delivery

Part I - Foundations
BookChapter 1 – The Problem of Delivering Software

This chapter introduces three common software release anti-patterns and gives an ideal, but nevertheless realistic, view of the scope of the book – from twenty thousand feet:

  1. Deploying Software manually
  2. Deploying to a Production-like Environment Only after Development is Complete
  3. Manual Configuration Management of Production Environment

The rest of the book is more concrete in advice and recommendations.

Chapter 2 – Configuration Management
The author’s working definition for configuration management is:

Configuration management refers to the process by which all artifacts relevant to your project, and the relationship, and the relationship between them, are stored, retrieved, uniquely identified, and modified.

The authors portend configuration management is the foundation for everything else in the book.  They hope to have made clear, it is not just a question of choosing and implementing a tool, although that is important; it is also crucially, a question of putting good practices into place.

The following aspects of configuration management are described in this chapter:

  • Using Version Control
  • Managing Dependencies
  • Managing Software Configuration
  • Managing Your Environments

Chapter 3 – Continuous Integration
If you were to choose just one practice in this book to implement on a development team, the authors recommend you choose continuous integration. Worth noting, they assert successfully implementing continuous integration is tightly coupled with two other important practices, good configuration management and the creation and maintenance of an automated build and test process.

The authors describe how continuous integration creates a tight feedback loop which allows you to find problems as soon as they are introduced and when they are cheap to fix.

Chapter 4 – Implementing a Testing Strategy
The authors describe and emphasize how testing is fundamentally interconnected with your definition of “done” and your testing strategy should be focused on being able to deliver that understanding feature by feature, and ensuring that testing is pervasive throughout your product (system0software) development lifecycle.

Part II - The Deployment Pipeline
Chapter 5 – Anatomy of the Deployment Pipeline

The authors describe the purpose of the deployment pipeline is to give everyone involved in the delivery of  software, visibility into the progress of builds from check-in to release. Articulating it should be possible to see which changes have broken the application and which resulted in release candidates suitable for manual testing or release.

The following chapters of Part II dive into considerably more detail on implementing deployment pipelines, exploring some of the common issues that may arise and discussing techniques that can be adopted within the context of the full lifecycle deployment pipelines described in this chapter.

The “Tips and Tricks” in chapter 10 are truly a valuable bonus.

Part III – The Delivery Ecosystem
Chapter 11 – Managing Infrastructure and Environments

This chapter deals with creating and managing the infrastructure in which your application will run (hardware, networking, middleware, and external services).

The recommendations the authors make and the strategies they describe certainly add complexity to the deployment systems you must create; challenging you to come up with creative workarounds for the poor support for configuration management in your third-party products. But, if you are creating a large and complex system with many configuration points, and perhaps relying on many technologies, the authors feel strongly this approach can save your project.

Chapter 12 – Managing Data
The authors the key is to ensure that there is a fully automated process for creating and migrating databases.

Many principles and practices are described in this chapter; adapted of course to your situation. Here are some of the more important principles and practices from this chapter:

  • Version your database and use a tool like DbDeploy to manage migrations automatically.
  • Strive to retain both forward and backward compatibility with schema changes so that you can separate data deployment and migration issues from application deployment issues.
  • Make sure tests create the data they rely on as part of the setup process, and the data is partitioned to ensure it does not affect other tests that might be running at the same time.
  • Reserve the sharing of setup between tests only for data required to have the application server start, and perhaps some very general reference data.
  • Try to use the application’s public API to set up the correct state for tests wherever possible.
  • In most cases, don’t use dumps of the production dataset for testing purposes. Create custom datasets by carefully selecting a smaller subset of production data, or from acceptance or capacity test runs.

Chapter 13 – Managing Components and Dependencies
Discussed in this chapter are techniques to ensure you team can develop as efficiently as possible, while keeping you application always in a releasable state.

Chapter 14 – Advanced Version Control
This chapter emphasizes the importance of a version control strategy. The authors describe a series of options to effectively deal with the fundamental tension between the desire for Continuous Integration (CI) and the desire to branch.

This chapter presents a series of options to cope with situations in which it is more efficient for a development team to compromise CI to some extent. The authors make the point though, every time you branch, you recognize there is a cost associated with it. That cost comes in increased risk, and the only way to minimize that risk is to be diligent in ensuring that any active branch, created for whatever reason, should be merged back to mainline daily or more frequently.

Chapter 15 – Managing Continuous Delivery
This chapter introduces and shows how to use a build and release Maturity Model for Configuration and Release Management; targeted at improving organizational performance.

Overall
I found Continuous Delivery to be very readable and containing pragmatic, clear and concise advice and recommendations on how to go about improving the way teams build, deploy, test and release system-software and improving overall organizational performance.


Trackback(0)

Comments (0)Add Comment


Write comment

security code
Write the displayed characters


busy
Last Updated on Friday, 29 October 2010 14:23
 
Cialis

Agile Marketplace - Announcements and Special Offers

The Business Case for ALM Transformation
Are legacy systems holding your company back?  Breakthrough these technical constraints with an open and scalable environment that meets your unique business need to transform. There is no reason to be locked into an obsolete platform. The output of a number of recent transitions from legacy systems, this is practical white paper shares lessons learned and illustrates how guidance and enablement can pave the way for change.
Download this Whitepaper