<?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; multistage continuous integration</title>
	<atom:link href="http://accurev.com/blog/tag/multistage-continuous-integration/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>More Agile Methods and Practices Defined</title>
		<link>http://accurev.com/blog/2010/08/30/agile-methods-defined/</link>
		<comments>http://accurev.com/blog/2010/08/30/agile-methods-defined/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 13:36:57 +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[Scrum]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[agile methods]]></category>
		<category><![CDATA[Damon Poole]]></category>
		<category><![CDATA[definitions]]></category>
		<category><![CDATA[multistage continuous integration]]></category>
		<category><![CDATA[story points]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2313</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/30/agile-methods-defined/' addthis:title='More Agile Methods and Practices 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 few posts I have discussed some of, what I consider to be, the most valuable Agile methods for development.  The list is pretty long, so breaking the list up allows me to define each practice and include the individual benefit of each Agile method.  This post defines some hot terms right now- [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/30/agile-methods-defined/' addthis:title='More Agile Methods and Practices 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/30/agile-methods-defined/' addthis:title='More Agile Methods and Practices 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 few posts I have discussed some of, what I consider to be, the most valuable Agile methods for development.  The list is pretty long, so breaking the list up allows me to define each practice and include the individual benefit of each Agile method.  This post defines some <strong>hot </strong>terms right now- <a href="http://www.accurev.com/continuous-integration.html" target="_blank">continuous integration</a>, <a href="http://www.accurev.com/multistage-continuous-integration.html" target="_blank">multistage continuous integration</a>, and story points.  Enjoy!</p>
<h2>Agile Method: Continuous Integration</h2>
<p>How frequently have you merged your code with changes from the mainline, only to find that the result doesn&#8217;t build, or it builds but it doesn&#8217;t work? Monthly? Weekly? Daily? Hourly? Or worse, how often have you made changes that broke the build, requiring you to quickly correct the problem while getting flames from your team members?</p>
<p>A practice that has emerged to address the problems of integration is called Continuous Integration. The basic idea is that if integrating changes together and getting build and test results on a regular basis is a good idea, integrating and getting build and test results on every change is even better.</p>
<p>With Continuous Integration, all work from all teams is integrated into a single codeline as frequently as possible. Every check-in automatically triggers a build and usually a subsequent run of the test suite. This provides instant feedback about problems to all interested parties and helps to keep the code base free of build and test failures. It also reduces the integration headaches just prior to release.</p>
<h2>Agile Method: Multi-stage Continuous Integration</h2>
<p>Integration is tough enough when you are just integrating your work with the work of other folks in your small team, or the whole effort is being done by a small team, but when you are part of a large team there is also something called “Big-Bang” integration. That’s the integration of the work that multiple teams have been working on for long periods of time. In a typical project, this integration is done in a phase toward the end of the project. During integration, many problems are discovered for the first time which leads to delays and/or changes in scope.</p>
<p>The real question is, what is a good way to structure this integration so that it will scale smoothly as you add more people to the equation? A good starting place is to look around for a pattern to follow. What are some similar situations? I have found that everything your organization needs to do in order to produce the best possible development organization can be entirely derived from the patterns and practices at the individual level. This approach makes it much easier to understand and much more likely that it will be successfully followed.</p>
<p>As individuals we work in transient isolation to reduce the impact of work in progress on each other. Organizations isolate WIP by using only official versions of 3pty sources and by producing official releases for customers.</p>
<p>Multi-stage continuous integration (MSCI) scales CI to large distributed environments by isolating work in progress at the team level. Changes move from individual to team to mainline as fast as CI allows, but stop on failure. MSCI is particularly important in a distributed environment where fixes to problems exposed by CI can be delayed by a full day</p>
<h2>Agile Method: Using Story Points For Estimation, Instead of Units of Time</h2>
<p>In my experience, the best unit to use for estimates is story points. Two different people with two different skill sets or levels of ability in an area may take different amounts of time to perform a particular task. Estimating in hours mixes together the scope of the work that needs to be done with the speed at which a particular individual can do that work.</p>
<p>On the other hand, story points are a relative measure of the scope of a user story. Story points separates out the “what” from the “who.” For instance, if you have one individual that is stronger with .Net than with Java, they will estimate a Java story as taking more hours than somebody that is stronger with Java. But they will probably both agree that something that is twice as easy to implement will take half as long to do.</p>
<p>To use story points, you need to create a relative scale of scope. A simple approach is to find a simple and straightforward story that you use to represent a single story point. Then think of stories that are 2, 3, 5, and 8 times larger in scope. You should have a couple of examples for each story point value to take into account that some stories have more test than coding, more documentation than test, etc.</p>
<p>Story points are primarily used for planning, not for implementation. Story points are used to help determine the contents of release by calculating a velocity.</p>
<p>Next up: Backlog, velocity, planning poker and burnup charts.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/08/30/agile-methods-defined/' addthis:title='More Agile Methods and Practices 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/30/agile-methods-defined/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yes, You Can! Doing Agile with Remote Teams</title>
		<link>http://accurev.com/blog/2010/07/15/agile-remote-teams/</link>
		<comments>http://accurev.com/blog/2010/07/15/agile-remote-teams/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 17:32:54 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Enterprise Agile]]></category>
		<category><![CDATA[Integrations]]></category>
		<category><![CDATA[Questions and Polls]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[distributed teams]]></category>
		<category><![CDATA[multistage continuous integration]]></category>
		<category><![CDATA[remote development]]></category>
		<category><![CDATA[remote team]]></category>
		<category><![CDATA[Software Configuration Management]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2058</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/15/agile-remote-teams/' addthis:title='Yes, You Can! Doing Agile with Remote Teams ' ><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>This past year I’ve attended several Agile conferences, presented at many of our own conferences, and traveled to Agile tradeshows sponsored by some influential industry-leading names. What surprises me most is the variance I see on the answer to this question: How do I do Agile with remote teams? Some of the pure “Agileistas” will [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/15/agile-remote-teams/' addthis:title='Yes, You Can! Doing Agile with Remote Teams '  ><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/07/15/agile-remote-teams/' addthis:title='Yes, You Can! Doing Agile with Remote Teams ' ><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><h2><span style="font-weight: normal; font-size: 13px;"><span style="color: #000000;">This past year I’ve attended several Agile conferences, presented at many of our own conferences, and traveled to Agile tradeshows sponsored by some influential industry-leading names. What surprises me most is the variance I see on the answer to this question: </span></span><strong>How do I do Agile with remote teams?</strong></h2>
<p><span style="color: #000000;">Some of the pure “Agileistas” will may answer this question in a manner that isn&#8217;t very possible for some of us in the real world, with “Don’t do it” or, &#8220;Reorg your company.&#8221;</span></p>
<p><span style="color: #000000;">I don’t’ know what those people expect here- is it possible that you can convince your management organization to tear down its office walls, move entire teams from across the country into one office space, just because you heard it at a conference that it was going to be really hard to do Agile remotely?</span></p>
<p><span style="color: #000000;">I certainly don’t believe that doing Agile with remote teams is a bad practice, nor do I believe that it’s impossible. Challenging? Yes it is. Easy to mess up? You bet. But there are some simple things you can do to avoid some of the pitfalls of remote organizations.</span></p>
<h2><span style="color: #000000;">Agile with Remote Teams</span></h2>
<p><strong><span style="color: #000000;">Use face to face communication methods:</span></strong></p>
<p><span style="color: #000000;">I just got the iPhone 4. It has face to face video chat. I also use Google Talk, and this also has video chat built in. It works great! With all the communication technologies we have now a days, there is no reason to avoid personal contact with remote teams.</span></p>
<p><span style="color: #000000;">If the remote team is a faceless organization, it will become a perceived impediment for the local team if there are problems. They wont&#8217; be treated like part of the team, but more like an outside entity that drops code in and risks messing up the release.  We can bring these teams closer together to encourage communication, and allow them to adapt and respond to each other as issues arrive. Creating a persona and human link turns those faceless &#8220;code drops&#8221; into real people, people who you can reach out to. This gives the team the power to self manage your priorities, impediments and conflicts.</span></p>
<p><strong><span style="color: #000000;">Create Agile ambassadors</span></strong></p>
<p><span style="color: #000000;">We can even take face-to-face chat on the internet up a level. Sending ambassadors back and forth from the remote teams to home base and vice versa creates a human link that is deeper than any piece of technology can</span><img class="alignright size-medium wp-image-2064" src="http://www.accurev.com/blog/wp-content/uploads/2010/07/MP900216025-300x201.jpg" alt="Agile for Remote Teams" width="300" height="201" title="Yes, You Can! Doing Agile with Remote Teams" /><span style="color: #000000;"> provide.  The ambassador’s job is to strengthen this link, because if the link is strong, each side will be more inclined to help each other.</span></p>
<p><span style="color: #000000;">Sometimes having a planning session with the remote team doesn&#8217;t give them the overall sense of how important the stories you&#8217;re working on might be. They may not </span><em><span style="color: #000000;">feel</span></em><span style="color: #000000;"> as if it’s important, and that&#8217;s because they don&#8217;t know all the juicy details that led up to the creation of that story. Having an ambassador at that site gives that team visibility into all of the bits of information that make one user story important. In other words, the ambassador gives the entire back-story to an iteration (IE the gossip) so they can get a sense of how important something is, it’s not just a priority number in the ITS.</span></p>
<p><strong><span style="color: #000000;">Use Tools That Work Globally</span></strong></p>
<p><span style="color: #000000;">With all of the face-time, ambassadors, and communication, it’s essential that teams have a global view of what’s happening during the development cycle. It wouldn’t make much sense to reach out and then not provide a way to extend that communication on the development level.</span></p>
<p><a href="http://www.accurev.com/geographically-distributed-development.html"><img class="alignright size-medium wp-image-2060" src="http://www.accurev.com/blog/wp-content/uploads/2010/07/MC910216338-300x300.png" alt="Agile for Remote Teams" width="210" height="210" title="Yes, You Can! Doing Agile with Remote Teams" /></a></p>
<p><span style="color: #000000;">Imagine a team where having access to a user story or a piece of code wasn’t easy and available to them? This handcuffs the team tremendously.</span></p>
<p><span style="color: #000000;">Any remote team will need to be able to:</span></p>
<ul>
<li><span style="color: #000000;">See each others user stories and tasks</span></li>
<li><span style="color: #000000;">Enter updates to user stories and tasks</span></li>
<li><span style="color: #000000;">Diff baselines and branches</span></li>
<li><span style="color: #000000;">Check out code from remote teams</span></li>
<li><span style="color: #000000;">Contribute to team discussions and wikis</span></li>
<li><span style="color: #000000;">Run continuous integration globally</span></li>
</ul>
<p><strong><span style="color: #000000;">Use Multi Stage Continuous Integration</span></strong></p>
<p><span style="color: #000000;">Using <a href="http://www.accurev.com/multistage-continuous-integration.html" target="_blank">multistage continuous integration</a> lets people take a look at what’s been built, and if it functions correctly, give it to the other team. Having multi-stage set up gives you a way to integrate early and often, but only deliver changes that are “done”.</span></p>
<p><span style="color: #000000;">One of the main problems with remote development is integration, and it’s a double edge sword for most SCM tools. If you isolate the remote team too much, they won’t integrate often. And when they do integrate to mainline, they may break functionality. The problem with this is that they will not be able to respond to that change for 6-12 hours if your team is in another country. This basically means downtime for everyone.</span></p>
<p><span style="color: #000000;">But with multistage CI and AccuRev you can keep that team isolated and integrated at the same time.</span></p>
<p><strong><span style="color: #000000;">Is it possible to do offshore Agile? </span></strong></p>
<p><span style="color: #000000;">I’m not sure if it’s a question if it’s possible, I don’t think we have a choice. Offshore development is a reality that isn’t going away, and the simple answer of bringing teams together to practice Agile isn’t always variable.  Doing <a href="http://www.accurev.com/geographically-distributed-development.html" target="_blank">Agile with remote</a> teams isn’t’ a choice, it’s a reality.</span></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/15/agile-remote-teams/' addthis:title='Yes, You Can! Doing Agile with Remote Teams '  ><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/07/15/agile-remote-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration vs. Continuous Perfection</title>
		<link>http://accurev.com/blog/2010/03/26/continuous-integration-perfection/</link>
		<comments>http://accurev.com/blog/2010/03/26/continuous-integration-perfection/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:39:10 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Integrations]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[multistage continuous integration]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=1432</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/03/26/continuous-integration-perfection/' addthis:title='Continuous Integration vs. Continuous Perfection ' ><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 is about confronting your risk. It’s about giving rapid feedback and responding to problems that you may encounter in your development environment. If you’re Agile, you know one principle is adaptation. It’s not about sticking to the plan; it’s about exposing and responding to change in your development cycle.  This is why the principles [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/03/26/continuous-integration-perfection/' addthis:title='Continuous Integration vs. Continuous Perfection '  ><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/03/26/continuous-integration-perfection/' addthis:title='Continuous Integration vs. Continuous Perfection ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p><a href="http://www.accurev.com/continuous-integration.html">Continuous integration</a> is about confronting your risk. It’s about giving rapid feedback and responding to problems that you may encounter in your development environment.</p>
<p>If you’re <a href="http://www.accurev.com/agile-scm.html" target="_blank">Agile</a>, you know one principle is adaptation. It’s not about sticking to the plan; it’s about exposing and responding to change in your development cycle.  This is why the principles of continuous integration and Agile walk hand in hand.</p>
<p>Delaying the inevitable risk of code integration doesn&#8217;t mean the risk will disappear.  Each line of code you change is a risk. Each commit you do is a risk. You can’t avoid the risk by putting it off.  Just like anything, if you were going to bottle up all of that risk, let it ferment for a few months and open it later… I’m pretty sure you wouldn’t want to drink the whole bottle in one gulp. It really only takes one sip to know the concoction is bad.</p>
<p>Continuous Perfection is one of the reasons we bottle up the risk. Let me give you an example.</p>
<p>We set up continuous build on trunk, we encourage our developers to<a href="http://www.cmcrossroads.com/bradapp/acme/branching/branch-policy.html#MergeEarlyAndOften" target="_blank"> integrate early and often</a>, life is good…. until the day of the broken build.</p>
<p>If it’s broken for even a day, panic ensues, we’ve issued blame to developers for something they should not be responsible for, a stoppage in work for organization. People will feel rushed to resolve issues, the QA team will stop testing, and our release engineer will struggle to roll back code. Essentially, people will be running around like chickens with their heads cut off.</p>
<p>Our management teams do what they do best, they listen to the release team, QA team and the dev team. “Joe Developer broke the build, it’s <strong>his</strong> fault that we can’t work today”.</p>
<h2>When did the broken build become such a big deal?</h2>
<p>This scenario may repeat itself, over the course of several weeks our mangers will react, and start asking developers to put in process to avoid breaking the build. Our teams will start to feel that their code must be perfect before they commit. This problem is called Continuous Perfection<strong>, </strong>it’s the idea that the code must be perfect before it’s committed to the repository.</p>
<p>And doesn’t this seem to work against the principles of continuous integration? The idea here was that we integrate early and often to avoid <strong><a href="http://www.cmcrossroads.com/bradapp/acme/branching/pitfalls.html#MergePhobia" target="_blank"><span style="font-weight: normal;">Integration Hell</span></a> </strong>and the <a href="http://www.cmcrossroads.com/bradapp/acme/branching/pitfalls.html#BigBang" target="_blank">Big Bang</a> merge. We want to confront and work through our problems right now. But now we’ve started to go back to what we do naturally. Isolate changes, put off the inevitable and work off of our private branches. Our developers do local builds to make sure the builds work correctly, and jump through hoops to avoid committing to early in fear of being blamed. We are back where we started, with a huge merge at the end of the project that could fail everything.  We bottled up all our risk, and ended up in a more dangerous place then we intended.</p>
<p>But what can we do to solve this problem ?  To be continued&#8230;</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/03/26/continuous-integration-perfection/' addthis:title='Continuous Integration vs. Continuous Perfection '  ><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/03/26/continuous-integration-perfection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Agile 2008 &#8211; Agile Skeptic?</title>
		<link>http://accurev.com/blog/2008/08/13/agile-2008-agile-skeptic/</link>
		<comments>http://accurev.com/blog/2008/08/13/agile-2008-agile-skeptic/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 19:45:03 +0000</pubDate>
		<dc:creator>jsherwood</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile 2008]]></category>
		<category><![CDATA[Agile 2008 conference]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[multistage continuous integration]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=275</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/08/13/agile-2008-agile-skeptic/' addthis:title='Agile 2008 &#8211; Agile Skeptic? ' ><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 Josh Sherwood, AccuRev engineer I had the opportunity to co-present a talk on Continuous Integration at the Agile 2008 conference this past week. While there I took the opportunity to attend a variety of sessions. Workshops discussing Business Value, Experience reports describing transitions from Waterfall to Agile, Aspects of Leadership in and Agile Environment [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/08/13/agile-2008-agile-skeptic/' addthis:title='Agile 2008 &#8211; Agile Skeptic? '  ><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/08/13/agile-2008-agile-skeptic/' addthis:title='Agile 2008 &#8211; Agile Skeptic? ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p class="MsoNormal"><strong>By Josh Sherwood, AccuRev engineer</strong></p>
<p class="MsoNormal"><a href="http://agile2008.agilealliance.org/" target="_blank"><img class="alignleft size-medium wp-image-305" src="http://www.accurev.com/blog/wp-content/uploads/2008/08/agile-2008.jpg?w=240" alt=" Agile 2008   Agile Skeptic?" width="240" height="161" title="Agile 2008   Agile Skeptic?" /></a></p>
<p class="MsoNormal">I had the opportunity to co-present a talk on <a href="http://www.accurev.com/continuous-integration.html" target="_blank">Continuous Integration</a> at the <a href="http://www.accurev.com/press-releases/072208-damonpoole-agile2008.html" target="_blank">Agile 2008 conference</a> this past week. While there I took the opportunity to attend a variety of sessions. Workshops discussing Business Value, Experience reports describing transitions from Waterfall to Agile, Aspects of Leadership in and Agile Environment and many others. And okay, I’ll admit that I have been a skeptic of a variety of the Agile Processes. Our CTO, Damon Poole, has been an Agile advocate for some time now. He and I have had ongoing discussions about the value of <a href="http://www.accurev.com/agile-scm.html" target="_blank">Agile practices</a>. We would talk about the iterative model, going back and forth about the value and how to describe it to different groups. We’d eventually come to an understanding, but there were still many elements that I have been skeptical of and found difficult to see their value.</p>
<p class="MsoNormal">In addition to the elements of Agile practices that Damon and I would discuss, I started taking a look at other Agile topics. I looked at things like estimation, use of 3&#215;5 cards and even pair programming. I didn&#8217;t see the value in the sticky note processes, I mean using a paper process to discuss a digital product? I didn&#8217;t see the value in pair programming, especially for consulting companies where your development hours translate directly into billable hours.</p>
<p class="MsoNormal">But then I came to the conference. I listened to people like Richard Sheridan talk about his experience with Pair Programming, why and how it worked for him. I listened to experience reports from companies like Healthwise, and heard about the difficulties they overcame to improve prior processes and move into Agile. And I spoke with Scrum trainers, who were encouraging their customers and helping them overcome the hurdles of understanding, while remaining flexible about sharing Agile ideas.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">What was great about things like the Pair Programming was the team participation. Not only was Richard there talking about their factory model, team members were in the audience, talking about what they take away from the model. They talked about some of the things an individual developer would run into. You know those times, where you are working on a particular problem and just can&#8217;t quite figure out how to break the bottleneck. You wander around, get some coffee, or browse the web checking the Olympics. With their pair model, now that bottleneck has two developers working on it. No they&#8217;re both not checking their email, they are floating ideas back and forth, bringing to bare the problem and coming to some resolution. With a close proximity to other pairs they are also propogating these ideas farther out amongst the group. Yes there is training and not everybody can manage to work in pairs, but by using this model and actively rotating the pairs they ensure there are no knowledge silos. If someone is out one day there is more than one person who can tackle the problem at hand.</p>
<p class="MsoNormal">
<p class="MsoNormal">It has been a community of ideas this week. Some people use Scrum but don’t perform retrospectives. Some people model agile practices, but don’t follow a specific practice. Some people are taking the team based processes and developing large scale models for larger development tasks.</p>
<p class="MsoNormal">
<p class="MsoNormal">As I sit here building out the story for some of our future ideas, I’m encouraged that we can adopt more of the Agile practices than we have in the past, work through some of the confusion those ingrained in waterfall have with new processes, and further the practices that have allowed us to deliver innovation at a faster rate than we could with older models.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/08/13/agile-2008-agile-skeptic/' addthis:title='Agile 2008 &#8211; Agile Skeptic? '  ><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/08/13/agile-2008-agile-skeptic/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>
	</channel>
</rss>

