<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The Electric Cloud Blog &#187; Agile</title>
	<atom:link href="http://blog.electric-cloud.com/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.electric-cloud.com</link>
	<description>This is your source for software build-test-deploy best practices and technical tips and tricks for Electric Cloud solutions</description>
	<lastBuildDate>Fri, 30 Jul 2010 00:12:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.electric-cloud.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/69f9c69836db8c4404b635236f654808?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Electric Cloud Blog &#187; Agile</title>
		<link>http://blog.electric-cloud.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.electric-cloud.com/osd.xml" title="The Electric Cloud Blog" />
	<atom:link rel='hub' href='http://blog.electric-cloud.com/?pushpress=hub'/>
		<item>
		<title>Bridging the IT – Development Gap</title>
		<link>http://blog.electric-cloud.com/2010/07/29/bridging-the-it-%e2%80%93-development-gap/</link>
		<comments>http://blog.electric-cloud.com/2010/07/29/bridging-the-it-%e2%80%93-development-gap/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 00:12:10 +0000</pubDate>
		<dc:creator>Mike Maciag</dc:creator>
				<category><![CDATA[Build-Test-Deploy Best Practices]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[ElectricCommander]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[server consolidation]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Virtual Infrastructure]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://blog.electric-cloud.com/?p=671</guid>
		<description><![CDATA[In the last year I have increasingly run into a new character in application development shops &#8211; IT. IT is not taking over coding tasks, but they are certainly taking a much more active role regarding where application development tasks get run.   This is no surprise, as software development has an insatiable appetite for compute [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=671&subd=ecloud&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In the last year I have increasingly run into a new character in application development shops &#8211; IT.</p>
<p>IT is not taking over coding tasks, but they are certainly taking a much more active role regarding where application development tasks get run.   This is no surprise, as software development has an insatiable appetite for compute resources.  Whether it is vast clusters for testing, dozens of machines to run ALM tools, or the incessant requests for “just one more box,” development teams are always asking for something.  Multiply this by the number of development teams in your company, and it is easy to see why this is a big job for IT.</p>
<p>IT’s response is to increasingly look at centralizing where development tasks are run.  The logic is that with a cloud of development resources, they can get more efficiency in sharing them across groups and offer their customers (development) more resources than they would otherwise get.  However, IT’s goals are largely different than those of the development teams.  IT organizations measure their success by how efficient, smooth and cost effective their compute environment is. They want a large, identically configured, scalable, uninterruptible environment that consistently delivers established levels of performance to the downstream customer.  In other words, the more that they can make things the same, the more efficient they can be.</p>
<p>On the surface, these goals are at odds with development.   Development teams are measured on software output and quality, not on resource efficiency.  Each development group often has unique needs to achieve peek productivity and quality.  The matrix of test environments never shrinks, in conflict with IT’s desire to standardize.  If environment customizations and optimizations make development more effective (which they often do) they want their own resources, even if it means they get fewer of them.</p>
<p>How do you bridge these competing goals?  The wrong answer is compromise: it&#8217;s not about finding the midpoint that&#8217;s just useless enough to each party&#8217;s goals that everyone is unhappy.</p>
<p>The right answer is to define an environment that can deliver against both goals simultaneously.  Allow IT to provision the compute cloud &#8211; these are the areas where homogeneity and efficiency shine.  This allows IT to meet development’s needs for peak resource demands by sharing across large pools of compute resources while reducing cost.  Virtualization is an important ingredient in the solution because it meets IT’s need for homogeneity and development’s need for configuration specialization.   However, virtualization is not enough.  What is really needed to bridge the gap is a framework that allows development to maintain control of what processes get run, who runs them, and how and when they end up on the compute cloud.</p>
<p>Is this possible?  Our most successful customers have used ElectricCommander to do just this.</p>
<p>For IT, ElectricCommander enables software development to happen in one large, scalable, reliable development cloud.  For development, they get all of the control that they need, only with a heck of a lot more compute resources. <ins datetime="2010-07-28T16:35" cite="mailto:admin"></ins></p>
<br />Filed under: <a href='http://blog.electric-cloud.com/category/build-test-deploy-best-practices/'>Build-Test-Deploy Best Practices</a>, <a href='http://blog.electric-cloud.com/category/cloud-computing/'>Cloud Computing</a>, <a href='http://blog.electric-cloud.com/category/electriccommander/'>ElectricCommander</a>, <a href='http://blog.electric-cloud.com/category/software-development/'>Software Development</a>, <a href='http://blog.electric-cloud.com/category/virtual/'>virtual</a>, <a href='http://blog.electric-cloud.com/category/virtualization/'>Virtualization</a> Tagged: <a href='http://blog.electric-cloud.com/tag/agile/'>Agile</a>, <a href='http://blog.electric-cloud.com/tag/cloud/'>cloud</a>, <a href='http://blog.electric-cloud.com/tag/cloud-computing/'>Cloud Computing</a>, <a href='http://blog.electric-cloud.com/tag/electriccommander/'>ElectricCommander</a>, <a href='http://blog.electric-cloud.com/tag/it/'>IT</a>, <a href='http://blog.electric-cloud.com/tag/server-consolidation/'>server consolidation</a>, <a href='http://blog.electric-cloud.com/tag/virtual-infrastructure/'>Virtual Infrastructure</a>, <a href='http://blog.electric-cloud.com/tag/virtualization/'>Virtualization</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ecloud.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ecloud.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ecloud.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ecloud.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ecloud.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ecloud.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ecloud.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ecloud.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ecloud.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ecloud.wordpress.com/671/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=671&subd=ecloud&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.electric-cloud.com/2010/07/29/bridging-the-it-%e2%80%93-development-gap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3f8af1a057fc8f4e5c7e94dd8156a0ac?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">mmaciag</media:title>
		</media:content>
	</item>
		<item>
		<title>Subbuilds: build avoidance done right</title>
		<link>http://blog.electric-cloud.com/2009/10/21/subbuilds-build-avoidance-done-right/</link>
		<comments>http://blog.electric-cloud.com/2009/10/21/subbuilds-build-avoidance-done-right/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 23:12:37 +0000</pubDate>
		<dc:creator>Eric Melski</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[SparkBuild]]></category>
		<category><![CDATA[ElectricAccelerator]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[incremental build]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[makefile]]></category>
		<category><![CDATA[subbuild]]></category>

		<guid isPermaLink="false">http://blog.electric-cloud.com/?p=552</guid>
		<description><![CDATA[I&#8217;ve heard it said that the best programmer is a lazy programmer. I&#8217;ve always taken that to mean that the best programmers avoid unnecessary work, by working smarter and not harder; and that they focus on building only those features that are really required now, not allowing speculative work to distract them. I wouldn&#8217;t presume [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=552&subd=ecloud&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve heard it said that the best programmer is a lazy programmer.  I&#8217;ve always taken that to mean that the best programmers avoid unnecessary work, by working smarter and not harder; and that they focus on building only those features that are really required <i>now</i>, not allowing speculative work to distract them.</p>
<p>
I wouldn&#8217;t presume to call myself a great programmer, but I definitely hate doing unnecessary work.  That&#8217;s why the concept of <i>build avoidance</i> is so intriguing.  If you&#8217;ve spent any time on the build speed problem, you&#8217;ve probably come across this term.  Unfortunately it&#8217;s been conflated with the single technique implemented by tools like <a href="http://ccache.samba.org/">ccache</a> and <a href="http://en.wikipedia.org/wiki/ClearCase#Features">ClearCase winkins</a>.  I say &#8220;unfortunate&#8221; for two reasons:  first, those tools don&#8217;t really work all that well, at least not for individual developers; and second, the technique they employ is not really build avoidance at all, but rather <i>object reuse</i>.  But by co-opting the term <i>build avoidance</i> and associating it with such lackluster results, many people have become dismissive of build avoidance.
</p>
<p>
<i>Subbuilds</i> are a more literal, and more effective, approach to build avoidance:  reduce build time by building only the stuff required for your active component.  Don&#8217;t waste time building the stuff that&#8217;s not related to what you&#8217;re working on <i>now</i>.  It seems so obvious I&#8217;m almost embarrassed to be explaining it.  But the payoff is anything but embarrassing.  On my project, after making changes to one of the prerequisites libraries for the application I&#8217;m working on, a regular incremental takes 10 minutes; a subbuild incremental takes just 77 seconds:
</p>
<table>
<tr>
<td align="right">Standard&nbsp;incremental:</td>
<td>
<div style="background:#85aef7;width:305px;">609s</div>
</td>
</tr>
<tr>
<td align="right">Subbuild&nbsp;incremental:</td>
<td>
<div style="background:#a3ffa3;width:39px;">77s</div>
</td>
</tr>
</table>
<p>Not bad!  Read on for more about how subbuilds work and how you can get <a href="http://www.sparkbuild.com/"><b>SparkBuild</b></a>, a free gmake- and NMAKE-compatible build tool, so you can try subbuilds yourself.<br />
<span id="more-552"></span></p>
<p><h3>What is a subbuild?</h3>
</p>
<p>
A subbuild is just the smallest part of a full build tree that must be built in order to completely build a single component of the build, including all its prerequisites.  For example, my project consists of several applications and the libraries they depend on.  Each of these components resides in a separate directory, and we use recursive make invocations to build everything.  (<i>Nota bene</i>:  if you have a non-recursive make then you probably already enjoy many of the benefits of subbuilds, but you should definitely still <a href="http://blog.electric-cloud.com/2009/10/27/what-is-sparkbuild/">check out the other features of SparkBuild</a>!)
</p>
<p>
The dependency graph for my project looks like this:
</p>
<p>
<img src="http://ecloud.files.wordpress.com/2009/10/depgraph.png"/>
</p>
<p>
You can see that to build the <i>agent</i> component, for example, we only need to build the <i>util</i>, <i>xml</i>, and <i>http</i> libraries, and the <i>agent</i> application code, of course:
</p>
<p>
<img src="http://ecloud.files.wordpress.com/2009/10/subbuild.png"/>
</p>
<p>
This subset defines the agent subbuild.
</p>
<p><h3>Subbuilds and developers</h3>
</p>
<p>
What makes subbuilds really interesting for developers is the realization that usually you&#8217;re working on just one component at a time.  For example, on any given day I might be working on the agent component, or the cm, but rarely both.  Most of the edits I make will be on code in the <i>agent</i> directory, with occassional edits to the agent&#8217;s prerequisites.  As I&#8217;m running through the edit-compile-test cycle, I have some choices about how to run the build.  The most natural thing for me is to simply run <i>make</i> in the <i>agent</i> directory.  After all, most of the changes I make are in that directory, so that will do the right thing most of the time.  Of course, if I have made changes to any of the prerequisites, or if I resync with the source depot and pick up somebody else&#8217;s changes in one of those prerequisites, I&#8217;ll probably get a busted build.
</p>
<p>
The next most obvious approach is a rebuild from the root of my source tree.  This ensures that I always update all the pieces I need for the agent, but at the cost of also building components that are irrelevant to my current focus:  if I&#8217;m just trying to rebuild to run the agent&#8217;s unit tests, there&#8217;s no need for me to rebuild the <i>cm</i> application, or the <i>ldap</i> library.
</p>
<p>
The best choice is the agent subbuild, the minimum set of things that must be built to be sure that the agent component is fully up-to-date.  But although it&#8217;s possible on a small project like this to execute the subbuild manually, it&#8217;s a nuisance, and on a bigger project it may not be practical or even possible.  You need a build tool that can <i>automatically</i> determine which parts of the build make up the subbuild for any component, and then <i>automatically</i> execute that subbuild.  That tool is SparkBuild emake.
</p>
<p><h3>Subbuilds with SparkBuild</h3>
</p>
<p>
Subbuilds with SparkBuild start with a full build, during which emake captures information about which targets are produced by each submake.  In subsequent builds, emake references that database anytime it can&#8217;t find a rule to build a particular target.  If a match is found, emake runs the corresponding submake before proceeding.  For example, the rule for the actual agent target looks like this:
</p>
<p><pre>$(OUT)/agent/agent: $(OUT)/agent/*.o $(OUT)/xml/xml.a $(OUT)/http/http.a
	g++ -o $@ $^
</pre>
</p>
<p>
In a normal build, gmake would see the dependency on <i>$(OUT)/xml/xml.a</i> and use that file if it existed already, regardless of whether it was actually up-to-date; or report &#8220;no rule to make&#8221; if the file did not exist.  With SparkBuild, emake checks the subbuild database for an entry matching <i>$(OUT)/xml/xml.a</i> and sees that it must run <i>make</i> in the <i>xml</i> directory before proceeding.  Like magic, each of the agent&#8217;s prerequisites is updated without requiring me to take any action other than swapping <i>emake &#8211;emake-subbuild-db=my.db</i> for <i>gmake</i> in my build command-line.
</p>
<p>
Still not convinced that it&#8217;s worth a look?  Here&#8217;s some more concrete results comparing a few different build scenarios from my project.  These comparisons assume that I&#8217;m actively working on the <i>agent</i> component, and that I ran either a standard incremental, from the root of the source tree, or a subbuild using SparkBuild emake:
</p>
<table>
<caption align="bottom"><font size="-1">Normal builds versus subbuilds (serial build time, shorter is better)</font></caption>
<tr>
<td>No&nbsp;changes,&nbsp;standard:</td>
<td>
<div style="background:#85aef7;width:10px;">19s</div>
</td>
</tr>
<tr>
<td>No&nbsp;changes,&nbsp;subbuild:</td>
<td>
<div style="background:#a3ffa3;width:0;">0.5s</div>
</td>
</tr>
<tr>
<td colspan="2">
<hr /></td>
</tr>
<tr>
<td>Changes&nbsp;in&nbsp;<i>agent</i>,&nbsp;standard:</td>
<td>
<div style="background:#85aef7;width:41px;">81s</div>
</td>
</tr>
<tr>
<td>Changes&nbsp;in&nbsp;<i>agent</i>,&nbsp;subbuild:</td>
<td>
<div style="background:#a3ffa3;width:16px;">31s</div>
</td>
</tr>
<tr>
<td colspan="2">
<hr /></td>
</tr>
<tr>
<td>Changes&nbsp;in&nbsp;<i>util</i>,&nbsp;standard:</td>
<td>
<div style="background:#85aef7;width:305px;">609s</div>
</td>
</tr>
<tr>
<td>Changes&nbsp;in&nbsp;<i>util</i>,&nbsp;subbuild:</td>
<td>
<div style="background:#a3ffa3;width:39px;">77s</div>
</td>
</tr>
<tr>
<td colspan="2">
<hr /></td>
</tr>
<tr>
<td>Full&nbsp;build:</td>
<td>
<div style="background:#85aef7;width:364px;">729s</div>
</td>
</tr>
<tr>
<td>Subbuild&nbsp;build:</td>
<td>
<div style="background:#a3ffa3;width:59px;">118s</div>
</td>
</tr>
</table>
<p><h3>Conclusion and Availability</h3>
</p>
<p>
Tools like ccache and ClearCase winkins have co-opted the term <i>build avoidance</i>, but in fact they do <i>object reuse</i>, not build avoidance, and they are not very useful for developer builds.  Subbuilds are a simple but highly effective approach to build avoidance that save significant time during developer builds by literally skipping parts of the build tree that are unrelated to your current focus.
</p>
<p>
If you want to try out subbuilds yourself, you can download SparkBuild from <a href="http://www.sparkbuild.com/">www.sparkbuild.com</a>.  It&#8217;s completely free (<a href="http://en.wikipedia.org/wiki/Gratis_versus_Libre#.22Free_as_in_beer.22_vs_.22Free_as_in_speech.22">as in beer</a>), so you&#8217;ve got nothing to lose&#8230; except those long coffee breaks, of course!</p>
<br />Posted in Software Development, SparkBuild Tagged: Agile, annotation, ElectricAccelerator, incremental build, makefile, performance, SparkBuild, subbuild <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ecloud.wordpress.com/552/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ecloud.wordpress.com/552/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ecloud.wordpress.com/552/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ecloud.wordpress.com/552/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ecloud.wordpress.com/552/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ecloud.wordpress.com/552/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ecloud.wordpress.com/552/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ecloud.wordpress.com/552/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ecloud.wordpress.com/552/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ecloud.wordpress.com/552/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=552&subd=ecloud&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.electric-cloud.com/2009/10/21/subbuilds-build-avoidance-done-right/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6344c5478a4b5f0e8c546c736b2a7e0d?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">ericm</media:title>
		</media:content>

		<media:content url="http://ecloud.files.wordpress.com/2009/10/depgraph.png" medium="image" />

		<media:content url="http://ecloud.files.wordpress.com/2009/10/subbuild.png" medium="image" />
	</item>
		<item>
		<title>Public Clouds</title>
		<link>http://blog.electric-cloud.com/2009/07/14/408/</link>
		<comments>http://blog.electric-cloud.com/2009/07/14/408/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 23:54:34 +0000</pubDate>
		<dc:creator>martinvr</dc:creator>
				<category><![CDATA[Build-Test-Deploy Best Practices]]></category>
		<category><![CDATA[ElectricAccelerator]]></category>
		<category><![CDATA[ElectricCommander]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[amazon ec2]]></category>
		<category><![CDATA[amazon aws]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[software build]]></category>
		<category><![CDATA[software test]]></category>
		<category><![CDATA[test automation]]></category>

		<guid isPermaLink="false">http://blog.electric-cloud.com/?p=408</guid>
		<description><![CDATA[Today we announced integrations and compatibility with public cloud computing – specifically Amazon EC2. Cloud computing is a hot topic right now, and rightly so. It provides an easy to deploy, cost-effective, scalable, on-demand computing infrastructure &#8211;very timely, given shrinking or frozen IT budgets. I can’t count the number of customers who tell me that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=408&subd=ecloud&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Today we announced integrations and compatibility with public cloud computing – specifically Amazon EC2. Cloud computing is a hot topic right now, and rightly so.  It provides an easy to deploy, cost-effective, scalable, on-demand computing infrastructure &#8211;very timely, given shrinking or frozen IT budgets.  I can’t count the number of customers who tell me that compute infrastructure is their #1 bottleneck. At Electric Cloud we have years of experience with internal or “private” clouds (after all, it’s in our name).  We help customers set up private clouds, some with hundreds of machines, to accelerate and automate their software build and test tasks.  It made sense for us to add public clouds to the mix.  You can read the press release <a href="http://www.electric-cloud.com/news/2009-0714.php">here</a>.</p>
<p>Our customers gave us some interesting use cases for using our products in combination with the public cloud. Here are some of their ideas:<br />
<span id="more-408"></span></p>
<li>Do everything in the cloud!  SCM, build machines, acceleration, testing, everything!</li>
<p></p>
<li>System testing:  Build the product in house and upload the installation program to the cloud.  Silently install the product and import test data. Now beat it up with load testing, performance testing and UI testing.   Automatically collect the results and then throw away the test machines. Oh yeah, do it at 3am when I am asleep. </li>
<p></p>
<li>Run continuous integration just to detect build failures. The artifacts are ignored, this is just an “early warning” system for build failures. </li>
<p></p>
<li>Quickly provision combinations of components for compatibility testing. For instance:  Web server with Apache Version 2 and PHP 5 on CentOS 4, Database Server with MySql 5.2 on Windows.   Now do it again with 50 different combinations of application and operation system versions. </li>
<p></p>
<li>Make build or test resources available to remote teams affordably and quickly via the cloud. Support an offshore team or a small number of developers in remote (or home) offices. </li>
<p></p>
<p>We can now do all of this. What can you imagine?</p>
<p>Agile development processes are now the norm rather than the exception. Why not an agile development infrastructure too?  Our new integration gives you the ability to use just the build and test machines you need whether they are physical, virtual, or in a public cloud.</p>
<br />Posted in Build-Test-Deploy Best Practices, ElectricAccelerator, ElectricCommander, Software Development Tagged: Agile, amazon, amazon aws, amazon ec2, cloud, Cloud Computing, software build, software test, test automation <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ecloud.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ecloud.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ecloud.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ecloud.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ecloud.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ecloud.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ecloud.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ecloud.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ecloud.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ecloud.wordpress.com/408/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=408&subd=ecloud&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.electric-cloud.com/2009/07/14/408/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5f670bbf1341ea5725b014575a15f14?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">martinvr</media:title>
		</media:content>
	</item>
		<item>
		<title>Enabling Agile Software Development</title>
		<link>http://blog.electric-cloud.com/2009/04/30/enabling-agile-software-development/</link>
		<comments>http://blog.electric-cloud.com/2009/04/30/enabling-agile-software-development/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 22:04:57 +0000</pubDate>
		<dc:creator>Dax Farhang</dc:creator>
				<category><![CDATA[Build-Test-Deploy Best Practices]]></category>
		<category><![CDATA[ElectricCommander]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://blog.electric-cloud.com/?p=327</guid>
		<description><![CDATA[Agile is great.  It seems that everyone is either adopting or talking about it (of course many of those will probably be perpetually adopting and talking).  However not everyone is succeeding with Agile.  One reason is that in order for Agile to work well you need highly experienced developers that are familiar with a broad [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=327&subd=ecloud&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Agile is great.  It seems that everyone is either adopting or talking about it (of course many of those will probably be perpetually adopting and talking).  However not everyone is succeeding with Agile.  One reason is that in order for Agile to work well you need highly experienced developers that are familiar with a broad range of skills and the processes involved in software development.  These developers (often the most experienced) are in high demand and short supply.  So what can be done to help ensure that your Agile team is successful even with fewer highly experience developers?  Use tools to export the highly specialized knowledge that those developers bring to the table, and to bridge the gap between the most and least experienced developers on your team.</p>
<p><span id="more-327"></span>Recently I read a good post on Brad Appleton’s <a href="http://bradapp.blogspot.com/2009/04/what-is-agility-part-2-software-agility.html">Agile Configuration Management Environments (ACME) blog</a>.  It takes the definition of business agility and maps it to the definition of software development agility by including the people factor.  The definition in that article and other tenets of Agile, indicate that success is not only dependent upon team size, but that experience and range of skill set are critical as well.  Consider two of the many principles set forth in the <a href="http://www.agilemanifesto.org/">Agile Manifesto</a>.</p>
<p><em>“Welcome changing requirements, even late in development. Agile processes harness change for the customer&#8217;s competitive advantage.”</em></p>
<p><em> </em></p>
<p><em>“The best architectures, requirements, and designs emerge from self-organizing teams.”</em></p>
<p>These notions indicate that there will be late breaking changes in scope and they rely on the notion that teams can self-evaluate and adjust.  In order to effectively adjust, developers must draw on experience collecting requirements and design to anticipate where the requirements are “squishy”.  Similarly, self-organization requires the ability to look at a situation, evaluate, and adjust to create a better outcome than would have occurred otherwise.  The likelihood of success in this model is significantly improved through experience.  So the best self-organizing teams are those that consist of individuals who have experience working with other teams.  Someone might even maintain that in order for an Agile team to succeed it’s members must have experience with unsuccessful software projects.</p>
<p>One issue is that experience alone does not guarantee that a developer will encounter all the responsibilities in the software development lifecycle.  It is quite common for developers to naturally gain experience in requirements gathering, design, and testing throughout their project history – even if the sole focus of responsibility is supposed to be pure programming.  However there are areas such as release management and automated testing, which the standard developer encounters much less.  These areas are considered to be more specialized, often due to the specific toolsets involved and the detailed understanding of the development infrastructure required.  Subsequently companies end up with armies of developers, but only one or two people who can exercise, troubleshoot and enhance their development infrastructure.  In effect the demography of the corporate software organization is at odds with the needs of the successful Agile team.</p>
<p>Depending on the makeup of the software development organization and complexity of the development infrastructure, it is important that the build-test-deploy processes are encapsulated in a reusable application for the entire team.  ElectricCommander and similar applications traverse the skills gap by capturing the knowledge associated with build-test-deploy and bundling it up behind a BGB (big green button).  Each particular developer doesn’t have to remember the login credentials for each build server, remember which of the automated tests require a special setup script because the test is out of date, etc.  Just as the build scripts or make files themselves are meant to roll up the complexity of the build process into individual targets, applications such as ElectricCommander also roll up the complexity of building your software, running the test harnesses, and deploying to environments into singular processes.</p>
<br />Posted in Build-Test-Deploy Best Practices, ElectricCommander Tagged: Agile, Continuous Integration, ElectricCommander, strategy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ecloud.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ecloud.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ecloud.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ecloud.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ecloud.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ecloud.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ecloud.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ecloud.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ecloud.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ecloud.wordpress.com/327/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=327&subd=ecloud&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.electric-cloud.com/2009/04/30/enabling-agile-software-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8bdb4976af0b5c43255b2d760f5eea8?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">dfarhang</media:title>
		</media:content>
	</item>
		<item>
		<title>Organizational Cartography: what kind of development shop are you?</title>
		<link>http://blog.electric-cloud.com/2008/12/18/organizational-cartography-what-kind-of-development-shop-are-you/</link>
		<comments>http://blog.electric-cloud.com/2008/12/18/organizational-cartography-what-kind-of-development-shop-are-you/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 19:21:50 +0000</pubDate>
		<dc:creator>Scott Castle</dc:creator>
				<category><![CDATA[Build-Test-Deploy Best Practices]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Compentized]]></category>
		<category><![CDATA[Monolithic]]></category>
		<category><![CDATA[Process change]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://blog.electric-cloud.com/?p=158</guid>
		<description><![CDATA[If you&#8217;ve ever worked on a significant software development project you&#8217;ve probably looked at some part of your process and said &#8216;we have to change this!&#8217; More often than not the topic is the software production process: that problematic build-test-release cycle. We can all identify places where our process is slow or broken; so why [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=158&subd=ecloud&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p align="left"><img class="size-full wp-image-168 alignleft" title="map" src="http://ecloud.files.wordpress.com/2008/12/map2.jpg?w=170&#038;h=160" alt="Image courtesy Norman B. Leventhal Map Center at the BPL" width="170" height="160" /></p>
<p>If you&#8217;ve ever worked on a significant software development project you&#8217;ve probably looked at some part of your process and said &#8216;we <em>have</em> to change this!&#8217;  More often than not the topic is the software <em>production</em> process: that problematic build-test-release cycle.  We can all identify places where our process is slow or broken; so why do some initiatives succeed while others fail miserably?  If you&#8217;re going to make a change which affects six people: stop reading &#8211; just go do it!  Sixty?  You&#8217;ll have to get buy-in from colleagues.  Six hundred?  You&#8217;re <i>going</i> to have to talk to your Director of Engineering.  Navigating those waters benefits from drawing a map: you should know who your change will impact, how it will benefit them, and where the low-hanging fruit are.  Over my four years with Electric Cloud I&#8217;ve successfully (and sometimes not so successfully!) sailed the process-improvement trade route; in this article I&#8217;m going to give you a heuristic in order to profile your own team and develop a navigation map.<span id="more-158"></span></p>
<p><strong>Are you building on a monolithic model, or a modular model?</strong></p>
<p>Consider this the first branch decision in evaluating the layout of your organization: is your product <a href="http://en.wikipedia.org/wiki/Monolithic_application">monolithic</a> or <a href="http://freshmeat.net/articles/view/1078/">modular</a>?  There are fundamental differences between these design models, and the challenges of development will be different depending on which model applies to your team.</p>
<p>Monolithic development teams are generally large, with dozens or hundred of developers working on the same final binary kit.  Take a look at your build process: do you build the same binary as all of your office-mates?  Do they build from the top-level .sln file or type &#8216;make all&#8217; just like you?  Does the build you do on the desktop take two hours?  If you trace the execution of code do you see few API calls but a ton of interlaced functions?  If so, you&#8217;re building a monolithic application (something like Microsoft Office, PTC ProEngineer, or Cisco IOS).</p>
<p>Modular development teams are characterized by large collections of small groups (2-8 people), each providing a separate deliverable which interlocks with other team deliverables.  Does your team support your piece of the codebase to the rest of the development staff?  Do you have your own design docs which are published out?  Does your code compile in five minutes?  Do you make a library or depend on a specific version of other internal elements?  Do you find out about problems in your code only after release engineering gets through with it?  Do you use a build process which is different from release engineering?  You&#8217;re in a modular shop (think Amazon.com, SonyEricsson, eBay).</p>
<p>Let&#8217;s also remember that the most common answer is &#8216;maybe&#8217;: the picture is complicated when you&#8217;re a hybrid, but nearly every shop is.  (Teams <a href="http://codebetter.com/blogs/patricksmacchia/archive/2007/12/16/hints-on-how-to-%3C/p%3E%0A%3Cp%3Ecomponentize-existing-code.aspx">swing back and forth</a>, too)  Look for the modular model &#8211; small teams, API-as-contract &#8211; with a couple &#8216;core&#8217; libraries or function groups that are huge.  This is usually because some part of the product <a href="http://www.infoq.com/news/2008/11/modular_jdk"><em>has</em> to be monolithic</a> &#8211; backend data processing, the kernel or standard library, a graphics engine or runtime &#8211; and everything else is middleware or leaf applications.  Microsoft Windows Mobile and Symbian OS are examples of products like this.</p>
<p>Here&#8217;s why it matters:<br />
Monolithic developers have more of the same pain as the release team; these developers are more likely to have to link (or even compile) the <a href="http://martinfowler.com/articles/continuousIntegration.html#EveryCommitShouldBuildTheMainlineOnAnIntegrationMachine">whole app to test a code change</a>.  A developer may not build every language variant or platform (and usually can&#8217;t!) but even a single platform &#8216;full build&#8217; before checkin is expensive, and often means going home for the day. In this case, you&#8217;ve got a build <em>speed</em> problem.  Release teams in this scenario are generally doing the &#8216;official&#8217; builds, in blessed sane environments, and it&#8217;s only a developer mistake which breaks their build.  Speed is still the issue; managing builds is generally making sure every platform and variant is compiled.</p>
<p>Modular developers chuckle at their monolithic colleagues &#8211; a component, <a href="http://www.agile-software-%3C/p%3E%0A%3Cp%3Edevelopment.com/2007/03/agile-principle-5-how-dyou-eat-elephant.html">which is often the extent of a developer&#8217;s responsibility</a> before checkin, may compile in sixty seconds &#8211; but release teams in modular shops sob.  Why?  Release engineers are integrating hundreds or thousands of components, each of which was built locally before checkin and generally not tested in the full system, and get to find all the integration problems at once.  This leads to tons of &#8216;try, fix, retry&#8217; loops as they discover problems, notify developers, and wait for new builds, builds which often take hours (due in no small part to the overhead of all those APIs and modular boundaries) instead of seconds.  Your developers need a way to asynchronously test their changes in the production environment (a build <em>management</em> problem) and your release team needs help managing component dependencies, versions, and updates (also a build management problem).  The release team could also use some speedup, especially when the product is forked and becomes two (or ten) different variants.</p>
<p>So if you want to know where the low-hanging fruit is: look at your product architecture.  Monolithic: developer speed. Modular: developer management, release team speed.</p>
<p><strong>Do the boundaries of your product elements line up to the boundaries of your organization?</strong></p>
<p>Now that you know whether the architectural model is monolithic or modular, you know how to identify <i>what</i> changes are worth making.  Don&#8217;t stop there!  You&#8217;ll need to scope more than just the benefit of a change: you should know how many people (and in what roles!) the change will impact.  One easy way to evaluate this is by looking at the boundaries of code responsibility.</p>
<p>Strong boundaries are characterized by tight grouping of responsibility and clear knowledge limits.  Can you identify what part of the product code an engineer works on based on what group she&#8217;s in?  Is the SCM system aware of which users are approved to work on certain functional areas?  The more distinct the divisions between functional areas of code the more likely it is that developers work on narrow areas of responsibility.  This is common in modular product shops: groups are independent, and so are their code bases.</p>
<p>Ambiguous boundaries tend to be ad-hoc, more to do with areas of developer preference than intentional roles or assignments.  Are there guru or lead programmers in your teams who answer questions for everybody?  Do development tasks (and bugs) get fluidly reassigned when someone is on vacation or busy on a special project?  Are there lots of developers to ask about any specific technical question?  Monolithic projects are more condusive to a large, multipurpose team (but you&#8217;ll still find striations along functional units, I guarantee it).  </p>
<p>Here&#8217;s why it matters:<br />
The reason you should watch this closely has to do with decision-makers: can you get buy-in for your idea from the engineering director?  Do you <em>need</em> to?  In a team with clear boundaries in its components you might get away with just convincing the component developers.  A more amorphous team has to deal with individual developer preferences: if Bob works on component A and B he probably doesn&#8217;t want to see A built with &#8216;make -j&#8217; and B built with MSBuild.  Most importantly, keep an eye on standardization: if you want to change a process used by <i>everyone</i> the impact is going to be broad; any change will require lots of support!  Know whether you need buy-in from the whole team (and in this case, your champion better be that director, and he&#8217;ll <a href="http://members.shaw.ca/RetailInvestor/return.html">want to understand</a> a comprehensive <a href="http://www.electric-cloud.com/products/popup_roi.php">ROI</a>) or just to a specific group (these decisions can often be made in the lunchroom, on technical merits alone).  </p>
<p>By scoping the size of the impacted group you&#8217;ll know how high in the organization you need to sell your idea, and who might be opposed to your proposed solution.</p>
<p><strong>Do you ship code (and its associated development tools) or do you ship a binary product?</strong></p>
<p>We&#8217;ve just looked at scoping impact on development teams within your organization.  For some types of product organizations, though, you&#8217;re going to have to look at more than just the internal engineering efforts: who uses the product of your labors?   This is a key question, and is at the heart of the question of ownership and impact analysis.</p>
<p>Finished products draw a distinct line between the needs of development and the needs of consumers.  These types of applications tend to be independent from their development model.  Does the user of your product (whether it&#8217;s sold retail or is a purely-internal tool) get a fully packaged and self-contained product?  Is it used stand-alone?  <a href="http://www.electric-cloud.com/downloads/EC-CS_intuit.pdf">Intuit</a> (for example) builds a binary product &#8211; Quickbooks &#8211; and ships the executable to its customers.  Intuit is thus free to use any build system they want, and can change the infrastructure used to support development as much as they&#8217;d like.</p>
<p>Middleware, SDKs, Toolkits and Platforms are more like the components of a sailboat &#8211; it&#8217;s a finished product, but will be used (and often recompiled or modified) as part of a larger system.  Do you have sample applications built on your product?  Do you ship source code?  Do you make sure your development tools are redistributable?  <a href="http://www.electric-cloud.com/downloads/EC-CS_qualcomm.pdf">Qualcomm</a> ships source and tools as a board support package with their MSM product; switching from &#8216;make&#8217; to &#8216;SCons&#8217; would require all their customers to switch to (and support!) SCons as well.  </p>
<p>Here&#8217;s why it matters:<br />
If you ship a tool environment outside your walls &#8211; or to other groups in your company &#8211; you&#8217;ll need to look at the impact on your customers before making a change.  The visibility and impact of your change may extend outside of development and up to Product Management, Marketing, Support, even Sales.  Don&#8217;t be deterred; a change which benefits your team will undoubtedly offer benefits for your customers, but the scope of buy-in you&#8217;ll need gets much more broad. </p>
<p>Consider asking the vendors of your tools if you can ship their products (some will be happy to have you do so!)  If you <em>consume</em> a platform product, look into what the OEM is using (it&#8217;s a good bet they use a different process than what they supply to you!)  Either way, be sure you know who is affected before proposing a tooling change.</p>
<p><strong>Is your infrastructure centralized and standardized, or do you have autonomy?</strong></p>
<p>Remember we said it&#8217;s important to scope how many people and in what roles a proposed change will impact?  Another way to evaluate this is to look at the level of common tooling and process is in your organization.  This is a tell-tale which can focus your efforts on the guys with the juice to approve (or to quash) a proposed change.</p>
<p>Do you know who administers your SCM system?  Bugtracking system?  Compiler environment?  When a new build machine is delivered, does IT image it for you?  In a centralized shop, developers get little control over infrastructure systems, and those systems can sometimes have lots of impact on development practices.  Ever heard of a &#8216;blue&#8217; shop?  This is a slang way of referring to development organizations which are consumers of all things IBM; there&#8217;s usually a central engineering group which sets policy (you WILL use ClearCase) or provides all the core infrastructure (Here&#8217;s your Rose, your Purify, your Team Concert).    </p>
<p>Did your lead engineers pick the build tool when the project stated?  Does your &#8216;/usr/local/tools&#8217; directory have Perl, Python, Ruby, <i>and</i> TCL interpreters?  Some organizations &#8211; JPL is a classic example &#8211; let every internal team pick their own tools and generally stick that team with supporting itself.  This gives NASA scientists the autonomy to use whatever tools are optimum for their current project, but it also means the project lead is the single most important decision-maker for your change request.</p>
<p>Most shops &#8211; just like the monolithic/componentized decision &#8211; are a little of both: Electronic Arts provides some central tools, but allows individual studios a significant range of leeway in picking their own tools.  This may be the most fertile ground for supporting process change: get a pilot group to adopt a new approach, show some success, then use that success as a case study to gain additional adopters.  A snowball effect will lead to an enterprise-wide change once central engineering sees the growth of adoption.</p>
<p>Here&#8217;s why it matters:<br />
You&#8217;ve got to know who to sell to!  Central Engineering (if it exists) <em>has</em> to be engaged in a monolithic model &#8211; everyone has to use this stuff!  Standardization on Microsoft Team System, for example, pretty much means you&#8217;re going to use MSBuild or devenv to run your builds.  Want to use SCons?  You&#8217;re pretty much out of luck.  It&#8217;s not always easier on the other side, either: component developers are much more flexible &#8211; remember you&#8217;re just building your little component! &#8211; but Release Engineering is going to hate you if you give them the first JAM project in a sea of Visual Studio.  Look at who holds the budget, who is impacted, and who has the need for change before mapping out a project plan and you&#8217;ll build success in from day one.</p>
<p>Whew!  Feeling like <a href="http://en.wikipedia.org/wiki/Ferdinand_Magellan">Magellan</a> yet?  It&#8217;s worth it, though; by understanding the shape of the organization you&#8217;re in you&#8217;ll gain enormous insight to what changes to your software production methodology will help (and make you a star!) and which ones would be crucial mis-steps.  Now try it out!  Ask your co-workers about the history of the tools you&#8217;re using now, and see how your organization maps.</p>
<br />Posted in Build-Test-Deploy Best Practices Tagged: Agile, Compentized, Monolithic, Process change, strategy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ecloud.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ecloud.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ecloud.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ecloud.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ecloud.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ecloud.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ecloud.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ecloud.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ecloud.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ecloud.wordpress.com/158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.electric-cloud.com&blog=5211544&post=158&subd=ecloud&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.electric-cloud.com/2008/12/18/organizational-cartography-what-kind-of-development-shop-are-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/25c73aac2bf639b4b51d4f33481cc1af?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">Scott Castle</media:title>
		</media:content>

		<media:content url="http://ecloud.files.wordpress.com/2008/12/map2.jpg" medium="image">
			<media:title type="html">map</media:title>
		</media:content>
	</item>
	</channel>
</rss>