<?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; private workspaces</title>
	<atom:link href="http://accurev.com/blog/tag/private-workspaces/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>SCM Best Practices and Continuous Integration Go Hand-in-Hand</title>
		<link>http://accurev.com/blog/2011/06/15/scm-best-practices/</link>
		<comments>http://accurev.com/blog/2011/06/15/scm-best-practices/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 15:00:49 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[AgileCycle]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Enterprise Agile]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[manifesto]]></category>
		<category><![CDATA[private workspaces]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2632</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/06/15/scm-best-practices/' addthis:title='SCM Best Practices and Continuous Integration Go Hand-in-Hand ' ><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>There’s no denying that this has certainly been the Agile decade for the software development industry.  It’s evident all around us in this tenth year since the Agile Manifesto was created. Most companies and development organizations today have implemented some form or aspect of Agile methodology into their software development processes. Whether you’re aiming for [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/06/15/scm-best-practices/' addthis:title='SCM Best Practices and Continuous Integration Go Hand-in-Hand '  ><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/06/15/scm-best-practices/' addthis:title='SCM Best Practices and Continuous Integration Go Hand-in-Hand ' ><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>There’s no denying that this has certainly been the Agile decade for the software development industry.  It’s evident all around us in this tenth year since the Agile Manifesto was created. Most companies and development organizations today have implemented some form or aspect of Agile methodology into their software development processes. Whether you’re aiming for pure Agile or a mixed/hybrid approach, proven best practices in all phases of the software development lifecycle are crucial to success.</p>
<p>This is especially true in the case of continuous integration, one of the foundational aspects of the Agile methodology. The concept of <a href="http://www.martinfowler.com/articles/continuousIntegration.html">continuous integration, as defined by Martin Fowler</a>, is “a fully automated and reproducible build, including testing, that runs many times a day.  This allows each developer to integrate daily, thus reducing integration problems.”</p>
<p>With this approach, developers can work more closely in parallel while identify problems and debugging on the fly, accelerating the development process and improving the quality of the finished product.  The benefits of <a href="http://www.accurev.com/continuous-integration.html">continuous integration</a> are tremendous, but can quickly be eradicated if <a href="http://www.accurev.com/whitepaper/bestpractices">software configuration management (SCM)</a> best practices are not carefully followed.</p>
<p>There are a handful of SCM best practices that can optimize continuous integration.   Let’s start with a quick look at the first two:</p>
<ul>
<li>Using an SCM system to store and version all source code</li>
<li>Utilizing private developer workspaces</li>
</ul>
<h2>Best Practice: Using an SCM System to Store and Version all Source Code</h2>
<p>Parallel development and distributed software teams can make tracking changes a daunting task, especially with the frequent changes that occur when using continuous integration methods.</p>
<p>For this reason, it is important to employ a software configuration management (SCM) system to strictly version changes to the code base. In addition to versioning source code, everything needed to build the system should be placed under version control, including the following:</p>
<ul>
<li>Third-party libraries</li>
<li>Properties files</li>
<li>Database schema</li>
<li>Test scripts</li>
<li>Install scripts</li>
</ul>
<p>All developers should have at least read-only access to all files needed for the build and should obtain all such files directly from the SCM system. This approach ensures that developers are working with the latest build environment, and is preferable to the common but error-prone practice of placing such files on a shared file server.</p>
<p>To effectively implement continuous integration, all development groups should work from the same central source code repository so that the latest changes from other developers are easily and immediately available. <strong><em> </em></strong></p>
<p><span style="text-decoration: underline;"> </span></p>
<h2>Best Practice: Utilizing Private Developer Workspaces</h2>
<p>In order to fully realize the benefits of continuous integration, software development organizations need to ensure that developers can remain productive regardless of the overall state and stability of the project source code. To achieve this, <a href="http://www.accurev.com/private-versioning.html">private workspaces</a> that give developers full SCM capability should be used. Private workspaces enable developers to</p>
<ul>
<li>work in isolation</li>
<li>revert to known “good” states when needed</li>
<li>checkpoint their changes</li>
<li>share only mature, well-tested code with other team members</li>
</ul>
<p>The benefits of isolation are bidirectional—it protects developers from incoming changes, and protects the shared code configuration from incomplete or incorrect changes from any one developer. By creating private workspaces, developers receive all the benefits of SCM for their personal use, including the ability to revert to a previous state, viewing and tracking of changes between software configurations, and setting aside changes to begin work on a different task.</p>
<p>Once a new known good state is reached (for example, when a developer completes engineering and testing work on a feature), developers should checkpoint their work, typically by “checking in” or “keeping” the local changes in the SCM system. The checkpoint ensures that the developer’s work is safe on the SCM server and that the checkpoint can be revisited at any time. However, since the changes have not been shared, other developers and teams are not affected.</p>
<p>When a developer breaks isolation and decides to share a code change, he or she is essentially making an assertion that the change has reached a higher level of maturity. This, coupled with the use of local developer builds, helps to ensure that only mature, well-tested code is passed on to the rest of the development team, a primary benefit of continuous integration.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2011/06/15/scm-best-practices/' addthis:title='SCM Best Practices and Continuous Integration Go Hand-in-Hand '  ><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/06/15/scm-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Case: Fixing the Broken Build</title>
		<link>http://accurev.com/blog/2008/11/04/use-case-fixing-the-broken-build/</link>
		<comments>http://accurev.com/blog/2008/11/04/use-case-fixing-the-broken-build/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 13:39:37 +0000</pubDate>
		<dc:creator>rmohr</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[broken builds]]></category>
		<category><![CDATA[change packages]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[issue tracking]]></category>
		<category><![CDATA[private workspaces]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[time-based stream]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=414</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/04/use-case-fixing-the-broken-build/' addthis:title='Use Case: Fixing the Broken Build ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>by Rob Mohr, AccuRev In one of many travels and customer visits, I came across a very cool way that AccuRev was helping to improve the way development teams do their work. To be more specific, this group was using Change Packages integrated with the JIRA Issue Tracking system to manage changes across their various product [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/04/use-case-fixing-the-broken-build/' addthis:title='Use Case: Fixing the Broken Build '  ><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/11/04/use-case-fixing-the-broken-build/' addthis:title='Use Case: Fixing the Broken Build ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p><strong>by Rob Mohr, AccuRev</strong></p>
<p>In one of many travels and customer visits, I came across a very cool way that AccuRev was helping to improve the way development teams do their work. To be more specific, this group was using <a href="http://www.accurev.com/change-packages.html" target="_blank">Change Packages</a> integrated with the <a href="http://www.accurev.com/accubridge-jira.html" target="_blank">JIRA</a> Issue Tracking system to manage changes across their various product releases. They also used CruiseControl for <a href="http://www.accurev.com/continuous-integration.html" target="_blank">continuous integration</a> that would kick off nightly builds and notify the team with the results of the build.</p>
<p>From what they told me, the success of builds has significantly improved since they started using AccuRev because of the ability for the developers to work in their own <a href="http://www.accurev.com/private-versioning.html" target="_blank">private workspaces</a> where they can integrate and unit test before promoting their changes for the rest of the team. Although broken builds are, for the most part, a thing of the past, they will still occur once in a while and need to be fixed ASAP.</p>
<p><strong>Here is how they do it with AccuRev</strong></p>
<p>The <a href="http://www.accurev.com/streambrowser.html" target="_blank">stream structure</a> below is a simpler view of their overall <a href="http://www.accurev.com/product-overview.html" target="_blank">software development process</a>, but will be sufficient to show the use case.</p>
<p><strong>Promoting to the Integration Stream</strong></p>
<p>To start, the 4 developers below have made changes in their workspaces that will be promoted and associated to 4 different issues.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/b1.jpg" target="_blank"><img class="alignnone size-full wp-image-415" title="b1" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/b1.jpg" alt="b1 Use Case: Fixing the Broken Build" width="449" height="156" /></a></p>
<p>As you can see below, the integration stream (EntSoft_Client_Int) is “aware” of which issues are active in the stream. These are the new “change packages” introduced in the stream to be included in the next nightly build.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/2-show-issues.jpg" target="_blank"><img class="alignnone size-full wp-image-416" title="2-show-issues" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/2-show-issues.jpg" alt="2 show issues Use Case: Fixing the Broken Build" width="450" height="108" /></a></p>
<p><strong>Build Fails in the Integration Stream</strong></p>
<p>The next morning, the team is notified that last nights build failed via an email notification from CruiseControl. They have also scripted CruiseControl to automatically enable a time based stream called the “Temp_Fix_Build” stream and assign the appropriate transaction number to rollback the change packages from last night.</p>
<p><strong><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/b31.jpg" target="_blank"><img class="alignnone size-full wp-image-420" title="b31" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/b31.jpg" alt="b31 Use Case: Fixing the Broken Build" width="450" height="182" /></a></strong></p>
<p><strong>Assign the Developer to Fix the Build</strong></p>
<p>One of the developers creates a workspace on the Temp_Fix_Build and “change palettes” over each change package one at a time.<span>  </span>This gives them the ability to mix and match change packages together to determine which one of them is the problem.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/b4.jpg" target="_blank"><img class="alignnone size-full wp-image-418" title="b4" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/b4.jpg" alt="b4 Use Case: Fixing the Broken Build" width="450" height="184" /></a></p>
<p><strong>Problem Solved</strong></p>
<p>After the culprit is fixed, the repaired change package(s) are promoted back into the integration stream for all to share.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/b5.jpg" target="_blank"><img class="alignnone size-full wp-image-419" title="b5" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/b5.jpg" alt="b5 Use Case: Fixing the Broken Build" width="450" height="184" /></a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/04/use-case-fixing-the-broken-build/' addthis:title='Use Case: Fixing the Broken Build '  ><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/11/04/use-case-fixing-the-broken-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QCon&#8217;07 San Francisco &#8211; Agile Conference</title>
		<link>http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/</link>
		<comments>http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 21:00:44 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[issue tracking]]></category>
		<category><![CDATA[Kent Beck]]></category>
		<category><![CDATA[Martin Fowler]]></category>
		<category><![CDATA[Orbitz]]></category>
		<category><![CDATA[private workspaces]]></category>
		<category><![CDATA[QCon]]></category>
		<category><![CDATA[QCon '07]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[reparenting]]></category>
		<category><![CDATA[snapshots]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/2007/11/09/qcon07-san-francisco-agile-conference/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/' addthis:title='QCon&#8217;07 San Francisco &#8211; Agile Conference ' ><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>For those tracking the movement of luminaries such as Martin Fowler and Kent Beck or looking for scalability advice from the architects at companies like Orbitz, Ebay, and Linked-In&#8230; QCon &#8217;07 in downtown San Francisco is the place to be! The conference is packed with senior architects, software engineers, and open-source contributors galore &#8212; over [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/' addthis:title='QCon&#8217;07 San Francisco &#8211; Agile Conference '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/' addthis:title='QCon&#8217;07 San Francisco &#8211; Agile Conference ' ><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>For those tracking the movement of luminaries such as <a href="http://martinfowler.com/" target="_blank">Martin Fowler</a> and <a href="http://en.wikipedia.org/wiki/Kent_Beck" target="_blank">Kent Beck</a> or looking for scalability advice from the architects at companies like Orbitz, Ebay, and Linked-In&#8230; <a href="http://qcon.infoq.com/sanfrancisco/speaker/Damon+Poole%2C+Founder+and+CTO" target="_blank">QCon &#8217;07</a> in downtown San Francisco is the place to be!</p>
<p>The conference is packed with senior architects, software engineers, and open-source contributors galore &#8212; over 400 were rumored<a href="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_damon_cliff.jpg" target="_blank"><img class="alignright" style="margin-top: 10pt; margin-right: 0px; margin-bottom: 5px; margin-left: 5px; border: 1px solid black;" src="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_damon_cliff.jpg" alt="Damon Poole / Cliff Utstein - AccuRev - QCon’07" width="200" height="150" title="QCon07 San Francisco   Agile Conference" /></a> to be in attendance. With speaker topics ranging from enterprise scalability to Agile practices, the audience was nothing short of being at the top of their game. Huddled together at the entrance to the conference rooms were a <a href="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_dave.jpg" target="_blank"><img class="alignleft" style="margin-top: 10pt; margin-right: 5pt; margin-bottom: 5px; margin-left: 0px; border: 1px solid black;" src="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_dave.jpg" alt="David Thomas - AccuRev - QCon’07" width="200" height="150" title="QCon07 San Francisco   Agile Conference" /></a>number of vendors showing off new warez including AccuRev. Here&#8217;s a shot of <strong><a href="http://damonpoole.blogspot.com" target="_blank">Damon Poole</a></strong> &amp; Cliff Utstein (top-right), <strong><a href="http://www.daveonscm.com/" target="_blank">Dave Thomas</a> </strong>(left), and John Wall (bottom-right). The AccuRev booth had a <a id="file-link-75" class="file-link image" title="John Wall - AccuRev - QCon’07" href="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_jwall.jpg" target="_blank"><img class="alignright" style="margin-top: 10pt; margin-right: 0px; margin-bottom: 5px; margin-left: 5px; border: 1px solid black;" src="http://www.accurev.com/blog/wp-content/uploads/2007/11/qcon_2007_jwall.jpg" alt="John Wall - AccuRev - QCon'07" width="200" height="150" title="QCon07 San Francisco   Agile Conference" /></a>constant flow of folks amazed at how the stream-based <a id="file-link-75" class="file-link image" title="John Wall - AccuRev - QCon’07"></a>architecture brings a refreshing approach to managing<a id="file-link-75" class="file-link image" title="John Wall - AccuRev - QCon’07"> </a>software configurations and supporting agile practices. We also had some cameo appearances from existing customers like Authorize.Net and Orbitz.com.</p>
<p>Agile development methodologies is a major theme of the conference. For someone looking for advice on agile, just standing in the middle of the exhibit hall is all it takes &#8212; everyone is talking about best practices, success stories, and failed attempts.</p>
<p>We had a constant stream of people intrigued by our stream-based architecture and inherent support for agile practices. Here&#8217;s a list of common discussion points:</p>
<p><strong>private workspaces</strong>: commit-early, commit-often</p>
<p><strong>stream inheritance</strong>: merge-early, merge-often and sharing iterations early and automatically with parallel development efforts</p>
<p><strong>issue tracking integration</strong>: assign, deliver and track development activity to stories/issues/features</p>
<p><strong>continuous integration</strong>: integrations with cruise control, finalbuilder, electric-cloud, and others</p>
<p><strong>refactoring</strong>: IDE integrations with eclipse, Intelli-J, Visual Studio support application-wide refactoring with version control</p>
<p><strong>staged workflows: </strong>organize distributed teams and isolate integration areas from testing areas for explicit and repeatable access to known configurations.</p>
<p><strong>snapshots:</strong> guaranteed reproducibility of labeled configurations for builds known to be &#8216;good&#8217;</p>
<p><strong>reparenting:</strong> retarget active development to known good configurations for testing or stable development</p>
<p>If you didn&#8217;t have a chance to attend this years QCon, be sure to put next years event on your calendar!</p>
<p>/happy conferencing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/' addthis:title='QCon&#8217;07 San Francisco &#8211; Agile Conference '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2007/11/09/qcon07-san-francisco-agile-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCM Team Collaboration</title>
		<link>http://accurev.com/blog/2007/10/26/scm-team-collaboration/</link>
		<comments>http://accurev.com/blog/2007/10/26/scm-team-collaboration/#comments</comments>
		<pubDate>Fri, 26 Oct 2007 18:00:59 +0000</pubDate>
		<dc:creator>rmohr</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[private workspaces]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[sub-project]]></category>
		<category><![CDATA[team collaboration]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/2007/10/26/scm-team-collaboration/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/26/scm-team-collaboration/' addthis:title='SCM Team Collaboration ' ><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>It&#8217;s amazing how many times I&#8217;m asked about how you can collaborate on sub-projects or individual features with other developers without affecting the rest of the development team.  As a matter of fact, this came up the other day, which is why I thought it would make a good post. There are several ways that teams can [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/26/scm-team-collaboration/' addthis:title='SCM Team Collaboration '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/26/scm-team-collaboration/' addthis:title='SCM Team Collaboration ' ><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>It&#8217;s amazing how many times I&#8217;m asked about how you can collaborate on sub-projects or individual features with other developers without affecting the rest of the development team.  As a matter of fact, this came up the other day, which is why I thought it would make a good post.</p>
<p>There are several ways that teams can <a target="_blank" href="http://www.accurev.com/use_cases/ac_collaboration/ac_collaboration.html">collaborate</a> in AccuRev, and depending upon what the situation is, would choose different methods.  I describe two simple scenarios where 2 developers are working on a few files together and another where several developers are teamed together to work on a sub-project.</p>
<p><strong>Scenario 1:</strong> Two developers are working on the same foo.c file and must complete the work before it can be merged with the rest of the project (ie. promoted).</p>
<p>The great thing about <a target="_blank" href="http://www.accurev.com/use_cases/ac_private/ac_private.html">private workspaces</a> is that developers have a place where they can commit their code without impacting the rest of the team.  The code *is* placed on the server, but still remains private to the developer.  Meaning, other developers who update their workspaces will not propagate those changes into their private workspaces.</p>
<p>However, since the code *is* on the server, another developer can explicitly pull that version into their workspace using the &#8220;send to workspace&#8221; command (aka. &#8220;co&#8221;).  The developer can make changes and keep the file to place the new version on the server, again stored in the private workspace.  This exchange continues until the work is completed and the file can be promoted to be shared with the rest of the team.</p>
<p>This is typically a good method to use for collaborating on just a few files, but what if you had an entire sub-project to share with many developers.</p>
<p><strong>Scenario 2: </strong>Many developers working on entire sub-project which must be completed with testing before merging with the rest of the project.</p>
<p>This scenario is the &#8220;bread and butter&#8221; of what AccuRev and the stream based architecture is all about.</p>
<p>To set this up, you simply create a stream for the sub-project from the main project stream.  The sub-project development team creates workspaces off the sub-project stream while the rest of the development group is based upon the main project stream.</p>
<p>With inheritance, any changes made by the main project team is automatically inherited by the sub-project team so they [sub-project team] are continuously integrating with the main development effort.  The main project team is completely unaffected by the changes made by the sub-project team.  The sub-project team can also control what changes are inherited into their stream by setting a time basis on their stream.  The time basis will only allow the changes to flow into their stream up to the time set.</p>
<p>Eventhough I described this scenario as a method for larger groups, it can also be used for the simple case of 2 developers working on the same file.   Streams are so architectually light weight, that they can be created and removed in a matter of seconds.</p>
<p> I hope this little tip helped for those looking to collaborate.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/26/scm-team-collaboration/' addthis:title='SCM Team Collaboration '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2007/10/26/scm-team-collaboration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reparenting Workspaces &#8211; What&#8217;s the hype?</title>
		<link>http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/</link>
		<comments>http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 21:00:10 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Agile hotfix]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[defect tracking]]></category>
		<category><![CDATA[future release]]></category>
		<category><![CDATA[hot-fix]]></category>
		<category><![CDATA[hotfix]]></category>
		<category><![CDATA[private workspaces]]></category>
		<category><![CDATA[reparenting]]></category>
		<category><![CDATA[retargeting]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/2007/09/21/reparenting-workspaces-whats-the-hype/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/' addthis:title='Reparenting Workspaces &#8211; What&#8217;s the hype? ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>By now you&#8217;ve probably heard about workspace reparenting in AccuRev. You know&#8230; the fancy drag-n-drop of a workspace from one stream to another. But what&#8217;s all the hype? Ultimately, workspace reparenting means that a workspace, on disk, can &#8216;morph&#8217; into the configuration of it&#8217;s parent stream (See video) . So one day you are working [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/' addthis:title='Reparenting Workspaces &#8211; What&#8217;s the hype? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/' addthis:title='Reparenting Workspaces &#8211; What&#8217;s the hype? ' ><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>By now you&#8217;ve probably heard about workspace reparenting in Accu<em>Rev</em>. You know&#8230; the fancy drag-n-drop of a workspace from one stream to another. <span style="color:#ff0000"><em>But what&#8217;s all the hype?</em></span><strong> </strong>Ultimately, workspace reparenting means that a workspace, on disk, can &#8216;morph&#8217; into the configuration of it&#8217;s parent stream (See video) . So one day you are working on a mainline feature and the next day, with a single command, you can instantly have the configuration from a buggy release 2 months ago on disk, in the same location, with the exact configuration of files at that point in time. Poof! <span style="margin:5px"><a title="Reparenting Video" href="http://www.accurev.com/blog/reparent_workspace/reparent_workspace.html" target="_blank"><img style="margin:5px" src="http://www.accurev.com/blog/reparent_workspace/reparenting_video_thumb.jpg" alt="Reparenting Video" width="235" height="188" align="right" title="Reparenting Workspaces   Whats the hype?" /></a></span>Well&#8230; first off, reparenting isn&#8217;t magic. You see, each and every stream in AccuRev knows at least two things &#8211; (1) its parent stream and (2) any active changes to its own relative configuration. Knowledge of the parent stream is by way of reference, in the same way that an OO subclass knows of its parent class. So if you change the parent reference, you instantly have visibility into the new parent configuration, in combination with any active changes that come along for the ride (as needed, most likely). Remember, workspaces are streams too!</p>
<p><strong>Fun Toy or Power Tool?</strong></p>
<p>The only &#8220;<a href="http://www.youtube.com/watch?v=vpILRv_tZy4" target="_blank">fun toy&#8221;</a> you&#8217;ll find in Accu<em>Rev</em> is the easter egg hidden in Help&#8211;&gt;About where if you press CapsLock-Pause <em>with your left hand </em>you can play a tetris clone&#8230; ok, kidding. Workspace reparenting is a wickedly powerful feature that, when used properly, can save time, energy, and disk space and be a great powertool. So when is reparenting useful?</p>
<p><span style="color:#0000ff"><strong>Retargeting a Delivery</strong></span> &#8211; Remember the time when you spent Saturday night cranking out a hot-fix&#8230; only for it to be reclassified to a lower priority on Monday and scheduled for next weeks build? No problem! Simply reparent your workspace from the release hotfix stream to the mainline area and promote the changes. done. go home.</p>
<p><span style="color:#0000ff"><strong>Large Code Footprints</strong></span> &#8211; Lets say you have a 400Gb footprint of source code for any given release. On a particular day, you just finished committing 174 source files to mainline for a new feature. You then get tasked to the bug squad to tackle 9 high-priority bugs found in the recent production release. Rather than creating a brand new workspace from the old release snapshot, you can simply reparent your &#8216;mainline&#8217; workspace and run <em>update</em>. You&#8217;ll most likely get the old versions of 174 files and probably a few dozen or hundred other files that changed&#8230; but the point is, you just get the delta. And waiting for 2G of changes over the wire compared to 400G is a significant time savings for you and others sharing the pipe.</p>
<p><strong><span style="color:#0000ff">Tracing Defects</span> </strong>- You know those bugs that crop up and someone asks, &#8220;how long has that runtime defect been around?&#8221; Take a single workspace, create a unit test that forces the failure, then reparent to each and every release snapshot in question. Each time you do an update, you&#8217;ll get a corresponding configuration of code on disk -and- the tweaked unit test (active changes come along for the ride, remember!). Run the test, verify the failure. Bingo &#8211; a recipe to quickly test how far back a defect went. Just keep reparenting and running the test(s) until you find a configuration that works.</p>
<p><span style="color:#0000ff"><strong>Rapid Application Development</strong></span> &#8211; Are you responsible for cranking out a few features all at once? Need to hop between them frequently? Sure, you could create a separate workspace for each feature and that&#8217;s probably a better practice in most cases&#8230; but nothing stops you from using a single workspace and context-switching by reparenting. As long as you keep/promote each feature&#8217;s set of files out of the workspace, then reparenting is a breeze. This works well if you follow a stream-per-feature paradigm.</p>
<p>So now you might say, &#8220;But isn&#8217;t reparenting the same as updating my local work area with a different &#8216;branch&#8217;?&#8221; Nope. Don&#8217;t forget about <strong><em>the </em></strong>most significant architectural difference between streams and branches&#8230; inheritance. We&#8217;ll save that for another thread.</p>
<p>One of the great things about workspaces is that they are a super tiny meta-data record in the AccuRev meta-database&#8230; just a pointer to parent stream and pointer to host machine and dir on disk. That&#8217;s it. Workspaces are cheap entities. Reparenting simply changes the single parent reference reference and updating only retrieves the deltas. Make reparenting part of your routine and the benefits will follow.</p>
<p>/happy reparenting/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/' addthis:title='Reparenting Workspaces &#8211; What&#8217;s the hype? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2007/09/21/reparenting-workspaces-whats-the-hype/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

