<?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; refactoring</title>
	<atom:link href="http://accurev.com/blog/tag/refactoring/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>Best Practices for Agile Software Development Defined</title>
		<link>http://accurev.com/blog/2010/08/23/agile-software-development-defined/</link>
		<comments>http://accurev.com/blog/2010/08/23/agile-software-development-defined/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 13:34:04 +0000</pubDate>
		<dc:creator>damonpoole</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Educational Webinars]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[collocation]]></category>
		<category><![CDATA[Damon Poole]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2290</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/23/agile-software-development-defined/' addthis:title='Best Practices for Agile Software Development Defined ' ><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 last post I defined two Agile software development best practices I believe provide value to a wide variety of development teams.   Here I define three more practices that I believe are also important when transitioning to Agile Software Development; collocation, unit testing, and refactoring. Best Practice for Agile Software Development: Collocation Collocation [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/23/agile-software-development-defined/' addthis:title='Best Practices for Agile Software Development Defined '  ><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/2010/08/23/agile-software-development-defined/' addthis:title='Best Practices for Agile Software Development Defined ' ><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 last post I defined two Agile software development best practices I believe provide value to a wide variety of development teams.   Here I define three more practices that I believe are also important when transitioning to Agile Software Development; collocation, unit testing, and refactoring.</p>
<h2>Best Practice for Agile Software Development: Collocation</h2>
<p><strong>Collocation</strong> is simply having everybody on a cross functional team in close proximity to each other. This compounds the coordination benefit of cross functional teams. This is orthogonal to outsourcing. Whether you are outsourcing or not, collocation only refers to whether a particular cross functional team is sitting near each other.</p>
<h2>Best Practice for Agile Software Development: Unit Testing</h2>
<p><strong>Unit tests</strong> are simply tests that exercise small amounts of isolated functionality. That is, if you have a function that adds two numbers, instead of depending on running a user function that eventually calls the function, exercise the function directly. This often requires the use of mock objects that pretend to be things that the function needs in order to test the function in isolation from other functions that it depends on.</p>
<p>The cost of unit tests is in writing the tests themselves and refactoring code as new functionality is introduced to keep the unit tests testing at the right level. The benefit is that you can easily test changes quickly to find simple problems before doing more thorough and slower testing. It also provides a good safety net for refactoring, gets developers more involved in testing, and usually improves the design of the software.</p>
<h2>Best Practice for Agile Software Development: Refactoring</h2>
<p><strong>Refactoring</strong> is the practice of continuously improving the usability, maintainability, and adaptability of code without changing its behavior. That makes it much easier to add new and unanticipated functionality. Refactoring has the disadvantage that it takes extra effort and requires changing the code. Any change has the potential to reduce the maturity and stability of the product, especially if you don&#8217;t have adequate testing in place. That’s why refactoring is usually paired up with unit testing and together these are frequently combined with continuous integration.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/23/agile-software-development-defined/' addthis:title='Best Practices for Agile Software Development Defined '  ><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/2010/08/23/agile-software-development-defined/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Benefits of Agile Software Development, Without &#8220;Going Agile&#8221;</title>
		<link>http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/</link>
		<comments>http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 13:28:38 +0000</pubDate>
		<dc:creator>damonpoole</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Educational Webinars]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[agile resource center]]></category>
		<category><![CDATA[agile techniques]]></category>
		<category><![CDATA[benefits of agile]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[time-boxing]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=1804</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/' addthis:title='Getting Benefits of Agile Software Development, Without &#8220;Going Agile&#8221; ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>While many experts push for Agile adoption throughout organizations, a different trend within organizations is emerging.  Organizations are taking smaller steps towards Agile by focusing on specific Agile techniques and applying them to their individual development processes. By adopting certain techniques, organizations still receive some benefits of Agile without &#8220;going Agile&#8221;.  After all, it is [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/' addthis:title='Getting Benefits of Agile Software Development, Without &#8220;Going Agile&#8221; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/' addthis:title='Getting Benefits of Agile Software Development, Without &#8220;Going Agile&#8221; ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p style="text-align: justify;">While many experts push for Agile adoption throughout organizations, a different trend within organizations is emerging.  Organizations are taking smaller steps towards Agile by focusing on specific Agile techniques and applying them to their individual development processes.  By adopting certain techniques, organizations still receive some benefits of Agile without &#8220;going Agile&#8221;.  After all, it is possible to do <a href="http://www.accurev.com/continuous-integration.html" target="_blank">Continuous Integration</a> without time-boxing and still reduce integration problems.</p>
<p style="text-align: center;">
<h2>Getting Benefits of Agile Software Development</h2>
<p style="text-align: justify;">For those interested in gaining the benefits of Agile through smaller and more targeted techniques, there are a number of possibilities.  Below are recommended readings on Agile techniques, each focusing on one specific area, while detailing the processes and outlining the benefits.  Here is a great place to start when looking to gain the benefits of <a href="http://www.accurev.com/agile-software-development.html" target="_blank">Agile software developmen</a>t.  <strong><img class="size-full wp-image-1843 alignleft" title="Getting Benefits of Agile Without Going Agile" src="http://www.accurev.com/blog/wp-content/uploads/2010/06/book2.jpg" alt="Getting Benefits of Agile Without Going Agile" width="180" height="200" /></strong> <strong> </strong></p>
<p style="text-align: justify;"><strong>User Stories Applied: For Agile Software Development</strong>, by Mike Cohn.</p>
<p style="text-align: justify;">The Agile equivalent of requirements is User Stories, and this book is the definitive guide to creating and using them.  Readers will not be disappointed with Mike Cohn&#8217;s practical advice on User Stories, as the information offered is easy to read and apply. Valuable topics discussed include why to use User Stories, when they are appropriate, and how to monitor progress.</p>
<p style="padding-left: 210px;"><a href="http://www.accurev.com/blog/wp-content/uploads/2010/06/Book11.jpg"><img class="alignright size-full wp-image-1856" title="Getting Benefits of Agile Without Going Agile" src="http://www.accurev.com/blog/wp-content/uploads/2010/06/Book11-e1276550945534.jpg" alt="Getting Benefits of Agile Without Going Agile" width="162" height="209" /></a><strong>Continuous Integration: Improving Software Quality and Reducing Risk</strong>, by Paul M. Duvall, Steve Matyas and Andrew Glover.</p>
<p style="text-align: justify;">This is a great resource for Continuous Integration.  The authors stress the importance of integrating early and often using CI practices and provide detailed results of a successful CI implementation (including reducing risks, better visibility and reducing repetitive manual processes).  Another important element of this book is its companion Web site, <a href="http://www.integratebutton.com/" target="_blank">www.integratebutton.com</a>, which provides updates and code examples.</p>
<p><img class="alignright size-full wp-image-1807" title="Getting Benefits of Agile Without Going Agile" src="http://www.accurev.com/blog/wp-content/uploads/2010/06/book3-e1276551668365.jpg" alt="Getting Benefits of Agile Without Going Agile" width="180" height="224" /></p>
<p style="padding-left: 120px;"><strong>The Art of Unit Testing: With Examples in .Net</strong>,  by Roy Osherove.</p>
<p style="text-align: justify;">This is one of the best on the topic of Unit Testing, partly because of RoyOsherove&#8217;s experience and passion about the subject, and partly because of his practical delivery.  His book covers important areas of Unit Testing, including writing maintainable test code, code review and adopting Unit Testing in an organization.</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2010/06/book5.jpg"><img class="alignleft size-full wp-image-1811" title="Getting Benefits of Agile Without Going Agile" src="http://www.accurev.com/blog/wp-content/uploads/2010/06/book5-e1276551843627.jpg" alt="Getting Benefits of Agile Without Going Agile" width="180" height="232" /></a></p>
<p><strong>Refactoring: Improving the Design of Existing Code,</strong> by Martin Fowler, Kent Beck, John Brant, &amp; William Opdyke</p>
<p style="text-align: justify;">This book offers important technical insight into the process of changing code to improve internal structures without changing external behavior and is a highly recommended resource on refactoring and improving design of existing code.</p>
<p style="padding-left: 210px; text-align: justify;">To get more benefits of Agile without going Agile, try <em>JUnit Recipes: Practical Methods for Programmer Testing</em> by J.B. Rainsberger, and <em>Implementing Lean Software Development: From Concept to Cash </em>by Mary and Tom Poppendieck or visit AccuRev&#8217;s <a href="http://www.accurev.com/agile-resource-center.html" target="_blank">Agile Resource Center</a>.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/' addthis:title='Getting Benefits of Agile Software Development, Without &#8220;Going Agile&#8221; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2010/06/15/benefits-agile-without-going-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free Webinar: Emerging SCM Best Practices for Agile Development</title>
		<link>http://accurev.com/blog/2009/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/</link>
		<comments>http://accurev.com/blog/2009/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 21:12:53 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[agile development best practices]]></category>
		<category><![CDATA[agile development webinar]]></category>
		<category><![CDATA[Agile SCM]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[issue-based development]]></category>
		<category><![CDATA[multi-stage continuous integration]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM best practices]]></category>
		<category><![CDATA[scm metrics]]></category>
		<category><![CDATA[SCM tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Uttam Narsu]]></category>

		<guid isPermaLink="false">http://blog.accurev.com/?p=590</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/' addthis:title='Free Webinar: Emerging SCM Best Practices for Agile Development ' ><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 hosting a free Webinar on &#8220;Emerging SCM Best Practices for Agile Development&#8221; on Thursday, February 5 from 1:00 &#8211; 2:00 PM EST. The webinar will introduce the unique demands that agile processes place on legacy SCM tools and ways to build and automate an efficient Agile development process. Damon Poole, AccuRev CTO, and [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/' addthis:title='Free Webinar: Emerging SCM Best Practices for Agile Development '  ><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/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/' addthis:title='Free Webinar: Emerging SCM Best Practices for Agile Development ' ><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><div id="attachment_609" class="wp-caption alignleft" style="width: 160px"><a href="http://www.accurev.com/agile-software-development.html"><img class="size-full wp-image-609 " title="agile1" src="http://www.accurev.com/blog/wp-content/uploads/2009/02/agile1.gif" alt="More Agile resources" width="150" height="145" /></a><p class="wp-caption-text">More Agile resources</p></div>
<p>AccuRev is hosting a free Webinar on &#8220;<em>Emerging SCM Best Practices for Agile Development</em>&#8221; on <strong>Thursday, February 5 from 1:00 &#8211; 2:00 PM EST</strong>. The webinar will introduce the unique demands that agile processes place on legacy SCM tools and ways to build and automate an efficient Agile development process. Damon Poole, AccuRev CTO, and Uttam Narsu will be presenting.</p>
<p>Mr. Narsu, an industry expert on <a href="http://www.accurev.com/software-configuration-management.html">software configuration management</a> (SCM) best practices and former Forrester/Giga analyst, will discuss the most important aspects to consider when applying <a href="http://www.accurev.com/whitepaper/bestpractices">SCM best practices</a> to an agile world.  Mr. Poole will discuss how Multi-stage <a href="http://www.accurev.com/continuous-integration.html">Continuous Integration</a> can solve some of the underlying impediments to a successful Agile development environment.</p>
<p>&#8220;SCM is critical to Agile success. If your SCM tools don’t provide integrated and seamless support for Agile, you won’t get widespread adoption of <a href="http://www.accurev.com/agile-software-development.html">Agile development</a>,&#8221; said Narsu. &#8220;Development teams require brutally efficient SCM tools, but the tools must still be issue-based, must have support for flexible process models, and enable efficient branching, merging, and refactoring. The <a href="http://www.accurev.com/scm.html">SCM tool</a> should also provide private workspaces and assist continuous integration.&#8221;</p>
<p>Mr. Narsu has worked with hundreds of clients using wildly differing software development environments. While clients who succeed with agile development have strong SCM practices, the best practiced <a href="http://www.accurev.com/agile-scm.html">agile SCM</a>: transparently integrated, flexible, and collaborative.</p>
<p><strong>Specific topics discussed will include:</strong></p>
<ul type="disc">
<li>Typical SCM obstacles to Agile success and how to avoid them;</li>
<li>Key Agile Process requirements for SCM products and specific use case scenarios;</li>
<li>Challenges with <a href="http://www.accurev.com/continuous-integration.html">continuous integration</a>, and how Multi-stage Continuous Integration delivers value and how to adopt it today; and</li>
<li>Key <a href="http://blog.accurev.com/2008/07/16/why-traceability-matters/">SCM metrics</a> for delivering on Agile development goals.</li>
</ul>
<p><strong>Register here for this free webinar taking place on Thursday, February 5th from 1:00-2:00 EST: </strong><a href="http://www.accurev.com/webinar.html">Emerging SCM Best Practices for Agile Development</a>.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2009/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/' addthis:title='Free Webinar: Emerging SCM Best Practices for Agile Development '  ><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/02/03/free-webinar-emerging-scm-best-practices-for-agile-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pattern for Private Prototype Development</title>
		<link>http://accurev.com/blog/2008/11/13/pattern-for-private-prototype-development/</link>
		<comments>http://accurev.com/blog/2008/11/13/pattern-for-private-prototype-development/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 17:10:03 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[3rd party library]]></category>
		<category><![CDATA[automated build]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Empower developers]]></category>
		<category><![CDATA[parallel development]]></category>
		<category><![CDATA[private versioning]]></category>
		<category><![CDATA[private workspace]]></category>
		<category><![CDATA[prototype development]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM patterns]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software release process]]></category>
		<category><![CDATA[stream inheritance]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=435</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/13/pattern-for-private-prototype-development/' addthis:title='Pattern for Private Prototype Development ' ><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 Dave Thomas Your team has been coding a feature for a few days, across dozens of files, and everyone is excited with progress.  Deep into development, you find an interesting 3rd party library that may simplify your work and possibly take the team&#8217;s feature to the next level.  But it will require adding new [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/13/pattern-for-private-prototype-development/' addthis:title='Pattern for Private Prototype Development '  ><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/13/pattern-for-private-prototype-development/' addthis:title='Pattern for Private Prototype Development ' ><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 Dave Thomas</strong></p>
<p>Your team has been coding a feature for a few days, across dozens of files, and everyone is excited with progress.  Deep into development, <em>you </em>find an interesting 3rd party library that may simplify your work and possibly take the team&#8217;s feature to the next level.  But it will require adding new files, moving some directories, and refactoring some critical code.  However, you&#8217;re not ready to commit your <em>current </em>changes because they are unfinished and will surely break everyone else.  Your changes need to be saved before prototyping in case of a rollback but also be integrated with prototype development.  And what if the new library is a bust?  If you start co-mingling the library integration with unfinished code, the potential revert process will be a complete nightmare and waste of time.</p>
<p><strong>Private Versioning</strong>. With AccuRev&#8217;s private workspace, you can <em>always </em>commit your changes early, often, and safely without sharing amongst your peers.  But in this case you have two logical development efforts, the 2nd effort depends on the first and both need commits to preserve evolving changes.   How do you keep them cleanly separated and continue to work on both in parallel?</p>
<p><strong>Stream Inheritance</strong>.  AccuRev streams have an intriguing and very powerful feature called inheritance.   Similar to how an OO subclass implicitly inherits methods from parent and grandparent classes, a child <em>stream </em>implicitly inherits versions of files &amp; directories from parent and grandparent streams.   Taking advantage of inheritance, we can use streams to independently manage logical changes and cleanly maintain change dependencies without physically co-mingling files.</p>
<p><strong>The Pattern</strong>.  Prototyping changes without co-mingling files can be done by simply creating a series of &#8216;personal&#8217; or &#8216;private&#8217; development streams (though, they are just regular dynamic streams). This pattern will create a &#8220;Feature&#8221;, &#8220;MyDevelopment&#8221;, and &#8220;MyPrototype&#8221; stream sub-hierarchy.  <em>See Picture.</em></p>
<div id="attachment_495" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.accurev.com/blog/wp-content/uploads/2008/11/prototype.jpg" target="_blank"><img class="size-medium wp-image-495" title="Prototype Development with AccuRev" src="http://www.accurev.com/blog/wp-content/uploads/2008/11/prototype.jpg?w=300" alt="click to enlarge" width="300" height="168" /></a><p class="wp-caption-text">click to enlarge</p></div>
<p>From your Integration stream (or equivalent), start by creating a &#8220;Feature&#8221; stream that will collect all changes from your entire team.  [See related blog, <a title="Stream-per-Task Pattern in AccuRev SCM" href="http://blog.accurev.com/2007/10/11/stream-per-task-paradigm-with-accurev-software-configuration-management/" target="_blank">Stream-per-Task Pattern</a>].  The majority of team members may have their workspaces directly from here.  Next, create a child stream called &#8220;MyDevelopment&#8221; that will track your <em>personal </em>ongoing development activity.  Finally, create a grandchild stream called &#8220;MyPrototype&#8221; to track changes that will be discarded or retained depending on the level of success.</p>
<blockquote><p><span style="color:#000080"><strong>The prototype development activity is committed, shareable, integrated, and yet cleanly segregated from both active feature and private development. </strong></span></p></blockquote>
<p>The &#8220;Feature&#8221; stream is the collection point of all in-progress development activities for the given feature <em>from the entire team</em>.  Developers will promote here frequently possibly kicking off an automated build with success/fail notification.   The &#8220;MyDevelopment&#8221; stream provides a collection point for all of your personal development changes.  This stream may be considered a &#8220;private&#8221; development stream simply because no other developers will likely use it &#8211; set a stream lock to be sure.  A lightweight <a href="http://www.accurev.com/continuous-integration.html" target="_blank">Continuous Integration</a> build (i.e. compilation only) may be performed on &#8220;MyDevelopment&#8221; for sanity sake or just compile and promote as a practice.  The &#8220;MyPrototype&#8221; stream is a collection point for all prototype changes. Even as new changes are promoted to &#8220;Feature&#8221; and &#8220;MyDevelopment&#8221;, the &#8220;MyPrototype&#8221; stream will automatically incorporate those changes (via inheritance) and the prototype developers will merge changes as necessary. The prototype development activity is committed, shareable, integrated, and yet cleanly segregated from both active feature and personal development. Also, by using a stream for prototype work, multiple developers can contribute and collaborate. If the prototyping work is deemed successful, the files can be promoted to &#8220;MyDevelopment&#8221;. If the prototyping efforts don&#8217;t work out &#8211; no problem &#8211; just remove the &#8220;MyPrototype&#8221; stream and re-purpose the workspaces.</p>
<p>The beauty of this pattern is that it isolates development activity <em>by purpose</em> without co-mingling physical file changes.   It lets the prototype developers go nuts and shoot from the hip while the regular feature developers (with the deadline!) work unimpeded and without fear of rampant changes &#8212; and everyone stays up-to-date.   And with no limit to stream depth, teams can perform prototyping efforts in parallel and/or perform prototyping based on existing prototypes by adding another child stream!  Furthermore, the pattern works for any size development activity or team, even for us <a title="Team of One Pattern in AccuRev" href="http://blog.accurev.com/2008/02/22/team-of-one/" target="_blank">Team-of-One</a> developers with tons of ideas, fast fingers, and a few green screen x-terms (2 space, 80-char wrapping of course &#8211; &lt;chuckle&gt;).</p>
<p>This is a perfect example of how AccuRev empowers the developer to take control of their own development.  Creating streams is extremely easy and the stream browser provides unprecedented visibility into the entire development process.  With the right amount of security in place (Locks, ACLs, Triggers), the critical release streams (left side of the stream structure) can be locked down by the CM Admins, but the development related streams (right side) can be fair game for developers to create an environment that suits their purpose, such as prototyping.</p>
<p>Does anyone have a good story to tell about how this pattern (or equivalent) helped with a <a href="http://blog.accurev.com/2007/09/20/stream-refactoring-with-pass-throughs/" target="_blank">major refactoring effort</a> or library upgrade?</p>
<p>/happy prototyping/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/11/13/pattern-for-private-prototype-development/' addthis:title='Pattern for Private Prototype Development '  ><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/13/pattern-for-private-prototype-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dr. Strangecode, or How I Learned to Stop Worrying and Love Old Code</title>
		<link>http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/</link>
		<comments>http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 12:43:32 +0000</pubDate>
		<dc:creator>cboran</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[bigballofmud]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[martinfowler]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=332</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/' addthis:title='Dr. Strangecode, or How I Learned to Stop Worrying and Love Old Code ' ><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 Chris Boran Several years ago I happened to be browsing in my favourite local bookstore and one book in particular caught my eye: Martin Fowler&#8217;s Refactoring: Improving the Design of Existing Code This is the book that changed my whole career. Up until that point, I had lived in a constant state of fear [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/' addthis:title='Dr. Strangecode, or How I Learned to Stop Worrying and Love Old Code '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/' addthis:title='Dr. Strangecode, or How I Learned to Stop Worrying and Love Old Code ' ><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 Chris Boran</p>
<p>Several years ago I happened to be browsing in my favourite local bookstore and one book in particular caught my eye: <a title="Martin Fowler" href="http://www.martinfowler.com" target="_blank">Martin Fowler&#8217;s</a> <a title="Refactoring" href="http://www.amazon.com/exec/obidos/ASIN/0201485672" target="_blank">Refactoring: Improving the Design of Existing Code</a></p>
<p>This is the book that changed my whole career. Up until that point, I had lived in a constant state of fear of change. I viewed old code as a house of cards &#8211; if I wasn&#8217;t very careful, it was all going to come down around me. Whenever my boss asked me for advice about what to do in a given area of the code, my answers were almost always similar to:</p>
<blockquote><p>The risk of doing anything but the smallest possible change is <strong>huge</strong> &#8211; so either we do something that is an ugly hack that we will regret later, or we need to take the whole thing apart and re-implement the whole subsystem from the ground up.</p></blockquote>
<p>And predictably, my boss&#8217;s answer was always something like:</p>
<blockquote><p>Okay, we will live with the hack for now, but in the next release we will make time to do it right.</p></blockquote>
<p>Of course every release we were forced to make many similar decisions. When the next release would come, the newly conceived product features would get priority over fixing code that was already working passably. In practice we might get lucky and be able to spend lots of time rewriting a single small subsystem, but introduce ugly hacks that would put 4 other systems on the map for future re-implementation.</p>
<p>The end result is affectionately referred to as a <a title="BigBallOfMud" href="http://en.wikipedia.org/wiki/Big_ball_of_mud" target="_blank">Big Ball of Mud</a>. Yup, it is every bit as pleasant as it sounds. Life is just so miserable when you come to work every day knowing you are going to have to pack another layer of mud on the ball. You gripe about it. Your teammates gripe about it. Your boss gripes about it. Somehow you never seem to make a whole lot of forward progress.</p>
<p>As I read the book, I was at first skeptical. I thought that bad old code needed to be thrown away and not revitalized! But I wanted to see if it would work, and so I set out to try it. I was very careful to follow the techniques exactly as they are laid out in the book. I made sure not to use the word refactor when I really meant rewrite. I was careful to refactor the code every time I saw something I wanted to change and not just note it for later. I made sure that my refactorings were small. I took my time with it.</p>
<p>Obviously working this way required that I also be doing very good unit testing, but I had already bought into <a title="TestDrivenDevelopment" href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">Test Driven Development</a>. I was already writing unit tests for code before fixing bugs in an attempt to prevent regressions. Running these tests after each refactoring was not a big challenge for me.</p>
<p>Bit by bit I discovered the truth. By applying the refactoring techniques, I could take pieces that I thought needed to completely rewriten and make them better while I was fixing bugs in that area. I could kill two birds with one stone.</p>
<p>Then I discovered <a title="Eclipse" href="http://eclipse.org" target="_blank">Eclipse</a>. The built-in refactoring browser captivated me. Suddenly there was a good, fool proof way to do many of the common refactorings, and automation to keep them introducing new errors. My commitment to refactoring was completed and the defect rates in the code that I was responsible for maintaining declined dramatically. I was a convert. Since that time refactoring has been a cornerstone technique in my arsenal. I no longer lived in fear and loathing of old code!</p>
<p>One refactoring that I have still found to be painful, despite Eclipse&#8217;s facilities, is renaming files/classes. In most <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">software configuration management</a> (SCM) tools, renaming files can have unfortunate unintended side effects because the identity of a file is its path. This leads to a great many developers to name a class once, and then never change its name &#8211; even if that name does not make sense and the design of the code and the classes primary purpose and responsibilities change.</p>
<p>Luckily for me, I am a long time Accurev user. In Accurev, files are not identified by their pathnames, but rather by a unique id. This makes it possible to quickly and easily rename files with no negative side effect. However this process was inconvenient &#8211; I would have to drop out of Eclipse, rename the file with Accurev&#8217;s tools, and then refresh my workspace. Not ideal, but it worked. That is why I was so pleased when the <a title="AccurevEclipse" href="http://www.accurev.com/accubridge-eclipse.html" target="_blank">Accurev-Eclipse Plugin</a> was released &#8211; it integrated the Eclipse Refactoring browser&#8217;s rename actions with Accurev&#8217;s capabilities to make the whole experience seemless. Accurev has helped me to maintain well thought out, easy to understand designs despite constant evolution to those designs.</p>
<div id="adb-tooltip">
<div style="border: 5px solid #c4dae8; font-family: arial; font-style: normal; font-variant: normal; font-weight: bold; font-size: 11px; line-height: 13px; background-color: white; color: #333333; margin: 0;">
<div style="border: 1px solid #78b3d9; text-align: left; padding: 5px;">
<div>Person<span style="color: #006699;"> Martin Fowler&#8217;s</span></div>
<div style="color: #999999; line-height: 14px;">Right click for SmartMenu shortcuts</div>
</div>
</div>
</div>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/' addthis:title='Dr. Strangecode, or How I Learned to Stop Worrying and Love Old Code '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/feed/</wfw:commentRss>
		<slash:comments>6</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>Stream Refactoring with Pass-throughs</title>
		<link>http://accurev.com/blog/2007/09/20/stream-refactoring-with-pass-throughs/</link>
		<comments>http://accurev.com/blog/2007/09/20/stream-refactoring-with-pass-throughs/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 21:00:22 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[software development process]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/2007/09/20/stream-refactoring-with-pass-throughs/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/20/stream-refactoring-with-pass-throughs/' addthis:title='Stream Refactoring with Pass-throughs ' ><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 greatest stories ever told is your software configuration management or CM process through the lense of a StreamBrowser. No other tool gives you the power to both visualize and manipulate your software development process in real-time. Over time, you&#8217;ll notice your stream hierarchy evolving into an elaborate tree effectively telling the story. [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/20/stream-refactoring-with-pass-throughs/' addthis:title='Stream Refactoring with Pass-throughs '  ><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/20/stream-refactoring-with-pass-throughs/' addthis:title='Stream Refactoring with Pass-throughs ' ><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 greatest stories ever told is your <a title="Software Configuration Management" href="http://www.accurev.com/software-configuration-management-resources.htm?link_id=1" target="_blank">software configuration management</a> or CM process through the lense of a <a title="AccuRev Stream Browser" href="http://www.accurev.com/screenshots.html" target="_blank">StreamBrowser</a>. No other tool gives you the power to both visualize <em>and </em>manipulate your software development process in real-time. Over time, you&#8217;ll notice your stream hierarchy evolving into an elaborate tree effectively telling <em>the story</em>.</p>
<p>There are a number of techniques to help navigate the tree such as the GUI zoom feature and good naming conventions. But the unsung hero of stream organization is the <em>pass-through</em> stream. You probably already know about other types of streams such as dynamic, workspace, snapshot, and timebasis. Just like its siblings, the pass-through stream is also a configuration of source code but comes with a unique feature &#8212; all elements promoted to it are are automatically promoted to the pass-through&#8217;s parent stream, hence the name.</p>
<p><strong>So what exactly are the benefits?</strong></p>
<ul>
<li>Group logically related child streams for organizational purposes.</li>
<li>A handle to reparent groups of streams without requiring an unnecessary promotion (to it).</li>
<li>Set include/exclude rules to be applied to all children streams without the unecessary promote step.</li>
<li>As an advanced technique, you can create a reftree on a pass-through to do software builds wherever the passthrough is currently parented &#8212; say last weeks build or last nights build &#8212; offering easy, visual, <em>manual </em>control over which configuration is built.</li>
</ul>
<p>Lets put this knowledge to use. In the following diagram, you&#8217;ll see how a relatively sophisticated process model is cleanly organized <a title="Refactoring Streams with Pass-throughs" href="http://www.accurev.com/blog/wp-content/uploads/2007/05/streams_refactor_with_passthroughs.jpg" target="_blank"><img style="margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 5px; border: 1px solid black;" src="http://www.accurev.com/blog/wp-content/uploads/2007/05/streams_refactor_with_passthroughs.jpg" alt="Refactoring Streams with Pass-throughs" width="600" height="500" title="Stream Refactoring with Pass throughs" /></a>with pass-through streams. There are a few pattern motifs used for organizing active development, nightly builds, system test builds, official release codelines, and <a href="http://www.accurev.com/whitepaper/vendor_code.htm" target="_blank">customer one-offs</a>. Notice how collapsing them all (left image) leaves the high-level process-centric streams nice and clean looking. Furthermore, notice how the names of the pass-through streams help tell the story of <em>what </em>activity is happening <em>where</em>.</p>
<p>Using pass-through streams is a passive <a href="http://www.accurev.com/agile-scenario.htm" target="_blank">refactoring</a> technique that does not interfere with inheritance and can be introduced safely without disrupting development activity. In my experience, the more organized your stream structure, the happier the end users.</p>
<p>/happy refactoring/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/09/20/stream-refactoring-with-pass-throughs/' addthis:title='Stream Refactoring with Pass-throughs '  ><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/20/stream-refactoring-with-pass-throughs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

