Ancestry.com, the largest for-profit genealogy company in the world, has been a leader when it comes to software development. They started over five years ago with Agile development practices and have stayed ahead of the curve with Continuous Delivery, which enables frequent releases and updates.
Teams Must Diversify Their Knowledge
In order to reap the benefits of a Continuous Delivery system, you need a team trained across testing, design, software development processes and deployment. The team should include individuals from executive management, product management and the development team. Managers — at the executive as well as product levels — must know how a Continuous Delivery model impacts the software development lifecycle, and product management needs to be educated on how this model is utilized to increase productivity.
Test in Isolation
A full integration test with deployed dependent services should be done using an isolated testing machine. Once the build has been deemed healthy, it can be deployed to publicly accessible machines. To test in isolation, the test subject should be removed from dependents and dependencies. This can be accomplished with fakes and mocks that simulate the actual behavior of these external components.
Every part of the Continuous Delivery system should be highly automated, with testing to ensure quality is in place. Coupled with small releases, the objective is to quickly obtain feedback from the system. The following should be automated in a Continuous Delivery system: Deployment, configuration management, change tracking, smoke tests and testing.
Warm Up Before Going Live
To prevent an overload due to a sudden surge in service requests, format the onset of live traffic. Deployment has to be configured to include a smoke test that exercises critical areas of code, one machine at a time, within a cluster. Product code must be engineered for quick boot up, and be robust enough to handle frequent recycling of application pools.
Keep Your Production Pipeline Robust
If management expects quicker turnaround for last-minute software patches, this is inconsistent with the concept of a Continuous Delivery model. Continuous Delivery is an automated build, deploy, test, and release process — not a means to last-minute development. Quality is important. What goes to production must be robust. Similar to a factory assembly line, a production pipeline increases throughput. It does not decrease cycle times.
Don’t Break Your Team’s System Functionality
If a team breaks system functionality, it has failed to meet the objective of a Continuous Delivery model.
In an Agile environment, we want to develop and deploy code as fast as possible, but everyone must be a good citizen. This means not introducing incompatibility issues. A good way to ensure continued functionality is to invoke test suites of dependent components.