Some modern online services have hundreds or thousands of developers and release once, twice or 50 times per day. They do it with a distributed continuous process in which each change gets tested and released independently.
You cannot guarantee that your change will work with all the other changes produced by a big group of developers. To solve this problem, distributed continuous delivery leaps from "as early as possible" integration to "as late as possible" integration. With "as late as possible" integration you test each change with a recent production version of the code before you merge it with the other candidate changes.
Here is how it works:
With the distributed process, you can release every change immediately. This provides a competitive advantage for online applications and service providers. The continuous release process also reduces stress by getting fixes out more quickly, and by allowing big changes to be completed in the minimum time needed to actually do the work. Finally, the distributed continuous delivery process can include a large number of contributors distributed in multiple time zones.
With distributed continuous delivery, test environments are more complicated. Setting up multiple test environments creates a bigger workload for DevOps. Developers are responsible for maintaining versions and shepherding changes through tests. They need to know more about the test environments.
You may not have time to release all of your changes. It takes time to run the final test and deploy, because automated tests take time. Changes are tested and released sequentially. Tests for each change need to wait for tests to be completed on previous changes. If you have a lot of contributors, you may not have time to release all of their changes. To address this issue you can make a faster pre-release "smoke test," or you can cascade and batch up the changes.
Critics often observe that developers using this approach tend to work a long time on their branches and then cause integration problems when they merge big batches of code. Finding problems in these big batches of code is difficult. If you use distributed continuous delivery you should:
You will want to have multiple test environments, so that you can test each change separately. Testers will act as consultants, helping when developers ask them to look at a specific test system. Building and maintaining these test environments takes some work. However, you can use the miracle of cloud computing and versioned configurations to deliver test environments on-demand, allowing you to work with an unlimited number of contributors.