<?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; change management</title>
	<atom:link href="http://accurev.com/blog/tag/change-management/feed/" rel="self" type="application/rss+xml" />
	<link>http://accurev.com/blog</link>
	<description>SCM and Agile Software Development Blog</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:28:17 +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>Change and Configuration Management: Is Your SCM Up to the Job?</title>
		<link>http://accurev.com/blog/2011/07/14/change-and-configuration-management-is-your-scm-up-to-the-job/</link>
		<comments>http://accurev.com/blog/2011/07/14/change-and-configuration-management-is-your-scm-up-to-the-job/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 16:00:12 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2650</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/14/change-and-configuration-management-is-your-scm-up-to-the-job/' addthis:title='Change and Configuration Management: Is Your SCM Up to the Job? ' ><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>One question I hear a lot is “what’s so important about change and configuration management systems? Isn’t that just another layer of software that can clog up the software development process?” The fact is, a majority of software projects fail because of poor change and configuration management and improper use of SCM systems. So what [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/14/change-and-configuration-management-is-your-scm-up-to-the-job/' addthis:title='Change and Configuration Management: Is Your SCM Up to the Job? '  ><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/14/change-and-configuration-management-is-your-scm-up-to-the-job/' addthis:title='Change and Configuration Management: Is Your SCM Up to the Job? ' ><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>One question I hear a lot is “what’s so important about change and configuration management systems? Isn’t that just another layer of software that can clog up the software development process?” The fact is, a majority of software projects fail because of poor change and configuration management and improper use of SCM systems.</p>
<p>So what seems to be the problem? Well, efficient software development is often muddied by the increased use of outsourced development teams spread out over a variety of geographic locations, using a mix of Agile and waterfall modeling processes, and working on parallel projects. Choosing the wrong SCM system can reduce development efficiency, lock engineers into inappropriate processes, and cause defects to ship that can cost a boatload to fix and adversely affect overall product quality and, ultimately, customer satisfaction.</p>
<p><strong>The right SCM tool, however,</strong></p>
<ul>
<li> enables flexible processes for easier <a href="http://www.accurev.com/software-configuration-management.html">change and configuration management</a></li>
<li> stands up to demanding frequent build, test, and release cycles</li>
<li> helps improve quality while reducing the cost of the shipped product</li>
</ul>
<p>In other words, the right SCM system, properly implemented and used, will make the entire software build, test, and release process faster, easier, and more successful. And isn’t that the whole idea?</p>
<p>Any good, comprehensive SCM system consists of four basic elements:</p>
<ol>
<li><strong>Version control</strong>, which tracks changes to a file over time</li>
<li><strong>Build management</strong>, which enables developers to track a build’s progress and what goes into it</li>
<li><strong>Release management</strong>, which handles the transition from initial build to shipped product</li>
<li><strong>Process control</strong>, which ties it all together</li>
</ol>
<p>The right mix of these four components will depend on the project size – more complex projects might require more build management, frequently-updated products might need more release management.</p>
<p><strong>Size matters.</strong><br />
One of the most important aspects of efficient and effective SCM is right-sizing – making sure your SCM system is scalable to meet the size and scope of your development projects. Too often, organizations struggle with a one-size-fits-all SCM system that is simply inappropriate for the project at hand. Likewise, use scalable best practices; for example, don’t waste precious time and resources collective extensive project metrics for one-off projects – save the thorough data collecting for more complex builds, potential version updates, and product line extensions.</p>
<p><strong>Managing change and configuration</strong><br />
All development processes, waterfall or Agile, need to handle branching, merging, and refactoring as efficiently as possible. Code often needs to be modified or revised for maintenance purposes or to facilitate emergency releases associated with defect repairs. Your SCM system needs to be able to handle branching, merging, and refactoring effectively to ensure that any fixes carry forward from maintenance releases to major future releases so that any errors or bugs don’t perpetually pop up as ongoing problems after their initial fix.</p>
<p><strong>SCM Best Practices to improve your software development processes</strong><br />
To help you implement the ideal SCM system or improve your current one, here are <strong>eleven SCM Best Practices</strong> to aid process improvement and make your SCM as efficient and effective as possible:</p>
<ul>
<li> Forget one-size-fits-all SCM</li>
<li> Design scalable Best Practices</li>
<li> Plan your SCM environment carefully</li>
<li> Ensure absolute reproducibility for all artifacts</li>
<li> Require change requests and change packages</li>
<li> Maintain private developer workspaces</li>
<li> Create and work from appropriate baselines</li>
<li> Leverage metrics for process improvement</li>
<li> Create reusable components</li>
<li> Merge and integrate as often as possible</li>
<li> Structure for distributed development</li>
</ul>
<p>The proper SCM system, implemented well and thoroughly embraced by your development teams, can make the difference between having a wildly successful product or an error-prone disaster that sucks up time, money, and resources in ever-increasing amounts.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/07/14/change-and-configuration-management-is-your-scm-up-to-the-job/' addthis:title='Change and Configuration Management: Is Your SCM Up to the Job? '  ><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/14/change-and-configuration-management-is-your-scm-up-to-the-job/feed/</wfw:commentRss>
		<slash:comments>2</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>AccuRev is a 2009 Jolt Award Finalist</title>
		<link>http://accurev.com/blog/2009/01/22/accurev-is-a-2009-jolt-award-finalist/</link>
		<comments>http://accurev.com/blog/2009/01/22/accurev-is-a-2009-jolt-award-finalist/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 19:53:20 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Jolt Award]]></category>
		<category><![CDATA[parallel development]]></category>
		<category><![CDATA[release management]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[software release process]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/?p=567</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/01/22/accurev-is-a-2009-jolt-award-finalist/' addthis:title='AccuRev is a 2009 Jolt Award Finalist ' ><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>AccuRev is once again pleased to inform everyone that its flagship product, AccuRev, has been selected as a Jolt Award Finalist for Dr. Dobb&#8217;s 19th Annual Jolt Product Excellence Awards in the Change and Configuration Management category.  For the past 18 years, the Jolt Product Excellence Awards have been presented annually to showcase products that [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/01/22/accurev-is-a-2009-jolt-award-finalist/' addthis:title='AccuRev is a 2009 Jolt Award Finalist '  ><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/2009/01/22/accurev-is-a-2009-jolt-award-finalist/' addthis:title='AccuRev is a 2009 Jolt Award Finalist ' ><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>AccuRev is once again pleased to inform everyone that its flagship product, AccuRev, has been selected as a <a href="http://www.accurev.com/jolt_award.html" target="_blank">Jolt Award </a>Finalist for Dr. Dobb&#8217;s<em> </em>19th Annual Jolt Product Excellence Awards in the Change and Configuration Management category. </p>
<p>For the past 18 years, the Jolt Product Excellence Awards have been presented annually to showcase products that have &#8220;jolted&#8221; the industry with their significance and made the task of creating software faster, easier, and more efficient. The awards presentation is sponsored by JOLT, the fabled soft drink quaffed by software developers for sustenance during project development marathons.</p>
<p>&#8220;The Jolt judges have selected these finalists from the nearly 300 qualified nominations that were submitted online. The submissions represent the many innovative tools available for every phase of the software development lifecycle,&#8221; said Amber Ankerholz, Jolt Award Project Manager. &#8220;This year’s finalist round was extremely competitive and we appreciate the effort all of the participants put into showcasing their products’ features for the judges.”</p>
<p>In the next round of the Jolt Award process, the judges will examine the finalists according to the standard criteria of audience suitability, productivity, innovation, quality, ROI, risk, and flexibility. They focus on products that are ahead of the curve, universally useful, rich in functionality or that were solutions to problems in their product space.</p>
<p>Winners are announced during the Jolt Awards ceremony that takes place on March 11 at <a href="http://www.sdexpo.com/" target="_blank">SD West 2009</a> Conference &amp; Expo at the Santa Clara Convention Center.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/01/22/accurev-is-a-2009-jolt-award-finalist/' addthis:title='AccuRev is a 2009 Jolt Award Finalist '  ><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/2009/01/22/accurev-is-a-2009-jolt-award-finalist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing in streams, releasing from streams</title>
		<link>http://accurev.com/blog/2008/09/25/developing-in-streams-releasing-from-streams/</link>
		<comments>http://accurev.com/blog/2008/09/25/developing-in-streams-releasing-from-streams/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 17:24:42 +0000</pubDate>
		<dc:creator>matthew d. laudato</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[JIRA]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[streams]]></category>
		<category><![CDATA[tags]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=366</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/25/developing-in-streams-releasing-from-streams/' addthis:title='Developing in streams, releasing from streams ' ><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>By Matthew Laudato When I read the following blog, Developing in branches, releasing from trunk about a software configuration management development process that was constrained and tortured by branches, I had an &#8216;aha&#8217; moment. Actually, I had three moments. They went something like this: 1. Branches are obsolete, so why does anyone still use them? 2. People [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/25/developing-in-streams-releasing-from-streams/' addthis:title='Developing in streams, releasing from streams '  ><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/09/25/developing-in-streams-releasing-from-streams/' addthis:title='Developing in streams, releasing from streams ' ><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><strong>By Matthew Laudato</strong></p>
<p>When I read the following blog, <a href="http://www.woloszyn.org/2008/09/12/developing-in-branches-releasing-from-trunk/" target="_blank">Developing in branches, releasing from trunk</a> about a <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">software configuration management</a> development process that was constrained and tortured by branches, I had an &#8216;aha&#8217; moment. Actually, I had three moments. They went something like this:</p>
<p>1. Branches are obsolete, so why does anyone still use them?</p>
<p>2. People use them because they are unaware of the alternatives &#8211; specifically streams.</p>
<p>3. I must act quickly to save my coding comrades from any further branch related pain.</p>
<p>If there is a cyberspace equivalent of shouting from the rooftops, then this blog post is it. My goal is to help the author to simplify his development process, and to free him and his team from the time-wasting, error-prone, outdated branch-induced hysteria that is clearly evident in his post. OK, so maybe that last sentence was a little hysterical, but you get the point.</p>
<p>In the post (which I encourage you to <a title="Developing in branches, releasing from trunk" href="http://www.woloszyn.org/2008/09/12/developing-in-branches-releasing-from-trunk/" target="_blank">read first</a>), the author outlines a branch-centric process that goes something like this:</p>
<p>- create issues in JIRA for feature (defect, etc) work</p>
<p>- create a Subversion branch for each JIRA issue, named by the JIRA issue ID (eg, SUP-3452). Developers write code on these feature branches.</p>
<p>- create a JIRA release (for example, R4.2) and target the issues created above to this release</p>
<p>- create a Subversion branch (off of the &#8216;trunk&#8217;) with the same name &#8216;R4.2&#8242;.</p>
<p>- Write a bunch of scripts that look at the JIRA release, find all the issues for that release, look at Subversion for the branches that are named for said issues, merge these branches to the release (R4.2) branch.</p>
<p>- Do some testing on the R4.2 branch</p>
<p>- Tag the release R4.2 branch</p>
<p>- Release software</p>
<p>- Merge the R4.2 tag back into the trunk</p>
<p>Rinse, repeat for the next release.</p>
<p>For some reason, I&#8217;m reminded at this point of a character in Tom Robbins&#8217; &#8220;Even Cowgirls Get the Blues&#8221;. The character had a little business card that he would hand to people. One one side it read, &#8216;I believe in everything, nothing is sacred&#8217;. On the other side it read, &#8216;I believe in nothing, everything is sacred&#8217;. When I think about the author&#8217;s process, one side of my brain says &#8216;there is nothing wrong with this process&#8217;, and almost immediately, the other side screams &#8216;there is everything wrong with this process&#8217;. The truth is somewhere in the middle, and it all comes down to branches.</p>
<p>The problem with this process is that branches get in the way. The idea of isolating features in your <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">SCM tool</a> is a good one. Although I don&#8217;t personally agree with the idea of dedicating an SCM construct per-feature, there are plenty of people who do. (See <a title="Stream-per-task paradigm" href="http://blog.accurev.com/2007/10/11/stream-per-task-paradigm-with-accurev-software-configuration-management/" target="_blank">Stream-per-task paradigm</a>, for example by Dave Thomas). But that&#8217;s not the point. Whether you put one feature or ten in it, a branch constrains your ability to work efficiently. Once you create a branch, it loses all contact with the outside world, most importantly, with its own history and its relationship to other branches. The author even admits jokingly that a &#8216;release manager&#8217; will likely be needed to handle the merges. Ya think?</p>
<p>Here&#8217;s an alternative process that uses AccuRev streams:</p>
<p>- <a href="http://www.accurev.com/webinar/200706-jira" target="_blank">Create issues in JIRA</a> as before for the desired features and fixes and assign to developers. Use AccuBridge for JIRA to sync those issues into AccuRev</p>
<p>- Create a stream for R4.2</p>
<p>- Create (or reparent existing) developer workspaces off of this stream.</p>
<p>- When developers finish coding, they use &#8216;promote to issue&#8217; to push the code to the R4.2 stream (automatically creating a change package that associates the code changes with the JIRA issue, and automatically updating the JIRA issue with an annotation about said code changes).</p>
<p>At this point, the R4.2 stream contains everything that you want to release. If you decide to back out a feature, you can use the revert by change package feature to remove it from the stream. The code changes are always available in the developer&#8217;s workspace if you need to revive them in the future. Once it is time to release, you can create a snapshot of the R4.2 stream to preserve it, and then you can go about working on the next release. If R4.2 and R5.0 (The Next Big Release) are happening in parallel, you could create an R5.0 stream as a child of R4.2, so that the R5.0 stream automatically inherits all of the R4.2 changes.</p>
<p>The advantages are many:</p>
<p>- Fewer and simpler merges</p>
<p>- Right-sized feature isolation and management</p>
<p>- <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">Inherent parallelism through code inheritence</a></p>
<p>- Fewer process steps</p>
<p>- Built-in automation and thus fewer opportunities for manual errors.</p>
<p>I could go on, but I hear the footsteps in the hallway. There are people out there who don&#8217;t want you to know about streams. &#8220;We&#8217;ve always used branches,&#8221; they&#8217;ll say. &#8220;We&#8217;re too smart to use some vendor&#8217;s solution,&#8221; others will say. I say, don&#8217;t listen to them. Fight the power. Walk right up to them and say &#8220;Why branch when you can stream?&#8221; And then go ahead and watch your team spend less time fighting with branches and merges, and more time writing features and fixes for your customers.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/25/developing-in-streams-releasing-from-streams/' addthis:title='Developing in streams, releasing from streams '  ><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/09/25/developing-in-streams-releasing-from-streams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Globally Distributed Developers, Under a Single Roof</title>
		<link>http://accurev.com/blog/2008/05/07/globally-distributed-developers-under-a-single-roof/</link>
		<comments>http://accurev.com/blog/2008/05/07/globally-distributed-developers-under-a-single-roof/#comments</comments>
		<pubDate>Wed, 07 May 2008 15:16:43 +0000</pubDate>
		<dc:creator>jtalbott</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[GDD]]></category>
		<category><![CDATA[geographically distributed development]]></category>
		<category><![CDATA[globally distributed development]]></category>
		<category><![CDATA[issue tracking]]></category>
		<category><![CDATA[mastership issues]]></category>
		<category><![CDATA[replication issues]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software release process]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=183</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/07/globally-distributed-developers-under-a-single-roof/' addthis:title='Globally Distributed Developers, Under a Single Roof ' ><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>One of the most common and problematic challenges that exists in today&#8217;s software development environments is how best to support a Globally Distributed Development organization. In ye olden days, you had the entire team co-located in the proverbial cube farm under a single monolithic roof. If Brad wanted you to review the code he just [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/07/globally-distributed-developers-under-a-single-roof/' addthis:title='Globally Distributed Developers, Under a Single Roof '  ><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/07/globally-distributed-developers-under-a-single-roof/' addthis:title='Globally Distributed Developers, Under a Single Roof ' ><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>One of the most common and problematic challenges that exists in today&#8217;s software development environments is how best to support a <a href="http://www.accurev.com/distributed-scenario.htm" target="_blank">Globally Distributed Development</a> organization. In ye olden days, you had the entire team co-located in the proverbial cube farm under a single monolithic roof. If Brad wanted you to review the code he just wrote, he would literally turn around in his chair, ask you to come in and look over his shoulder.</p>
<p>Times have definitely changed. Now, your team might be headquartered in Boston, separate R&amp;D sites in California and London, with some specialized groups in Bangalore and Shanghai. But that&#8217;s not necessarily the hard part. Where it gets complicated is when all these developers are trying to work on the <strong>same source code</strong> at the <strong>same time</strong>. <a href="http://www.accurev.com/scm-comparisons/accurev-clearcase.html" target="_blank">Mastership issues</a> questions, latency, mismatched process across sites; communication problems, lack of <a href="http://www.accurev.com/accurev_tyler_scm_solution.htm" target="_blank">project visibility</a>; these things all lead to significant decrease in productivity, not to mention the chaos for those trying to manage the effort.</p>
<p>Enter AccuRev. Uniquely architected to support remote and <a href="http://www.accurev.com/accureplica.html" target="_blank">geographically distributed development</a> (GDD), there are several key built-in capabilities that make the challenges of the past disappear. Consider the following graphic:</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/05/gdd4.jpg" target="_blank"><img class="alignnone size-medium wp-image-195" src="http://www.accurev.com/blog/wp-content/uploads/2008/05/gdd4.jpg?w=300" alt=" Globally Distributed Developers, Under a Single Roof" width="300" height="167" title="Globally Distributed Developers, Under a Single Roof" /></a></p>
<ul>
<li>AccuRev&#8217;s Stream Browser presents a dynamic visual representation of the <a href="http://www.accurev.com/index.html" target="_blank">software development process</a> that is both fundamentally tied to the source code itself as well as being flexible and enforceable. At a single glance, *anyone* working on the project anywhere knows exactly what the process in place is. (See example <a href="http://dotnet.sys-con.com/read/526698_2.htm" target="_blank">AccuRev annotated screen shot</a> here from the Alaska Airlines success story).</li>
<li>Geography has zero impact on your position in the process; a developer in the UK can happily use a Workspace on the same parent stream as a developer in the United States. For low bandwidth locations, AccuReplica can provide LAN-quality access without introducing the traditional mastership and latency problems of <a href="http://www.accurev.com/clearcase-adapter.html" target="_blank">other replication solutions</a>.</li>
<li>The private nature of the Workspace means that these remote developers can &#8220;share&#8221; code while still determining when to deliver their changes publicly.</li>
</ul>
<p>Here&#8217;s the scenario: Developer ibergman works out of London, while jtalbott works in Boston. However, they are both part of a virtual team working on ComponentC. With AccuRev, the normal boundaries and limitations of time and space &#8211; not to mention being constrained by an inadequate <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">SCM tool</a> &#8211; no longer apply. Okay, I took some verbal liberties with the &#8220;time and space&#8221; bit, but it&#8217;s actually not too far from the truth.</p>
<p>In London at noon, ibergman wraps up a section of code she&#8217;s been working on and performs a Keep, which in AccuRev is a private check-in. The change is versioned yet stays within the confines of the Workspace, not yet ready for public consumption. But ibergman wants some validation, and asks jtalbott to review her code. Using instant messaging (IM), she pings him and catches him as he&#8217;s having his first sip of coffee, probably a colombian supremo. In other tools, how would someone review a private change that was just committed on the other side of the ocean? Would they even have private commits in the first place? In AccuRev, the moment ibergman performed that Keep in London, a visual identifier is available to anyone viewing the StreamBrowser, such as to jtalbott in Boston. So jtalbott clicks on the icon, and now has immediate access to operations like View, to see the file, and Diff, to compare against any previous revision of this file:</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/05/gdd3.jpg" target="_blank"><img class="alignnone size-medium wp-image-194" src="http://www.accurev.com/blog/wp-content/uploads/2008/05/gdd3.jpg?w=300" alt=" Globally Distributed Developers, Under a Single Roof" width="300" height="201" title="Globally Distributed Developers, Under a Single Roof" /></a></p>
<p>Did I mention that jtalbott&#8217;s access to these operations is instantaneous, as soon as ibergman performs the Keep? He can even take her version and send it into his own workspace if he finds it interesting enough to want to do additional development on.</p>
<p>So the previously mentioned problems of mastership, latency, visibility, communication, and most importantly Process, have all gone away. No more waiting on a 24-hour turnaround to get that Shanghai code copied into the branch. No more working in the dark not knowing exactly where your piece of code fits into the puzzle. Each team can regain the responsibility of merging in their efforts into common integration points, using a well-defined process implemented with streams.</p>
<p>It&#8217;s a remarkably simple and elegant solution to a complex and challenging problem. Of course, it&#8217;s still not going to solve the amusing problem of both the London and Boston developers feeling like they are superior to each other, but at least now they can actually review each other&#8217;s code real-time to help figure that one out <img src='http://accurev.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="Globally Distributed Developers, Under a Single Roof" /> </p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/07/globally-distributed-developers-under-a-single-roof/' addthis:title='Globally Distributed Developers, Under a Single Roof '  ><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/07/globally-distributed-developers-under-a-single-roof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Few Good AccuRevvers</title>
		<link>http://accurev.com/blog/2008/02/14/a-few-good-accurevvers/</link>
		<comments>http://accurev.com/blog/2008/02/14/a-few-good-accurevvers/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 17:00:35 +0000</pubDate>
		<dc:creator>jtalbott</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM humor]]></category>
		<category><![CDATA[software change and configuration management]]></category>
		<category><![CDATA[software change management]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/?p=124</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/14/a-few-good-accurevvers/' addthis:title='A Few Good AccuRevvers ' ><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>James from AccuRev: You want answers? Tom the CC User: I think I&#8217;m entitled to them. James from AccuRev: You want answers?! Tom the CC User: I want the truth. James from AccuRev: You can&#8217;t handle the truth! Tom, we live in a world that has complex software. And that software is going to be [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/14/a-few-good-accurevvers/' addthis:title='A Few Good AccuRevvers '  ><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/02/14/a-few-good-accurevvers/' addthis:title='A Few Good AccuRevvers ' ><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>James from AccuRev: You want answers?</p>
<p>Tom the CC User: I think I&#8217;m entitled to them.</p>
<p>James from AccuRev: You want answers?!</p>
<p>Tom the CC User: I want the truth.</p>
<p>James from AccuRev: You can&#8217;t handle the truth! Tom, we live in a world that has complex software. And that software is going to be coded by men with computers. Who&#8217;s gonna do it? You? You, Tom with your CC? We at AccuRev have a greater responsibility than you can possibly fathom. You weep for CVS and you curse SVN. You have that luxury. You have the luxury of not knowing what we know: That the AccuRev <a target="_blank" href="http://www.accurev.com/accurev-more.html">SCM tool</a>, while special and unique, probably saved jobs. And AccuRev&#8217;s existence, while grotesque and incomprehensible to you, saves jobs. You don&#8217;t want the truth. Because deep down, in places you don&#8217;t talk about at tradeshows, you want us for your source code. You need us for your source code. AccuRev uses words like Keep, Promote, Update&#8230;we use these words as the backbone to a life spent managing source code. You use &#8216;em as a punchline. We have neither the time nor the inclination to explain ourselves to a man who drinks coffee and programs under the blanket of the code management we provide, then questions the manner in which we provide it. We&#8217;d prefer you just send us a P.O. and went on your way. Otherwise, I suggest you pick up an IDE and start programming. Either way, I don&#8217;t give a damn what you think you&#8217;re entitled to.</p>
<p>James from AccuRev: Did you order something besides AccuRev?</p>
<p>Tom the CC User: I did the job that the IBM bigot made me do.</p>
<p>James from AccuRev: Did you order the CC?</p>
<p>Tom the CC User: You&#8217;re damn right I did!!!</p>
<p>James from AccuRev: All you did was weaken a company today, Tom. That&#8217;s all you did. You put software projects in danger. Sweet dreams, son.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/14/a-few-good-accurevvers/' addthis:title='A Few Good AccuRevvers '  ><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/02/14/a-few-good-accurevvers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>GNU Bash plugin for AccuRev 4.6</title>
		<link>http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/</link>
		<comments>http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 22:00:13 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[GNU Bash]]></category>
		<category><![CDATA[GNU bash plugin]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=122</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 ' ><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&#8217;m happy to announce the latest release of the GNU Bash programmable completion for AccuRev 4.6! For those AccuRev users out there that know the true power of the GNU Bash shell, life just got even better. This GNU Bash plugin has its own site at http://bash4accurev.wordpress.com for downloads, announcements, documentation and user feedback (ala [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 '  ><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/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 ' ><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&#8217;m happy to announce the latest release of the GNU Bash programmable completion for AccuRev 4.6!</p>
<p>For those <a href="http://www.accurev.com/customers.html" target="_blank">AccuRev users </a>out there that know the true power of the <a title="GNU Bash Website" href="http://www.gnu.org/software/bash/">GNU Bash</a> shell, life just got even better.</p>
<p>This GNU Bash plugin has its own site at <a title="Bash for AccuRev" href="http://bash4accurev.wordpress.com/">http://bash4accurev.wordpress.com</a> for downloads, announcements, documentation and user feedback (ala blog style). You can download the plugin from the <a title="Download GNU Bash for AccuRev" href="http://bash4accurev.wordpress.com/download">download page</a>.</p>
<p>The plugin requires <strong>GNU Bash 2.05+</strong> and supports <strong>AccuRev 4.6.x.</strong> It was developed and tested using linux (Ubuntu 7.10) and GNU Bash 3.2.25.</p>
<p><em><span style="color: #ff0000;"><strong>Important note</strong>:</span> While the plugin was developed by an AccuRev employee (me) and GNU Bash user for 10+ years, it is considered a third-party open-source plugin and is not officially supported by the folks @ AccuRev support. That being said, I&#8217;m proud of the plugin and welcome feedback and enhancement requests for the next release. You&#8217;ll find my contact information on the plugin website.</em></p>
<p>/happy tabbing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 '  ><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/02/08/gnu-bash-plugin-for-accurev-46/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evil Twins in SCM, Not Hollywood</title>
		<link>http://accurev.com/blog/2008/01/24/evil-twins-in-scm-not-hollywood/</link>
		<comments>http://accurev.com/blog/2008/01/24/evil-twins-in-scm-not-hollywood/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 20:00:19 +0000</pubDate>
		<dc:creator>tim</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[AccuRev support]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[Evil Twins]]></category>
		<category><![CDATA[name already exists in backing stream]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/2008/01/24/evil-twins-in-scm-not-hollywood/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/24/evil-twins-in-scm-not-hollywood/' addthis:title='Evil Twins in SCM, Not Hollywood ' ><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 keep expecting customers to ask me “Is it contagious Doc?” Or state, “but I am an only child!!!!!” What am I referring to? Evil Twins!!! Sounds menacing right? It really is not, but to a first-time user or someone who has never encountered the warning, “Name already exists in backing stream,” it can be [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/24/evil-twins-in-scm-not-hollywood/' addthis:title='Evil Twins in SCM, Not Hollywood '  ><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/01/24/evil-twins-in-scm-not-hollywood/' addthis:title='Evil Twins in SCM, Not Hollywood ' ><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 class="MsoNormal">I keep expecting customers to ask me “Is it contagious Doc?” Or state, “but I am an only child!!!!!” What am I referring to? Evil Twins!!! Sounds menacing right? It really is not, but to a first-time user or someone who has never encountered the warning, “Name already exists in backing stream,” it can be rather perplexing.</p>
<p class="MsoNormal">So what exactly is an Evil Twin you ask? It is a situation where two completely separate file elements in the same directory structure have the same name. It is actually a common problem across many <a target="_blank" href="http://www.accurev.com/scm_comparisons.html">software configuration management</a> (SCM) systems. So how does this happen exactly? All it takes are two well intended individuals with their own workspaces. Lets use the following scenario, User A and User B both have their own workspaces attached to the same development stream. Currently we have the following directory structure;</p>
<p class="MsoNormal">\.\dir1\child_dir\</p>
<p class="MsoNormal">with the following files already under <a target="_blank" href="http://www.accurev.com/product-overview.html">source control</a>:</p>
<p class="MsoNormal">file_a.txt</p>
<p class="MsoNormal">file_b.txt</p>
<p class="MsoNormal">As part of our software project, we also need to create one additional file:</p>
<p class="MsoNormal">file_c.txt.</p>
<p class="MsoNormal">User_A creates and adds file_c.txt to source control in the child_dir directory and promotes this newly added file into the development stream.</p>
<p class="MsoNormal">At the same time, User_A was creating and adding file_c.txt, User_B did the exact same steps. However, A was first to promote so in effect User_A won the race. When User_B attempts to promote his/her file_c.txt the “Name already exists” error pops up front and center and does not allow the promote to continue. Evil Twin prevention at it’s best.</p>
<p class="MsoNormal">AccuRev tracks an element by its eid (element identification number) and not its name. This is how an Evil Twin is detected. When User_B attempts to promote File_c.txt AccuRev knows that there is already a File_c.txt in the development stream but notices that the eid’s do not match. They are truly separate files since they were independently created and added by different users. They are Evil Twins because they look identical but are different. Really only one of the two is Evil and that is typically the file that ends up getting removed/renamed. But that is another story for another day.</p>
<p class="MsoNormal">So what should an AccuRev customer do when encountering this problem? Give support@accurev.com a shout and title your email “Need Evil Twin resolution help” or “Name Already exists in backing stream error.” Or you may also take a look at the AccuRev Online FAQ&#8217;s in the Customer Support Forum.</p>
<p class="MsoNormal">Please feel free to let me know if this helps you out!</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/24/evil-twins-in-scm-not-hollywood/' addthis:title='Evil Twins in SCM, Not Hollywood '  ><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/01/24/evil-twins-in-scm-not-hollywood/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Streams vs Branches</title>
		<link>http://accurev.com/blog/2008/01/04/streams-vs-branches/</link>
		<comments>http://accurev.com/blog/2008/01/04/streams-vs-branches/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 21:00:04 +0000</pubDate>
		<dc:creator>damonpoole</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change control]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[stream architecture]]></category>
		<category><![CDATA[stream of development]]></category>
		<category><![CDATA[Stream vs. branches]]></category>
		<category><![CDATA[TimeSafe]]></category>
		<category><![CDATA[Timesafety]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/2008/01/04/streams-vs-branches/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/04/streams-vs-branches/' addthis:title='Streams vs 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>by Damon Poole From time to time, people ask, &#8220;What is a Stream?&#8221; At this point pretty much anybody associated with software development has heard of branches, but streams are a relatively new concept which is similar to, but at a higher level than branches. Here&#8217;s my .02 on streams, coming from the AccuRev point [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/04/streams-vs-branches/' addthis:title='Streams vs 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/2008/01/04/streams-vs-branches/' addthis:title='Streams vs 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><b>by Damon Poole</b></p>
<p>From time to time, people ask, &#8220;What is a Stream?&#8221; At this point pretty much anybody associated with software development has heard of branches, but streams are a relatively new concept which is similar to, but at a higher level than branches.</p>
<p>Here&#8217;s my .02 on streams, coming from the AccuRev point of view. First, I think that at some level the various SCM systems which talk about &#8220;streams&#8221; are probably all trying to achieve something fairly similar. That is, a &#8220;stream of development.&#8221;</p>
<p>My initial exposure to &#8220;streams&#8221; was from hearing folks talk about &#8220;streams of development&#8221; independent of the SCM system that they were using (which did not have such a concept). The idea was that you had work which was towards a particular purpose, such as new development, maintenance, a team working together on a sub-project, etc. Each of these was a &#8220;stream of development.&#8221;</p>
<p>I have also heard the terms &#8220;codeline,&#8221; &#8220;development effort,&#8221; and &#8220;line of development&#8221; used in the same context. At the end of the day, the folks which initiate these things (managers, business people, etc) don&#8217;t really care how they are implemented, they just want to ask questions like, &#8220;How is 4.0 coming along?&#8221; and &#8220;Are all of the fixes from maintenance in the latest release?&#8221; Somebody else then translates that into the appropriate queries, which may be in terms of branches, scripts, streams, or something else.</p>
<p>Prior to AccuRev, I found the need to translate somewhat mystifying. &#8216;Why should there be any difference between the mental model of &#8220;streams&#8221; and the implementation model?&#8217;</p>
<p>Thus, in AccuRev, the mental model and the implementation model are the same. Streams are the basic building block of the architecture. There are no branches or labels, just streams. There are streams for releases, streams for active development, streams for end users, etc. Each stream except the root stream is defined in terms of a parent stream and inherits everything from the parent (recursively).</p>
<p>So, if you want to do maintenance on the 4.0 release, you would create a new stream based on 4.0 . Through inheritance, it is the same as 4.0. The definition itself is all that is required. The definition is simply &#8220;4.0_maint&#8221; is everything in &#8220;4.0&#8243; plus all of the changes in &#8220;4.0_maint.&#8221;</p>
<p>Since streams are first class objects, you can act on them directly. You can assign security attributes, lock them, define other streams in terms of them, compare them directly, do queries on them without having to understand how the streams themselves are composed, etc.</p>
<p>For the curious, I&#8217;ve written a whitepaper which describes <a href="http://accurev.com/whitepaper/stream_based_architecture.htm" target="_blank">AccuRev&#8217;s stream architecture</a> at an even deeper level.</p>
<p>And if you want to go even deeper than that, the basis of AccuRev&#8217;s streams is <a href="http://accurev.com/accurev/info/timesafe.html" target="_blank">TimeSafe</a> .</p>
<p><a href="http://accurev.com/accurev/info/timesafe.html"></a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/01/04/streams-vs-branches/' addthis:title='Streams vs 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/2008/01/04/streams-vs-branches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse BIRT and AccuWork</title>
		<link>http://accurev.com/blog/2007/12/06/birt-and-accuwork/</link>
		<comments>http://accurev.com/blog/2007/12/06/birt-and-accuwork/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 21:00:42 +0000</pubDate>
		<dc:creator>jsherwood</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[AccuWork]]></category>
		<category><![CDATA[BIRT]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Eclipse BIRT]]></category>
		<category><![CDATA[reporting tools]]></category>
		<category><![CDATA[reports]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/2007/12/06/birt-and-accuwork/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/12/06/birt-and-accuwork/' addthis:title='Eclipse BIRT and AccuWork ' ><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>As a developer I&#8217;ve found it necessary from time to time to generate reports, especially for internal consumption. Internal reports tend to be more adhoc than those presented to clients or non-technology managers, and therefore have less time devoted to their care and feeding (and cost). While I&#8217;ve used Crystal Reports and similar tools for [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/12/06/birt-and-accuwork/' addthis:title='Eclipse BIRT and AccuWork '  ><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/2007/12/06/birt-and-accuwork/' addthis:title='Eclipse BIRT and AccuWork ' ><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>As a developer I&#8217;ve found it necessary from time to time to generate reports, especially for internal consumption. Internal reports tend to be more adhoc than those presented to clients or non-technology managers, and therefore have less time devoted to their care and feeding (and cost). While I&#8217;ve used Crystal Reports and similar tools for external reporting, most development reporting has consisted of spreadsheets and any charts that they generate in the ten minutes I have before a review meeting.</p>
<p>Always wanting to explore various technologies, I took the opportunity to try my hand at using the BIRT (Business Intelligence and Reporting Tools) implementation in Eclipse. If you&#8217;re interested in finding out specifics about this plugin, you can find it on the <a target="_blank" href="http://www.eclipse.org/birt/phoenix/">Eclipse web site</a>. While I find the tool to have a higher learning curve than I would have expected, it shows promise for the future.</p>
<p>There are a number of data points that we generate as part of our development, and capturing all of them in a report format proves to be a surprisingly complex task. It is a task that gets little time and investment, as development goals are not report oriented, they are product delivery oriented. I&#8217;ve attempted to capture some of the more mundane details, and set aside future report details that require a larger effort. I&#8217;ll be describing what I&#8217;ve done to create the reports, but not really discuss about why or how to interpret the data. A discussion of some other data and what you can do with it can also be found <a target="_blank" href="http://blog.accurev.com/2007/11/30/arming-software-development-project-managers-with-real-data/trackback/">here</a>.</p>
<p>Here at AccuRev our projects are issue oriented. We use <a target="_blank" href="http://www.accurev.com/issue-tracking.html">AccuWork</a>, which is our own tightly integrated <a target="_blank" href="http://www.accurev.com/accuworkflow.html">issue management </a>environment.</p>
<p>Given that, and the goals for the reporting that I defined, I had to find a way for AccuWork to communicate information that BIRT could interpret. In the past using Excel, I&#8217;d simply query issues in AccuWork and export the data into an HTML table that Excel could then read in and, with the help of pivot tables, generate the desired reports. The basic information reported included:</p>
<ol>
<li>Number of issues per developer</li>
<li>Count of issues by priority per developer</li>
<li>Distribution of issue resolution (Whether issues are duplicates, regressions, cancelled, deferred, etc)</li>
<li>Distribution of issue severity (Whether issues are crashes, major implementations, cosmetic, etc)</li>
<li>Weekday issue completed per developer</li>
<li>Weekly Find rate vs. Fix rate</li>
<li>Weekly average number of days to complete issues</li>
</ol>
<p>Using this information, it is easy to see projects taper off to closure, as well gather some ideas as to how the developer workload was being distributed. Some developers cringe at this information, but I believe as long as it is used positively and to evenly distribute work, then everyone gains from reviewing this information.</p>
<p>With these same charts in mind, I loaded up my version of Eclipse, installed BIRT and its associated plugins, and started to figure out how to get the data into the tool.<span id="more-86"></span></p>
<p>BIRT provides a number of different data sources, from file based to database, to XML. While I would like a little more flexibility in the XML source, like the ability to preprocess data before usage, it provided me with the means to bring in issues from AccuWork, with a little external help. The first thing I needed to do was get the information from AccuWork.</p>
<p>I used &#8216;accurev xml -l getActiveIssues.xml&#8217;. The getActiveIssues.xml file I used looks like this:</p>
<blockquote>
<blockquote></blockquote>
</blockquote>
<p>&lt;acRequest&gt;</p>
<blockquote><p>&lt;issuelist show_active = &#8220;true&#8221;&gt;</p>
<blockquote><p>&lt;user&gt;myUser&lt;/user&gt;<br />
&lt;depot&gt;myDepot&lt;/depot&gt;<br />
&lt;stream1&gt;myProjectStream&lt;/stream1&gt;<br />
&lt;issues&gt;&lt;/issues&gt;</p></blockquote>
<p>&lt;/issuelist&gt;</p></blockquote>
<p>&lt;/acRequest&gt;</p>
<p>This tells AccuWork to return the active issues in the depot for the given stream. This will return a full description of the issues, with all the fields populated. This is where I would have liked a preprocessor. Instead I massaged the data myself, removing fields like description. It wasn&#8217;t necessary, but given the number of issues fixed it can improve performance when you generate your report.</p>
<p>With this information I was able to generate charts to answer the first four questions. Now I was left scratching my head on the next set, so I went back to the spreadsheet to see how I had solved this problem. I realized after importing the data into Excel, I had a number of columns that were computed values. Here BIRT shows some flexiblity, with its own computed columns.</p>
<p>I added the &lt;dateClosed&gt; field that is part of the issue description in AccuWork to the column mappings in BIRT, and created a computed column and used the following as the formula:</p>
<p>( row["dateClosed"] &#8211; ( row["dateClosed"]%(60*60*24*7) ) ) / (60*60*24*7)</p>
<p>AccuRev communicates information in seconds, so using this calculation I can compute the number of weeks since Jan 1, 1970 when a particular issue was closed. I did the same for dateSubmitted and dateCompleted. Finally, I created a computed column to determine the weekday completed using this formula:</p>
<p>(new String(&#8220;SunMonTueWedThuFriSat&#8221;).substr( <strong>(new Date(row["dateCompleted"]*1000)).getDay()</strong> *3, 3 ) )</p>
<p>This one is a little messy, so let&#8217;s break it down. Using the bolded section I compute the day of the week as a numeric value (zero based, starting with zero as Sunday). I then used this value to determine the substring as an offset in a fixed length string. Not so bad, and avoided the dreaded mid-processor (something sitting between AccuWork and BIRT) that I was afraid I would have to write.</p>
<p>So, using a single query from AccuWork, and computed columns in BIRT, I now have the data I need to generate the 7 charts I described earlier. Next time I&#8217;ll talk about what I had to do to get the information to chart in BIRT, and show some of the output.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/12/06/birt-and-accuwork/' addthis:title='Eclipse BIRT and AccuWork '  ><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/2007/12/06/birt-and-accuwork/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

