I am coming more from the web development angle. We build a module, test it and then deploy it. Some people call this last step (deploy) as 'release'. What's the difference? or are they the same things?
I don't think the terms release" and "deployment mean exactly the same, thing I'm not sure they should be used interchangeably like that.
From a web development perspective:
Deployment refers to getting your program to a running state on a server. It doesn't need to be the production server. You can deploy an application/module to a testing server that is running on your own workstation or on a testing machine. You might perform many deployments during the development and testing stages of a module or application.
A release (I'm using "release" as a noun) of the application/module is usually a specific version of code/resources that has been assigned a name/number. This is usually done so that a user has trouble with the application/module, knowing the release number of the software that the user has can help determine where/when the bug may have been introduced and can also help track the process of fixing it. A release can be created when new features are added, or a set of bugs are fixed.
In the example you give, where the last step in the process can be called "release" or "deployment", there is probably some work that involves creating a release (assigning a number, etc...) and then immediately deploying that release to a production server.
It seems a little confusing to me. I try to keep these terms separate and I try to say things such as
I am deploying the newest production-ready release (1.3.5) to server.somehost.com". Then I will deploy the latest testing-release (1.4.1-beta) to test3.somehost.com
Deploy is a very loose term. Normally it refers to installing the code where it can be used. You can deploy released code, or code that is no where ready for release. In web development, it is common to deploy code to a test environment before testing it. I've created build chains that built code and deployed it automatically to a development server for developer testing. Many build chain tools include the capability to deploy successful builds.
A common release cycle is (labeling and deployment to production are not always done):
- build, deploy and test code until it is potentially ready for release;
- label that code as a release candidate;
- deploy the release candidate for pre-release testing;
- generate release candidates until a release candidate is stable enough for release;
- label the stable release candidate as a release version; and
- deploy the release version to production.
Some build chains label or otherwise mark every build. Release candidates are identified by the build label. Release candidates and and release versions may be tagged with an additional label.
Creating a release consists of compiling a program (Usually an application or a library) and incrementing the version number of what you just compiled in your source control system. There might be additional steps to your release process like sending out emails to those that might be interested.
After you created a release you can deploy it. You deploy desktop applications to users, libraries to a public repository and web applications to servers.
If you deploy "snapshots" without making a release or don't use versioning, I wouldn't call that releasing.
Take a typical app.
I develop a new version and release it: it's available for installation (App Store / Play Store, Steam, my site, etc).
My customers notice that, read the release notes, plan an upgrade, or just press "Update to latest version", and this deploys the application to their devices.
Suppose the updated app has a bug that affects some users. These users discover the problem and roll back to a previous version. That is, they deploy a different release than I've just made.
In other words:
- release = make available.
- deploy = actually make it run on target devices.
There is a deep discussion on the differences at https://english.stackexchange.com/questions/182724/what-is-the-difference-between-deployment-and-release
To sum it up,
- Deploy - putting a piece of software somewhere
- Release - making a new version (or feature) available to use by users
In terms of web development, sometimes you might deploy a new version, but at the same time new features are disabled (using feature flags) and are not released until a business dicision is made to release these.
In many cases it makes a lot of sense, take for example the Facebook Messenger app. It was deployed and active on Facebook servers for a whole year before users could start actually using it.