A successful continuous delivery practice is founded on three core components that will help teams produce the best results:

Configuration management

When practicing continuous delivery, it’s vital that development teams establish a process and agree upon a common set of tools that ensure consistency across app performance, function, and user experience. Configuration management enables version control of all the parts of the CD process, such as source code, databases, documentation, test and deployment scripts, and app configuration information. Developers can then reproduce an environment when needed, and trace all dependencies used to re-create the environment. Having one source of truth—and a reliable one—provides a stable foundation on which to build a smooth deployment pipeline.

Read more on managing multiple environments >>

Continuous integration

In complex apps, changes that may seem simple and self-contained can actually produce unintended consequences. Multiple developers may be working in parallel on multiple code branches in isolated environments. When changes are merged to a common master branch, unpredictable results can occur. This often means multiple rounds of regression testing and bug fixes. Continuous integration (CI) is a component of the continuous delivery process that enables developers to integrate their updates into the master on a regular basis. With CI, automated tests before and after the merge validate that no bugs have been introduced.

See Heroku Add-ons for CI >>

Automated testing

Traditionally, testing has been done manually after code is “dev complete” to ensure that any changes don’t break the app or its systems. However, manual regression testing is time-consuming, costly, and prone to human error. Moreover, QA teams have to spend considerable time and effort keeping test documentation up to date. With continuous delivery, many different tests are run throughout the process. Some are automated, such as unit tests. Others, such as usability/acceptance testing, are still performed manually. The goal is to bring all testing into the CD process from the beginning of the delivery lifecycle, and automate repetitive tasks as much as possible. This allows developers to focus on coding and improving the app.

See Heroku Add-ons for Testing >>