<?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; configuration management</title>
	<atom:link href="http://accurev.com/blog/tag/configuration-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>Configuration Management &amp; Customer Specials Shouldn&#8217;t Be Difficult</title>
		<link>http://accurev.com/blog/2011/05/12/configuration-management-custspec/</link>
		<comments>http://accurev.com/blog/2011/05/12/configuration-management-custspec/#comments</comments>
		<pubDate>Thu, 12 May 2011 15:29:14 +0000</pubDate>
		<dc:creator>jtalbott</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change packages]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2588</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/05/12/configuration-management-custspec/' addthis:title='Configuration Management &#38; Customer Specials Shouldn&#8217;t Be Difficult ' ><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>In the world of software development, or any product, for that matter, one of the things you may frequently be asked to do is to create a &#8220;special version&#8221; for a specific consumer.  This version might be almost identical to something you have already created, but with a few minor tweaks, or it might need [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/05/12/configuration-management-custspec/' addthis:title='Configuration Management &#38; Customer Specials Shouldn&#8217;t Be Difficult '  ><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/05/12/configuration-management-custspec/' addthis:title='Configuration Management &amp; Customer Specials Shouldn&#8217;t Be Difficult ' ><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>In the world of software development, or any product, for that matter, one of the things you may frequently be asked to do is to create a &#8220;special version&#8221; for a specific consumer.  This version might be almost identical to something you have already created, but with a few minor tweaks, or it might need to share some of the same core characteristics but have critical deviations in certain areas.</p>
<p>For software development &#8211; and the correspondingly essential <a href="http://www.accurev.com/software-configuration-management.html" target="_blank">Configuration Management</a> of that software &#8211; I&#8217;ve seen how this can be one of the more challenging aspects of the job.  It&#8217;s not actually the creation of the &#8220;customer-special&#8221; that&#8217;s difficult though; in fact this is usually fairly trivial.  Traditional software configuration management, or SCM, systems use the branch-per-variant approach typically, and everyone knows that branching is easy.  The hard part comes when you need to manage that customer release in an ongoing fashion.  How do you upgrade them to a newer release of your product?  They probably won&#8217;t want to remain on their baseline version forever.  They&#8217;ll want to take advantage of new features and fixes, while still retaining their unique aspects.  So this brings you to&#8230; oh yeah, the actual _merge_ part!  That&#8217;s where it gets hard.  Reliably merging changes from one variant to another is a manual, error-prone, labor-intensive process.  Now I remember!  That&#8217;s why we try to limit branching.</p>
<h2>Configuration Management with Customer Specials</h2>
<p>Well, all of that messy, cumbersome, and problematic stuff in traditional configuration management systems utilizes a traditional architecture of branches.  Fortunately, you use <a href="http://www.accurev.com/" target="_blank">AccuRev</a>, which completely removes this obstruction and makes the management of customer specials not only easy, but elegant as well.  Let&#8217;s consider the following purely mythical scenario.  A company called &#8216;Stadiums&#8217; that makes Ballparks for general use released <strong>Stadiums_Ballpark_2.0</strong> a while back.  Stadiums had a customer who wanted a custom version of the Ballpark that had some significant differences.  For example, they had special contours to the outfield, a truly unique left-field wall, and a good old fashioned mechanical scoreboard.  Those were the changes that needed to be made which deviated from the core Ballpark.  So Stadiums made these changes in a dedicated stream, associated their work with issue records using <a href="http://www.accurev.com/change-packages.html">AccuRev Change Packages</a>, and cut the <strong>Stadiums_Ballpark_Fenway_1911</strong> snapshot:</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image1.jpg"><img class="alignnone size-full wp-image-2592" title="customer-special-1" src="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image1.jpg" alt="customer image1 Configuration Management & Customer Specials Shouldnt Be Difficult" width="797" height="446" /></a></p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image2.jpg"><img class="alignnone size-full wp-image-2593" title="customer-special-2" src="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image2.jpg" alt="customer image2 Configuration Management & Customer Specials Shouldnt Be Difficult" width="770" height="186" /></a></p>
<p>Fast forward a few years.  It&#8217;s been a while and there have been numerous advances in Stadiums&#8217; technology.  Ballpark_4.0 has been released.  The Fenway people don&#8217;t want to purchase a brand new product, but they do want to upgrade. <em> This is where it would get really complicated in a different configuration management tool.</em> To boil it down, Stadiums would have to figure out what changes were made for Fenway back then, what changes have happened in their ongoing development, and intelligently merge these together.  They&#8217;d probably still want to maintain traceability and reproducibility of the &#8220;older&#8221; version of Fenway.  Some of the other tools out there make this near impossible, some slighly less onerous, but <strong>none</strong> of them make it simple.</p>
<p>Enter AccuRev.  Here&#8217;s what you do.  Drag the <strong>Stadiums_Ballpark_Fenway</strong> stream and drop it onto <strong>Stadiums_Ballpark_4.0</strong>.  That&#8217;s it, you&#8217;re almost done!  Because of Inheritance capabilities in AccuRev <a href="http://www.accurev.com/streambrowser.html">streams</a>, all the content of <strong>Stadiums_Ballpark_4.0</strong> will flow down into the <strong>_Fenway</strong> stream&#8230; except items that are in conflict.  Those items will be identified by AccuRev both visually and with status flags, and you will be able to deal with them quickly and appropriately.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image3.jpg"><img class="alignnone size-full wp-image-2594" title="customer-special-3" src="http://www.accurev.com/blog/wp-content/uploads/2011/05/customer_image3.jpg" alt="customer image3 Configuration Management & Customer Specials Shouldnt Be Difficult" width="797" height="446" /></a></p>
<p>In our example, Stadiums developer llucchino has worked on the greenMonster.wall file and replaced class Netting with class monsterSeats.  So this file automatically becomes (overlap) in the <strong>_Fenway</strong> stream and can be merged.  There are more teams in the league so the scoreboard.mechanical file has been updated to change various properties.  This also is in (overlap) status.  But the contours of the outfield haven&#8217;t been updated at all, so despite that file being a custom modification for <strong>_Fenway</strong>, AccuRev intelligently knows that it doesn&#8217;t even need to be <a href="http://www.accurev.com/merge-tracking.html">merged</a>.  All other new content was automatically inherited by the stream, and so literally nothing needs to be done by the development team.</p>
<p>It&#8217;s that simple.  You&#8217;re done, go ahead and release <strong>Stadiums_Ballpark_Fenway_2011</strong>.  Another happy customer and it didn&#8217;t set you back many man months.  Can your configuration management tool do this?</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/05/12/configuration-management-custspec/' addthis:title='Configuration Management &amp; Customer Specials Shouldn&#8217;t Be Difficult '  ><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/05/12/configuration-management-custspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Case: I went from ClearCase to AccuRev</title>
		<link>http://accurev.com/blog/2009/03/05/use-case-i-went-from-clearcase-to-accurev/</link>
		<comments>http://accurev.com/blog/2009/03/05/use-case-i-went-from-clearcase-to-accurev/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 18:55:12 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[Comparisons]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[AccuRev Services]]></category>
		<category><![CDATA[AccuRev training]]></category>
		<category><![CDATA[ClearCase]]></category>
		<category><![CDATA[ClearCase Migration]]></category>
		<category><![CDATA[ClearCase replacement]]></category>
		<category><![CDATA[ClearCase UCM]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[evaluating ClearCase and AccuRev]]></category>
		<category><![CDATA[improving build management]]></category>
		<category><![CDATA[MultiSite alternative]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/?p=674</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/03/05/use-case-i-went-from-clearcase-to-accurev/' addthis:title='Use Case: I went from ClearCase to AccuRev ' ><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>In May of 2005, the company I worked for, Polycom, decided to switch our Software Configuration Management tool from ClearCase to AccuRev. Initially, this decision was not taken well by the developers in my business unit since they had been using Base ClearCase for several years.  However, after seeing how much easier AccuRev was to [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/03/05/use-case-i-went-from-clearcase-to-accurev/' addthis:title='Use Case: I went from ClearCase to AccuRev '  ><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/03/05/use-case-i-went-from-clearcase-to-accurev/' addthis:title='Use Case: I went from ClearCase to AccuRev ' ><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>In May of 2005, the company I worked for, Polycom, decided to switch our <a href="http://www.accurev.com/software-configuration-management.html" target="_blank">Software Configuration Management </a>tool from ClearCase to AccuRev. Initially, this decision was not taken well by the developers in my business unit since they had been using Base ClearCase for several years.  However, after seeing how much easier AccuRev was to use and that it did everything that we needed for our development tasks, we became firm believers that AccuRev really is a “Best of breed” Configuration Management tool.</p>
<p>We evaluated a couple of CM tools before settling on AccuRev.  Among the tools we looked at were IBM Rational ClearCase UCM (which I was very familiar with), CVS, and Accurev.  CVS was being used by development teams in both offices and it was determined to be a tool that would not scale well for us.  After <a href="http://www.accurev.com/scm-comparisons/accurev-clearcase.html" target="_blank">evaluating ClearCase UCM </a>and AccuRev, it was decided that AccuRev was the way to go, for several reasons.  One reason Clearcase UCM did not do well was that we could not even get it to work at one of our offices that was using Linux for development (they were using 9 different types of Linux at the time).  AccuRev positively shined during this part of the evaluation by the fact that it was very easy to setup and use in a Linux environment.  Another reason and a huge advantage for AccuRev was the fact that it was very easy to use over a WAN between multiple sites (i.e., Austin TX and Andover, MA) without a mechanism like MultiSite.  The AccuRev servers that the development team in Andover used were located in Austin, TX.  For the 3 years that that I worked with our team using AccuRev, I never had any major issues using it over the network.  A third big reason was that we also did not have to <a href="http://www.accurev.com/clearcase-upgrade-program.html" target="_blank">pay for ClearCase MultiSite licenses</a> which meant a big cost savings for the company.  This last reason was major factor in management choosing AccuRev over ClearCase UCM.</p>
<p>After selecting AccuRev as our new <a href="http://www.accurev.com/product-overview.html" target="_blank">CM tool</a>, we had to migrate the current source code that was in ClearCase. At the time that we were doing this, there was no <a href="http://www.accurev.com/clearcase-adapter.html" target="_blank">migration tool</a> to take source code in ClearCase and move it over to AccuRev. We decided to archive the existing ClearCase Version Object Bases (VOBs) and leave them as is on their current servers in the Andover, MA office.  This was determined by our management team to be the best way to start off using AccuRev.  Most of this legacy code was for really old products that had been &#8220;End of Lifed&#8221;.  So, we were not really losing much by doing this.  We then imported the latest code from the VOBs that we cared about.  The import of this source code was just brought in as flat files.   This worked out well for us and for those who wanted to keep legacy history around.</p>
<p>The training for using AccuRev was very short.  AccuRev sent a trainer to our office in Andover and we had 2 groups of developers (about 15 each), attend a training session that was less than 3 hours long.  One half day of training for the developers.  It was that simple.  After this training, I was available to help the user community with any questions that they had.  I do have to say, I did not spend much time at all helping fix issues related to AccuRev.  For any issues that did come up and I couldn&#8217;t help out with immediately, <a href="http://www.accurev.com/services.html" target="_blank">AccuRev Technical Support</a> was always there to help.  For the record, I did not attend any special AccuRev Administrators Training.  AccuRev does have <a href="http://www.accurev.com/press-releases/ace_accurev_engineer.htm" target="_blank">AccuRev Certified Engineer Training </a>available and that was something I wanted to take.  Actually, whatever administration was needed for AccuRev took place in the Austin, TX office.  The person who did that did it a part time basis.  This is also much different than ClearCase.  I have been a full time ClearCase Administrator at several companies and that is a full time job.  When I was working with ClearCase, at least 20 and up to 30 percent of my time was spent on administrative tasks related to ClearCase.  So, I was able to devote that extra time to work on other types of things, like the install kits for our products using InstallShield.  We had been considering hiring a consultant to do that work and we ended up saving the money that we would have spent on that.</p>
<p><span id="more-674"></span></p>
<p>After the import was done, developers were able to create projects and streams very easily. It did take a little while for everyone to get used to the concept of projects and streams.  I had used ClearCase UCM in the past.  So, I had no problem relating to these concepts.  For the rest of the development team, the concepts of projects and streams was very easy to get used to and made a lot of sense to them.   There was a slight learning curve for the developers with using some of the AccuRev utilities like the <a href="http://walquist.net/static_pages/tech/JoyOfMovingFromClearCaseToAccuRev.html" target="_blank">Version Tree Browser</a> which looked different than the one that they were used to in ClearCase.  There were some concerns about using the AccuRev Merge Tool.  However, I attributed that to the fact that the developers may not have completely mastered the concept of merging in ClearCase, since to me it appeared to me much easier to merge source code in AccuRev than in ClearCase. The ability of the development team to quickly grasp the concepts of AccuRev saved a lot of time that would have been spent training them.  I literally was able to sit with new people on the development team and within a half hour, they were up and running with AccuRev.</p>
<p>Overall, I think that our use of AccuRev made our source code management much easier.  The ability to use the <a href="http://dotnet.sys-con.com/node/526698?page=0,1" target="_blank">Graphical User Interface </a>for most of our work was very beneficial to us. It was great to be able to create streams (or even projects) based off of a particular stream and to be able to literally see that being done on the screen, for example.  The snapshot concept also worked well for us.  It was also very easy to find the differences between build snapshots.  This helped us produce metrics for management very quickly.  We also had no issues implementing AccuRev commands into our build scripts which made our job easier.  Before we used AccuRev, we would run the builds and access CVS databases in the Austin office.  The builds had to be run at night because the builds took so long copying the code over the WAN from Austin to Andover.  After switching over to AccuRev, the fact that we could access the the AccuRev repositories in Austin directly over the WAN allowed the builds to complete much quicker than when we were doing them using CVS.  We never figured out why the copy of the CVS code took so long, but I can tell you that after switching to AccuRev, the build performance improved at least 25 to 30 percent. We could even run them during the daytime when needed, which was very beneficial to our development team.</p>
<p>As I mentioned above,  AccuRev Technical Support was very helpful with any questions or concerns that we had and I can never say enough good things about them.  AccuRev Tech Support always answered their phone quickly and followed up with us on anything we worked with them on.  Based on my 3 years of experience of using AccuRev, I would highly recommend it to development teams that are deciding on a <a href="http://www.accurev.com/accurev-source-code-control.html" target="_blank">Source Code Management</a> tool.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/03/05/use-case-i-went-from-clearcase-to-accurev/' addthis:title='Use Case: I went from ClearCase to AccuRev '  ><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/03/05/use-case-i-went-from-clearcase-to-accurev/feed/</wfw:commentRss>
		<slash:comments>0</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>Take Back Control: Using LDAP for SCM Authentication</title>
		<link>http://accurev.com/blog/2008/05/15/take-back-control-using-ldap-for-scm-authentication/</link>
		<comments>http://accurev.com/blog/2008/05/15/take-back-control-using-ldap-for-scm-authentication/#comments</comments>
		<pubDate>Thu, 15 May 2008 16:16:03 +0000</pubDate>
		<dc:creator>matthew d. laudato</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuRev LDAP]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM security]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=198</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/15/take-back-control-using-ldap-for-scm-authentication/' addthis:title='Take Back Control: Using LDAP for SCM Authentication ' ><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, just for fun, I counted the number of times that I logged into a computer or website. Once to login to my PC. Once more to connect to the company network. Three times for the 3 different UNIX boxes I needed to work with. And (if you promise not to tell my boss) once [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/15/take-back-control-using-ldap-for-scm-authentication/' addthis:title='Take Back Control: Using LDAP for SCM Authentication '  ><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/15/take-back-control-using-ldap-for-scm-authentication/' addthis:title='Take Back Control: Using LDAP for SCM Authentication ' ><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/blog/wp-content/uploads/2008/05/comblocks.gif"></a><a href="http://www.accurev.com/blog/wp-content/uploads/2008/05/lock.jpg"><img class="alignleft size-medium wp-image-201" src="http://www.accurev.com/blog/wp-content/uploads/2008/05/lock.jpg?w=116" alt=" Take Back Control: Using LDAP for SCM Authentication" width="116" height="116" title="Take Back Control: Using LDAP for SCM Authentication" /></a>Yesterday, just for fun, I counted the number of times that I logged into a computer or website. Once to login to my PC. Once more to connect to the company network. Three times for the 3 different UNIX boxes I needed to work with. And (if you promise not to tell my boss) once to login to a popular online shopping site to cancel a book order that apparently was lost in shipping. That&#8217;s six times in a day &#8211; and a slow day at that.</p>
<p>All this logging in got me thinking about security, authentication and of course, <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">software configuration management</a> (SCM) systems. Most SCM users, unless they are in the computer security business or are otherwise paranoid, don&#8217;t think about what goes on when they type in their user name and password and press Enter. In this post, we&#8217;ll peel back the covers a bit and show how you can use LDAP as the authentication mechanism for the AccuRev SCM system.</p>
<p>Starting with version 4.6, AccuRev introduced the notion of a &#8216;custom&#8217; authentication mechanism. If you boil it all down, there are only three things that you need to do in order to use LDAP authentication with AccuRev:</p>
<p>1. Tell the AccuRev server that you want to use custom authentication</p>
<p>2. Create users in AccuRev and in LDAP</p>
<p>3. Write a special AccuRev trigger that authenticates the users against an LDAP server</p>
<p>Let&#8217;s look at each of these in turn. First, a word of caution. As with any change to a shared production system, it is best to practice this in a safe environment. If you don&#8217;t have a spare AccuRev server laying around, you can always <a href="http://www.accurev.com/reg/download/evalkit" target="_blank">download the free 30 day, 5-user evaluation kit </a>and use it to fine tune your new authentication process.</p>
<p>Now to the details. To tell the AccuRev server that you want to bypass the built-in authentication mechanism and use a custom method, execute the following command:</p>
<p>accurev authmethod custom</p>
<p>Next, you&#8217;ll need to create some AccuRev users. In this example, we&#8217;ll assume that you&#8217;re already using LDAP for other applications, and therefore user entries already exist in the LDAP server. A typical user in an LDAP server might look like this in LDIF format:</p>
<pre>dn: cn=James T. Kirk,o=engineering,dc=enterprise,dc=com
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: James T. Kirk
sn: jtkirk
mail: jtkirk@enterprise.com
userPassword: jtkirk</pre>
<p>Well, typical if they happen to be the captain of the most famous starship ever! But I digress.</p>
<p>In AccuRev, we need to decide how this user will be represented. In this example, we&#8217;ll use the LDAP &#8216;commonName&#8217; attribute, which is shown above as &#8216;cn&#8217;, as the AccuRev username. Here&#8217;s the command we&#8217;ll use to create that user in AccuRev:</p>
<p>accurev mkuser &#8220;James T. Kirk&#8221;</p>
<p>At this point, we have a user represented in LDAP, and that same user represented in AccuRev. All we need to do is to tell the AccuRev server how to authenticate this user via LDAP. We do this via an AccuRev trigger known as the &#8216;server_auth_trig&#8217;. Here is some sample code for a server_auth_trig that does just that:</p>
<pre>use Net::LDAP;
use Net::LDAP::Util qw(ldap_error_text);
use Net::LDAP::Constant qw(LDAP_SUCCESS
            LDAP_CONNECT_ERROR
         );

use XML::Simple;
use strict 'vars';

# Server info for contacting LDAP
my $LDAP_HOST = "localhost" ;
my $LDAP_PORT = "389" ;

# We explicitly list the subtree DN to use when rewriting the incoming username as an LDAP Bind DN.
my $ldap_baseDN = "o=engineering,dc=enterprise,dc=com" ;

# Default attribute name for binding.  This attribute is concatenated
# with the incoming username and the ldap_baseDN above to form
# a Bind DN.
my $ldap_bind_attribute = "cn" ;

sub main
{
    my ($xmlinput);
    my ($command, $ip );
    my ($username, $password );
    my ($result);

    # populate array using XML::Simple routine, reading from stdin
    $xmlinput = XMLin('-', forcearray =&gt; 1, suppressempty =&gt; '');

    # set variables
    $command = $$xmlinput{'command'}[0];
    $ip = $$xmlinput{'ip'}[0];
    $username = $$xmlinput{'username'}[0];
    $password = $$xmlinput{'password'}[0];

    # First, establish a connection to the LDAP server
    my $LDAP = Net::LDAP-&gt;new($LDAP_HOST, port =&gt; $LDAP_PORT) ;
    unless ($LDAP) {
                print "Unable to connect to LDAP server on host $LDAP_HOST at port $LDAP_PORT.\n" ;
                return LDAP_CONNECT_ERROR;
    }

    # Now that we are connected, rewrite the username as a DN and attempt to bind to the server
    my $ldap_bindDN = $ldap_bind_attribute . "=" .$username . "," . $ldap_baseDN;
    print "Attempting to bind as: $ldap_bindDN\n" ;

    my $mesg = $LDAP-&gt;bind($ldap_bindDN, password =&gt; $password) ;

    # 'code' method contains any error code from the bind call
    # including success, so we return it to the caller
    my $return_code = $mesg-&gt;code;
    print "LDAP_BIND returned: $return_code\n";

    # Now unbind to free the connection
    $LDAP-&gt;unbind;

    # return the auth code to the AccuRev server
    exit ($return_code);

}

# run main routine
&amp;main();</pre>
<p>The main trick is to &#8216;rewrite&#8217; the incoming user name in the form of an LDAP Distinguished Name, or DN, and then to use that DN and the incoming password to bind to the LDAP server. Binding is a fancy word for logging into the server. Typically this is done by providing a DN (to uniquely identify the user) and credentials (in this case, a password).</p>
<p>As we said earlier, we&#8217;re using a convention in this example that the incoming user name represents the &#8216;commonName&#8217;, or cn, attribute of the user&#8217;s LDAP entry. We then construct a string by concatenating the cn with a hard-coded base DN, the latter representing the subtree within the LDAP server where the users exist. The resulting DN in this example is:</p>
<p>cn=James T. Kirk,o=engineering,dc=enterprise,dc=com</p>
<p>which is represented in the example as the perl variable $ldap_bindDN. If the bind is successful, the trigger returns a 0, and the user is logged into AccuRev. If the bind fails, the trigger returns a non-zero code, and the user login is rejected.</p>
<p>There you have it. A few simple steps and you can use the industry standard LDAP mechanism to provide authentication for your AccuRev users. LDAP is used in all sorts of enterprises, from education to technology companies to government, and so is AccuRev, so we&#8217;re glad to provide a way for our customers to use this powerful and ubiquitous authentication mechanism.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/15/take-back-control-using-ldap-for-scm-authentication/' addthis:title='Take Back Control: Using LDAP for SCM Authentication '  ><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/15/take-back-control-using-ldap-for-scm-authentication/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Continuous Integration: Methods of getting change</title>
		<link>http://accurev.com/blog/2008/05/14/continuous-integration-methods-of-getting-change/</link>
		<comments>http://accurev.com/blog/2008/05/14/continuous-integration-methods-of-getting-change/#comments</comments>
		<pubDate>Wed, 14 May 2008 18:44:23 +0000</pubDate>
		<dc:creator>jsherwood</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CImonitor]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[load monitoring]]></category>
		<category><![CDATA[polling]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[release management process]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/?p=139</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/14/continuous-integration-methods-of-getting-change/' addthis:title='Continuous Integration: Methods of getting 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>Do you remember the last time you were excited to go somewhere? Were you like a kid saying, &#8220;Are we there yet? Are we there yet?&#8221; More likely you were the one getting &#8216;them&#8217; there. I&#8217;m sure it got pretty annoying to keep hearing everyone in the car moaning, wanting some sort of distraction until [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/14/continuous-integration-methods-of-getting-change/' addthis:title='Continuous Integration: Methods of getting 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/2008/05/14/continuous-integration-methods-of-getting-change/' addthis:title='Continuous Integration: Methods of getting 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><a href="http://www.accurev.com/blog/wp-content/uploads/2008/05/simpons.jpg"><img class="alignleft size-medium wp-image-199" src="http://www.accurev.com/blog/wp-content/uploads/2008/05/simpons.jpg?w=120" alt=" Continuous Integration: Methods of getting change" width="120" height="88" title="Continuous Integration: Methods of getting change" /></a>Do you remember the last time you were excited to go somewhere? Were you like a kid saying, &#8220;Are we there yet? Are we there yet?&#8221;</p>
<p>More likely you were the one getting &#8216;them&#8217; there. I&#8217;m sure it got pretty annoying to keep hearing everyone in the car moaning, wanting some sort of distraction until they got there. Maybe you even had DVD players or some other distraction so you didn&#8217;t have to hear the questions.</p>
<p>Now think about how you use <a href="http://www.accurev.com/programs/cmc/continuous-integration-whitepaper.shtml?cid=701700000009ZAG&amp;mp=website&amp;ms=CI-WP-WEB&amp;ls=Whitepaper" target="_blank">Continuous Integration</a> (CI) . Do you have polling of your <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">software configuration management</a> (SCM) tool setup? What about your other process tools, do they poll your SCM as well? Guess what, it&#8217;s the same difficult trip. You have tools burdening your working SCM (who slaves away everyday to provide for these other tools!). Every hour/minute/seconds some tool is asking your SCM tool &#8220;Are we there yet?&#8221;. Doesn&#8217;t make a lot of sense does it? Think about how many tools you have running daily. You might have multiple CI machines setup, multiple reporting machines, deployment machines all asking the same question over and over.</p>
<p>Quite a burden.</p>
<p>Now think about what your users are doing during this time. They are looking for the same distractions you might have given the kids. They are off emailing their buddies about the latest game, or watching AccuRev on Youtube (OK, maybe something even more enjoyable on YouTube). Doesn&#8217;t sound very productive, yet these automation tools were meant to do just that, increase productivity.</p>
<p>So what do you do? Well, a lot of tools allow you to flip the model. Push your information, don&#8217;t pull it.</p>
<p>If you have a large enough development group this won&#8217;t be enough. Maybe there really are code changes going into the system every minute. If you also increase the granularity of the information going to your CI and reporting tools, these tools can then decide the correct time to be a burden.</p>
<p>You can also reduce the frequency that you give out the same information. If you have several tools (or stages in a tool) depending on the same answer, they can get the answer from a secondary source that gets populated once.</p>
<p>You also want to be diligent about your monitoring. If you see a periodic load on your tools, justify the load. If it looks strange that Kevin is checking the history of a stream every minute, it probably is. If instead you saw CIMonitor as the user it would be more explicit. And it would be obvious that this should change.</p>
<p>And really, changes like these apply to any tool you are using. Do you really need updated reports everytime a bug is fixed? What about every day instead? If you reduce the burden on your tools to a &#8216;necessary&#8217; level, then they can be further used to answer other questions.</p>
<p>Are we there yet?</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/05/14/continuous-integration-methods-of-getting-change/' addthis:title='Continuous Integration: Methods of getting 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/2008/05/14/continuous-integration-methods-of-getting-change/feed/</wfw:commentRss>
		<slash:comments>0</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>Agile &#8211; The Soft Hum of Many Well-Intentioned Voices</title>
		<link>http://accurev.com/blog/2008/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/</link>
		<comments>http://accurev.com/blog/2008/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 15:49:14 +0000</pubDate>
		<dc:creator>fran0414</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[CM]]></category>
		<category><![CDATA[CM tool]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[configuration manager]]></category>
		<category><![CDATA[distributed development team]]></category>
		<category><![CDATA[issue tracking]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM tool]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=163</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/' addthis:title='Agile &#8211; The Soft Hum of Many Well-Intentioned Voices ' ><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>If you listen closely, you can almost hear the soft hum of thousands of well-intended voices all intoning the mystical phrase “Agile Development” like a magical mantra that will make everything faster, better and appear more attractive.  This buzz word is coming from managers and their bosses, from PMs and VPs and CMs (Configuration Managers) [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/' addthis:title='Agile &#8211; The Soft Hum of Many Well-Intentioned Voices '  ><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/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/' addthis:title='Agile &#8211; The Soft Hum of Many Well-Intentioned Voices ' ><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" style="margin:0"><span style="font-size:small;font-family:Times New Roman">If you listen closely, you can almost hear the soft hum of thousands of well-intended voices all intoning the mystical phrase “Agile Development” like a magical mantra that will make everything faster, better and appear more attractive.<span>  </span>This buzz word is coming from managers and their bosses, from PMs and VPs and CMs (Configuration Managers) and other folks with 2-letter title abbreviations, from developers and testers and even the customers.<span>   </span>“We must be Agile!”– so they say.</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small"><span style="font-family:Times New Roman">As you may have noticed, if you repeat any word or phrase long enough, it tends to lose all meaning.<span>  </span>Unfortunately this seems to be the case with concept of Agile Development.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small"><span style="font-family:Times New Roman">I once attended a meeting wherein a VP announced that we were going to do agile development “as of today.” There was a lot of cheering and a lot of smiling and a few hands were shaken.<span>  </span>And at the very back of the room, there were a few of us that sat there quietly trying mightily to conceal our shock/disbelief/cynicism and sheer apprehension at the thought of what was about to happen to us.<span>  </span></span></span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">You see – <a href="http://damonpoole.blogspot.com/search/label/Agile" target="_blank">Agile development </a>is more than just throwing smaller chunks of code into Production faster.<span>  </span>It takes planning, involvement, a solid architecture, good supporting tools – in short, A WHOLE LOT OF WORK – to make agile processes really work for you.<span>  </span>You can’t reap the reward without doing the work first– and if you try, all you’re going to wind up with is a great, big mess. (Not to mention a staff with their updated resumes out on DICE)</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">While this post is written a bit tongue-in-cheek, the message is serious.<span>  </span>If you want to be agile, make an investment in the process:</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">1)</span><span style="font:7pt">      </span></span><span style="font-size:small">Know your code architecture:<span>  </span>Having all 73,000 files in version control is not the same as KNOWING the architecture of your code. You can’t be truly agile if you don’t know the inter-dependencies of your own code.<span>  </span></span></span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">2)</span><span style="font:7pt">      </span></span><span style="font-size:small">Know your end-users wants vs. needs: Actively involve the end-users in the release scope.<span>  </span>This is A LOT harder than it sounds.<span>  </span>It takes a good relationship with the end users to separate out their desires from their actual needs, and balance the content of the releases across the two.<span>  </span>Building this relationship is a fundamental component of agility.</span></span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">3)</span><span style="font:7pt">      </span></span><span style="font-size:small">Implement Tools that support Agile methods:<span>  </span>There is nothing agile about <a href="http://www.daveonscm.com/" target="_blank">merging branches of code </a>all over kingdom-come.<span>  </span>There is nothing agile about having to manually determine what files changed since last Friday at noon, or depending on checksum to figure it out.<span>  </span>Choose your tools wisely, implement them appropriately for your individual situation, and enforce the process globally across all groups, management levels and situations…and do so knowing that everything is subject to change without notice.</span></span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">I highly recommend AccuRev to support <a href="http://www.accurev.com/webinars/reg/20070719_agile_reg.shtml" target="_blank">agile development</a> methodologies.<span>  </span>It provides a level of flexibility that I’ve never encountered in any other tool, while still enforcing process through an indelible history of every event, and user defined process criteria. </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">AccuRev is the ideal tool for distributed development teams, with fast remote updates, the option of full or partial updates to the development workspace, and flexible, developer-defined and controlled sharing of in-process work.</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">I’ve setup a lot of projects using a lot of different software <a href="http://www.accurev.com/accurev-sccm.html" target="_blank">configuration management</a> tools, and AccuRev is by far and away, my favorite choice for a <a href="http://www.accurev.com/product-overview.html" target="_blank">SCM tool</a> – particularly when supporting agile processes.</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman">In closing, here are some words of wisdom from an old-hat Configuration Manager:</span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">1)</span><span style="font:7pt">      </span></span><span style="font-size:small">If they tell you, “Just load the CM tool on the development server for now.<span>  </span>We’ll find you a permanent server later” – DON’T fall for it.</span></span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">2)</span><span style="font:7pt">      </span></span><span style="font-size:small">When a prospective employee describes their environment as “dynamic” just know in advance that’s a euphemism for “chaos.”</span></span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">3)</span><span style="font:7pt">      </span></span><span style="font-size:small">There is no such thing as a “Planned Emergency.”</span></span></p>
<p class="MsoNormal" style="text-indent:-0.25in;margin:0 0 0 0.5in"><span style="font-family:Times New Roman"><span><span style="font-size:small">4)</span><span style="font:7pt">      </span></span><span style="font-size:small">If your manager says, “We’re implementing agile methodologies, and we’re buying <a href="http://www.accurev.com/clearcase-adapter.html" target="_blank">ClearCase</a>, because it’s the best,”….well, in that case, I’ll be seeing your updated resume on DICE…</span></span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><span style="font-size:small;font-family:Times New Roman"> </span></p>
<p class="MsoNormal" style="margin:0"><em><span style="font-size:small"><span style="font-family:Times New Roman">Fran Schmidt is a veteran CM, who’s survived over a decade in the Software Configuration Management field through a combination of good humor, constant education on the newest technologies, and sheer stubbornness.</span></span></em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/' addthis:title='Agile &#8211; The Soft Hum of Many Well-Intentioned Voices '  ><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/04/23/agile-the-soft-hum-of-many-well-intentioned-voices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pattern for Continuous Builds</title>
		<link>http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/</link>
		<comments>http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 20:00:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[CI tools]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[continous build best practice]]></category>
		<category><![CDATA[continuous builds]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[continuous integration tools]]></category>
		<category><![CDATA[customer acceptance testing]]></category>
		<category><![CDATA[long build cycles]]></category>
		<category><![CDATA[long test cycles]]></category>
		<category><![CDATA[multistage continuous integration]]></category>
		<category><![CDATA[reparent]]></category>
		<category><![CDATA[reparenting]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[snapshots]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=131</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/' addthis:title='Pattern for Continuous Builds ' ><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>Continuous integration (CI) is all the rage these days because merging, building, and testing (shared) configurations early-and-often is a good thing. Actually, it&#8217;s a great thing! After all, finding problems sooner rather than later benefits everyone. For some, CI means simply testing compilation. (Phew&#8230; it works. Ship it! haha). For those investing time in a [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/' addthis:title='Pattern for Continuous Builds '  ><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/03/05/pattern-for-continuous-builds/' addthis:title='Pattern for Continuous Builds ' ><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 title="Continuous Integration" href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank">Continuous integration</a> (CI) is all the rage these days because merging, building, and testing (shared) configurations early-and-often is a good thing. Actually, it&#8217;s a great thing! After all, finding problems sooner rather than later benefits everyone. For some, CI means simply testing compilation. (Phew&#8230; it works. Ship it! haha). For those investing time in a full test harness, CI may mean frequently executing a suite of tests at various levels (unit, functional, system) to validate functionality and identify regressions. I&#8217;ve even seen other levels of CI to include lab testing, flight testing, or even customer acceptance testing for even the smallest of changes. Regardless of how <em>you</em> &#8216;do&#8217; CI, I&#8217;ll show how I use AccuRev for continuous integration.<em> [Keep in mind that this is one interpretation of the subject matter]</em></p>
<p><strong>The Pattern.</strong> The stream-based nature of AccuRev makes it very natural to define separate areas for development, integration, testing, and release. <a title="Managing CI Builds with AccuRev" href="http://www.accurev.com/blog/wp-content/uploads/2008/03/managing_ci_builds.png" target="_blank"><img style="border:0 solid black;float:right;margin:10px 0 10px 10px" src="http://www.accurev.com/blog/wp-content/uploads/2008/03/managing_ci_builds.png" alt="Managing CI Builds with AccuRev" width="240" height="240" title="Pattern for Continuous Builds" /></a>As seen in my example stream structure, I have an <em>Integration</em> stream as the first point of merging between individual project streams. This <em>Integration</em> stream is a great place to hook up a CI tool [<a title="CruiseControl + AccuRev" href="http://cruisecontrol.sourceforge.net/main/configxml.html#accurev" target="_blank">Cruise Control</a>, <a title="CC.NET + AccuRev" href="http://confluence.public.thoughtworks.org/display/CCNET/Using+CruiseControl.NET+with+AccuRev" target="_blank">CC.NET,</a> <a title="FinalBuilder + AccuRev" href="http://www.finalbuilder.com/Products/FinalBuilder/FeatureMatrix/FeaturesVersionControlSystemActions/tabid/101/Default.aspx" target="_blank">FinalBuilder</a>, QuickBuild and perform nightly or per-promote builds. I prefer to create a snapshot <em>before</em> doing the build mainly because snapshot creation is atomic and their immutable configurations guarantee reproducibility.<em> </em>After creating the snapshot, I will pull the build from the snapshot name. You <em>could </em>build from the <em>Integration</em> stream directly (similar to the concept of a moving label), but creating snapshots makes it easy to visually identify with the build process and compare good builds from bad builds with simple stream diffs.  [<em>Note: integrating any of the above mentioned CI tools is as simple as telling the build tool to pull code from a stream (by name) and then configure the build tool to execute at some frequency and notify people of the build status]</em></p>
<p><strong>What about all those snapshots?</strong> At first, you may think, &#8220;Isn&#8217;t this going to create a gazillion snapshots? Won&#8217;t that take up a ton of (disk) space and totally clutter the stream browser view?&#8221; Well&#8230; No.</p>
<ul>
<li><strong><span style="color:#000080">Snapshots are cheap.</span></strong> Snapshots are extremely cheap server-side entities consuming ~100bytes regardless of the number of elements they label&#8230; so go nuts! <strong><span style="color:#ff6600">Snapshots mark transaction numbers, not elements! </span></strong>I say, always do what you need to solve important problems and answer tough questions even if that means creating a gazillion snapshots; just be sure to organize them.</li>
<li><span style="color:#000080"><strong>Clean up as you go.</strong></span> Your CI build script (build.xml, Makefile, or doBuild.sh) can easily be instructed to remove a snapshot for every snapshot created. I&#8217;d recommend keeping around enough snapshots (say 3 to 10) to do valuable work such as comparing builds or serving as temporary baselines for developers who want to <a href="http://blog.accurev.com/2007/09/21/reparenting-workspaces-whats-the-hype/" target="_blank">reparent.</a> As you can see in the stream structure, AccuRev stores both active and inactive snapshots and it is easy to reactivate any snapshot if necessary (<em>I&#8217;ve enabled the stream browser to show both; lower left corner option</em>).</li>
<li><span style="color:#000080"><strong>Group snapshots.</strong></span> I prefer to tuck logically related sets of snapshots behind a locked pass-through stream. The pass-through stream lets me collapse them all as a group and the lock prevents the pass-through stream from being accidentally being reparented.</li>
</ul>
<p><strong>Tip for very-long build/test cycles.</strong> Over the past few years I&#8217;ve encountered a few shops with single build/test cycles ranging from hours to days to complete. In this case, the concept of CI is slightly challenging because the notion of frequent builds is constrained. In this case, I&#8217;d recommend setting up two distinct test phases; quick and full. The &#8220;quick phase&#8221; is a quick pass sanity test only performing tasks such as compilation and unit testing &#8212; enough to let developers know they can continue on forward progress with little concern. The &#8220;full phase&#8221; is the full blown cycle, taking hours/days to complete, that completes all levels of testing such as compilation, unit testing, functional testing, system testing, etc. I would execute the quick phase early and often while the full phase may be once per week. As an additional step, I would mark the snapshot used for the full phase with a <a href="http://blog.accurev.com/2007/09/20/stream-refactoring-with-pass-throughs/" target="_blank">pass-through stream</a> for the purpose of reporting configuration diffs or letting developers reparent their project streams/workspaces on the latest known good &#8220;certified&#8221; build.</p>
<p>Interested in continuous integration? Perhaps you&#8217;d also be interested in <a href="http://damonpoole.blogspot.com/2008/01/advanced-multi-stage-continous.html" target="_blank">multistage continuous integration</a>&#8230;</p>
<p>/happy building/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/' addthis:title='Pattern for Continuous Builds '  ><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/03/05/pattern-for-continuous-builds/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Team of One Pattern</title>
		<link>http://accurev.com/blog/2008/02/22/team-of-one/</link>
		<comments>http://accurev.com/blog/2008/02/22/team-of-one/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 23:00:42 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[AccuRev for personal projects]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[development process]]></category>
		<category><![CDATA[GNU Bash]]></category>
		<category><![CDATA[large teams]]></category>
		<category><![CDATA[multiple releases]]></category>
		<category><![CDATA[multiple releases in parallel]]></category>
		<category><![CDATA[parallel releases]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[single developer]]></category>
		<category><![CDATA[small teams]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[team for one]]></category>
		<category><![CDATA[vim plugin]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=125</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern ' ><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>We all know that AccuRev is well suited for large enterprises with teams of developers spread across the globe. But what about the crack team of one developer? You know, those of use who go solo because we know we can do it faster, better, and leaner than any contrived dream team. Can AccuRev really [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern '  ><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/22/team-of-one/' addthis:title='Team of One Pattern ' ><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>We all know that AccuRev is well suited for large enterprises with teams of developers spread across the globe. But what about the crack team of <em>one</em> developer? You know, those of use who go solo because we know we can do it faster, better, and leaner than any contrived dream team.</p>
<p>Can AccuRev <em>really </em>work for small teams including a team of one? &#8230; You bet your ASCII it does!</p>
<p>In fact, I use AccuRev for my own personal projects. They happen to be AccuRev integrations, but are software projects nonetheless [Vim Plugin, GNU Bash, etc]. At this point, critics may proclaim, &#8220;For one developer, you just need to commit to trunk and label for each release.&#8221; Well&#8230; that worked OK for the first and second release, but then came the need to maintain multiple versions in parallel with patch releases (due to wholescale refactoring per major release) as well as compatibility between corresponding versions of AccuRev (since these are plugins). The compatibility matrix completely obliterates any suggestion of linear branching/labeling&#8230; so fuh-get-abot-it. Time to graduate from the traditional branch-based tools.</p>
<div id="attachment_517" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.accurev.com/blog/wp-content/uploads/2008/02/teamofone.jpg" target="_blank"><img class="size-medium wp-image-517" title="Stream Structure for Team of One Development in AccuRev SCM" src="http://www.accurev.com/blog/wp-content/uploads/2008/02/teamofone.jpg?w=300" alt="Stream Structure for Team of One Development in AccuRev SCM" width="300" height="168" /></a><p class="wp-caption-text">click to enlarge</p></div>
<p>The above picture shows my stream structure containing projects including vim-plugin and bash-completion. I&#8217;ll use the bash-completion project as a reference example to discuss my pattern of development. Even as a single developer, I found it critical to maintain a strict develop -&gt; test -&gt; release pattern simply because my development activities change day-to-day and typically turn into &#8220;It&#8217;s been a month since I looked at this code&#8230; time to roll up the sleeves and figure out what the heck I was thinking!&#8221; If I was forced to a single commit bucket (branch), I&#8217;d go nuts &#8212; trying to manage multiple patches, new development, updates to documentation, etc and <strong>then</strong> being <em>forced </em>to deliver it <strong>all </strong>because pulling out changes is about as fun as filling sandbags with a pitch fork&#8230; I&#8217;d rack my brains trying to keep it all straight especially since I have multiple projects going on concurrently!</p>
<p>My development process is as follows (annotated as steps 1-6 on the picture):</p>
<ol>
<li><strong>Develop </strong>&#8211; After working in my private workspace on a unit of work for days, weeks, months, I promote to the &#8220;-test &#8220;stream. Then, continue working in the private workspace on the next set of work.</li>
<li><strong>Test </strong>&#8211; After unit testing and performing a clean-room functional test of all changes in my &#8220;-test&#8221; stream, I deem all changes &#8220;release ready&#8221; and promote to the top bash-completion stream.</li>
<li><strong>Release Candidate</strong> &#8212; The changes in the base stream represent a configuration that is good-enough to start a new codeline. <strong>I do NOT snapshot an official release X.Y </strong>(just yet). I first create a &#8220;dash-x&#8221; line to start the codeline (e.g. bash-completion-3.x for the 3.0, 3.1, 3.2, etc versions).</li>
<li><strong>Maintenance</strong> &#8212; In anticipation for even minor patch work, I proactively create a &#8220;-maint&#8221; stream to collect any upcoming maintenance changes based on the starting codeline. Initially, this stream will just be empty and identical in configuration to the parent &#8216;dash-x&#8217; stream.</li>
<li><strong>Official Release</strong> &#8212; At this point, I&#8217;ve immediately created the&#8221;dash-x&#8221; and &#8220;-maint&#8221; streams in succession so they are all identical in contents &#8211; namely, all containing the next release. So NOW I create my first official &#8220;dot oh&#8221; release (e.g. bash-completion-3.0).</li>
<li><strong>Publish </strong>&#8211; With the official configuration under snapshot, I &#8216;pop&#8217; the code, archive, and ship to my web server. <em>La commedia e finite!</em></li>
</ol>
<p>With the visual nature of the StreamBrowser and the ease of creating streams, <a href="http://www.accurev.com/whitepaper/accurev_advantage.htm" target="_blank">managing multiple versions</a> of multiple products with AccuRev is priceless. I use a simple, repeatable development pattern that lets me separate ongoing development work (workspaces) from upcoming changes being tested (-test stream) all separate from previous releases (dash-x) and patch development (-maint). And the best part about all of this is I can (and have, MANY times) come back to any project even months later and quickly ascertain the current state of the union &#8212; what&#8217;s in development, what&#8217;s in test, which releases are published, etc. Sweet.</p>
<p>Lastly, while I use this &#8216;dot oh&#8217; pattern for my own projects, I even recommend it for large team development. It&#8217;s a great pattern and I hope you find it useful for your own stream management.</p>
<p>/happy releasing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern '  ><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/22/team-of-one/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

