Continuous integration and continuous deployment (CI/CD) are well-known practices which are become more widely used by tech teams to deliver software.
Quite often, however, these pipelines only go as far as a QA or Staging environment where code changes and infrastructure changes build until such a time as a decision maker says it’s time to push the button to go live.
Whilst this is great for the development process you can then hit the same issues you are trying to avoid during development in your deployment into production.
Continuous deployment to production essentially takes these practices and extrapolates them through to production.
Simply put this means when a feature is “done” and merged into the master branch of a repository, the build pipeline kicks in to run unit tests, test automation suites, and any other automated quality checks that you may have in place, eventually ending with production deployment.
In order to continuously deliver software into production, whilst maintaining quality, it is paramount to ensure that your entire build and deployment pipeline is automated.
Making small changes little and often has been proven to help de-risk deployments. Small changes made in the morning and deployed in the afternoon, for example, allow for any issues after deployment to be easily tracked down, debugged and fixed quickly although if your automated checks are designed in the right way these events will be a rarity.
Having a high level of confidence in what you are shipping is something that is a prerequisite for CDP to work, and work well.
If deployments to production only run every three months, running these scripts, or in some cases, manual deployment can be scary, risky and problematic.
Automating this entire process and running it multiple times a day helps to maintain confidence in the pipeline resulting in the triviality of deployments into production. Immutability in your applications and even your infrastructure allows for deterministic deployments which adds another level of confidence.
The benefits of constantly shipping small changes to production are not only limited to the realm of technology. User experience and visual designers also benefit from these changes as the iteration loop, given your process, can be significantly reduced allowing a real measure and learn approach to how you develop your applications.