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 under feature flags to control which users see what features and when. In continuous integration, new code is merged into trunk under feature flags, sent to 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, the deployment process happens automatically on a pre-defined release cadence, such as nightly, or even with each build.
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 for Agile development teams. Organizations must have tight integration of all their systems to ensure that the build and automated testing process is 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 delivery pipeline. Monitoring and notification become critical, and operations and dev team staff should be on call to take immediate action if necessary.
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.