What is the difference between "deployment" and "release"?

In work environment, we frequently encounter the words "deployment" and "release" in technical context. I often hear them used interchangeably also. It is mainly related to "Release and Deployment Management".

For example, Information Technology Infrastructure Library (ITIL) defines the aim of Release and Deployment Management as:

ITIL Release and Deployment Management aims to plan, schedule and control the movement of releases to test and live environments. The primary goal of Release Management and Deployment Management is to ensure that the integrity of the live environment is protected and that the correct components are released.

Source: http://wiki.en.it-processmaps.com/index.php/Release_and_Deployment_Management

Additionally, I found the below technical definitions but these are not the only usages:

release:
1. Making a version of software available to the public.
2. A software version which has been made available to the public.
Source: http://www.computeruser.com/dictionary

deploy: To install, test and implement a computer system or application.
Source: http://www.webopedia.com/

Wikipedia's "software deployment" article mentions below but it looks like the below definitions can not be applied to all kind of deployments in an IT environment:

Software deployment is all of the activities that make a software system available for use.

The release activity follows from the completed development process. It includes all the operations to prepare a system for assembly and transfer to the customer site. Therefore, it must determine the resources required to operate at the customer site and collect information for carrying out subsequent activities of deployment process.


Questions:

  • What is the difference between "deployment" and "release"? (This question asks a general difference in a technical context but to be more specific, it can be related to a "code change".)

  • Can we use these words interchangeably?

    For example, Can we use both sentences below and can they have the same meaning?

    I will release the change to production.
    I will deploy the change to production.

  • ITIL also defines one of the Role/Sub-Process as Release Deployment.

    So, is "release" used as a noun mainly in this context?
    Are releases always deployed?
    Can we release a release?

Note: I would like to get answers from real life experiences about the usage of these terminologies in work environments and release management processes.

Note2: Great subjective questions invite sharing experiences over opinions. Certainly experiences inform opinions, but the best subjective questions unabashedly and unashamedly prioritize sharing actual experiences over random opinions.
Source: http://blog.stackoverflow.com/2010/09/good-subjective-bad-subjective/


There is no universal definition for these terms, so their use will vary among teams. The most common usage in my experience is:

release (noun): A version of software intended for use outside the development team. A release need not be customer-centric. Some teams, for instance, differentiate between internal release (e.g. for software QA or demo activities) and external release (e.g. for customers or production). Ideally a release is associated with a checkpoint in the version control system and generated through a well-defined, repeatable process. ("I'm creating the 1.2 release now.")

release (verb): The act of making a release version available to a wider audience. ("We're going to release 1.2 to QA tomorrow.")

deploy (verb): The act of installing and configuring a version of software onto a target system. The version need not be a release; in some environments you can most certainly deploy development versions. ("I'm deploying 1.2 to the public website.")

So to answer your specific questions:

  • Within a given team, these words should not be used interchangeably, but due to people drawing from varied experiences and definitions, there will often be confusion.

  • You can release a release.

  • You do not always necessarily "deploy" a release.
    (1) You can deploy things that are not releases, primarily for development purposes.
    (2) Embedded software goes through a different production process that is not generally called "deploying".
    (3) Consumer "deployments" are often simply called "installations" - one does not typically refer to a customer "deploying" Windows 8 on their home computer.


This is really a technical question, but since I can't think of a better place to answer it I'll do so here.

To release something (in a sales or product sense) is to make it available, usually for purchase.

To deploy something is to make it active, or start it working.

For example:

I release software by making it available for customers to purchase. Those customers then purchase it, take delivery, and deploy it to their websites.

For a concrete example, my new model of umbrella is released when it is put on shelves for people to buy. It is deployed for the first time when the first customer puts it up.

It can be a little more complicated. A website owner might deploy software they have purchased to their website, but since it is not used until one of their customers actually runs it, they sometimes talk about releasing it to their customers.


What is the difference between "deployment" and "release"? (This question asks a general difference in a technical context but to be more specific, it can be related to a "code change".)

"Releasing" means "identifying a version which people are allowed to deploy".

"Deploying" means "preparing to use a release, e.g. by installing it on the production hardware."

"Releasing" is a multi-stage process and has slightly different meanings for each person or at each stage:

  • A developer might "release" (a.k.a. "commit") their change into the central repository
  • The integration server might "release" a sanity-checked build to the QA team
  • The QA team might "release" the build to alpha and/or beta testers
  • Eventually you have a "gold" release that's suitable for actual deployment

Can we use these words interchangeably? For example, Can we use both sentences below and can they have the same meaning?

  • I will release the change to production.
  • I will deploy the change to production.

They're slightly different.

  • "I will release the change to production" means "I give permission to the production team to allow them to deploy the change." (and I give the change to the production team, or give them permission to get the change for themselves from the repository)

  • "I will deploy the change to production" means "I myself will interact with the production system to install the change on the production hardware".

So, is "release" used as a noun mainly in this context?

It's a noun and a verb and an adjective.

  • "I release this version"
  • "This version is a release"
  • "This is a release version" (or "released version")

Are releases always deployed?

No: not if you have no customer, for example.

Also if you're doing 'continuous integration' then in theory, to some extent, you're continually creating "releases", e.g. they're "released" to the QA machine, but they're not always "deployed", e.g. "deployed" to the customer/production machine.

So, see also the different meanings of "release": e.g. an "alpha release" is released to "alpha testers" but not "deployed" to the "production" machine.


And for some humour:

Klingon Software Quality Assurance

What is this talk of 'release'? Klingons do not make software 'releases'. Our software escapes, leaving a bloody trail of designers and quality assurance people in its wake!