<?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>Software Configuration Management and Agile Software Development &#187; branching and merging</title>
	<atom:link href="http://accurev.com/blog/tag/branching-and-merging/feed/" rel="self" type="application/rss+xml" />
	<link>http://accurev.com/blog</link>
	<description>SCM and Agile Software Development Blog</description>
	<lastBuildDate>Thu, 17 May 2012 15:00:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Why Create Branches?</title>
		<link>http://accurev.com/blog/2012/02/20/why-create-branches-2/</link>
		<comments>http://accurev.com/blog/2012/02/20/why-create-branches-2/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 15:45:54 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[merge hell]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://accurev.com/blog/?p=3028</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2012/02/20/why-create-branches-2/' addthis:title='Why Create Branches? ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>Branching and merging is one of the most critical things a development team must work on over the course of a software release cycle. But there’s a funny thing about branching and merging &#8211; it’s usually not thought of as part of the development process. How often do you see a user story called “as [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2012/02/20/why-create-branches-2/' addthis:title='Why Create Branches? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2012/02/20/why-create-branches-2/' addthis:title='Why Create Branches? ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p><a href="http://www.accurev.com/whitepaper/guide-branching-merging-patterns">Branching and merging</a> is one of the most critical things a development team must work on over the course of a software release cycle. But there’s a funny thing about branching and merging &#8211; it’s usually not thought of as part of the development process. How often do you see a user story called “as a developer I want to merge code to trunk”?</p>
<p>The fact that we often don’t follow a process for the branching and merging of code leads to disarray and pain.  It really shouldn’t be that hard! Teams end up in “<a href="http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/">merge hell</a>” and deliver changes late to schedule. This problem stems from the way branches are created. They’re often not part of the process and are created from a specific business need, not a from a development practice.</p>
<p>When development teams do create a branching pattern, it’s usually drawn out on a white board or in a Visio document, and is used as a model for the overall development process. While the intention is good, many times these plans become quite complex for reasons that can’t be foreseen.</p>
<h2>So, why even create branches, if they’re too complex, and unaccounted for?</h2>
<p>Create branches the right way, and use them as:</p>
<ul>
<li>Development Branch – A branch created for a development code configurations and builds</li>
<li>Integration Branch – A special branch for parallel teams to integrate code</li>
<li>QA Branch – QA branches for QA teams to create builds and environments</li>
<li>BETA – A preproduction branch for customer sign-off, etc…</li>
<li>Production – All of the content that ends up in prod</li>
</ul>
<p>If we take a more philosophical view of what branches represent, beyond business needs, they actually serve as <a href="http://www.accurev.com/whitepaper/stream_based_architecture.htm">workflows for different aspects</a> of the software development process.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2012/02/20/why-create-branches-2/' addthis:title='Why Create Branches? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2012/02/20/why-create-branches-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Branching and Merging, or How to Learn to Love Change</title>
		<link>http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/</link>
		<comments>http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 18:55:08 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[merging]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2643</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/' addthis:title='Branching and Merging, or How to Learn to Love Change ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>Branching and merging is one of those things in software development that tends to drive most developers right around the bend. It’s understandable why so many fear branching and merging – after all, so many things can go wrong once you veer off the baseline and wander into uncharted territory and try to get back. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/' addthis:title='Branching and Merging, or How to Learn to Love Change '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/' addthis:title='Branching and Merging, or How to Learn to Love Change ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>Branching and merging is one of those things in software development that tends to drive most developers right around the bend. It’s understandable why so many fear branching and merging – after all, so many things can go wrong once you veer off the baseline and wander into uncharted territory and try to get back. But instead of fearing the beast, here are <strong>two tips</strong> to help you drag it up out of the basement, smack it around, and show it who’s boss.</p>
<p>Just so we’re all on the same page, <a href="http://www.accurev.com/accurev-branching-merging.html ">branching and merging</a> is defined as the process of duplicating part of a software development project baseline so that some parallel development can take place, say, to fulfill a customer’s change request, then once completed it’s merged back into the baseline.</p>
<p>The fat can hit the fire in two places: first, determining when and why a branch should be started, and then when and how it’s merged back into the main development baseline. Done poorly, both of these actions can result in confusion, errors, and delays. No wonder branching and merging gives developers night-sweats.</p>
<p>Because branching and merging has the potential to be problematic, some developers unintentionally make it worse by either branching too often or merging too late. The result can be increased risk in errors and/or a decrease in productivity.</p>
<p><em>So what’s a developer to do?</em></p>
<p>Start by determining what should rightfully constitute a branch – does a branch get triggered by a change request? How about a specific integration effort? Perhaps it’s based on system architecture? These are just a few of the common branching strategies, so you need to decide which one provides you with an acceptable balance of risk versus productivity. Do you want to branch and merge early and often, reducing risk but also slowing productivity? Or are you willing to roll the dice that things go smoothly during development so you’ll hold off on merging to potentially increase productivity and value?</p>
<p><em>Where things can get really sticky is in the merging process. </em></p>
<p>So my <strong>second tip</strong> is to make sure you can fully track all your file changes, especially across code lines, or you run the risk of some seriously broken builds and test failures. At AccuRev we have a branching model that we call streams which provides some great code flexibility to make branching and merging as fast and efficient as possible. Stream branching easily accepts parent code while allowing you to then push code out to other streams. All file versions are stream-based, making merging easier because the entire file change history is available and automatically tracked. Pretty cool.</p>
<p>Here’s the big pay-off – because branching and merging is made a lot easier with streams, development teams can branch more often and more confidently, reducing risk without seriously impacting productivity. Perhaps best of all, it helps you avoid a potentially-disastrous end-of-release merge dump that could result in costly and time-consuming fixes and release delays.</p>
<p><strong>So let’s recap: </strong>avoid a branching and merging nightmare by carefully considering the branching model that best suits your needs and your level of risk versus productivity. Make sure that your methodology provides maximum visibility into the process and enables you to fully track your file change history, enabling better decision-making and ensuring more effective merging that’s less prone to errors. <strong>The result? </strong>Better product,faster, and with less errors. <em>How sweet is that?</em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/' addthis:title='Branching and Merging, or How to Learn to Love Change '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2011/07/11/branching-and-merging-or-how-to-learn-to-love-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Merge Hell to Merge Master</title>
		<link>http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/</link>
		<comments>http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 15:33:36 +0000</pubDate>
		<dc:creator>jsherwood</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[change packages]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2576</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/' addthis:title='From Merge Hell to Merge Master ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>Are you frequently called on to perform the daunting task of &#8216;the merge&#8217;? Does tension mount and do groans grow louder when it&#8217;s time for a merge?  Are only a select few are willing to stand up and do the work? Maybe these stages describe your merge process: Denial: It&#8217;s never going to work (in [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/' addthis:title='From Merge Hell to Merge Master '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/' addthis:title='From Merge Hell to Merge Master ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>Are you frequently called on to perform the daunting task of &#8216;the merge&#8217;? Does tension mount and do groans grow louder when it&#8217;s time for a merge?  Are only a select few are willing to stand up and do the work?</p>
<p>Maybe these stages describe your merge process:</p>
<ol>
<li><strong>Denial</strong>: It&#8217;s never going to work (in a timely manner).</li>
<li><strong>Anger</strong>: Why do <em>I</em> have to do the merge?</li>
<li><strong>Bargaining</strong>: I’ll work on maintenance and support if I don’t have to do the merge.</li>
<li><strong>Depression</strong>: How many compiler errors? Why won&#8217;t the jsp work with firefox?</li>
<li><strong>Acceptance</strong>: Not really, it&#8217;s compiling and (mostly) passing tests.</li>
</ol>
<p>Before we try to get you through the 5 stages of merge, let&#8217;s a take a look at divergence, the cause of a complicated merge.</p>
<h2><strong>Converging Divergence</strong></h2>
<p>There are lots of reasons for divergence, and as many for merge product lines back together.</p>
<p>Maybe you&#8217;re delivering functionality to specific customers, creating customization and personalization of websites, internationalizing your product, even moving from Windows to Linux platforms. So what happens? These areas diverge, developers refactor code, and the product lines look very, very different over time. Sure, you try to propagate changes across the product lines, but each implementation is slightly different. Eventually you realize this is a maintenance nightmare, and some shared areas should be brought back in line (if not the whole product line moving to a single source).</p>
<p>Now comes the hard part. A select few of your developers have to start piecing the code back together. Determining what changes are acceptable, reviewing the functionality, and hopefully getting the appropriate test coverage to verify that the desired changes have been brought back into a single (or at least cleaner) product line. Here&#8217;s where tools really shine (or falter).</p>
<p>Now, I consider myself pretty experienced in the merge department. I&#8217;ve worked on a number of merges of different sizes, dealt with multiple languages (English/Italian), and even migrated to different platforms (Moving from Windows to Macintosh).  Sometimes, I found, tools were a complete hindrance- I remember back in the day, using PVCS or CVS was every man for himself. You just got it working, never mind worrying about who made what code decision, and hopefully extensive tests identified the problems. More modern tools, AccuRev in particular, give you another dimension with merge that I find to be an essential.</p>
<h2><strong>The Merge Master</strong></h2>
<p>AccuRev version tracking, and the changes it tracks (content, name, removal) really help in hunting down the straightforward changes that can result in truly subtle changes in product behavior. Simply knowing that files have been removed in one product, and merging those changes over with a click of a button can eliminate behavior that is hard to determine, especially when the developer doing the merge had a reasonable belief that the files may exist.</p>
<p>Even better, large or midsize merges, can be easily reviewed, grouped into areas of the code and dealt with in a manageable manner. I performed a merge that merged internationalization changes into a product at AccuRev. <strong><em>There were over 7000 files that were altered, added or removed that needed to be managed.</em></strong></p>
<p>Simply grouping the files by directory structure quickly identified which were doc, help, client, java, etc. Then these areas could be dealt with by developers in the specific areas. Further, because AccuRev performs simple <a href="http://www.accurev.com/merge-tracking.html">merges </a>quickly, I was able to perform the initial merges in these areas without having a strong need to understand them, and leave the complex changes to those who specialized in particular areas. This further reduced the amount of effort (and pain) that other team members experienced.</p>
<p>In this 7000+ file example, only about 400 files actually required more specialized investigation. And of the 400, only about 50 had truly complex changes where both sides of the merge made what looked like contrary decisions. Here is another place where AccuRev shines. <em>By looking at the changes made at different points in each of the product lines, and working with <a href="http://www.accurev.com/change-packages.html">change packages</a> that described what the developers where trying to accomplish, I was able to make intelligent decisions about how the code should integrate, instead of just picking &#8216;he who changed it last&#8217;.</em></p>
<p>The two product lines in this case had diverged for about 9 months, and had about 10 developers making changes in each product line. Even with the amount of changes that occurred over this time period, it only took a single developer about <em>2 weeks</em> time to bring the two product lines together. It took only a couple of <em>days </em>to complete the initial code process, walking through the changes and picking (via the AccuRev GUI) which of the changes to take, and editing inline where it was obvious.</p>
<p>During the first week, we were able to finish digging around developer changes via the AccuRev <a href="http://www.accurev.com/version-control.html">version browser </a>in order to help resolve initial compilation failures. This work brought the product to the point where it was compiling on multiple platforms (which is usually even a problem with nightly builds). After another week of going through the validation and user tests, the merge was stable enough to be considered the baseline for the next release. Of course development had already occurred during the two weeks that the merge process took, but with the version tracking <a href="http://www.accurev.com/">AccuRev</a> performs with merges, it became almost trivial to bring in the new changes- within 1 day they were validated and ready to be the new baseline.</p>
<p>Sounds like acceptance to me.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/' addthis:title='From Merge Hell to Merge Master '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2011/03/23/from-merge-hell-to-merge-master/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile and SCM: Helping You Get to &#8220;Done&#8221;</title>
		<link>http://accurev.com/blog/2011/01/24/agile-scm-get-done/</link>
		<comments>http://accurev.com/blog/2011/01/24/agile-scm-get-done/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 17:02:06 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[change packages]]></category>
		<category><![CDATA[user stories]]></category>
		<category><![CDATA[agile process]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[iteration]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[software configuration managment]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2507</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/24/agile-scm-get-done/' addthis:title='Agile and SCM: Helping You Get to &#8220;Done&#8221; ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>You spent the last 2 weeks working on 10 user stories for you sprint. Your team has completed 8 of the 10 user stories, and now it’s time to show a working demo for your sprint review. Sounds like a typical scenario right? Here’s the problem, the 2 remaining user stories have partial work associated [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/24/agile-scm-get-done/' addthis:title='Agile and SCM: Helping You Get to &#8220;Done&#8221; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/24/agile-scm-get-done/' addthis:title='Agile and SCM: Helping You Get to &#8220;Done&#8221; ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>You spent the last 2 weeks working on 10 user stories for you sprint. Your team has completed 8 of the 10 user stories, and now it’s time to show a working demo for your sprint review. Sounds like a typical scenario right?</p>
<p>Here’s the problem, the 2 remaining <a href="http://www.accurev.com/blog/2010/06/28/breaking-down-user-stories/" target="_blank">user stories</a> have partial work associated with them. That code is in your source control system, and in order to correctly demo or ship what was accomplished in your sprint, you’re going to have to do some work to create a “done” product. You will have to subtractively merge those changes, or put them on another branch, then re-test the application, redeploy.. check the changes again etc. There is still a lot of work to finished in getting this sprint to “done.”</p>
<p>One way to get around this is to associate user stories with code changes in your <a href="http://www.accurev.com/agile-scm.html" target="_blank">SCM</a> tool.  AccuRev already creates a link between your user stories and code in the form of change packages. Creating that link between the user stories and your code is the first step. But using a powerful story-driven process out of this linkage is the key to “getting to done” in an Agile environment.</p>
<p>Your user story will move through different stages as you move through your process. One user story may have these states:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2509" title="Agile &amp; SCM- User Stories Process" src="http://www.accurev.com/blog/wp-content/uploads/2011/01/chart.png" alt="chart Agile and SCM: Helping You Get to Done" width="696" height="350" /><strong>DEV</strong>- Currently in progress with dev team, or “coding”<br />
<strong> QA</strong>- Coding finished, ready for QA to test<br />
<strong> UAT</strong>- QA finished ready for user acceptance testing<br />
<strong> PROD</strong>- Tested by QA and users, ready to ship</p>
<p>However, while  user stories move through this process, the code doesn’t follow. Traditional SCM systems are designed around single branches and a long and lengthy merge processes. Fast paced Agile environments expose those limitations as development teams struggle to ship code to customers at the end of iterations.</p>
<p>During that iteration, testers may want to test completed user stories, but need a stable configuration to do so. If you’re using a traditional waterfall <a href="http://www.accurev.com/accurev-branching-merging.html">branching and merging</a> based SCM tool, you may end up with some user stories ready for QA, and some still in the DEV stage, creating a poor testing environment and broken builds. As a result, developers often delay committing code so changes can be implemented, tested, and passed to QA before they integrate.</p>
<p>During your retrospective of the previous iteration, you may decide that parts of your process need modification. For example, you may decide to add a code review process right before testing. Your SCM system has to be flexible to enable this new step without time consuming tasks, like re-writing scripts.</p>
<h2>SCM and an Agile Process</h2>
<p>The trick is to have an SCM system that can help you manage and enforce an Agile process. Code should be able to follow the same process user stories follow. If a user story is in QA, all of the code needed to test that issue should reside in a QA configuration. The same goes for DEV, UAT, PROD, or any other process that is part of your environment.</p>
<p>A<a href="http://www.accurev.com/scm-features.html" target="_blank"> stream structure</a> is an easy way to  process change &#8211; streams can be added to adjust your process. In a few clicks, you can add a code review between a DEV, and QA step.</p>
<h2>Agile and SCM: Avoiding Agile Merge Hell</h2>
<p>As you start to scale <a href="http://www.accurev.com/agile-software-development.html" target="_blank">Agile</a>, code and user stories have to be merged more often. Sometimes changes my flow from one organization to another. This means that you will need to take code from one team, merge, integrate and test those changes with everyone. Each team needs to be able to work on their own schedule, this means that if multiple teams want to work on different sized iterations they can. In addition they can deliver changes as they need to on a regular basis, independent of the the other teams.</p>
<p>The problem here is that to do this in a traditional SCM system, you would have to merge these code changes daily for them to be of any use. You also still need to keep visibility into what stories are shared between teams, because delivering changes from user stories that are not completed in a sprint would be disastrous.</p>
<p>Typically, the type of configuration people use for this is a single baseline or “trunk” methodology, where all changes from each team are delivered to trunk and pulled from trunk as their iterations are completed.</p>
<p>Working within an Agile context, your teams will have to deal with these <a href="http://www.accurev.com/smartbranch-easymerge.html" target="_blank">branching and merging </a>issues. But there are other problems that can happen when you use this methodology:</p>
<ol>
<li>Delivering 2 weeks worth of changes only causes isolation among teams.</li>
<li>It’s too hard to pick out each user story as it completes from our codebase.</li>
<li>Figuring out the dependencies of those user stories is complex.</li>
<li>Being able to identify what changes came from each branch is impossible.</li>
</ol>
<p>This “baseline pollution” is not scale-able. You can get around this by using a development hierarchy, and manage the relationship of dependencies between branches. This could also include process steps such as integration, quality assurance, and code reviews.  A separate code configuration can be used for each step and user stories could simply be drag and dropped between each team, state or branch instead of a merge.</p>
<p>Doing this will increase code stability. As a completed user story is pushed from one stage to the next, the particular change, as well as the system as a whole, reaches a higher level of maturity. While many traditional SCM tools do not easily support or surface a development hierarchy, AccuRev supports the creation of a hierarchy, gives visibility into the changes at each stage, and enables straightforward merging between stages.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/24/agile-scm-get-done/' addthis:title='Agile and SCM: Helping You Get to &#8220;Done&#8221; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2011/01/24/agile-scm-get-done/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Opening the Desk Drawers of the AccuRev Mind</title>
		<link>http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/</link>
		<comments>http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 15:47:04 +0000</pubDate>
		<dc:creator>jtalbott</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[change packages]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Product Review]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[accurev 4.9]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[streambrowser]]></category>
		<category><![CDATA[web user interface]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2453</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/' addthis:title='Opening the Desk Drawers of the AccuRev Mind ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>To borrow from a common print journalism trick, consider this the cleaning out the desk drawers of my AccuRev mind.  Or if you tend to avoid newspaper columnists, especially sports ones, then let&#8217;s just call this a random &#8220;did you know&#8221; or &#8220;what&#8217;s new&#8221; post.  I think the last time I did one of these [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/' addthis:title='Opening the Desk Drawers of the AccuRev Mind '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/' addthis:title='Opening the Desk Drawers of the AccuRev Mind ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>To borrow from a common print journalism trick, consider this the cleaning out the desk drawers of my AccuRev mind.  Or if you tend to avoid newspaper columnists, especially sports ones, then let&#8217;s just call this a random &#8220;did you know&#8221; or &#8220;what&#8217;s new&#8221; post.  I think the last time I did one of these was in the AccuRev Version 4.5 days, and we now entered the days of <a href="http://www.accurev.com/press-releases/20101118-accurev-49-breaks-new-groud-floating-licenses-support-use-scm-tools-diverse-" target="_blank">AccuRev 4.9,</a> so there might be a few things tossed in here that aren&#8217;t necessarily fresh off the presses&#8230;</p>
<p>AccuRev 4.9 introduces the long sought after &#8220;stale filter&#8221;.  Actually, it&#8217;s an Update Preview search, but it shows not just (stale) files, but also anything that will change at update time, like moves and new elements.  You can even perform actions in that search pane, like Diffs, prior to updating&#8230;</p>
<ul><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/update_preview.jpg"><img class="aligncenter size-full wp-image-2456" title="AccuRev 4.9- update preview" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/update_preview.jpg" alt="Software Configuration Management" width="667" height="229" /></a></ul>
<p>AccuRev 4.9 also brings you the -t &lt;time_spec&gt; argument for both stat and pop.  This lets you provide a transaction or time stamp to the command so you can reference a configuration of code at a point in time without having to utilize a time-based stream.</p>
<p style="text-align: center;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/stat_pop_dash_t.jpg"><img class="aligncenter size-full wp-image-2457" title="AccuRev 4.9- stat_pop_dash_t" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/stat_pop_dash_t.jpg" alt="Software Configuration Management" width="625" height="147" /></a></p>
<p>Sticking with command-line tidbits, you can now use pop -D to populate elements without including their entire directory structure.  Very useful in situations where you might have different applications contained under a root folder yet want to populate them at a top level.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/pop_dash_D.jpg"><img class="aligncenter size-full wp-image-2458" title="AccuRev 4.9- pop_dash_D" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/pop_dash_D.jpg" alt="Software Configuration Management" width="637" height="183" /></a></p>
<p>Another really helpful enhancement is to the Deep Overlap search.  Now when you Merge a file that is in Deep Overlap, AccuRev changes the status to (kept)(member) in the filter so that you know which files have been operated on.  You also have the ability to promote from this search window, and subsequently the promoted file will no longer appear in the filter.</p>
<p style="text-align: center;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/deep_overlap.jpg"><img class="aligncenter size-full wp-image-2459" title="AccuRev 4.9- deep_overlap" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/deep_overlap.jpg" alt="Software Configuration Management" width="689" height="282" /></a></p>
<p>If you haven&#8217;t started using the <a href="http://www.accurev.com/web-interface.html" target="_blank">AccuRev WebUI</a>, you&#8217;re really missing out.  One lesser known capability in the WebUI is the ability to take a regular query, Group by any field, and automatically convert it to a bar, line, or pie chart.  This report can then be sent and accessed as a URL, and obviously can be viewed by users without installing the classic GUI.</p>
<p style="text-align: center;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/webui_pie_chart.jpg"><img class="aligncenter size-full wp-image-2460" title="AccuRev 4.9- webui_pie_chart" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/webui_pie_chart.jpg" alt="Software Configuration Management" width="592" height="340" /></a></p>
<p>To further bind the classic GUI and WebUI together, <a href="http://www.accurev.com/issue-tracking.html" target="_blank">AccuWork issues</a> in the classic GUI now contain a hyperlink &#8220;Issue URL&#8221; which takes you directly to the URL rendering of the issue in the WebUI.  And for those with a very extensive stream structure, have you checked out the St\ream Filter to personalize and only display streams that you care about?</p>
<p style="text-align: center;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/stream_filter.jpg"><img class="aligncenter size-full wp-image-2461" title="AccuRev 4.9- stream_filter" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/stream_filter.jpg" alt="Software Configuration Management" width="559" height="354" /></a></p>
<p>For folks running <a href="http://www.accurev.com/continuous-integration.html" target="_blank">Continuous Integration</a>, or for those who just want to be able to use command-line to see what&#8217;s changed in a stream over time &#8211; including inherited content! &#8211; I think you&#8217;ll be happy with this one.  You can use the accurev diff command to compare the contents of a single stream with itself over a period of time, without having to create a time-based stream.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/accurev_diff_dash_t.jpg"><img class="aligncenter size-full wp-image-2462" title="AccuRev 4.9- accurev_diff_dash_t" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/accurev_diff_dash_t.jpg" alt="Software Configuration Management" width="727" height="211" /></a></p>
<p>Have you noticed that when using the Stream Issue Mode in the <a href="http://www.accurev.com/streambrowser.html" target="_blank">StreamBrowser</a>, you now see Incomplete Issues right in the &#8220;Show Active&#8230;&#8221; box attached to streams?</p>
<p style="text-align: center;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/12/incomplete_issues.jpg"><img class="aligncenter size-full wp-image-2463" title="AccuRev 4.9- incomplete_issues" src="http://www.accurev.com/blog/wp-content/uploads/2010/12/incomplete_issues.jpg" alt="Software Configuration Management" width="594" height="259" /></a></p>
<p>And lastly for now, bonus points for anyone who can comment here to point out the AccuRev command-line typo that still works as if it is spelled correctly.  AccuRevers or former ones need not apply  <img src='http://accurev.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="Opening the Desk Drawers of the AccuRev Mind" /> </p>
<p>__________________________________________________________________________________________________________________________________________________</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/' addthis:title='Opening the Desk Drawers of the AccuRev Mind '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2011/01/03/opening-accurev-scm-html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How AccuRev makes releasing Beta software easy</title>
		<link>http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/</link>
		<comments>http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 19:47:09 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[AccuRev customer]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[building software]]></category>
		<category><![CDATA[Releasing Beta]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[snapshots]]></category>
		<category><![CDATA[software builds]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[source code management]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=400</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/' addthis:title='How AccuRev makes releasing Beta software easy ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>I work for a large global enterprise software company with over 500 users, that has been using AccuRev for over 4 years. We are currently managing a Beta release of our main product line.  The management of the source code is easy thanks to AccuRev, and here&#8217;s why: 1) Stream inheritance is just plain awesome! [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/' addthis:title='How AccuRev makes releasing Beta software easy '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/' addthis:title='How AccuRev makes releasing Beta software easy ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>I work for a large global enterprise software company with over 500 users, that has been using AccuRev for over 4 years.</p>
<p>We are currently managing a Beta release of our main product line.  The management of the source code is easy thanks to AccuRev, and here&#8217;s why:</p>
<p>1) <a href="http://www.accurev.com/smartbranch-easymerge.html" target="_blank">Stream inheritance</a> is just plain awesome!</p>
<p>We manage hundreds of streams to make up our suite.  We are able to promote code up through task streams, to integration streams, to qa streams where we ship.  For the Beta, we have child streams qa.beta, and our build machines use these streams.</p>
<p>2) Snapshots rule!</p>
<p><a href="http://www.accurev.com/snapshots.html" target="_blank">Snapshots</a> by definition are immutable.  So you know what you built, when you built it.  Our build process creates snapshots automatically, and we fetch code based on snapshot.  We have 100% confidence in knowing what went into a build, and our snapshots are named to a pattern i.e. &lt;parent stream&gt;.yyyymmddhhmmss.build&lt;build number&gt;.  That gives one a lot of info about a build.</p>
<p>3) Timelocks let you stabilize code, even if set the next day!</p>
<p>We built our Beta release on snapshot, and the next day we retroactively set time locks on the qa.beta streams based on build time, and we access locked them down.  Now we can finalize the Beta, and still allow other integration and qa work to happen.</p>
<p>In summary, if we were using a traditional branch/merge <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">SCM</a>, this would be a lot of work and require dedicated personnel.  Instead, we did this part time and the <a href="http://www.accurev.com/streambrowser.html" target="_blank">StreamBrowser</a> makes is so easy to see what code is where and why.  There is no confusion with views or other techniques used by other vendors.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/' addthis:title='How AccuRev makes releasing Beta software easy '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Right Process, Wrong Tool? Getting Ready for Agile</title>
		<link>http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/</link>
		<comments>http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/#comments</comments>
		<pubDate>Fri, 30 May 2008 18:04:01 +0000</pubDate>
		<dc:creator>matthew d. laudato</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[agile process]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[agile webinar]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[multi-stage continuous integration]]></category>
		<category><![CDATA[ready for agile]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software process automation]]></category>
		<category><![CDATA[SPA]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=205</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/' addthis:title='Right Process, Wrong Tool? Getting Ready for Agile ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>Yesterday I was a panelist for a Webinar on agile tools, focusing on software configuration management (SCM), build and software process automation (SPA), the latter term referring to the set of defined, repeatable and measurable automated development workflows that engineers use to transform requirements into shippable software products. Contrary to what I&#8217;ve read about the [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/' addthis:title='Right Process, Wrong Tool? Getting Ready for Agile '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/' addthis:title='Right Process, Wrong Tool? Getting Ready for Agile ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>Yesterday I was a panelist for a <a href="http://www.accurev.com/webinar/200802-electriccloud" target="_blank">Webinar on agile tools</a>, focusing on <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">software configuration management</a> (SCM), build and software process automation (SPA), the latter term referring to the set of defined, repeatable and measurable automated development workflows that engineers use to transform requirements into shippable software products. Contrary to what I&#8217;ve read about the disdain that some agile devotees have for tools, most of the attendees were hungry to know what features their <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">SCM tool</a> should have in order to support <a href="http://www.accurev.com/agile-scm.html" target="_blank">agile software development</a> and SPA. Here are some of the highlights, and of course, my take on why I think AccuRev is the best tool for agile software process automation.</p>
<p>There are five key feature areas that an SCM tool needs to support in order to be ready for agile:</p>
<p>* Support for flexible process models</p>
<p>* Continuous integration support</p>
<p>* Support for issue-based development</p>
<p>* Efficient branch and code management</p>
<p>* Private version controlled developer workspaces</p>
<p>Let&#8217;s take a look at each of these in turn.</p>
<p>* <strong>Support for flexible process models.</strong> Agile is often one of several processes being employed within a software development organization. Unless your SCM tool is flexible and process-neutral, you will have a hard time implementing agile (say, for product development) and more traditional processes like waterfall (for example, for product maintenance work) in the same SCM tool. AccuRev streams are a natural way to model any process, and thus are a good fit when agile needs to coexist with other development processes. As for software process automation (SPA), AccuRev streams again are a great fit, since they enable users to model any arbitrary stages of code transformation that a development team sees fit to define as part of their process. By adding triggers and workflow to a stream hierarchy, teams can implement SPA directly in AccuRrev.</p>
<p>* <strong>Continuous integration support.</strong> <a href="http://www.accurev.com/webinar/200802-electriccloud" target="_blank">Continuous integration</a> is one of the core process elements associated with agile development. By building and testing frequently and acting on the results of tests, teams can uncover defects or test gaps earlier in their development cycle, saving time and money compared to such discoveries late in the cycle. But continuous integration goes beyond just testing the nightly build. With <a href="http://damonpoole.blogspot.com/2008/01/advanced-multi-stage-continous.html" target="_blank">multi-stage continuous integration </a>in AccuRev, code is automatically promoted up the stream hierarchy into more stable configurations as it passes tests. At each stage, continuous integration takes over to build and test, typically with a wider scope of testing as the code nears the release stage. Legacy <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">SCM tools</a> make this type of automated integration factory somewhere between difficult and impossible due to the complexity involved in setting up the hierarchy and in automatically moving and merging code as it flows up the hierarchy.</p>
<p>* <strong>Support for issue-based development.</strong> Apparently there is a lot of contention about the need for filing issues and defects in agile development. This has puzzled me greatly. While I&#8217;m in favor of developers identifying and fixing issues as they are discovered, you lose valuable process information when a defect or enhancement ticket is not filed and later associated with a code change. Without an issue that describes what the problem was, someone looking at the code changes for audit purposes or for group code reviews is at a disadvantage. Why was this code change made? Is it related to other changes? How long did it take? Was it done to fix a bug or to add a feature. In AccuRev, issues either in the integrated AccuWork issue tracking system, or in a 3rd party issue tracking system, can easily be associated with code changes via the AccuRev Change Package mechanism. This establishes basic traceability between issues and the code changes that developers make in order to satsify the requirements of those issues. Issue-based development is well-defined, repeatable and measurable &#8211; all hallmarks of good software process automation.</p>
<p>* <strong>Efficient branch and code management.</strong> Any time you&#8217;re working on more than one project, you need to isolate that project&#8217;s code from other projects. With agile and multistage continuous integration, even a single project requires multiple code lines in order to separate in-progress code from unit tested code from system tested code that is ready for release. If an SCM tool makes <a href="http://www.accurev.com/product-overview.html" target="_blank">branching, merging</a> and labeling difficult, teams tend to practice branch avoidance, which I sometimes like to call &#8220;fear of branching.&#8221; This is a classic example of letting a tool dictate what processes you can implement. In AccuRev, streams replace branches as the mechanism for isolating codelines. Since streams are represented inside of AccuRev as data separate from the actual file versions, creating streams is fast &#8211; really fast, like, a second or two &#8211; and managing a system with hundreds of streams spanning multiple projects and processes is easy.  For continuous integration, AccuRev snapshots and time-based streams are also fast and easy to create and manage, and give users a straight-forward way to &#8220;label&#8221; an interim or milestone codeline without having to place markers in thousands of source files.</p>
<p>* <strong>Private version controlled developer workspaces.</strong> Software developers are the heartbeat of any engineering organization. Executives at any development shop will tell you that hiring talented engineers and keeping them well-tooled and productive is the single largest challenge that they face. For agile, this is even more of a challenge, since coding cycles tend to be shorter, and thus anything that gets in the way of individual or team productivity tends to have a greater negative impact on the project. Private version controlled workspaces like the AccuRev workspace model improve productivity, since they enable developers to work in isolation (while they are &#8216;heads down&#8217; coding). Private workspaces in AccuRev also give developers full SCM capabilites in their workspaces without the need to share in-progress code prematurely. By using the &#8216;keep&#8217; operation, developers make safe copies of their work in the AccuRev repository, and later can &#8216;promote&#8217; the code to an integration stream to combine their work with that of their teammates. Individuals are more productive in this way, and if continuous integration builds are frequently testing the integration stream, so are teams.</p>
<p>In a nutshell, agile requires tools, and these tools need to support different modes of operation than with other processes. SCM can help or hurt you in setting up and executing an agile process, so these guidelines are a way to help you get your SCM tool ready for agile - easy of course if your tool is already AccuRev!</p>
<p>If you&#8217;re interested, you can view the webinar recording.</p>
<p>Is Your Software Development Environment Agile-Ready?<br />
Free On-Demand <a href="http://www.accurev.com/webinar/200805-agileready" target="_blank">Webinar </a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/' addthis:title='Right Process, Wrong Tool? Getting Ready for Agile '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/05/30/right-process-wrong-tool-getting-ready-for-agile/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

