<?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/"
	>

<channel>
	<title>Where Technology Meets Teamwork &#187; SCM</title>
	<atom:link href="http://blog.nwcadence.com/category/scm/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nwcadence.com</link>
	<description>Thoughts on VSTS, Sharepoint and other collaborative technologies</description>
	<lastBuildDate>Thu, 04 Feb 2010 22:30:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Our Upcoming VSTS Events</title>
		<link>http://blog.nwcadence.com/2008/10/upcoming-vsts-events/</link>
		<comments>http://blog.nwcadence.com/2008/10/upcoming-vsts-events/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 06:45:57 +0000</pubDate>
		<dc:creator>Steven Borg</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[team build]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=106</guid>
		<description><![CDATA[Although you can always visit our website, and look at our Upcoming Events page to see a list of our upcoming events.  However, here&#8217;s a quick summary of many of the events we&#8217;re either running or participating in until the end of the year.   Hope to see you at one or more of these!   [...]]]></description>
			<content:encoded><![CDATA[<p>Although you can always visit our website, and look at our <a title="Upcoming VSTS Events" href="http://www.nwcadence.com/upcoming.htm" target="_blank">Upcoming Events</a> page to see a list of our upcoming events.  However, here&#8217;s a quick summary of many of the events we&#8217;re either running or participating in until the end of the year.   Hope to see you at one or more of these!  <img src='http://blog.nwcadence.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><!--[if gte mso 9]><xml> Normal   0               false   false   false      EN-US   X-NONE   X-NONE                                                     MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><xml> </xml><![endif]--></p>
<h1><a title="Upcoming Team System Events" href="http://www.nwcadence.com/upcoming.htm" target="_blank">Upcoming Team System Events</a></h1>
<p><!--[if gte mso 10]></p>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
</style>
<p><![endif]--><strong>October 24: MVP TV: Gaze into the Crystal Ball: Reporting in Team System made Easy! (Webcast)</strong></p>
<p><em>You&#8217;ve paid your nickel and it&#8217;s time to ask the Zoltar Fortune Teller for your future: &#8220;Is my software development project going down the toilet? Will I be able to ship on time, with high quality? Can I hit my budget?&#8221; (Wait, three questions = three nickels.) Zoltar says&#8230; Let&#8217;s face it, traditional status reporting is about as accurate as I am, and worse, it takes a whole lot longer!!! Team System can help! Its built in reporting capabilities provide a strong foundation for understanding the current status of your project. Not only does it provide a series of built in reports, it gathers the metrics to allow for excellent ad-hoc reports! Using both the built in and ad hoc report capabilities, finding the current status of your project, and predicting your project&#8217;s probability of success or failure along several axis. Come learn how to predict your future! You&#8217;ll learn how to interpret the build in reports, learn what&#8217;s required to create the reports, and how to use Excel pivot tables to connect to the TFS cube for ad hoc reporting.</em></p>
<p>To register, go to: <a title="Reporting in Team System" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032391376&amp;EventCategory=4&amp;culture=en-US&amp;CountryCode=US" target="_blank">http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032391376&amp;EventCategory=4&amp;culture=en-US&amp;CountryCode=US</a></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>November 5: Enterprise Build Automation w/VSTS 2008 Team System &amp; Team Build (Portland)</strong></p>
<p><em>Steven Borg of Northwest Cadence (Microsoft Team System MVP) will be covering some of the great new features of Team Build 2008, an inherent and powerful part of Visual Studio Team System 2008. You&#8217;ll learn to use Team Build 2008 to radically improve your code! </em></p>
<p><em>Come see real unit and functional tests being built, real code metrics being generated, and real work being done in an automated build. You&#8217;ll learn how to build legacy code, run tests and code metrics, rebuild your database, update your documentation, and even deploy your application into various test environments; all coordinated by a single command. </em></p>
<p>To register, go to: <a title="Team Build" href="http://www.clicktoattend.com/?id=132684" target="_blank">http://www.clicktoattend.com/?id=132684</a></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>November 15-16, 2008: Code Camp</strong></p>
<p><em>Join Northwest Cadence and others at Code Camp where developers talk with &#8211; and learn from &#8211; fellow developers.  It is a community event and all are welcome to attend and speak.  Code Camps have been wildly successful, and we are excited to participate in this success in Seattle.  Check out </em><a class="alignleft" title="Seattle Code Camp" href="https://seattle.codecamp.us" target="_blank"><em>https://seattle.codecamp.us</em></a><em> for more details.</em></p>
<p><strong>November 18: Coffee Talk &#8211; Welcome. Help Us Set the Stage! (Webcast)</strong></p>
<p><em>We&#8217;ll briefly cover VSTS, ALM, and introduce you to the coffee talks.  Bring your questions, desires and needs.  We&#8217;ll have some fun, answer questions, and plan topics for future coffee talks. </em></p>
<p>To register, go to: <a title="Coffee Talk" href="http://www.clicktoattend.com/?id=132790" target="_blank">http://www.clicktoattend.com/?id=132790</a><em></em></p>
<p><em> </em></p>
<p><strong>December 2: Coffee Talk &#8211; Visual Studio 2010 (Webcast)</strong></p>
<p><em>You may have seen some of the fantastic new features of Visual Studio Team System 2010 (aka Rosario).  Drastically improved automated testing, architect tools that actually work, and tons of improvements to make your lives easier and time spent more productive.  We&#8217;ll cover several of the new features, and answer questions about the things you&#8217;re looking forward to.  Bring your own questions, too!</em></p>
<p><em> </em></p>
<p>To register, go to: <a title="Coffee Talk - VSTS 2010" href="http://www.clicktoattend.com/?id=132791" target="_blank">http://www.clicktoattend.com/?id=132791</a></p>
<p><em> </em></p>
<p><strong>December 4: Eagerly Awaiting VSTS 2010? (Kirkland)</strong></p>
<p><em>Join Northwest Cadence and explore the new features of Visual Studio Team System 2010 and what it means for your business, productivity, application management, and quality. During this event, we will cover Team Foundation Server and the much-hyped hierarchical work items, new improvements to History, Merge, Work Item Queries, and the focus on Agile development. </em></p>
<p><em> </em></p>
<p><em>Numerous improvements from the Architecture edition (including full support for UML 2.x) will be demonstrated, including the new Architecture Explorer which allows you to quickly and easily visualize an application from the high level down to the object dependencies. We will also highlight many Developer edition functionalities such as updated tools for performance profiling, the Historical Debugger (formerly called &#8220;Proteus&#8221;), and the ability to view affected tests based on changes to the code. Finally, we will cover the Test Edition with a focus on the &#8220;Camano&#8221; user interface, Manual Test Runner, Test Case Management, and how Team System 2010 is a strong and reliable testing platform.</em></p>
<p><strong> </strong></p>
<p>To register, go to:<strong> </strong><a title="VSTS 2010 - Rosario - Free Training" href="http://www.clicktoattend.com/?id=132801" target="_blank">http://www.clicktoattend.com/?id=132801</a></p>
<p><strong> </strong></p>
<p><strong>December 16: Coffee Talk &#8211; Reporting (webcast)</strong></p>
<p><em>You may have seen some of the fantastic reports TFS provides out of the box at conferences and presentations.  We will answer lots of questions in this session: Have you wondered why the reports at your company don&#8217;t look quite as nice?  Are they missing enough data to make decisions?    What reports should you pay special attention to (Project Managers), and why should you even care about the reports (developers)?   We will also cover a few of things you need to do to really get the data into the reports and talk about how to interpret some of our favorite reports.  And, if you ask, we&#8217;ll cover how to interpret your favorites, too! </em></p>
<p><em> </em></p>
<p>To register, go to: <a title="Coffee Talk - Reporting" href="http://www.clicktoattend.com/?id=132792" target="_blank">http://www.clicktoattend.com/?id=132792</a><em></em></p>
<p><em> </em></p>
<p><strong>December 30: Coffee Talk &#8211; Software Development Lifecycle </strong></p>
<p><em>With the thousands of books and articles published on Software Development Life-Cycle (SDLC), do you ever feel overwhelmed sorting through what is hype vs. what is actually being adopted by .NET corporations?  During this Coffee Talk, we will answer this question plus others that you bring!  We will explore the complexity of software development, the current best practices for improving your Software Development Life Cycle, and industry best practices and the latest IT research. </em></p>
<p><em> </em></p>
<p>To register, go to:<em> </em><a title="Coffee Talk - SDLC" href="http://www.clicktoattend.com/?id=132794" target="_blank">http://www.clicktoattend.com/?id=132794</a></p>
<p><em> </em></p>
<p><strong> </strong></p>
<p><strong>January 8: Eagerly Awaiting VSTS 2010? (Portland)</strong></p>
<p><em>Join Northwest Cadence and explore the new features of Visual Studio Team System 2010 and what it means for your business, productivity, application management, and quality. During this event, we will cover Team Foundation Server and the much-hyped hierarchical work items, new improvements to History, Merge, Work Item Queries, and the focus on Agile development. </em></p>
<p><em> </em></p>
<p><em>Numerous improvements from the Architecture edition (including full support for UML 2.x) will be demonstrated, including the new Architecture Explorer which allows you to quickly and easily visualize an application from the high level down to the object dependencies. We will also highlight many Developer edition functionalities such as updated tools for performance profiling, the Historical Debugger (formerly called &#8220;Proteus&#8221;), and the ability to view affected tests based on changes to the code. Finally, we will cover the Test Edition with a focus on the &#8220;Camano&#8221; user interface, Manual Test Runner, Test Case Management, and how Team System 2010 is a strong and reliable testing platform.</em></p>
<p><strong> </strong></p>
<p>To register, go to:<strong> </strong><a title="VSTS 2010 - Rosario - Free Training" href="http://www.clicktoattend.com/?id=1328012" target="_blank">http://www.clicktoattend.com/?id=1328012</a></p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=106&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/upcoming-vsts-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free VSTS Training &#8211; Lap around VSTS 2010 / Rosario</title>
		<link>http://blog.nwcadence.com/2008/10/free-vsts-training-lap-around-vsts-2010-rosario/</link>
		<comments>http://blog.nwcadence.com/2008/10/free-vsts-training-lap-around-vsts-2010-rosario/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 17:25:15 +0000</pubDate>
		<dc:creator>Steven Borg</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[team build]]></category>
		<category><![CDATA[team system training]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[VSTS 2008]]></category>
		<category><![CDATA[vsts training]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=105</guid>
		<description><![CDATA[On December 4, 2008, Northwest Cadence will be sponsoring a free &#8220;Lap around VSTS 2010 / Rosario&#8221; session, here in our Kirkland offices overlooking Lake Washington.  Come hear about the latest information about VSTS 2010 (AKA Rosario) from Jeff Levinson, Team System MVP.  This free VSTS training session will cover many of the new features [...]]]></description>
			<content:encoded><![CDATA[<p>On December 4, 2008, Northwest Cadence will be sponsoring a free &#8220;Lap around VSTS 2010 / Rosario&#8221; session, here in our Kirkland offices overlooking Lake Washington.  Come hear about the latest information about VSTS 2010 (AKA Rosario) from Jeff Levinson, Team System MVP.  This free VSTS training session will cover many of the new features of Visual Studio 2010, plus give attendees time to ask questions related to features, upgrading from VSTS 2005 and VSTS 2008 and anything else they&#8217;d like to ask!</p>
<p>Here&#8217;s a short blurb!  For more information, or to register, send an email to <a title="Free VSTS Training" href="mailto://info@nwcadence.com" target="_self">info@nwcadence.com</a>.</p>
<blockquote><p>In this free, 3 hour Team System training session, we will explore the new features of Visual Studio Team System 2010 and what it means for your business, productivity, application management and quality. The areas we will cover are Team Foundation Server and the much hyped hierarchical work items as well as improvements to History, Merge, Work Item Queries and the focus on Agile development. The Architecture editions numerous improvements (including full support for UML 2.x) will be demonstrated as well as the new Architecture Explorer which allows you to quickly and easily visualize an application from the high level down to the object dependencies. The developer edition provides updated tools for performance profiling, the Historical Debugger (formerly called “Proteus”) and the ability to view affected tests based on changes to the code. Finally, we’ll cover the Test Edition with a focus on the “Camano” user interface, Manual Test Runner, Test Case Management and the fact that Team System 2010 is a reliable testing platform with the features you expect it to have!</p></blockquote>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=105&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/free-vsts-training-lap-around-vsts-2010-rosario/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VSTS Training &#8211; Building Applications using Visual Studio Team System 2008</title>
		<link>http://blog.nwcadence.com/2008/10/vsts-training-building-applications-using-visual-studio-team-system-2008/</link>
		<comments>http://blog.nwcadence.com/2008/10/vsts-training-building-applications-using-visual-studio-team-system-2008/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 16:55:40 +0000</pubDate>
		<dc:creator>Steven Borg</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[team build]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=104</guid>
		<description><![CDATA[We&#8217;re running our VSTS 5-Day course again, here at our offices at Northwest Cadence on December 8-12, 2008.  Get ready for a new year of VSTS productivity by learning the deep ins and outs of VSTS 2008!
Here&#8217;s a brief blurb.  To learn more, send an email to info@nwcadence.com.
The focus of this training course is on [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re running our VSTS 5-Day course again, here at our offices at Northwest Cadence on December 8-12, 2008.  Get ready for a new year of VSTS productivity by learning the deep ins and outs of VSTS 2008!</p>
<p>Here&#8217;s a brief blurb.  To learn more, send an email to <a title="Info on VSTS Class" href="mailto://info@nwcadence.com" target="_self">info@nwcadence.com</a>.</p>
<blockquote><p>The focus of this training course is on the effective use of Team System to improve an organization’s application management lifecycle. Software teams will learn not only how to use Team System effectively, but how to use Team System to improve their software development process. Developers will learn improve the quality of their code and speed development. Testers will learn to validate code quality and track test cases. Project managers will learn to use Team System to bring their projects under control. Configuration Managers will learn the best practices around branching strategies and will learn to create a tailored software configuration management strategy. As a team, you will learn how to use TFS to increase traceability, improve the quality of your code and ease the process of releasing your applications.</p></blockquote>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=104&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/10/vsts-training-building-applications-using-visual-studio-team-system-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Branching Strategies</title>
		<link>http://blog.nwcadence.com/2008/01/branching-strategies-2/</link>
		<comments>http://blog.nwcadence.com/2008/01/branching-strategies-2/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 22:30:44 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[Branch by Quality]]></category>
		<category><![CDATA[Branching]]></category>
		<category><![CDATA[Merging]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2008/01/08/branching-strategies-2/</guid>
		<description><![CDATA[I hope everyone had a happy new year and a safe holiday season. Now that I&#8217;m done with beginning of the year housekeeping I&#8217;m back to blogging. This is the second in a series of posts on branching strategies. Branch by Quality is the most complex and flexible branching strategy so this strategy will span [...]]]></description>
			<content:encoded><![CDATA[<p>I hope everyone had a happy new year and a safe holiday season. Now that I&#8217;m done with beginning of the year housekeeping I&#8217;m back to blogging. This is the second in a series of posts on branching strategies. Branch by Quality is the most complex and flexible branching strategy so this strategy will span several posts.</p>
<p><strong>Branch by Quality</strong></p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2008/01/branchbyquality.jpg" title="Branch By Quality - Basic"><img src="http://blog.nwcadence.com/wp-content/uploads/2008/01/branchbyquality.thumbnail.jpg" alt="Branch By Quality - Basic" /></a></p>
<p>Figure 1 &#8211; Branch by Quality, basic pattern</p>
<p>This pattern is the ultimate in flexibility &#8211; but can also get very complex. It allows you to handle unique situations and respond to changes very quickly. It can be used for supporting multiple versions of an application or for more flexibility can be combined with Branch By Release to provide even more options for supporting multiple versions. Additionally you don&#8217;t have to manage quite as many branches as with other branching strategies. However, it does mean that the management of each branch may get complicated. It allows for branching for isolation, hotfixes and the easy promotion of code from dev to test to production.</p>
<p>The basic structure as shown here involves three branches (or code at various qualities) &#8211; Dev which is code that is in constant change and is therefore referred to as &#8220;soft&#8221; code, QAwhich is code that changes very infrequently (no active development is ever done on this branch) and is considered more firm than the code on the Dev branch and finally Prod which contains code which has been released to production (development is never done on the Prod branch). The red lines represent the branch hierarchy. In this case Prod is the parent of QAwhich is the parent of Dev. In reality the branching can be done in any way which creates a relationship between Prod and QA and QA and Dev. Using TFS you can branch QA to Prod and QA to Dev or Prod to QA to Dev or Dev to QA to Prod to create this relationship. The only thing this effects is the default selection of drop down boxes in the merge wizard.</p>
<p>The reason why we refer to this pattern as Branch By Quality is because of the quality of each branch. Dev is potentially testable, QA is potentially releasable and Prod is released code. Each branch must maintaint this quality. Another hallmark of this pattern is a single path to production. Branch by Release has multiple paths to production &#8211; each new branch is a new path to production. With this pattern, builds for production ALWAYS come out of the QA branch (not the Prod branch as you may have assumed).</p>
<p>The process for releasing code is to promote it from Dev to QA, build the QA branch and test the compiled assemblies. If all tests pass, you do NOT rebuild the code &#8211; you simply deploy the already compiled assemblies. Then you promote the code from QA to Prod as a safekeeping. Note also the pairs of green lines which represent merges. As before, always Merge down, Copy Up to promote the smoothest transition possible.</p>
<p><span id="more-57"></span></p>
<p><strong>Dealing with Bugs</strong></p>
<p>Let&#8217;s look at a simple example where code has been promoted from Dev to QA (so the users can perform User Acceptance Tests (UAT)) and development on the next release has begun on the Dev branch. In this situation, assume a bug has been found by users during the UAT and needs to be fixed. Figure 2 shows this scenario.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2008/01/branchbyquality_bugintest.jpg" title="Branch by Quality - Bug in Test"><img src="http://blog.nwcadence.com/wp-content/uploads/2008/01/branchbyquality_bugintest.thumbnail.jpg" alt="Branch by Quality - Bug in Test" /></a></p>
<p>Figure 2 &#8211; Bug in Test</p>
<p>Unlike Branch by Release, you cannot just make a fix on the testing branch because code on that branch is always potentially releasable which means that making changes to that branch can potentially cause problems. To avoid this you take a branch for isolation &#8211; in this case it follows almost the same pattern as performing hotfixes (discussed next) &#8211; from the QA branch. You can&#8217;t branch from Dev because if you do there is no direct way to merge from the isolation branch to the QA branch (you can do a baseless merge but in this case it causes more problems than it solves). So, take a branch from QA (at the point you promoted the code from Dev to QA and labeled the code on the QA branch) and fix the code on this branch. Perform testing on this branch and when it is ready for UAT, promote it to the QA branch. When UAT is complete and the fix verified, merge the QA branch down to the Dev branch. This ensures that the fix makes it back into the next version of the code.</p>
<p>This is a fairly simple example but they will get more complicated as I add to this strategy. I will do this in a new post in the near future.</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=57&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2008/01/branching-strategies-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Branching Strategies</title>
		<link>http://blog.nwcadence.com/2007/12/branching-strategies/</link>
		<comments>http://blog.nwcadence.com/2007/12/branching-strategies/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 16:34:51 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[VS2005]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[Branch by Release]]></category>
		<category><![CDATA[Branching]]></category>
		<category><![CDATA[Merging]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2007/12/05/branching-strategies/</guid>
		<description><![CDATA[Any and all comments are welcome regarding this series of posts (okay, you can comment on other posts too). We woul appreciate any feedback pointing out alternatives to these strategies, whether they helped you or not and maybe your experiences dealing with branching strategies. This series of posts will cover all of the major patterns and how to [...]]]></description>
			<content:encoded><![CDATA[<p>Any and all comments are welcome regarding this series of posts (okay, you can comment on other posts too). We woul appreciate any feedback pointing out alternatives to these strategies, whether they helped you or not and maybe your experiences dealing with branching strategies. This series of posts will cover all of the major patterns and how to handle branching and merging for all of the situations we can think of! If you think of any more, please let us know.<strong> </strong></p>
<p><strong>Branch By Release</strong> </p>
<p>In the first on a series of posts regarding branching strategies, I&#8217;m going to start off with the &#8217;super&#8217; pattern (why I call it a &#8217;super&#8217; pattern is discussed at the end of the post) &#8211; Branch By Release. What does the Branch by Release pattern look like and why use it? The figure below shows the pattern and maps out the usage for it (double-click the image to enlarge it).</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease.jpg" title="BranchByRelease"><img src="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease.thumbnail.jpg" alt="BranchByRelease" /></a><a href="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_bugintest.jpg" title="BranchByRelease_BugInTest"></a></p>
<p>Figure 1 &#8211; Branch by Release, basic pattern</p>
<p>This pattern is most useful when you are supporting a single version of an application (say a website for example). It <em>can</em> also be used for multiple version support but that can get fairly complicated when you get into branching for isolation, and long running features that may take several versions to implement.</p>
<p>The basic structure as shown in the figure is to build and when you are ready for test, create a new active branch for development and release the code on the &#8220;parent&#8221; branch (I put parent in quotes because even though it is the parent, branch relationships are generally bi-directional and so this designation is for a frame of reference only). While code is in production you can make fixes to it even while the next version is under development. When the fix has been implemented, simply merge down from production to the active branch.</p>
<p>This is perhaps the simplest of all branching and merge patterns. The reason why this is frequently unsuitable for complex branching and merging, as noted above, are when frequent, temporary branches or long term branches are needed that may span releases. While you can use this pattern for those types of requirements, by itself, it does not offer support for complex scenarios without a lot of extra work. <span id="more-51"></span></p>
<p><strong>Dealing with Bugs</strong> </p>
<p>Now that you&#8217;ve seen the basics, how do you deal with bugs? There are two scenarios for fixing bugs &#8211; when one occurs in code under test and when one occurs in code in production. These two scenarios are represented in Figures 2 and 3 respectively.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_bugintest.jpg" title="BranchByRelease_BugInTest"><img src="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_bugintest.thumbnail.jpg" alt="BranchByRelease_BugInTest" /></a>                              <a href="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_buginprod.jpg" title="BranchByRelease_BugInProd"><img src="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_buginprod.thumbnail.jpg" alt="BranchByRelease_BugInProd" /></a></p>
<p>Figure 2  - Bug in Test                        Figure 3 &#8211; Bug in Prod</p>
<p>A bug that is found in Test is the simplest example because you can simply make the fix in test and merge it down to the active branch for the next release and then the fix is in both versions.</p>
<p>A bug found in Production is a little bit more involved &#8211; but not much more. If at all possible, see if the users can wait until the next release is out &#8211; that way you don&#8217;t have to mess with Production and you can follow the pattern for fixing the bug in test. If the users absolutely need it now (or the code under test is due to be released too far in the future) you can fix and test the bug using the code in production and merge the changes down to the code that is under test and then to the active dev branch.</p>
<p>The next question to be addressed is what to do with the test environments. If you have the luxury of multiple test environments, you can simply test the production changes in a separate test environment. If you only have one test environment, you must stop the current round of tests (for Release 2 in Figure 3 above), release the code fixes for production into test and then release to production. At that point you need to merge the changes from production (Rel 1) down into Release 2. Then re-release the code from the Release 2 branch into the Test environment. Once those tests have passed, merge the changes from the Release 2 branch down to the active development branch for the next release.</p>
<p><strong>Common Code</strong> </p>
<p> The last item to consider is common code. There are two options for dealing with common code. The first is to have the common code on its&#8217; own branch and to simply reference the project containing the common code (i.e. never deal with the branch directly, just code on your local machine that you retrieved from this branch). This presents LOTS of problems. The biggest is that the common code can change from under you &#8211; maybe even daily. And if you manage to overcome this problem you have to deal with synchronizing releases which can also be problematic. So you might be thinking, &#8220;Jeff, why don&#8217;t I just reference the dll&#8217;s from the most current release of the common code?&#8221; Well, you can do that under a certain circumstance. That is &#8211; the dll&#8217;s must also be in version control (i.e. please don&#8217;t reference the common code by using a dll found on a server share somewhere &#8211; you are just asking for pain when that dll gets &#8220;suddenly&#8221; updated out from under you). The other issue is that you cannot really update the common code, if needed, without seriously ticking off the people who own that code &#8211; maybe they&#8217;re more friendly in your organization when you introduce code changes that they weren&#8217;t aware of&#8230;</p>
<p>But what if you are going to need the latest release of the common code and YOU want to choose when to get a new version? That leads to the second option &#8211; branch the common code into your active dev branch (Figure 4).</p>
<p> <a href="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_commoncode.jpg" title="BranchByRelease_CommonCode"><img src="http://blog.nwcadence.com/wp-content/uploads/2007/12/branchbyrelease_commoncode.thumbnail.jpg" alt="BranchByRelease_CommonCode" /></a></p>
<p>Figure 4 &#8211; Common Code</p>
<p>This allows you to do two things: 1) You can actually change the common code without screwing up the common code project (don&#8217;t do this unless you plan out with the common code owners how to version this and get your changes back into the main common code branch) and 2) You can perform updates on the branched common code (i.e. merge down from the common code dev branch (or, preferrably the QA branch) to your active dev branch) when you feel like the common code is stable enough for you to use. This elimintes the problem of the code changing out from under you. There is one drawback to this approach &#8211; once you do the first branch from the common code to your branch and then you branch from say Release 1 to Release 2 there is no longer a relationship between your branch of the common code and the main branch. In TFS you can solve this problem by performing a baseless merge between your new branch of common code and the main branch of common code which will create a relationship between the branches.</p>
<p><strong>Pros and Cons</strong></p>
<p>So when should you use this pattern and when should you avoid it? </p>
<p><em>Pros</em> </p>
<ul>
<li>This is the simplest model to use</li>
<li>It&#8217;s a great choice for single release web applications</li>
<li>You use the same structure for hot fixes and maintenance releases</li>
<li>There is a minimal amount of branching</li>
</ul>
<p><em>Cons</em></p>
<ul>
<li>Not as flexible as other patterns</li>
<li>More difficult to manage multiple releases (more merges are required depending on how many versions you support and they get more difficult as you move along)</li>
<li>Because file history needs to be traced back to the previous branch, it takes more work to trace</li>
</ul>
<p><strong>Final Thoughts</strong></p>
<p>At the beginning of this post I mentioned that I classified this as a super pattern. There are many several other major patterns available &#8211; branch by quality (Prod/QA/Dev), feature branches, and release by manifest. The reason why this particular pattern gets the designation of a super pattern is because it can be the top level when used in combination with other branching patterns (yes, you can combine patterns which will be discussed in a later post &#8211; but it can get very, very complicated). So, for example, you may use this branch by release strategy and for each release you may have a series of features that are broken up into their own branches. You may decide for each feature to have a Dev and QA branch (the &#8216;Prod&#8217; branch in this case would be the main branch for the entire release). However, I can&#8217;t think of a good situation in which you would ever use this as a sub-pattern for one of the other major patterns.</p>
<img src="http://blog.nwcadence.com/?ak_action=api_record_view&id=51&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2007/12/branching-strategies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
