<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Agile Web Development &amp; Operations</title>
	
	<link>http://www.agileweboperations.com</link>
	<description>Practical advice for rapidly delivering customer value</description>
	<lastBuildDate>Thu, 05 Apr 2012 17:43:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/agileweboperations" /><feedburner:info uri="agileweboperations" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>agileweboperations</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Stop missing out on collaboration opportunities by creating situation awareness</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/zozGtaFnM0E/stop-missing-out-on-collaboration-opportunities-by-creating-situation-awareness</link>
		<comments>http://www.agileweboperations.com/stop-missing-out-on-collaboration-opportunities-by-creating-situation-awareness#comments</comments>
		<pubDate>Thu, 05 Apr 2012 17:43:30 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Kanban & Agile]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[cross-functional teams]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3769</guid>
		<description><![CDATA[Highways Agency Yesterday, I was waiting for the train to arrive for my daily commute. After it pulled up to the station, a mother with a baby carriage tried to disembark. She struggled with the carriage while carrying a heavy bag, a second child pulling her arm. Naturally, I jumped in to help out and [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><div class="wp-caption alignleft" style="width: 240px">
	<img src="http://awostatic.agileweboperatio.netdna-cdn.com/wp-content/uploads/2012/03/5997568385_1c829302b7_m.jpg" alt="" title="HA0510. M11 Junction 8-9 scheme. March 2010" width="240" height="160" class="alignleft size-full wp-image-3772" /><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a><a href="http://www.flickr.com/photos/highwaysagency/5997568385/" title="Highways Agency" target="_blank">Highways Agency</a></small>
	<p class="wp-caption-text"> </p>
</div>Yesterday, I was waiting for the train to arrive for my daily commute. After it pulled up to the station, a mother with a baby carriage tried to disembark. She struggled with the carriage while carrying a heavy bag, a second child pulling her arm. Naturally, I jumped in to help out and she was very grateful. I was able to help because I a) saw her struggling and b) was standing right beside her when she needed help. I was aware of the situation she was in and spontaneously collaborated with her to get her kids and stuff out of that train. But, how does this story relate with your agile team?</p>
<p><strong>The same forces are at play within your team.</strong> Everyone is doing his best to optimize their work. When optimizing, you take all the information you have about the current situation and try to make the best decision based on that information. The more information you have, the better your decisions.<br />
For maximizing information flow, it’s a good idea to make your team sit together. Sitting together fosters passive information gathering. This passive information consists of both the colleagues&#8217; moods and a feeling for how things are progressing. Having information about moods and progress creates situation awareness. Situation awareness enables you to make well informed decisions.</p>
<p><strong>Unfortunately, situation awareness is very fragile.</strong> As soon as people are physically separated (i.e. by continents, cities, or even floors and walls), they begin losing those passive information sources. Suddenly, they must <em>actively</em> search for information. But you can only search for information you already know exists &#8211; in short, you miss everything you’re not aware of. </p>
<p>Even the information you know about is hard to actively collect if you&#8217;re separated from the team. You need to <em>decide</em> to do it, you need to activate whatever communication channel you’re using (phone, chat, email, walking over, &#8230;) which consumes energy. If you’re already short for time, you might not be able to do this. Which means you lose even the information you know is out there waiting to be consumed.</p>
<p>Walls kill situation awareness and this leads to severe loss of information for the entire project team.</p>
<p><strong>Situation awareness enables spontaneous collaboration.</strong></p>
<ul>
<li>If you spot a problem, you can interrupt (stop the line) and deal with it</li>
<li>If a team mate needs help, she can just ask for it (no barriers like chat, email, or even getting up from the desk)</li>
<li>If a discussion nearby sparks your interest because you think you can learn something or add value, you just open your mouth</li>
</ul>
<p>But you&#8217;ll miss out on these opportunities if your team setup does not foster situation awareness. Make sure you’re able to spot the trouble of the mother getting off that train and that nothing prevents you from jumping in and lending a hand.</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/stop-reflect-adapt-the-3-steps-to-stop-writing-bad-code' rel='bookmark' title='Stop. Reflect. Adapt. The 3 Steps to Stop Writing Bad Code'>Stop. Reflect. Adapt. The 3 Steps to Stop Writing Bad Code</a></li>
<li><a href='http://www.agileweboperations.com/stop-being-so-busy-putting-out-fires-that-theres-no-time-for-fire-prevention' rel='bookmark' title='Stop Being So Busy Putting Out Fires That There’s No Time For Fire Prevention!'>Stop Being So Busy Putting Out Fires That There’s No Time For Fire Prevention!</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/zozGtaFnM0E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/stop-missing-out-on-collaboration-opportunities-by-creating-situation-awareness/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/stop-missing-out-on-collaboration-opportunities-by-creating-situation-awareness</feedburner:origLink></item>
		<item>
		<title>How to set up wordpress on ec2 using puppet and git</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/jroRfclhL3E/how-to-set-up-wordpress-on-ec2-using-puppet-and-git</link>
		<comments>http://www.agileweboperations.com/how-to-set-up-wordpress-on-ec2-using-puppet-and-git#comments</comments>
		<pubDate>Thu, 29 Mar 2012 06:54:42 +0000</pubDate>
		<dc:creator>Dan Ackerson</dc:creator>
				<category><![CDATA[Tools & Technology]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3754</guid>
		<description><![CDATA[Greg Walters Having started out on a Joyent appliance, migrating to Linode, and, finally, to Amazon with a Bitnami stack, we noticed the common pain of manually configuring each of these environments. Bitnami caused us an even bigger headache by being very difficult to update (apt-get doesn&#8217;t update the bitnami wrapped AMP stack). We decided [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><div class="wp-caption alignleft" style="width: 320px">
	<img src="http://farm3.staticflickr.com/2324/2082577364_22e9c8810f_n.jpg" alt="Daily Standup" border="0" /><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank"></a><a href="http://www.flickr.com/photos/gregwalters/2082577364/" title="Puppet Masters (Burma)" target="_blank">Greg Walters</a></small>
	<p class="wp-caption-text"> </p>
</div>Having started out on a <a href="http://www.agileweboperations.com/kent-langley-talks-about-joyent-their-new-accelerators-and-their-use-opensolaris">Joyent appliance</a>, migrating to Linode, and, finally, to Amazon with a <a href="http://www.agileweboperations.com/migrate-your-wordpress-blog-to-a-bitnami-ec2-instance">Bitnami stack</a>, we noticed the common pain of manually configuring each of these environments. Bitnami caused us an even bigger headache by being very difficult to update (apt-get doesn&#8217;t update the bitnami wrapped AMP stack). We decided to get full control of our box by setting up a stock Debian LAMP stack on AWS using Puppet and git to manage our sites. Here&#8217;s a gentle introduction on how we did it.</p>
<h2>AWS and unfuddle</h2>
<p>Setup a <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/concepts_micro_instances.html">t1.micro instance with aws.amazon.com</a> for your blog. Remember, if you don&#8217;t have an AWS account yet, this micro instance is free for 12 months! We get ~20KPIs per month so the micro instance is just enough to cover this (with significant tuning).</p>
<p>Sign up with <a href="http://unfuddle.com/about/tour/source">unfuddle.com</a> for 200MB worth of free, <strong>private</strong> git repositories.</p>
<h2>Install &#038; configure puppet standalone</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> puppetmaster puppet</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hosts
127.0.0.1 master.successfulengineering.com
...</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>puppet<span style="color: #000000; font-weight: bold;">/</span>puppet.conf
...
<span style="color: #7a0874; font-weight: bold;">&#91;</span>agent<span style="color: #7a0874; font-weight: bold;">&#93;</span>
server = master.successfulengineering.com</pre></div></div>

<h2>Setup your git repo</h2>
<p>unfuddle has a <a href="http://successfulengineering.unfuddle.com/docs/topics/git_access?repository=2">nice help document</a> for this, but the gist is basically to add the base puppet installation directory on your instance to unfuddle&#8217;s git repo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>puppet
$ <span style="color: #c20cb9; font-weight: bold;">git</span> remote add unfuddle <span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>successfulengineering.unfuddle.com:successfulengineering<span style="color: #000000; font-weight: bold;">/</span>puppetmaster.git
$ <span style="color: #c20cb9; font-weight: bold;">git</span> config remote.unfuddle.push refs<span style="color: #000000; font-weight: bold;">/</span>heads<span style="color: #000000; font-weight: bold;">/</span>master:refs<span style="color: #000000; font-weight: bold;">/</span>heads<span style="color: #000000; font-weight: bold;">/</span>master
$ <span style="color: #c20cb9; font-weight: bold;">git</span> add <span style="color: #000000; font-weight: bold;">*</span>
$ <span style="color: #c20cb9; font-weight: bold;">git</span> commit <span style="color: #660033;">-am</span> <span style="color: #ff0000;">&quot;initial commit&quot;</span>
$ <span style="color: #c20cb9; font-weight: bold;">git</span> push unfuddle master</pre></div></div>

<p>Now, you can clone this to your local dev env and start creating manifests! After you push your local changes to git, do a <code>git pull</code> on the remote instance. To apply manifest updates while building up your site, use the <code>--test</code> option (otherwise puppet will start in daemon mode).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ puppet agent <span style="color: #660033;">--test</span></pre></div></div>

<p>Congratulations! Now you&#8217;ve got a running puppet standalone environment backed with a git repository. Time for the real work.</p>
<h2>Base environment (L)</h2>
<p>Here&#8217;s what our nodes.pp file looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">node default <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#9966CC; font-weight:bold;">include</span> setenv
  <span style="color:#9966CC; font-weight:bold;">include</span> ntp
  <span style="color:#9966CC; font-weight:bold;">include</span> users
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">include</span> mysql
  <span style="color:#9966CC; font-weight:bold;">include</span> apache
  <span style="color:#9966CC; font-weight:bold;">include</span> php
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">include</span> blogs
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>The <code>setenv</code> module gets my default packages installed (htop, unzip, wget, git-core, vim, fail2ban), sets up vi as the default editor, and installs a default locale at <code>/etc/default/locale</code> as:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">LANG</span>=<span style="color: #ff0000;">&quot;en_US.UTF-8&quot;</span>
<span style="color: #007800;">LC_ALL</span>=<span style="color: #ff0000;">&quot;en_US.UTF8&quot;</span></pre></div></div>

<p>NTP should be obvious, and the <code>users</code> module ensures Matthias and my users&#8217; exist with the appropriate SSH keys and admin group roles.</p>
<h2>Base applications (AMP)</h2>
<p>Now that our base Linux environment is setup, let&#8217;s get to the &#8216;AMP&#8217; section.<br />
We setup our base MySQL server with the following manifest:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> mysql <span style="color:#006600; font-weight:bold;">&#123;</span>
  package <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;mysql-server&quot;</span>:
    <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present,
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  service <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;mysql&quot;</span>:
    <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> running,
    enable <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
    hasstatus <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Package<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;mysql-server&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, 
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  file <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;/etc/mysql/my.cnf&quot;</span>:
    <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present,
    content <span style="color:#006600; font-weight:bold;">=&gt;</span> template<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;mysql/my.cnf.erb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>,
    notify <span style="color:#006600; font-weight:bold;">=&gt;</span> Service<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;mysql&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Package<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;mysql-server&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;set mysql root password&quot;</span>:
    path <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;/usr/bin&quot;</span>,
    <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysql -uroot -p${root_mysql_password}&quot;</span>,
    command <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysqladmin -u root password ${root_mysql_password}&quot;</span>,
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Service<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'mysql'</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
  <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>The <code>$root_mysql_password</code> variable is declared in our <code>site.pp</code> file.</p>
<p>Apache is a bit more complex:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> apache <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#9966CC; font-weight:bold;">include</span> apache::install
  <span style="color:#9966CC; font-weight:bold;">include</span> apache::conf
  <span style="color:#9966CC; font-weight:bold;">include</span> apache::sites
  <span style="color:#9966CC; font-weight:bold;">include</span> apache::mods
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>For sites and mods, I define a custom method to allow us to easily enable/disable new sites and required modules. Here&#8217;s a snippet from the <code>apache::mods</code> class:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  define mods_stats <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#ff6633; font-weight:bold;">$ensure</span> = <span style="color:#996600;">'present'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#9966CC; font-weight:bold;">case</span> <span style="color:#ff6633; font-weight:bold;">$ensure</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
      <span style="color:#996600;">'present'</span> : <span style="color:#006600; font-weight:bold;">&#123;</span>
        <span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;/usr/sbin/a2enmod $name&quot;</span>:
          <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;/bin/sh -c '[ -L /etc/apache2/mods-enabled/$name.load ] <span style="color:#000099;">\\</span>
            &amp;&amp; [ /etc/apache2/mods-enabled/${name}.load -ef /etc/apache2/mods-available/${name}.load ]'&quot;</span>,
            notify <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">Exec</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;force-reload-apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
 	    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Package<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
        <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#996600;">'absent'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>
        <span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;/usr/sbin/a2dismod $name&quot;</span>:
          onlyif <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;/bin/sh -c '[ -L /etc/apache2/mods-enabled/${name}.load ] <span style="color:#000099;">\\</span>
            &amp;&amp; [ /etc/apache2/mods-enabled/${name}.load -ef /etc/apache2/mods-available/${name}.load ]'&quot;</span>,
            notify <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">Exec</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;force-reload-apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
            <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Package<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
        <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#006600; font-weight:bold;">&#125;</span>
      default: <span style="color:#006600; font-weight:bold;">&#123;</span> err <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#996600;">&quot;Unknown ensure value: '$ensure'&quot;</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  apache::mods::mods_stats <span style="color:#006600; font-weight:bold;">&#123;</span> 
    <span style="color:#996600;">&quot;rewrite&quot;</span> : <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present, 
    notify <span style="color:#006600; font-weight:bold;">=&gt;</span> Service<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, 
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  apache::mods::mods_stats <span style="color:#006600; font-weight:bold;">&#123;</span> 
    <span style="color:#996600;">&quot;deflate&quot;</span> : <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present, 
    notify <span style="color:#006600; font-weight:bold;">=&gt;</span> Service<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, 
  <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Although the definition of <code>mods_stats</code> may seem a bit lengthy, it pays itself back pretty quickly when you can easily enable/disable any mods throughout your manifests.</p>
<p>The PHP module is more of the same, using puppet templates to control the memory allocation for <code>apc.ini</code> and <code>php.ini</code>. <a href="mailto:da@agileweboperations.com">Email me</a> for more details.</p>
<h2>WordPress sites</h2>
<p>So we have our default LAMP stack setup and initialized with our passwords, modules, and memory constraints. Let&#8217;s get down to business &#8211; namely, the <code>blogs</code> module.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> blogs <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#9966CC; font-weight:bold;">include</span> blogs::agileweboperations
  <span style="color:#9966CC; font-weight:bold;">include</span> blogs::successfulengineering
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Let&#8217;s have a look at this blog&#8217;s manifest:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> blogs::agileweboperations <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#008000; font-style:italic;"># Apache website</span>
  file <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;/etc/apache2/sites-available/agileweboperations.com&quot;</span>:
      <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present,
      owner   <span style="color:#006600; font-weight:bold;">=&gt;</span> root,
      group   <span style="color:#006600; font-weight:bold;">=&gt;</span> root,
      mode    <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">644</span>,
      source <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;puppet:///modules/blogs/etc/apache2/sites-available/agileweboperations.com.conf&quot;</span>,
      <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Package<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
      notify <span style="color:#006600; font-weight:bold;">=&gt;</span> Service<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;apache&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
  <span style="color:#006600; font-weight:bold;">&#125;</span>
  apache::sites::site <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;agileweboperations.com&quot;</span> : <span style="color:#9966CC; font-weight:bold;">ensure</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> present <span style="color:#006600; font-weight:bold;">&#125;</span>  
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;setup awo db&quot;</span>:
    path <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;/usr/bin&quot;</span>,
    <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysql -uroot -p${root_mysql_password} ${awo_mysql_db}&quot;</span>,
    command <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysql -uroot -p${root_mysql_password} -e <span style="color:#000099;">\&quot;</span><span style="color:#000099;">\</span>
CREATE DATABASE ${awo_mysql_db} DEFAULT CHARACTER SET UTF8;<span style="color:#000099;">\&quot;</span>&quot;</span>,
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">Exec</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;set mysql root password&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
  <span style="color:#006600; font-weight:bold;">&#125;</span>  
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;setup awo user&quot;</span>:
    path <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;/usr/bin&quot;</span>,
    <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysql -u${awo_mysql_user} -p${awo_mysql_pass}&quot;</span>,
    command <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;mysql -uroot -p${root_mysql_password} -e <span style="color:#000099;">\&quot;</span><span style="color:#000099;">\</span>
CREATE USER '${awo_mysql_user}'@'localhost' IDENTIFIED BY '${awo_mysql_pass}'; <span style="color:#000099;">\</span>
GRANT ALL PRIVILEGES ON ${awo_mysql_db}.* TO '${awo_mysql_user}'@'localhost' WITH GRANT OPTION;<span style="color:#000099;">\&quot;</span>&quot;</span>,
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">Exec</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;setup awo db&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
  <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>This puts all the pieces of the puzzle together: our custom apache configuration, enabling the site with an easy one-liner, and bootstrapping the WordPress database and user (only if they don&#8217;t exist).</p>
<p>We don&#8217;t do a WordPress install per-se. We&#8217;ve been running this site for almost four years, and we have it in a git repository (conveniently hosted next to the puppet repo with unfuddle). All the migrations we&#8217;ve performed in the past have shown us the &#8220;famous 5-minute installation&#8221; can&#8217;t beat the ease of a <code>git clone</code>.</p>
<p>Crafting and finding the above manifests on the Internet took me about 12 hours total work effort, but I have a few years of puppet experience under my belt as well. Hopefully, this guide gives you some ideas and pointers about how to get control of your WordPress environment with puppet. Let me know if you have any questions!</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/configuration-management-introduction-to-puppet' rel='bookmark' title='Configuration Management: Introduction to Puppet'>Configuration Management: Introduction to Puppet</a></li>
<li><a href='http://www.agileweboperations.com/puppet-vs-capistrano-short-comparison' rel='bookmark' title='Puppet vs. Capistrano &#8211; a short comparison'>Puppet vs. Capistrano &#8211; a short comparison</a></li>
<li><a href='http://www.agileweboperations.com/migrate-your-wordpress-blog-to-a-bitnami-ec2-instance' rel='bookmark' title='Migrate Your WordPress Blog to a Bitnami EC2 Instance'>Migrate Your WordPress Blog to a Bitnami EC2 Instance</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/jroRfclhL3E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/how-to-set-up-wordpress-on-ec2-using-puppet-and-git/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/how-to-set-up-wordpress-on-ec2-using-puppet-and-git</feedburner:origLink></item>
		<item>
		<title>Work with us as a Senior Web Application Engineer (Ruby on Rails)</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/WgBfH6pBFpo/work-with-us-as-senior-web-application-engineer-ruby-on-rails</link>
		<comments>http://www.agileweboperations.com/work-with-us-as-senior-web-application-engineer-ruby-on-rails#comments</comments>
		<pubDate>Thu, 22 Mar 2012 13:23:37 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web operations]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3743</guid>
		<description><![CDATA[Is your growth being stifled by your current company? Time to find a place where you can assume new responsibilities and pickup new technical skills. If you have the feeling that you cannot grow in your current job, it&#8217;s time to move on. Staying put not only means getting sidelined and frustrated, but even worse, [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Is your growth being stifled by your current company? Time to find a place where you can assume new responsibilities and pickup new technical skills.</p>
<p>If you have the feeling that you cannot grow in your current job, it&#8217;s time to move on. Staying put not only means getting sidelined and frustrated, but even worse, your technical skills will become crusty and outdated. Put the fun back into working and learning in an environment which challenges you and values your contribution.</p>
<h3>The Environment</h3>
<p>At gutefrage.net, you&#8217;ll find a challenging and open environment which puts you back in the driver&#8217;s seat of your own growth. You&#8217;ll build and run web applications <strong>scaling to millions of users</strong> while earning real money!</p>
<h3>The Tools</h3>
<p>We at gutefrage.net believe in the value of experience, and know that a seasoned Web Application Engineer can thrive in any language or web framework. We&#8217;re currently looking for support in growing our <strong>Ruby On Rails</strong> based portals. If you&#8217;re fluent in any modern web application framework (like Zend, Django, or even Ruby On Rails), <strong>Test Driven Development</strong> is second nature, and you know your way around a Linux box (maybe even using <strong>configuration management tools</strong>, preferably Chef), we should talk.</p>
<h3>The Location</h3>
<p>gutefrage.net is located in the <strong>center of Munich, Germany</strong> and belongs to the well established Georg von Holtzbrinck publishing group, which is active in more than 80 countries.</p>
<h3>Contact Us!</h3>
<p>If you want to help expand our well established and fast growing web sites www.pointoo.de or www.helpster.de, please contact us right away. Either send me a <strong>DM <a href="http://twitter.com/mmarschall">@mmarschall</a></strong> or use the offical route by mailing to <a href="mailto://jobs@gutefrage.net">jobs@gutefrage.net</a>. Of course, we&#8217;ll keep your inquiry confidential &#8211; no one should get hurt.</p>
<p>I&#8217;m looking forward to hearing from you!</p>
<p>See, what we build:<br />
<a href="http://www.pointoo.de">www.pointoo.de</a><br />
<a href="http://www.helpster.de">www.helpster.de</a></p>
<p>Find out what your future colleagues are writing about:<br />
Blogs: <a href="http://www.agileweboperations.com">www.agileweboperations.com</a> and <a href="http:// www.nistu.de">www.nistu.de</a><br />
Follow us on Twitter: <a href="http://twitter.com/mmarschall">@mmarschall</a>, <a href="http://twitter.com/nistude">@nistude</a></p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook' rel='bookmark' title='How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook'>How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook</a></li>
<li><a href='http://www.agileweboperations.com/role-based-permissions-for-your-ruby-on-rails-application' rel='bookmark' title='Aegis: Role-based Permissions for your Ruby on Rails application'>Aegis: Role-based Permissions for your Ruby on Rails application</a></li>
<li><a href='http://www.agileweboperations.com/setting-up-a-test-database-on-a-ruby-on-rails-continuous-integration-server-using-sql-instead-of-schemarb' rel='bookmark' title='Setting up a test database on a ruby on rails continuous integration server using SQL instead of schema.rb'>Setting up a test database on a ruby on rails continuous integration server using SQL instead of schema.rb</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/WgBfH6pBFpo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/work-with-us-as-senior-web-application-engineer-ruby-on-rails/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/work-with-us-as-senior-web-application-engineer-ruby-on-rails</feedburner:origLink></item>
		<item>
		<title>Agile Web Development &amp; Operations: What do YOU want it to be?</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/V6mHjXar824/survey-2012</link>
		<comments>http://www.agileweboperations.com/survey-2012#comments</comments>
		<pubDate>Fri, 16 Mar 2012 16:26:20 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3737</guid>
		<description><![CDATA[For nearly four years Dan and I have shared our experiences and ideas about agile development and DevOps. We would like to ask you, our dear readers, how we could help you to become even more agile and have more fun doing your job. Please help us to understand your needs better by taking our [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>For nearly four years Dan and I have shared our experiences and ideas about agile development and DevOps.</p>
<p>We would like to ask <em>you</em>, our dear readers, how we could help you to become even more agile and have more fun doing your job.</p>
<p>Please help us to understand your needs better by taking our short survey at: <a href="http://www.surveymonkey.com/s/MKYQPL5">http://www.surveymonkey.com/s/MKYQPL5</a>.</p>
<p>We&#8217;d love to hear from you!</p>
<p>Dan &#038; Matthias</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/about' rel='bookmark' title='About Agile Web Development &amp; Operations'>About Agile Web Development &#038; Operations</a></li>
<li><a href='http://www.agileweboperations.com/agile-web-operations-what-do-you-want-it-to-be' rel='bookmark' title='Agile Web Operations: What do YOU want it to be?'>Agile Web Operations: What do YOU want it to be?</a></li>
<li><a href='http://www.agileweboperations.com/1st-birthday-best-of-agile-web-operations' rel='bookmark' title='1st Birthday: Best of Agile Web Operations'>1st Birthday: Best of Agile Web Operations</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/V6mHjXar824" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/survey-2012/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/survey-2012</feedburner:origLink></item>
		<item>
		<title>How over-capacity hurts your scalability</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/PnMn5cd49N0/how-over-capacity-hurts-your-scalability</link>
		<comments>http://www.agileweboperations.com/how-over-capacity-hurts-your-scalability#comments</comments>
		<pubDate>Thu, 01 Mar 2012 20:20:33 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3730</guid>
		<description><![CDATA[You’re a lucky guy. Your web app runs on the biggest server available. It takes a mere 10% CPU and has tons of free memory available. Everything is great. Well, not everything… One tiny, little detail might jump out of the darkness at the worst possible moment… That tiny, little detail is a collection of [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><div class="wp-caption alignleft" style="width: 240px">
	<img src="http://awostatic.agileweboperatio.netdna-cdn.com/wp-content/uploads/2012/02/overcapacity-212x300.gif" alt="" title="overcapacity" width="212" height="300" class="aligncenter size-medium wp-image-3732">
	<p class="wp-caption-text"> </p>
</div>You’re a lucky guy. Your web app runs on the biggest server available. It takes a mere 10% CPU and has tons of free memory available. Everything is great. Well, not everything… One tiny, little detail might jump out of the darkness at the worst possible moment…</p>
<p>That tiny, little detail is a collection of inefficiencies you’ve introduced over time. On a dedicated, big iron server, it doesn&#8217;t really hurt if a database query takes 0.2 sec. And you didn&#8217;t care that the very same query took 2s on your local development box, because you knew it would be &#8220;fast enough&#8221; (™) on the live site. Well, you’re right&#8230;right up to the point where your application has to scale, when you’ve got enough users on the system that even your &#8220;big iron&#8221; begins to cough and sputter.</p>
<h3>Scale-up is not an option if you’re already using top-of-the line hardware</h3>
<p>If you’re already running the biggest server available, it’s really hard to scale that box up. So, your remaining options are:</p>
<ul>
<li>Scale-out to other servers</li>
<li>Optimize your code</li>
</ul>
<p>Both options are tedious &#8211; especially if your site is under heavy fire. It would be so nice to just upgrade to a bigger server and buy yourself a couple of weeks to optimize your app and prepare for scaling.</p>
<h3>Avoiding over-capacity</h3>
<p>One way to avoid crashing into such a road-block is to run your application on smaller hardware from day one. Even if you’ve got big iron available, it’s a good idea to put your web app inside a virtual machine, limiting its resources. By doing this, you’ll get early warnings of scalability issues. If you write a query which takes too long, you’ll notice on the same day. If your application gets a load spike, you have some breathing room to scale it up while you’re preparing the scale-out architecture. Working with constrained resources is a good thing because it forces you to do a better job right from the start!</p>
<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/PnMn5cd49N0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/how-over-capacity-hurts-your-scalability/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/how-over-capacity-hurts-your-scalability</feedburner:origLink></item>
		<item>
		<title>The Daily Standup: One step closer to the goal</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/J7mPQZDj02U/the-daily-standup-one-step-closer-to-the-goal</link>
		<comments>http://www.agileweboperations.com/the-daily-standup-one-step-closer-to-the-goal#comments</comments>
		<pubDate>Sun, 26 Feb 2012 07:41:53 +0000</pubDate>
		<dc:creator>Dan Ackerson</dc:creator>
				<category><![CDATA[Kanban & Agile]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[daily standup]]></category>
		<category><![CDATA[meetings]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3724</guid>
		<description><![CDATA[drewgstephens Almost 9:30am. Time for our stand-up. What did I finish yesterday? What do I plan on finishing today? What&#8217;s stopping me? The daily routine of the morning stand-up is so ingrained, I go through the above liturgy without conscious thought. For me, the stand-up provides a focused center for the team, our morning huddle. [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><div class="wp-caption alignleft" style="width: 500px">
	<img src="http://farm4.staticflickr.com/3008/3885727769_1942444ba0.jpg" alt="Daily Standup" border="0" /><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank"></a><a href="http://www.flickr.com/photos/dinomite/3885727769/" title="Drew Stephens" target="_blank">drewgstephens</a></small>
	<p class="wp-caption-text"> </p>
</div>Almost 9:30am. Time for our stand-up. What did I finish yesterday? What do I plan on finishing today? What&#8217;s stopping me?</p>
<p>The daily routine of the morning stand-up is so ingrained, I go through the above liturgy without conscious thought. For me, the stand-up provides a focused center for the team, our morning huddle. We look each other in the eyes, see how we&#8217;re feeling &#8211; we hear in each others&#8217; voices strong commitment or uncertain hesitation. We lean on each other for support and promise ourselves that at the end of the day we will be one step closer to the goal.</p>
<p>I recently spiced up our daily by introducing a <a href="http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&#038;field-keywords=medicine+ball">medicine ball</a> as a speaking token. This token does several things:</p>
<ul>
<li>while holding it, you go through the 3 responses quicker (the thing weighs over 12 lbs!)</li>
<li>you know how heavy that ball is, so you let your fellow devs&#8217; report their status w/o interrupting</li>
<li>it&#8217;s a ball &#8211; it&#8217;s fun!</li>
</ul>
<p>I got the idea after reading an excellent Wall Street Journal article on the subject <a href="http://online.wsj.com/article/SB10001424052970204652904577193460472598378.html">&#8220;More Meetings Are Stand-Up Jobs&#8221;</a>. Check it out &#8211; you&#8217;ll find several other ideas on how to break up the monotony of your daily.</p>
<p>Remember that the daily stand-up isn&#8217;t just another meeting. It&#8217;s your team huddle. It&#8217;s your commitment to getting a step closer to your team&#8217;s goal.</p>
<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/J7mPQZDj02U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/the-daily-standup-one-step-closer-to-the-goal/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/the-daily-standup-one-step-closer-to-the-goal</feedburner:origLink></item>
		<item>
		<title>How to make a team self-organizing</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/wz2w3HxgCis/how-to-make-a-team-self-organizing</link>
		<comments>http://www.agileweboperations.com/how-to-make-a-team-self-organizing#comments</comments>
		<pubDate>Tue, 14 Feb 2012 20:08:28 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Kanban & Agile]]></category>
		<category><![CDATA[self-organization]]></category>
		<category><![CDATA[visual management]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3674</guid>
		<description><![CDATA[jurvetson Self-organizing teams perform better than micro-managed ones. The ability to really make a difference motivates the team members and makes everyone contribute his best effort. But how can we create self-organizing teams when everyone is used to hierarchical command and control patterns? To be able to self-organize and perform optimally, a few basics need [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><div class="wp-caption alignleft" style="width: 240px">
	<img src="http://farm3.static.flickr.com/2162/2542450115_6576d19185_m.jpg" alt="Stream of Consciousness" border="0" /><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank"></a><a href="http://www.flickr.com/photos/44124348109@N01/2542450115/" title="jurvetson" target="_blank">jurvetson</a></small>
	<p class="wp-caption-text"> </p>
</div>Self-organizing teams perform better than micro-managed ones. The ability to really make a difference motivates the team members and makes everyone contribute his best effort. But how can we create self-organizing teams when everyone is used to hierarchical command and control patterns?</p>
<p>To be able to self-organize and perform optimally, a few basics need to be in place. With the proper foundation, the whole team can organize themselves and perform better.<br />
<H3>Clear Direction</h3>
<p>The most fundamental requirement for a team to be able to self-organize is a clear direction. Only if everyone within the team knows exactly what the overall goals are can they make the right trade-off decisions. Typically, the managers know much more about the strategy of the company and the current goals than any team member. In a command and control pattern this is assumed to be OK as all decisions are made by the manager. But, in a self-organized team, the team members are supposed to take decisions themselves. They can only make good decisions if they know enough about the current goals as well as the underlying strategy. Management has to make sure that the team is in the know. This requires trust and openness, two things which do not come easily to some managers.<br />
<H3>Visual Management</h3>
<p>The second success factor for self-organized teams is visual management. If every individual team member is supposed to take good decisions all the time, they need to know more than just the goals and strategy. They need to know the current situation as well. Setup lots of visual controls for the current status: task boards, build indicators, performance graphs, … everything possible. It&#8217;s a must that everyone can always see the real-time status.<br />
<H3>Ownership</h3>
<p>You need a team of individuals who care. That&#8217;s very simple. If your people don&#8217;t care about their work, you&#8217;re in trouble anyways. But, if you let these same people take over critical decision making, your troubles will multiply. If you give control to your team, they need to be able and willing to take up ownership. Initially, this is pretty hard; almost all problems seem to be out of the team&#8217;s hands and they raise them as impediments. But, over time, they learn to take ownership for more and more of these problems. This speeds things up dramatically and makes the team even more successful.</p>
<p>Moving from micro-managed to self-organizing teams will lead to both higher motivation and performance. In order to succeed, you must set a clear direction, make the current status visible, and build ownership directly into your team.</p>
<p>What are your experiences in making teams self-organized? Let us know in the comments below!</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/empower-your-team-you-wont-regret-it' rel='bookmark' title='Empower Your Team – You Won’t Regret It'>Empower Your Team – You Won’t Regret It</a></li>
<li><a href='http://www.agileweboperations.com/how-digital-agile-management-tools-make-you-blind-and-how-a-physical-kanban-board-can-help-you-see-again' rel='bookmark' title='How Digital Agile Management Tools Make You Blind (And How A Physical Kanban Board Can Help You See Again)'>How Digital Agile Management Tools Make You Blind (And How A Physical Kanban Board Can Help You See Again)</a></li>
<li><a href='http://www.agileweboperations.com/a-luxury-problem-how-emerging-iterations-eat-team-commitment-for-breakfast' rel='bookmark' title='A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast'>A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/wz2w3HxgCis" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/how-to-make-a-team-self-organizing/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/how-to-make-a-team-self-organizing</feedburner:origLink></item>
		<item>
		<title>The DevOps Dudes</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/1nXDVivQz8c/devops-dudes-comic-strip-2012-02-06</link>
		<comments>http://www.agileweboperations.com/devops-dudes-comic-strip-2012-02-06#comments</comments>
		<pubDate>Mon, 06 Feb 2012 20:23:25 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DevOps Dudes]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3653</guid>
		<description><![CDATA[After DevOps Borat and BroOps it&#8217;s time for The DevOps Dudes! Click through to see it full size Other posts: DevOps is NOT a Job Description DevOps: Why Silos Suck And How To Break Them Do you have a DevOps Culture?]]></description>
			<content:encoded><![CDATA[<p></p><p>After <a href="https://twitter.com/#!/DEVOPS_BORAT" title="DevOps Borat" target="_blank">DevOps Borat</a> and <a href="http://www.hollenback.net/index.php/BROFESTO" title="The BroOps Brofesto " target="_blank">BroOps</a> it&#8217;s time for <strong>The DevOps Dudes</strong>!</p>
<div id="attachment_3667" class="wp-caption aligncenter" style="width: 300px">
	<a  href="#" onClick="MyWindow=window.open('http://awostatic.agileweboperatio.netdna-cdn.com/wp-content/uploads/2012/02/devops-dudes-001.gif','The DevOps Dudes Cartoon 001','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1100,height=205'); return false;" ><img src="http://awostatic.agileweboperatio.netdna-cdn.com/wp-content/uploads/2012/02/devops-dudes-001-300x54.gif" alt="" title="Click through to see it full size" width="300" height="54" class="size-medium wp-image-3667" /></a>
	<p class="wp-caption-text">Click through to see it full size</p>
</div>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/devops-is-not-a-job-description' rel='bookmark' title='DevOps is NOT a Job Description'>DevOps is NOT a Job Description</a></li>
<li><a href='http://www.agileweboperations.com/devops-why-silos-suck-and-how-to-break-them' rel='bookmark' title='DevOps: Why Silos Suck And How To Break Them'>DevOps: Why Silos Suck And How To Break Them</a></li>
<li><a href='http://www.agileweboperations.com/do-you-have-a-devops-culture' rel='bookmark' title='Do you have a DevOps Culture?'>Do you have a DevOps Culture?</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/1nXDVivQz8c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/devops-dudes-comic-strip-2012-02-06/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/devops-dudes-comic-strip-2012-02-06</feedburner:origLink></item>
		<item>
		<title>Optimizing Offshore Software Development with Agile</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/t4QDfNGqNJM/optimizing-offshore-software-development-with-agile</link>
		<comments>http://www.agileweboperations.com/optimizing-offshore-software-development-with-agile#comments</comments>
		<pubDate>Wed, 11 Jan 2012 06:04:46 +0000</pubDate>
		<dc:creator>Dan Ackerson</dc:creator>
				<category><![CDATA[Kanban & Agile]]></category>
		<category><![CDATA[offshore]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3618</guid>
		<description><![CDATA[This is a guest post by Prasad Chaudhari, freelance java consultant. He was appointed as a project manager for the project mentioned below and played a role of ScrumMaster. mattwilde66 The first prerequisite to going agile offshore is a mature and realistic understanding of agile at home. We&#8217;ve been practicing scrum on-site for several years [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This is a guest post by <a href="https://www.xing.com/profile/Prasad_Chaudhari">Prasad Chaudhari</a>, freelance java consultant. He was appointed as a project manager for the project mentioned below and played a role of ScrumMaster.</em><br />
<div class="wp-caption alignleft" style="width: 240px">
	<br />
<a href="http://www.flickr.com/photos/propperbo66/6662265287/in/pool-97035580@N00/" title="Britannia" target="_blank"><img src="http://farm8.staticflickr.com/7161/6662265287_babfbc9e25_m.jpg" alt="Britannia" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a><a href="http://www.flickr.com/photos/propperbo66/6662265287/in/pool-97035580@N00/" title="Wonderlane" target="_blank">mattwilde66</a></small><br />

	<p class="wp-caption-text"> </p>
</div>The first prerequisite to going agile offshore is a mature and realistic understanding of agile at home. We&#8217;ve been practicing scrum on-site for several years including trained Product Owners (POs) and ScrumMasters, both of whom employ and leverage scrum artifacts. </p>
<p>Locally, we have six scrum teams: five software development teams, and one IT operations team. Each team has a sprint backlog, scrum board and burn-down chart. Automated tests and continuous integration are part of the daily business. </p>
<p>Our company has a universal understanding and acceptance of the <a href="http://www.processexcellencenetwork.com/business-process-management-bpm/articles/lean-and-agile-value-chain-management-a-guide-to-t/">Lean and Agile Value Chain</a>, beginning with rough user concepts and ending with customer delivery. Without this basic building block, as the theory of constraints suggests, there will either be many unfinished stories in progress (i.e., because operations cannot make regular releases), or developers will starve for stories (because the business is unable to prioritize).</p>
<p>Last year, we decided to grow our software development capability by adding another scrum team in India. After a few iterations, reflections and process adaptations, the remote team became productive. We&#8217;ve been successfully running agile offshore for over a year now, and I&#8217;d like to share our key learnings.</p>
<h3>Can offshore teams really be agile?</h3>
<p>If it&#8217;s important to have a true understanding of agile and scrum on-site, it is absolutely critical to ensure the offshore team members have internalized the concepts of agile software development. Just knowing what scrum artifacts are, doesn&#8217;t necessarily mean that the team understands agile methodology. Every team member must comprehend the purpose behind each artifact. During the initial sprints, we explained at-lengths the purpose of each artifact and encouraged feedback sessions before each meeting to spot misunderstandings early.</p>
<p>The offshore team&#8217;s organization structure is the next thing to check. Usually, offshore service providers are structured hierarchically. During project resource staffing, we ensured that the organizational roles would not conflict with the project roles. Our employees are placed within one of three levels of organizational hierarchy. After being hired, new colleagues are briefed about the importance of their scrum role within a project, and how it does not affect their career progression within the company. </p>
<p>During every scrum meeting, we encourage all team members to speak openly about the project rather than only few member speaking for everybody. This frees up the more senior resources for more important architecture work and improves productivity.<br />
Finally, the entire team cannot deliver quality if QA isn&#8217;t properly integrated. Testers must be empowered to ensure the delivery as per the <em>definition of done</em>. At the same time, they need to know that their job is not only to report and retest bugs, but deliver quality software together with the team.</p>
<h3>Do offshore teams need extra scrum artifacts?</h3>
<p><img src="http://awostatic.agileweboperatio.netdna-cdn.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-10-at-7.43.27-AM.png" alt="" title="" width="738" height="284" class="aligncenter size-full wp-image-3619" /><br />
We use the standard scrum artifacts. Initially, we omitted the story preview meeting due to the scarcity of time available for POs, but we soon had to hold it in order to get better prepared stories for the &#8220;planning meeting 2&#8243;. We observed a very positive impact of stakeholder review on the productivity and morale of the team. Especially for long running (10 months) migration projects like ours, where the offshore team is not co-located with the business, the stakeholder review is a powerful artifact. Stakeholder interest for this meeting can be generated by asking them for what they would like to see/hear, adopting the presentation to their interests, or by encouraging them to click around the software. </p>
<p>Finally, if multiples teams are working on a shared code base, a scrum of scrums is very useful. Everyday, a member from each team visits this common stand up with representatives from the other teams. Each participant explains what their team is doing and if the team&#8217;s current activity might block other teams from working.</p>
<h3>The Scrum Master Location Dilemma: On-site or offshore?</h3>
<p>Simply put, the ScrumMaster should be located where the most impediments are. For us, most of the project impediments were at on-site. As our infrastructure and processes have been tuned over years to suit our local needs, they did not work well with the special requirements of working with an offshore team. Consider the remote availability of important support tools like Jira, our wiki, test databases, and maven repositories.</p>
<p>As I mentioned before, around 70% of development was done on-site and everybody was working on the same code base so it was critical to integrate all development activities. In our case, the ScrumMaster was on-site and his main task was to ensure that all external impediments like unavailable code repositories, broken builds, and lost database connections were addressed and resolved as soon as possible.</p>
<p>However, as the offshore team grew to 9 developers and 2 testers, the ScrumMaster needed to do this job in two places at once. To solve this dilemma, we created a hybrid system for fulfilling ScrumMaster responsibilities with a shared task list. Assigning these tasks to the offshore team, we made sure that the responsibilities are distinct and did not conflict with each other. This sharing of responsibilities will be expanded upon in the next section.</p>
<h3>Offshore Planning Meetings slow and painful?</h3>
<p>At project kickoff, &#8220;planning meeting 2&#8243; was an incredible test of patience for the on-site participant. A new team, poor story quality and a complex domain made it difficult for offshore team members to make any sure estimates. The root cause of the problem was lack of well-groomed product backlog and story estimates in hours. Additionally, the offshore company management had set KPIs for the team that it should finish all stories to which the team commits during the planning meeting. This measure, taken to improve the productivity of the team, was surely in the back developers&#8217; heads while estimating stories. We solved this problem in multiple ways. At first, by enforcing story preview meetings and making sure the stories are well defined and small. Although it helped considerably, meeting times were still not reasonable.</p>
<p>Initially, we did planning meeting 2 immediately after the planning meeting 1, but later we introduced a gap of few hours between these two meetings. In this gap, the offshore team was given a chance to research, brainstorm and come up with the design. This reduced the time of planning meeting-2, and everybody in the offshore team had a chance to actively take part in the discussion.<br />
We split the offshore team (9 developer and 2 testers) in half and appointed a team lead. To avoid the trap of hierarchy, we called them &#8220;story responsible&#8221; and rotated this role.</p>
<p>Now, planning meeting 1 is done with the entire team, but planning meeting 2 (the detail planning) is done with two teams. This has removed the wasteful pain of an entire offshore team trying (and failing) to plan all stories. With a team lead sharing the ScrumMaster responsibilities, we have also achieved linear scalability. The two team leads take over the moderation of meetings, retrospectives and solving offshore impediments.</p>
<h3>Are you communicating well?</h3>
<p>As we all know, communication is key to any process. Making use of the predefined, scrum artifacts ensures that communication takes place, but it does not ensure the quality of communication. Quality of communication is directly proportional to the quality of interpretation by the receivers. Ambiguous communication is differently interpreted by the individual project team members. We continuously improved our quality of communication by trying different communication channels and feedback loops.</p>
<p>After months of experimenting, we settled upon these three communication channels: Skype for video, telephone line for voice, and &#8220;live meeting&#8221; for desktop sharing. Having an uninterrupted voice connection was vital; especially when 11 people are all taking part in a meeting. Hence, we decided to use a land-line for voice communication instead of Skype or Google talk.</p>
<p>Although telephone calls are more effective than emails, certain documents (like guidelines) need to be written down. Most of the on-site communication was implicit, based on situational awareness and simple co-location &#8211; definitely not enough for an offshore team to start implementation.</p>
<p>Therefore, we discussed the requirements together with the offshore team and asked them to write the final specifications. The on-site team reviewed these during development and after completion to  suggest improvements. To provide a strict framework for the offshore team, we wrote the guidelines for clean-code, pre-commit checklists, and operational wiki notes.</p>
<h3>Creating Situational Awareness</h3>
<p>One of the powerful tools scrum provides is the <a href="http://agilesoftwaredevelopment.com/blog/janusz-gorycki/out-story-board-better-yours">storyboard</a>. Of course, for distributed teams, use of common physical board is not possible, so we use Jira with the excellent <a href="http://www.atlassian.com/software/greenhopper/overview">Greenhopper</a> plug-in. As all 6 teams are working on the same code base, we use <a href="http://www.jetbrains.com/teamcity/">Teamcity</a> for continuous integration and keep the build green by using pre-commit hooks. Individual developer commits are staged on the integration server, compiled with the latest revision of code, and, finally, run against all automated tests. Only after passing all of these quality gates, is the commit pushed to the source code repository for the rest of the team.</p>
<p>To summarize, adopting agile software development processes was instrumental to the success of this project. Developing working software in each sprint provided us, as well as company management, with confidence in the early phase of the project, and retrospectives gave valuable input for fine-tuning the process.</p>
<p>Having a fully functional PO role would have definitely helped in further improving the team’s productivity. But, we successfully achieved linear scalability by splitting offshore team into two and letting both team leads share some of the ScrumMaster responsibilities. For the next project, we are working on a more well-groomed product backlog, and better story point estimations. </p>
<p>Looking back, I believe the most important learning was continually improving every aspect of our development. After all, being agile means ‘readiness for change’, doesn’t it?</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/waterfall-scrum-and-lean-software-development-simulation-as-teaching-platform' rel='bookmark' title='Waterfall, SCRUM and Lean Software Development simulation as teaching platform'>Waterfall, SCRUM and Lean Software Development simulation as teaching platform</a></li>
<li><a href='http://www.agileweboperations.com/how-good-to-great-applies-to-agile-software-development' rel='bookmark' title='How &#8220;Good to Great&#8221; applies to agile software development'>How &#8220;Good to Great&#8221; applies to agile software development</a></li>
<li><a href='http://www.agileweboperations.com/state-of-development-annual-address-on-how-we-ship-software' rel='bookmark' title='State of Development: Annual Address on How We Ship Software'>State of Development: Annual Address on How We Ship Software</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/t4QDfNGqNJM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/optimizing-offshore-software-development-with-agile/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/optimizing-offshore-software-development-with-agile</feedburner:origLink></item>
		<item>
		<title>DevOps is NOT a Job Description</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/Ij3n9rP-H18/devops-is-not-a-job-description</link>
		<comments>http://www.agileweboperations.com/devops-is-not-a-job-description#comments</comments>
		<pubDate>Thu, 08 Dec 2011 18:35:16 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[automated infrastructure]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[sharing]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=3600</guid>
		<description><![CDATA[Wonderlane The DevOps hype produces some strange effects. Not only do tool vendors try to jump on the DevOps band wagon by declaring their products &#8220;DevOps inside&#8221; or listing DevOps as a feature, but companies start to look for a &#8220;DevOp&#8221; in their job ads. Don&#8217;t be misled! Here&#8217;s what DevOps is really about: DevOps [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="wp-caption alignleft" style="width: 240px">
	<br />
<a href="http://www.flickr.com/photos/71401718@N00/2970736472/" title="The Way I See It #17" target="_blank"><img src="http://farm4.static.flickr.com/3176/2970736472_49a549d774_m.jpg" alt="The Way I See It #17" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.agileweboperations.com/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a><a href="http://www.flickr.com/photos/71401718@N00/2970736472/" title="Wonderlane" target="_blank">Wonderlane</a></small><br />

	<p class="wp-caption-text"> </p>
</div>
<p>The DevOps hype produces some strange effects. Not only do tool vendors try to jump on the DevOps band wagon by declaring their products &#8220;DevOps inside&#8221; or listing DevOps as a feature, but companies start to look for a &#8220;DevOp&#8221; in their job ads. Don&#8217;t be misled! Here&#8217;s what DevOps is <em>really</em> about:</p>
<h3>DevOps Is About Culture</h3>
<p>The fundamental basis for successful DevOps is a culture of trust and a feeling of fellowship. Everything starts with how people perceive each other: Is it an &#8220;us vs them&#8221; culture or is it a &#8220;we&#8221;-culture? I don&#8217;t see any job description in here.</p>
<h3>DevOps Is About Automation</h3>
<p>Let&#8217;s look into automation. A lot of the advantages DevOps promises lies in the right use of automation tools. Automation removes variance from your processes and minimizes human error. While you&#8217;ll definitely need people with automation skills and experiences, this is not enough. Automation only &#8211; without the right culture &#8211; will not provide the benefits you hoped for.</p>
<h3>DevOps Is About Measuring</h3>
<p>Then let&#8217;s examine measuring. While measuring is a critical, mandatory practice for improving processes, it&#8217;s not really a job description. Every employee should formulate hypotheses, run experiments, and validate or scrap her ideas. No magic sauce here either.</p>
<h3>DevOps Is About Sharing</h3>
<p>What about sharing? I&#8217;m sorry to say that while the DevOps movement is largely driven by sharing ideas, problems, and tools, this isn&#8217;t really a good job description. It is an attitude more than a task.</p>
<p>If you run through the points, which <em>really</em> define DevOps you&#8217;ll see for yourself how strange it is to try and hire a &#8220;DevOp&#8221;. DevOps is not a job &#8211; DevOps is Culture, Automation, Measurement, and Sharing (CAMS).</p>
<p>Other posts:</p><ul>
<li><a href='http://www.agileweboperations.com/do-you-have-a-devops-culture' rel='bookmark' title='Do you have a DevOps Culture?'>Do you have a DevOps Culture?</a></li>
<li><a href='http://www.agileweboperations.com/2011_escaping_devops_echo_chamber' rel='bookmark' title='2011: Time to Escape the DevOps Echo Chamber'>2011: Time to Escape the DevOps Echo Chamber</a></li>
<li><a href='http://www.agileweboperations.com/devops-why-silos-suck-and-how-to-break-them' rel='bookmark' title='DevOps: Why Silos Suck And How To Break Them'>DevOps: Why Silos Suck And How To Break Them</a></li>
</ul><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/Ij3n9rP-H18" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/devops-is-not-a-job-description/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/devops-is-not-a-job-description</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching 1/73 queries in 0.022 seconds using apc
Object Caching 2076/2174 objects using apc
Content Delivery Network via awostatic.agileweboperatio.netdna-cdn.com

Served from: www.agileweboperations.com @ 2012-05-16 22:55:37 -->

