<?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; snapshots</title>
	<atom:link href="http://accurev.com/blog/tag/snapshots/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>How AccuRev makes releasing Beta software easy</title>
		<link>http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/</link>
		<comments>http://accurev.com/blog/2008/10/27/how-accurev-makes-releasing-beta-software-easy/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 19:47:09 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[AccuRev customer]]></category>
		<category><![CDATA[branching and merging]]></category>
		<category><![CDATA[building software]]></category>
		<category><![CDATA[Releasing Beta]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[snapshots]]></category>
		<category><![CDATA[software builds]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[source code management]]></category>

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

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=133</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/27/pattern-for-stable-development/' addthis:title='Pattern for Stable 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>It&#8217;s Wednesday morning. 9:23am. With coffee in hand you execute a simple version control command: update. Hey, blame yourself! You should have known better than to blindly accept all changes from every developer who quickly committed code the night before just minutes before darting out. What did you expect to happen? For teams that work [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/27/pattern-for-stable-development/' addthis:title='Pattern for Stable 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/03/27/pattern-for-stable-development/' addthis:title='Pattern for Stable 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>It&#8217;s Wednesday morning. 9:23am. With coffee in hand you execute a simple <a href="http://www.accurev.com/scm_comparisons.html" target="_blank">version control</a> command: <strong><span style="color:#000080">update.</span></strong></p>
<p><strong>Hey, blame yourself!</strong> You should have known better than to blindly accept <em>all</em> changes from <em>every</em> developer who quickly committed code the night before just minutes before darting out. What did you expect to happen? For teams that work on a single branch, broken updates can be quite common. For those that branch for isolation, their updates are comparably more stable but they are required to (painfully) merge more often to stay in sync.</p>
<p><strong>Ok, lets get real</strong>. On some mornings, performing an <strong><span style="color:#000080">update</span></strong> can yield minimal-hassle results and we all know that staying up-to-date is always a good thing. But often when you least expect it, often when it matters the most, often when time is critical, the simple execution of an update results in sheer and utter frustration. You know. The code doesn&#8217;t even compile. Forget passing unit tests. Forget working at runtime (these are <em>the worst</em> to deal with!). The last thing you want to do is spend the entire morning scrubbing logs, reverting out changes (complete WOT!), or walking the halls finding the culprit only to see that everyone you need is in a meeting in some cleverly named conference room.</p>
<p><strong>But you had to! </strong>You <em>know</em> you need to update frequently in order to stay current with your peers. But back in your mind, you&#8217;re worried that <em>their</em> changes are going to negatively affect <em>your</em> changes. Nevertheless, all you can do is&#8230;. <span style="color:#000080"><strong>update. </strong></span>But what if you had control over the situation? In this pattern for stable development, I&#8217;ll describe an approach in AccuRev that provides incremental updates based on predefined good builds and minimizes merging (due to implicit <a href="http://www.accurev.com/smartbranch-easymerge.html" target="_blank">merge tracking</a>).</p>
<p><strong>The Pattern</strong>. AccuRev&#8217;s stream-based architecture with built-in inheritance and time-safe snapshots can entirely eliminate the traditional problems of shared development (with branches). <strong><span style="color:#ff6600">The first thing to acknowledge is that you need to work off of a stable codeline. <em>period.</em></span></strong> <a title="AccuRev Pattern - Stable Development" href="http://www.accurev.com/blog/wp-content/uploads/2008/03/pattern-stable-development.png" target="_blank"><img style="border:1px solid #777777;float:right;margin:10px 0 10px 10px" src="http://www.accurev.com/blog/wp-content/uploads/2008/03/pattern-stable-development.png" alt="AccuRev Pattern - Stable Development" width="203" height="125" title="Pattern for Stable Development" /></a>I know, I know. Some of you reading this think you need to always be working against bleeding edge in order to move as quickly as possible. Fine. Then you accept the top-half of this blog post and are willing to deal with the pain/time/sleep/sanity lost in the ether. For the rest of us who don&#8217;t live at the office, we need to work off of a stable codeline. With AccuRev, this means working from a snapshot (or time-based stream). In a previous blog, I wrote about a pattern for <a href="http://blog.accurev.com/2008/03/05/pattern-for-continuous-builds/" target="_blank">continuous integration </a>(CI) where snapshots are created for each <em>frequent</em> &#8220;good build.&#8221; Extending this CI pattern, lets use each good build snapshot as the baseline for active development. <strong><span style="color:#ff6600">The idea is simple: Reparent your workspace or project stream to subsequent &#8220;good build&#8221; snapshots and <em>then </em></span><span style="color:#000080">update</span>.</strong> The update will bring down (delta!) changes to your workspace since the last good build. In this way, you knowingly accept changes that are guaranteed to have passed some level of test criteria. In the meanwhile, changes in the mainline <em>Integration</em> stream can churn-n-burn with various levels of volatility without affecting your active development environments &#8212; you&#8217;re saved by the snapshot! After days or weeks of hopping build snapshots, when it&#8217;s time to deliver your changes to the rest of the world, simply reparent to mainline Integration, perform any last minute merges, test, then promote! For an extra level of stability, consider only working off of certified builds &#8211; snapshots that have passed rigorous tests.</p>
<p><strong>Wait. Who does the reparenting? </strong>Good question. I say let the developers or team leads manage <em>where</em> and <em>when</em> project streams get promoted. <strong><span style="color:#0000ff">Reparenting is easy and reversible</span></strong>! On the other hand, maybe your CM or <a href="http://www.accurev.com/release-engineer.html" target="_blank">Release Engineer</a> takes on responsibility for managing builds and reparenting projects on particular days or by request. You can use stream locks to easily control who can reparent, by user or group!</p>
<p><strong>What about setting a time rule on a stream?</strong> As you know, snapshots represent configurations at specific points in time. You may also know that you can optionally set a time rule on a dynamic stream to control (i.e. throttle) when changes are inherited from the parent streams. <a title="AccuRev - Setting a Time Rule on Dynamic Streams" href="http://www.accurev.com/blog/wp-content/uploads/2008/03/set_time_basis.png" target="_blank"><img style="border:1px solid #777777;float:right;margin:10px 0 10px 10px" src="http://www.accurev.com/blog/wp-content/uploads/2008/03/set_time_basis.png" alt="AccuRev - Setting a Time Rule on Dynamic Streams" width="186" height="100" title="Pattern for Stable Development" /></a>[<em>StreamBrowser: Rclick Stream --&gt; Change Stream --&gt; set time</em>]. Guess what! The effect of reparenting to snapshots can equally be obtained by simply setting a time rule on your parent stream! This works best if you have a <a href="http://blog.accurev.com/2007/10/11/stream-per-task-paradigm-with-accurev-software-configuration-management/" target="_blank">stream-per-task paradigm</a> so the time rule only affects your (team&#8217;s) active development. The idea is simple &#8211; anytime you want more changes, simply (re)set the time forward say an hour or day or week and any newer changes will be available to downstream streams and workspaces. Personally, I like setting time rules only for temporary use cases such as for quick testing or to wait a day for new changes. If I&#8217;m doing development that will take weeks to complete, I&#8217;d rather reparent to a snapshot because it lets me physically &#8216;see&#8217; where I&#8217;m working. But both options result in the same effect &#8212; controlled updates.</p>
<p>This pattern is ideal for letting teams stay up-to-date by reparenting to stable baselines and only updating changes that are known to have passed some level of testing. Ultimately, with clean(er) updates, the results should be increased productivity, increased quality, and happier developers! Happy developers == good.</p>
<p>/happy coding/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/03/27/pattern-for-stable-development/' addthis:title='Pattern for Stable 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/03/27/pattern-for-stable-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pattern for Continuous Builds</title>
		<link>http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/</link>
		<comments>http://accurev.com/blog/2008/03/05/pattern-for-continuous-builds/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 20:00:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[CI tools]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[continous build best practice]]></category>
		<category><![CDATA[continuous builds]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[continuous integration tools]]></category>
		<category><![CDATA[customer acceptance testing]]></category>
		<category><![CDATA[long build cycles]]></category>
		<category><![CDATA[long test cycles]]></category>
		<category><![CDATA[multistage continuous integration]]></category>
		<category><![CDATA[reparent]]></category>
		<category><![CDATA[reparenting]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[snapshots]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[version control]]></category>

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

