<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Principia &#187; Release Management</title>
	<atom:link href="http://blog.principia-it.co.uk/category/itslm/release-management/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.principia-it.co.uk</link>
	<description>Power from Simplicity</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:40:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.principia-it.co.uk' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/6f78c9f4917c134dd89eb02c5ec6e5d8?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Principia &#187; Release Management</title>
		<link>http://blog.principia-it.co.uk</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.principia-it.co.uk/osd.xml" title="Principia" />
	<atom:link rel='hub' href='http://blog.principia-it.co.uk/?pushpress=hub'/>
		<item>
		<title>The importance of release identities</title>
		<link>http://blog.principia-it.co.uk/2009/10/13/the-importance-of-release-identities/</link>
		<comments>http://blog.principia-it.co.uk/2009/10/13/the-importance-of-release-identities/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 09:54:27 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Release Management]]></category>
		<category><![CDATA[release identity]]></category>
		<category><![CDATA[release number]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=368</guid>
		<description><![CDATA[Having carefully avoided &#8216;release numbers&#8217; in the title of this post, I shall now proceed to describe a release numbering scheme. The specifics of release numbering schemes are endlessly discussed. Each proponent of a specific scheme believing that their scheme is the best. I shall be no different. One widely accepted scheme consists of period [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=368&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Having carefully avoided &#8216;release numbers&#8217; in the title of this post, I shall now proceed to describe a release numbering scheme. The specifics of release numbering schemes are endlessly discussed. Each proponent of a specific scheme believing that their scheme is the best. I shall be no different.<span id="more-368"></span></p>
<p>One widely accepted scheme consists of period separated integers. The number of integers varies, as does the interpretation of each integer. Again, I shall be no different here and will present a four integer scheme in which each integer has a specific interpretation.</p>
<p>The general form of the release identity presented in this post is as follows.<br />
<code>major.minor.build.patch</code>This scheme should be broadly familiar to most release managers, especially those dealing with Microsoft assemblies. Whether my interpretation of each integer comports to expectations remains to be seen.</p>
<h1><span class="code">major</span> and <span class="code">minor</span></h1>
<p>The first to components <span class="code">major.minor</span> are the principal release identity. The <span class="code">major</span> component is incremented when functional change is introduced into the release. The <span class="code">minor</span> component is incremented when non-functional change is introduced into the release.</p>
<p>Generally, a functional change modifies the behaviour of a component but the <span class="code">major</span> component of the identity should also be incremented when there is a change to the interface of the component. This provides a simple means of establishing interface compatibility for system components. It is clear, from the release identity alone, that <span class="code">1.1</span> of a library is a drop-in replacement for <span class="code">1.0</span>. Replacing <span class="code">1.0</span> of a library with <span class="code">1.1</span> should require no changes to the calling application since, by maintaining the <span class="code">major</span> part of the identity the release manager has declared that there are no functional changes and no interface changes between <span class="code">1.0</span> and <span class="code">1.1</span>.</p>
<h1 class="code">build</h1>
<p>It is an inevitable reality of software development that any release will undergo many rounds of testing, each proceeded by a new build of the software to be released. The <span class="code">build</span> component of the release identity. Some people like to left zero fill the <span class="code">build</span> component so that the release identities are sorted into chronological order when sorted using natural ASCII codes. (That is, rather than starting the <span class="code">build</span> component <span class="code">1</span>, <span class="code">2</span>, <span class="code">3</span>, and so on, they start <span class="code">0001</span>, <span class="code">0002</span>, <span class="code">0003</span>.)</p>
<h1 class="code">patch</h1>
<p>A Patch is a partial release. This could mean that only a part of the build is rebuilt, but the entire system is repackaged for release, or it could mean that only one or two components of the entire system are built and released. Either way, the package identified with a <span class="code">patch</span> is considered an incremental package to be applied in <span class="code">patch</span> number order to the underlying release.</p>
<p>For example, suppose we had released <span class="code">1.0.123</span> (build <span class="code">123</span> of release <span class="code">1.0</span>) to testing. After this release a minor issue is discovered in a library package. Rather than re-release the entire package again (as <span class="code">1.0.124</span>) the release manager decides to release the updated library as a patch. This patch is identified as <span class="code">1.0.123.1</span> and consists of only the updated library. Subsequently, another library update is required. Again a patch release is chosen and released as <span class="code">1.0.123.2</span>. In order to release <span class="code">1.0.123.2</span> to any subsequent environment must install <span class="code">1.0.123</span>, then <span class="code">1.0.123.1</span> and finally <span class="code">1.0.123.2</span> in order to produce the final, correctly configured, system.</p>
<p>It should be self-evident that this <span class="code">patch</span> numbering scheme is only used in unusual circumstances. It should also be self-evident that the inclusion of a <span class="code">patch</span> number immediately alerts deployment engineers of the need to apply patches and the correct deployment sequence.</p>
<br />Posted in CMCrossroads, Plain Old Blog, Release Management Tagged: release identity, release number <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/368/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=368&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2009/10/13/the-importance-of-release-identities/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Essential Release Planning</title>
		<link>http://blog.principia-it.co.uk/2009/06/17/essential-release-planning/</link>
		<comments>http://blog.principia-it.co.uk/2009/06/17/essential-release-planning/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 17:03:16 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Release Management]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=65</guid>
		<description><![CDATA[Release planning is, in essence, very simple. I am speaking here of planning what changes are to be made for each software release. The planning of a release into an operational environment is a different type of release planning entirely! Here is a simple way to think about releases and release planning. Think of a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=65&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Release planning is, in essence, very simple. I am speaking here of planning what changes are to be made for each software release. The planning of a release into an operational environment is a different type of release planning entirely!</p>
<p>Here is a simple way to think about releases and release planning.</p>
<p><span id="more-65"></span>Think of a release as a bucket into which change requests can be placed. A release plan is essentially a line of release buckets. Changes can be add to, removed from, or moved between release buckets.</p>
<p>Each bucket is assigned a &#8216;release date&#8217;. This is the date on which that release bucket ceases to exists and the system that results form all its changes is given to the client.</p>
<p>In a very simple development schedule, developers visit the next bucket in line, take out a change, make that change and mark the change as done.</p>
<p>Here are some rules about how the release buckets are used for release planning.</p>
<ul>
<li>Each bucket has a certain capacity measured in man days effort. Each change requires a certain number of man days effort to complete. The release manager can add or remove changes so long as the total effort associated with the changes does not exceed the capacity of the release bucket.</li>
<li>When planning releases it is best to not exceed 80% of the capacity of the release bucket in the early part of the release&#8217;s lifecycle. This allows some contingency for late change or some changes already in the bucket overrunning slightly.</li>
<li>Changes that have not yet been taken by developers can be freely moved between release buckets.</li>
<li>Changes that have been started by developers can only be moved in co-operation with the developer and software configuration manager. (This is a practical matter of moving the code changes in the version control system.)</li>
<li>As a release approaches its assigned release date, make it harder to add and remove changes.</li>
</ul>
<p>I recommend adopting a traffic light approach to locking down a release; green (changes can be added and removed freely, providing 80% of the bucket&#8217;s capacity is not exceeded), amber (changes can be added or removed only with senior project approval, 80% capacity can be exceeded if approved), red (no further changes other than for integrating emergency patches from live).</p>
<p>The precise meaning of terms such as &#8216;senior project approval&#8217; will be different for different projects. The point is, it should be more difficult to make changes to the content of the release bucket once it is in the amber condition.</p>
<p>As for when you set a release to amber or red, that depends on your own schedule, the size of your release, and the resources available.</p>
<br />Posted in Release Management  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=65&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2009/06/17/essential-release-planning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Release identity and scheduling</title>
		<link>http://blog.principia-it.co.uk/2009/06/17/release-identity-and-scheduling/</link>
		<comments>http://blog.principia-it.co.uk/2009/06/17/release-identity-and-scheduling/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 13:30:06 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Release Management]]></category>
		<category><![CDATA[identities]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[release number]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=49</guid>
		<description><![CDATA[This entry was prompted by this post on the CMCrossroads General CM forum. I see nothing fundamentally wrong with Victor&#8217;s definition of release management. Software Release Management Process is the process through which proper versioned software is made available (Released) to the Client It is unclear from this definition precisely what scope Victor anticipates release [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=49&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This entry was prompted by <a href="http://www.cmcrossroads.com/component/option,com_fireboard/Itemid,593/func,view/catid,4/id,96330/#96330">this</a> post on the CMCrossroads General CM forum.</p>
<p>I see nothing fundamentally wrong with Victor&#8217;s definition of release management.</p>
<blockquote><p>Software Release Management Process is the process through which proper versioned software is made available (Released) to the Client</p></blockquote>
<p>It is unclear from this definition precisely what scope Victor anticipates release management will have, but I will assume the scope to include the planning, scheduling and control of software builds (and consequent baselines) through the various development and test environments, and ultimately preparation for delivery to the client. I shall exclude the release into an operational environment because this is a quite different type of release management to that being addressed in the thread.</p>
<p>I see no conflict between Victor&#8217;s definition of release management and the possibility of multiple releases with potentially complex relationships.</p>
<p>I disagree absolutely with Victor&#8217;s contention that &#8220;If we go forward as above, we are breaking the fundamental principals of configuration management.&#8221; This is simply wrong. There is absolutely nothing in the &#8220;fundamental principals of configuration management&#8221; that demands release identities proceed in an contiguous fashion. At best, one might make the case that in the best of all possible world, it is <em>desirable</em> that release identities progress in a contiguous sequential fashion. Hopefully this article will make my reasoning clear.</p>
<p><span id="more-49"></span></p>
<p>Victor is correct that there could, at any one time in a product&#8217;s lifecycle, be multiple baselines and some will never be released to the client. In fact, I would go so far as to say that is inevitable. Large scale, modern development often involves multiple parallel development streams which inevitably have overlapping release schedules, and these can become quit complex.</p>
<p>The real world is always much more messy than theory might like to present it. SCM and particularly, in this context, release management&#8217;s role in this is to ensure control, not impose linearity.</p>
<p>In order to clarify this discussion I want to distinguish a Release from a Baseline. These two terms are too often used interchangeably and this makes discussions difficult.</p>
<p>For the purpose of this article, a Release is a planned set of changes, and a Baseline is a collection of artefact versions. To make this distinction clear, I offer the following concrete example.</p>
<p>Let us limit our conversation to a single application (ProductX). ProductX has been released to clients as version 1.0.</p>
<p>The business plan five changes to ProductX over the next year. These changes are identified as changes A, B, C, D and E.</p>
<p>The organisation uses long term planning and a combination of development methodologies, which are applied according to their appropriateness to the task. In this example the changes are such that Agile methods are not considered appropriate, besides the organisation has insufficient qualifies people to lead Agile development for all the changes. (I include this detail to anticipate people insisting that using an Agile approach would solve the problem. This article is addressing a specific point of release management. If you would like to debate Agile methods and their appropriateness to projects, please read <a href="http://www.amazon.co.uk/Balancing-Agility-Discipline-Guide-Perplexed/dp/0321186125/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1245243214&amp;sr=8-3">Balancing Agility and Discipline</a> by Barry Boehm and Richard Turner first.)</p>
<p>The release schedule being planned runs from January through to December.</p>
<p>The business has also promised the clients monthly maintenance releases.</p>
<p>Without any consideration to the proposed changes A through E, release management schedule twelve monthly maintenance releases. In order that maintenance work can be scheduled, these releases are initially identified as releases 1.0.1 through 1.0.12.</p>
<p>After assessing changes A through E proposed by the business it is agreed that change A will deliver some major new functionality, so the release will be designated 2.0. Change A will take six months to develop, so release 2.0 is scheduled for June.</p>
<p>Changes B and C are to be delivered together and will add further functionality to the system This release is identified and 3.0 and is scheduled to August. The actual project start date will be in March, so work on 3.0 will overlap with 2.0. This is not seen as a problem and integration points are planned to ensure work from 2.0 is propogated into 3.0 on an agreed schedule.</p>
<p>Changes D and E are similarly planned. The release is identified as 3.1 because these are non-functional changes. 3.1 is planned for release in November and work is expected to start in April because there is a significant amount of back-end modification required.</p>
<p>Once these major milestones are planned release management re-designates the 1.0.x releases with new identities so that they conform to the new schedule. This causes no difficulties at this point because only release management and change management are concerned with scheduling work into these releases.</p>
<p>The stage is set. ProductX&#8217;s release schedule looks like this.</p>
<table border="0">
<tbody>
<tr>
<td><strong>Month</strong></td>
<td><strong>Release ID</strong></td>
<td><strong>Purpose</strong></td>
</tr>
<tr>
<td>Jan</td>
<td>1.0.1</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Feb</td>
<td>1.0.2</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Mar</td>
<td>1.0.3</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Apr</td>
<td>1.0.4</td>
<td>Maintenance</td>
</tr>
<tr>
<td>May</td>
<td>1.0.5</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Jun</td>
<td>2.0</td>
<td>Release of change A</td>
</tr>
<tr>
<td>Jul</td>
<td>2.0.1</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Aug</td>
<td>3.0</td>
<td>Release of changes B and C</td>
</tr>
<tr>
<td>Sep</td>
<td>3.0.1</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Oct</td>
<td>3.0.2</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Nov</td>
<td>3.1</td>
<td>Release of changes D and E</td>
</tr>
<tr>
<td>Dec</td>
<td>3.1.1</td>
<td>Maintenance</td>
</tr>
</tbody>
</table>
<p>So far, so good. Whether the release identities are good or bad is irrelevant so far as release management (we will see how they cause difficulties later). We could just as easily designated them with names like the following and precisely nothing would have changed so far as the release management process is concerned.</p>
<table border="0">
<tbody>
<tr>
<td><strong>Month</strong></td>
<td><strong>Release ID</strong></td>
<td><strong>Purpose</strong></td>
</tr>
<tr>
<td>Jan</td>
<td>London</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Feb</td>
<td>New York</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Mar</td>
<td>Paris</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Apr</td>
<td>Prague</td>
<td>Maintenance</td>
</tr>
<tr>
<td>May</td>
<td>Toronto</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Jun</td>
<td>Moscow</td>
<td>Release of change A</td>
</tr>
<tr>
<td>Jul</td>
<td>Sydney</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Aug</td>
<td>Tokyo</td>
<td>Release of changes B and C</td>
</tr>
<tr>
<td>Sep</td>
<td>Budapest</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Oct</td>
<td>Kiev</td>
<td>Maintenance</td>
</tr>
<tr>
<td>Nov</td>
<td>Munich</td>
<td>Release of changes D and E</td>
</tr>
<tr>
<td>Dec</td>
<td>Oslo</td>
<td>Maintenance</td>
</tr>
</tbody>
</table>
<p>Release identities are used to schedule changes.</p>
<h1>Development starts</h1>
<p>Work begins in January on release 2.0 and 1.0.1. Baselines are produced to identify builds of ProductX that are submitted to testing; 1.0.1.01, 1.0.1.02, and 2.0.0.01 and 2.0.0.02</p>
<p>None of these baselines is released yet. In the 1.0.1 release schedule two builds have been produced. Perhaps they were integration and system tested, but not user tested because there were more maintenance changes to be made.</p>
<p>The 2.0.0.x baselines were integration tested. These tested used the same test environments as the 1.0.1.x baselines but no confusion resulted as SCM and release management co-ordinated with test management to ensure the environment was correctly configured with a known baseline at the start of each test cycle.</p>
<p>Finally a baseline 1.0.1.03 is created and completes the test cycle, being release to clients. This baseline 1.0.1.03 is the first to be released. Baselines 1.0.1.01 and 1.0.1.02 are discarded, never to be released. The organisation has been juggling releases 1.0.1.01, 1.0.1.02, 1.0.1.03, 2.0.0.01, 2.0.0.02 in and out of test environments with absolute clarity because both SCM and release management have managed the baselines, environments, and stakeholders professionally.</p>
<p>A baseline 2.0.0.03 is produced to integration test the inclusion of changes from 1.0.1.03. Everything is fine. This integration ensures that when 2.0.0.x is release it will not regress changes made in release 1.0.1.03.</p>
<p>Precisely when these integration baselines are created is a matter for another article. (Like so much else in SCM judging when to create release streams, how much to integrate, and when, is often a matter of experience.)</p>
<h2>Release 3.0 starts</h2>
<p>Work proceeds like this until March when work starts on the planned release 3.0. Baselines for release 3.0 proceed 3.0.0.01, 3.0.0.02. These are necessarily produced in parallel with maintenance releases and, of course, releases for 2.0.</p>
<h2>Release 3.1 starts</h2>
<p>In April, things become even more complex. Work for 3.1 is started. So now we have baselines for maintenance work (by now release 1.0.4, so builds 1.0.4.01, 1.0.4.02 and so on), release 2.0 is nearing release (2.0.0.023, 2.0.0.24, &#8230;), release 3.0 work is well underway (3.0.0.05, 3.0.0.06, &#8230;) and now release 3.1 (3.1.0.01, 3.1.0.02, &#8230;) joins the melee.</p>
<p>One might argue that this work should all be nicely ordered and sequential, but practical, commercial reality has a tendency to make this sort of complex release scheduling increasingly common.</p>
<p>While release management may advise the business on the wisdom of release schedule changes, it remains the businesses decision. If release management dictate the release schedule to the business then this is a case of the tail wagging the dog. If you feel that release management should have the authority to override business decisions I suggest you look at another line of work &#8211; you&#8217;re wrong.</p>
<p>During all this, changes need to be properly sequence from one release to the next to ensure changes are not regressed by subsequent releases.</p>
<h1>A spanner in the works</h1>
<p>Then, in mid-April the business get a request from clients to support a new feature. Clients want ProductX to support a hot new Internet craze. The business identify this as a potentially major source of revenue.</p>
<p>A hasty change is raised and assessed. The amount of work required to add the new feature is relatively small. The business are keen for the new feature to be available as soon as possible.</p>
<p>After looking at resources and schedules it is agreed that the 2.0 release in June is too close to consider adding the functionality to that release. There is too much to release as part of the maintenance cycle and release 3.0 in August is too far away. Ideally a mid-June release, just after 2.0 is the best from a Business point of view and is achievable with current resources.</p>
<p>What should release management do?</p>
<p>If the slavishly follow the release numbering scheme, which demands that the major identity number is raised when new functionality is added, they should move the current 3.0 to 4.0, 3.1 to 4.1 and create a new 3.0. This, to me, seems patently absurd (and a good argument against assigning strict meaning to release numbers in the first place). This approach most certainly would cause confusion. Baselines produced for 3.0 prior to the change would be confused with those after, it would be a monumental mess.</p>
<p>A more practical solution is to create a 2.1 release. This breaks the strict convention of release numbers established by the organisation, but preserve some semblance of order.</p>
<p>Notice that if releases were not identified by numbers like this the problem is moot. Suppose releases were identified by city, as shown above. Adding the new release is trivial, just add a new release &#8216;Bangkok&#8217; between Moscow and Sydney.</p>
<p>The point being, that the problem is <em>absolutely nothing to do with the release management process</em> and everything to do with the choice of how releases are identified.</p>
<h1>A couple of closing thoughts</h1>
<p>Firstly, if you made it this far, well done.</p>
<p>This is not a trivial problem and there are many, many ways to address it.</p>
<p>One could, for example, argue that creating a more incremental release strategy (a la Agile) would solve the problem. This is a naive observation. Such release schedules are not always the solution, indeed they are often not practical or even not possible on larger projects. There is no one-size-fits-all solution to release scheduling, but investigating alternatives is always helpful.</p>
<p>One might also make a case for rigidity. Release management <em>should</em> push back on the business, pointing our the cost of changing the schedule and the minimal benefit, and the business would be foolish to not listen. In the example above a strong case could be made for dropping the surprise functionality into the next maintenance release, or even integrating it into 3.0 in August. As with so many things, it depends. How much impact does it have on 3.0 functionality? Is it a risky change? Should it be isolated from other releases until implemented, then integrated into an appropriate release? There are many, many possibilities.</p>
<p>The simplest solution is to completely de-couple the three types of identity; release planning, baselines, and releases to clients.</p>
<p>These discussions must always be tempered by practical reality. Release management, like any other management discipline must be able to satisfice (to find a way forward that provides the best available outcome for all stakeholders, including SCM and release management). A satisficing solution is seldom the &#8216;best&#8217; solution for all stakeholders.</p>
<br />Posted in Release Management Tagged: identities, process, Release Management, release number <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=49&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2009/06/17/release-identity-and-scheduling/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
	</channel>
</rss>
