TechOpsGuys.com Diggin' technology every day

22Jul/091

The Release Management Process

TechOps Guy: Jason

Reliable, Repeatable, Results Over Time. One of my mentors over the years, David Gedye, pounded in my head early in my career that my goal as an Ops/IT expert was to achieve "Reliable, Repeatable, Results Over Time." In everything I did, he would hammer this phrase home.

Every company who has a website or web application should have a disciplined Release Management Process. There are so many benefits from getting this right and I'm sure everyone is familiar with not getting this one right. The results of a poor process usually entail, Development throwing code over the fence to Test and subsequently throwing it over to the Technical Operations team. The end result usually ends in configuration, integration issues or last minute bug fixes that do not get thoroughly tested for regressions. One of my strengths is being able to walk into an organization and either establish or help improve the current Release Management Process. To do this successfully I first examine the following things:

  • What environments are involved in the development, testing and production of your application?
  • How are these environments configured and who owns them?
  • How are the virtual teams communicating when a release is ready to move from one environment to the next?
  • Is there a tracking system for these releases?
  • What technologies are used to store and secure the source code?
  • What technologies are used to deploy the code from one environment to another?

Environments

If I could start from scratch and had the headcount and funds to do so, I would deploy the following 5 environments:

Development, Test, Sandbox, Staging & Production

While most organizations likely already take advantage of a Development and Production environment; the other 3 environments can provide great value. Let me explain.


Development

Description: Primary environment to perform feature development and unit
testing owned by the Development team

Support Policy: OPS supports the hardware and OS level support,
Development supports the Application

Deployments: Performed by Developers at their discretion

Version: Running R1.2 (or 2 versions ahead of Production)

Test
Description: Primary environment to perform
initial integration testing, basic performance/load testing owned by the
Quality Assurance (Test) team
Support Policy: OPS supports the hardware
and OS level support, Quality Assurance (Test) supports the Application
Deployments: Performed by Software Test
Engineers at their discretion
Version: Likely running R1.0, R1.1 and R1.2
- since this environment is not a copy of Production there are likely
multiple instances with multiple versions

Sandbox

Description: Environment to test complete builds of the application(s);
full integration testing occurs here with recent backups of sanitized
Production data; usually working on v. + 1 of Production.

Support Policy: OPS supports hardware, OS and Application level support

Deployments: Performed by OPS once signed off on by Development and
Test; Release Form must be completed prior to deployment

Version: Running R1.1 (or 1 version ahead of Production)

Staging

Description: Environment to used primary for hotfixes, data only and
small code changes. Environment is needed as to not disrupt build
testing in SANDBOX. This is definitely a luxury item as it can be
costly to manage the additional burden of equipment/OS/application.
Code base should match Production.

Support Policy: OPS supports hardware, OS and Application level support

Deployments: Performed by OPS once signed off on by Development and
Test; Release Form must be completed prior to deployment

Version: Running R1.0 (Runs identical code to Production)

Production

Description: This is the LIVE environment where the customers use the
application.

Support Policy: OPS supports hardware, OS and Application level support

Deployments: Performed by OPS once signed off on by Development and
Test; Release Form must be completed prior to deployment

Version: Running R1.0


Release Management

Release Management

Types of Fixes & Proper Lead Time

One of the most difficult problems a team needs to resolve is setting appropriate expectations to internal customers, external customers and application users regarding the amount of time it takes to properly release items from Development to Production. Often times these
expectations are not documented and this can only lead to disappointment in customer response to critical issues, lack of proper time to ensure quality
testing and little or no practice in deployment of these fixes/feature sets. So the main question is how do we classify releases and how much lead time does
each classification require to ensure a high level of quality while still be very responsive to customer issues. Below I've outlined a strategy that helps
tackle some of these difficult issues.


Data fix

Description: This often occurs within ASP applications where a sample of
data needs cleaning up, logically deleted or otherwise altered

Environments: Data fixes depending on scale and risk are often run and
verified in the Staging environment before moving onto Production

Version: 1.01, .01 indicates a revision to the application

Lead Time: Same day turn-around; if it is in by 3pm it can be deployed
later that evening during a scheduled deployment

Hotfix

Description: Generally a break/fix situation with an application

Environments: Hotfixes are generally run and verified in the Sandbox
environment before moving to Staging and ultimately onto Production

Version: 1.01, .01 indicates a revision to the application

Lead Time: Potential Same day turn-around, but would prefer a full day's
notice. A full day's notice would allow for a full day of testing
before the deployment date and allow an on and offshore test team to
verify a fix; again if it is in by 3pm it can be deployed later that
evening during a scheduled deployment.

Incremental Release

Description: Incremental Releases include the introduction/modification
of new features, slight updates/tweaks to the UI, collection of bug
fixes that have been triaged into the release

Environments: Incremental Releases are generally run and verified in the
Sandbox environment before moving to Staging and ultimately onto
Production

Version: 1.2, .2 indicates a revision to the application

Lead Time: 2 full day's notice. This will allow Operations to retrieve
an identical copy of data from Production to do a full and accurate
deployment in Sandbox. The restoration of Production data takes time to
complete so the additional day's notice is needed. Again if it is in by
3pm it can be deployed 2 days later during a scheduled deployment.

Milestone Release

Description: These are the biggies! Large feature set deployments,
architecture changes, data model changes and additional bug fixes that
have been triaged into the release

Environments: Incremental Releases are generally run and verified in the
Sandbox environment before moving to Staging and ultimately onto
Production

Version: 2.0, 2.0 indicates a revision to the application

Lead Time: 5 full day's notice. This will allow Operations to retrieve
an identical copy of data from Production to do a full and accurate
deployment in Sandbox. The restoration of Production data takes time to
complete so the additional day's notice is needed. Again if it is in by
3pm it can be deployed 5 days later during a scheduled deployment.

* Lead time descriptions can always be a little fuzzy. Let's just state that the lead time stated above encourages a rapid
response to customer issues while still maintaining enough time for Quality Assurance Testing...not just Black Box testing :)

Hardware Selection

Hardware selection is driven completely by the budget you have to spend. If you're web farm for your application is 10 web servers you likely will not need more than 2 web servers to fully simulate the Production environment in Sandbox and Staging. Also, if you are not
performance/load testing in Sandbox and/or Staging then you can get away with cheaper desktop or inexpensive rack mounted servers rather than the beefier hardware you are likely running in Production.

Comments About Configuration

I'm not a big fan of consolidating multiple services on 1 server in Sandbox, unless it is similarly configured in
Production. Whether it's football, baseball or Operations; you need to practice like you're gonna play which is the motivation for this.

Tracking a Release

It seems obvious that a release should be documented and recorded to review over time. The obvious solution is to create a database where you can store information on releases. The following represents what I would consider the ideal information you should capture in your database.


Variable

Selection Options

Description
Environment Select Drop-down Sandbox, Staging,
Production
Release Type Select Drop-down Hot Fix, Service Release,
Full Release, Configuration
Application Select Drop-down Jobster Service Corporate
Website JIVE - Delight Highdeal Jobster Search Static Content Coffee
Robot UJobs
Version
Release Instructions Text area for sets of
instructions
Requested By Select Drop-down
Development Lead Select Drop-down
QA Lead Select Drop-down
Notify Pre-selected Groups Technical Operations,
Quality Assurance/Test, Development, Program Management
Comments Text area for comments
about the release
Typically errors
encountered upon deployment, etc.
Deployment Start Time Entered by the Release
Tracker
Deployment End Time Entered by the Release
Tracker
Submit to QA Time Entered by the Release
Tracker
Delete Time Entered by the Release
Tracker
Failed Time Entered by the Release
Tracker
Passed QA Time Entered by the Release
Tracker

Upon each Release Tracker Deployment Request Form completed the following individuals are notified: Requester, Development Lead for the application, QA Lead for the application, anyone else selected under Notify Groups and the entire Technical Operations team.

Source Code Repositories

Visual Source Safe, Subversion, CVS, Source Depot, etc...your source code needs to be stored in a system that allows for labels, branching and versioning. The key to any Release Tracking process is to make sure you are able to roll back to a previous version of the source code should the need arise. All of the above source code repositories support a labeling or versioning system within the software. To make the Release Tracker process work, you must have a Label or Version correctly identified in your source code repository. It is this version that will be tracked from Deployment Request to Deploying Notification to Deployed and Ready for QA, to Passed/Fail QA; should the process fail anywhere along the way there should be a clear version that the Technical Operations team can roll back to.

Filed under: Uncategorized 1 Comment