The concepts of deploying and releasing are used interchangeably in some organizations which is understandable given their history of standing for the same set of activities. Nowadays, innovative companies employ practices such as continuous delivery and experimentation to innovate faster than ever and meet the growing expectations of their clients. To enable these practices in your organization you should start with reviewing how you launch new features to your customers.
Deploying refers to the activity of taking the latest stable version of your application’s code and copying (or pushing) it to your production environment. It is a technical activity and it should not have any impact on the end customers. Deployment to production should be a mix of existing features, that are already live on your website, and new features that are not yet available to your customers, even though they have been deployed. There are many tools nowadays that allow you to automate the entire build and deployment process; two of the tools we most commonly use are Azure Pipelines and Jenkins. These tools should give you the confidence of deploying frequently making it a boring and risk-free activity for your team.
The term release should be used when a new feature is made available to your customers. It should be a business decision and not a technical decision. Deploying and releasing are not mandatory to happen at the same time. Tools such as Optimizely make releasing new features easier than ever. They allow your business and marketing teams to decide when to release a new feature, how to release it (using a turn on/off or progressive strategy), and to whom, all from a centralized dashboard.
There are multiple benefits to separating deployments from releases. Doing more frequent deployments means you can deploy smaller changes and therefore reduce risks; it allows your team to test new features in production before releasing them to your customers. Deploying before releasing allows your technical team to run production-like payloads and assess the performance of each new feature. It enables your team to experiment more by progressively releasing new features to your customer base or launch beta programs for a selected set of customers to test the new feature in a real setting.