Software development has changed a lot in the last few years. Now, instead of monolithic software delivery and long-lived feature branches, new software features can be released behind feature flags to control which users see what features and when. In continuous integration, new code is merged into trunk behind feature flags, sent to a production-like environment (aka a staging environment), built, and tested several times daily. There are two main terms for how these features are released to a production environment: continuous delivery and continuous deployment.
What Is Continuous Delivery?
Continuous delivery is a software development practice under continuous integration by which new builds are delivered to different user segments for product testing, experimentation, and software release. Development teams use feature flagging to check-in all new code into trunk in a deactivated or hidden state, going into the continuous delivery pipeline along with the rest of the codebase. Automated tests ensure that none of the source code changes cause stability issues, and DevOps and product teams can control activation of new features for internal unit tests or external testing by end users.
What Is Continuous Deployment?
Continuous delivery and continuous deployment are terms that are often confused. In fact, they are almost the same, as most of the feature release process is more or less identical. However, there is one key difference between the two: under continuous delivery, someone with sufficient privileges must approve each build to be released to production, often a product manager with just the push of a button. With continuous deployment, though, the deployment process happens automatically on a predefined release cadence, such as nightly, or even with each build. The only way to eliminate this manual step is for quality assurance and other testing to happen automatically.
Other Differences in Continuous Deployment
Continuous deployment benefits every stakeholder in the development process, as every qualified build is pushed automatically to production with no human intervention required. Investors see their funding go directly to work, testers have immediate access to spot any bugs in the new code, and customers can make use of new features right away. Continuous deployment also helps companies accelerate time to market, ensuring a better and more up-to-the-moment user experience to better match marketing timelines and product goals.
Challenges of Continuous Delivery and Deployment
Achieving continuous delivery can be a challenge, even for Agile development teams. Organizations must have tight integration of all their systems to ensure that the automated build and testing processes are fast, efficient, and conflict-free. With multiple teams including new features to the master branch continuously, there are a lot of opportunities for bottlenecks in the test suite and CI/CD pipeline. Monitoring and notification become critical, and operations and dev team staff should be on call to take immediate action if necessary.
Summary
Leveraging feature flags to achieve continuous integration and continuous delivery or continuous deployment is a monumental achievement, and the benefits of CI/CD in DevOps should not be underestimated. Using a sophisticated feature management UI, individuals outside development teams such as operations and product managers, even sales and marketing teams, can gain business value through control over and visibility into feature impact for testing, experimentation, and release.