<?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 Operations</title>
	
	<link>http://www.agileweboperations.com</link>
	<description>Helping web developers and operations bridge the deployment gap</description>
	<lastBuildDate>Wed, 25 Aug 2010 06:46:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<image>
<link>http://www.agileweboperations.com</link>
<url>http://www.agileweboperations.com/favicon.ico</url>
<title>Agile Web Operations</title>
</image>
		<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>How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/EAjJp68Sh0Y/</link>
		<comments>http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 06:44:16 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[chef]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2297</guid>
		<description><![CDATA[I already wrote about how to get started with the Opscode Chef Platform. In this article I want to show you a very elegant way to deploy a Ruby on Rails stack with Chef. One of the strengths of Chef is the decent set of available cookbooks. @jtimberman does an especially excellent job in writing [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/automated-configuration-management-with-opscode-chef-the-basic-moving-parts/' rel='bookmark' title='Permanent Link: Automated Configuration Management With Opscode Chef: The Basic Moving Parts'>Automated Configuration Management With Opscode Chef: The Basic Moving Parts</a></li>
<li><a href='http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/' rel='bookmark' title='Permanent Link: Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud'>Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud</a></li>
<li><a href='http://www.agileweboperations.com/role-based-permissions-for-your-ruby-on-rails-application/' rel='bookmark' title='Permanent Link: Aegis: Role-based Permissions for your Ruby on Rails application'>Aegis: Role-based Permissions for your Ruby on Rails application</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/" title="Permanent link to How to Deploy Ruby on Rails With The Opscode Chef Application Cookbook"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3635/3626986096_c7fcbe326f_m.jpg" width="240" height="160" alt="Image by Galileo55" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fhow-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fhow-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I already wrote about <a href="http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/">how to get started with the Opscode Chef Platform</a>. In this article I want to show you a very elegant way to deploy a Ruby on Rails stack with Chef. One of the strengths of Chef is the decent set of available cookbooks. <a href="http://twitter.com/jtimberman">@jtimberman</a> does an especially excellent job in writing them. His chef cookbooks really help you to configure your systems neatly. One of his cookbooks is the <a href="http://github.com/opscode/cookbooks/blob/master/application/README.md">Application cookbook</a>. It enables <a href="http://www.opscode.com/blog/2010/05/06/data-driven-application-deployment-with-chef/">data driven application deployment</a>. Currently, it supports Ruby on Rails apps. The preferred stack is currently Matz Ruby with Unicorn, but, in a later post, I&#8217;ll show you how to use it cleanly with Ruby Enterprise Edition (REE).<br />
Let&#8217;s get started!</p>
<h3>Use The Chef Command Line Tool <code>knife</code> to Pull Down Required Cookbooks</h3>
<p>First of all we need to get all required cookbooks on our local workstation. I assume your local box is setup to develop chef cookbooks. The preferred way to use existing cookbooks is to &#8220;vendor&#8221; them:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ knife cookbook site vendor application <span style="color: #660033;">-d</span></pre></div></div>

<p>The <code>-d</code> parameter tells <code>knife</code> to pull all dependencies. The application cookbook will pull down quite a lot of deprecated dependencies like <code>passenger_enterprise</code> or <code>passenger_apache2</code>. Even if you want to install a <code>unicorn</code> based stack, those cookbooks will be downloaded (but never used). Just ignore them.</p>
<p>You may use the same command to pull a new version of any cookbook (no -d required then).</p>
<h3>Configure Your Application Using a Data Bag</h3>
<p>One of the great features of opscode chef is the support of <a href="http://wiki.opscode.com/display/chef/Data+Bags">data bags</a>. A data bag is a JSON file containing any data structures (like configurations, etc) for your recipes to use. The Application cookbook makes heavy use of a data bag called <code>apps</code>.</p>
<p>First, we need to create a data bag file. Just name the data bag file like your application (in this example I use &#8220;my_app&#8221;):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> data-bags
$ <span style="color: #c20cb9; font-weight: bold;">vi</span> data-bags<span style="color: #000000; font-weight: bold;">/</span>my_app.json</pre></div></div>

<p>Copy a sample data bag from <a href="http://github.com/opscode/cookbooks/blob/master/application/README.md">application/README</a> and change to your liking.</p>
<p>NOTE: Make sure your deploy key string is in one line with <code>\n</code as line breaks within:<br />
<code>"deploy_key": "-----BEGIN DSA PRIVATE KEY-----\nMIIBv...EW1auXCaV\nb24T...TiaHI\n...\n-----END DSA PRIVATE KEY-----\n",</code></p>
<p>Now, it&#8217;s time to store your data bag on the chef server:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ knife data bag create apps
$ knife data bag from <span style="color: #c20cb9; font-weight: bold;">file</span> apps data-bags<span style="color: #000000; font-weight: bold;">/</span>my_app.json</pre></div></div>

<p>Note the &#8220;apps&#8221; part <em>before</em> the actual file name. This is the name of the data bag and must be &#8220;apps&#8221; for the application cookbook to work correctly. You can load multiple application configurations into that same data bag (just use different JSON files).</p>
<h3>Define Your Roles</h3>
<p>You already put some role names into your data bag. Now, it&#8217;s time to create those roles to be able to assign them to nodes.</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>roles
$ <span style="color: #c20cb9; font-weight: bold;">vi</span> my_app.rb
$ <span style="color: #c20cb9; font-weight: bold;">vi</span> production.rb
$ <span style="color: #c20cb9; font-weight: bold;">vi</span> my_app_database_master.rb</pre></div></div>

<p>You might want to create a &#8220;staging&#8221; role as well to differentiate between your staging and your production environment by assigning the respective role to your nodes.</p>
<p>Here are samples for each role:</p>
<p><code>my_app.rb</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">	name <span style="color:#996600;">&quot;my_app&quot;</span>
	run_list <span style="color:#996600;">&quot;recipe[application]&quot;</span>
&nbsp;
	override_attributes <span style="color:#ff3333; font-weight:bold;">:apps</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> 
	  <span style="color:#ff3333; font-weight:bold;">:my_app</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> 
	    <span style="color:#ff3333; font-weight:bold;">:production</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> 
	      <span style="color:#ff3333; font-weight:bold;">:run_migrations</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
	      <span style="color:#ff3333; font-weight:bold;">:force</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
	    <span style="color:#006600; font-weight:bold;">&#125;</span>,
	    <span style="color:#ff3333; font-weight:bold;">:staging</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
	      <span style="color:#ff3333; font-weight:bold;">:run_migrations</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
	      <span style="color:#ff3333; font-weight:bold;">:force</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</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></pre></div></div>

<p>Here we define that we want to run <code>rake db:migrate</code> on deployment and want to force git checkout on <code>staging</code>, but we do not want to force git checkout on <code>production</code>.</p>
<p><code>production.rb</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">name <span style="color:#996600;">&quot;production&quot;</span>
default_attributes <span style="color:#ff3333; font-weight:bold;">:app_environment</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;production&quot;</span></pre></div></div>

<p>For the initial upload of several cookbooks and roles there&#8217;s a handy rake task</p>

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

<h3>Install MySQL as Database</h3>
<p>Now, let&#8217;s add a database to the mix:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ knife cookbook site vendor database <span style="color: #660033;">-d</span></pre></div></div>

<p>And, add the <code>database::master</code> recipe to the run_list of the &#8220;helpster_database_master&#8221; role</p>
<p><code>my_app_database_master.rb</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">name <span style="color:#996600;">&quot;helpster_database_master&quot;</span>
run_list <span style="color:#996600;">&quot;recipe[mysql::server]&quot;</span>, <span style="color:#996600;">&quot;recipe[database::master]&quot;</span></pre></div></div>

<h3>Assigning Roles To Nodes</h3>
<p>To simplify the example, we install the whole stack on a single node. Just assign the &#8220;production&#8221;, &#8220;my_app_database_master&#8221;, and &#8220;my_app&#8221; roles to your production server node:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ knife node run_list add www.example.com <span style="color: #ff0000;">&quot;role[production]&quot;</span>
$ knife node run_list add www.example.com <span style="color: #ff0000;">&quot;role[my_app_database_master]&quot;</span>
$ knife node run_list add www.example.com <span style="color: #ff0000;">&quot;role[my_app]&quot;</span></pre></div></div>

<p><strong>NOTE</strong>: The order in the run_list matters. Make sure you have database_master BEFORE your application role!!!</p>
<p>The application cookbook will install ruby, rails, all packages and gems defined in your data bag and unicorn as a runit service. Sweet!</p>
<p><strong>NOTE</strong>: Your application log file is now under:</p>
<pre>
/etc/sv/my_app/log/main/current
</pre>
<p>Upload your role and cookbooks (using <code>rake install</code>) and run <code>chef-client</code> on your node!</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/automated-configuration-management-with-opscode-chef-the-basic-moving-parts/' rel='bookmark' title='Permanent Link: Automated Configuration Management With Opscode Chef: The Basic Moving Parts'>Automated Configuration Management With Opscode Chef: The Basic Moving Parts</a></li>
<li><a href='http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/' rel='bookmark' title='Permanent Link: Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud'>Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud</a></li>
<li><a href='http://www.agileweboperations.com/role-based-permissions-for-your-ruby-on-rails-application/' rel='bookmark' title='Permanent Link: Aegis: Role-based Permissions for your Ruby on Rails application'>Aegis: Role-based Permissions for your Ruby on Rails application</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=EAjJp68Sh0Y:AukEqMVuhYk:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=EAjJp68Sh0Y:AukEqMVuhYk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=EAjJp68Sh0Y:AukEqMVuhYk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=EAjJp68Sh0Y:AukEqMVuhYk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=EAjJp68Sh0Y:AukEqMVuhYk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=EAjJp68Sh0Y:AukEqMVuhYk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/EAjJp68Sh0Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/</feedburner:origLink></item>
		<item>
		<title>Do you have a DevOps Culture?</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/SwNr15503OM/</link>
		<comments>http://www.agileweboperations.com/do-you-have-a-devops-culture/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 11:54:29 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2285</guid>
		<description><![CDATA[A lot of Sysadmins and developers all over the world write, meet and talk about DevOps: How to collaborate better so we can deliver business value faster. The aim of DevOps is to get rid of the traditional way of thinking in silos inherent to development and operations. But how can You find out whether [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/devops-why-silos-suck-and-how-to-break-them/' rel='bookmark' title='Permanent Link: 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/why-automated-testing-is-a-must-for-devops/' rel='bookmark' title='Permanent Link: Why Automated Testing is a Must for DevOps'>Why Automated Testing is a Must for DevOps</a></li>
<li><a href='http://www.agileweboperations.com/20-devops-guys/' rel='bookmark' title='Permanent Link: 20 DevOps guys you should follow'>20 DevOps guys you should follow</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/do-you-have-a-devops-culture/" title="Permanent link to Do you have a DevOps Culture?"><img class="post_image alignleft" src="http://farm3.static.flickr.com/2118/2199685678_82231ac0e1_m.jpg" width="240" height="173" alt="Imag by John Spooner" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fdo-you-have-a-devops-culture%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fdo-you-have-a-devops-culture%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>A lot of Sysadmins and developers all over the world <a href="http://www.jedi.be/blog/2010/02/12/what-is-this-devops-thing-anyway/">write</a>, <a href="http://www.devopsdays.org/">meet</a> and <a href="http://www.slideshare.net/atmosorg/rise-of-devops">talk</a> about DevOps: How to collaborate better so we can deliver business value faster. The aim of <a href="http://www.agileweboperations.com/devops-why-silos-suck-and-how-to-break-them/">DevOps is to get rid of the traditional way of thinking in silos</a> inherent to development and operations. But how can <em>You</em> find out whether your organization is ready for DevOps? Here are a few hints.</p>
<h3>DevOps State of Mind</h3>
<p>Ask your developers the following questions:</p>
<ul>
<li>Can you describe the runtime environment of your web application?</li>
<li>Do you know the release process for your app?</li>
<li>What are the most critical issues operations is dealing with currently?</li>
<li>When is <em>your</em> work done?</li>
</ul>
<p>The answers to these questions tell you whether your developers are thinking out of their &#8220;code creation&#8221; box and consider deployment of their app as part of their work. Only if they show at least some basic interest in the operations realm are they ready for DevOps. If your developers think they can just &#8220;throw their work over the fence to QA&#8221; (or the build server), or, even worse, that they&#8217;re done once they commit their code to version control, you&#8217;ve got a long way to go.</p>
<p>Ask your sys admins the following questions:</p>
<ul>
<li>Which new features are upcoming?</li>
<li>Do you look forward to the next release?</li>
<li>When was the last time you talked to the developers?</li>
<li>Is your work creating business value?</li>
</ul>
<p>The answers to these questions show you how the sys admins think about their work and their areas of responsibility. Only if they are involved in development to a certain degree and welcome frequent change (i.e. creating business value) are they ready for DevOps. If they only think about avoiding change and don&#8217;t care at all about what&#8217;s upcoming or what&#8217;s creating business value, you&#8217;ve got a ways to go with your sys admins as well.</p>
<h3>What is DevOps?</h3>
<p>DevOps is a culutre of talking and working together. Starting DevOps means starting a mind shift for your developers and sys admins. Only if people are ready to talk to each other and to care about each other&#8217;s work will you be able to create more business value, faster. Only then does it makes sense to look at the processes and tools that support the DevOps culture.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/devops-why-silos-suck-and-how-to-break-them/' rel='bookmark' title='Permanent Link: 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/why-automated-testing-is-a-must-for-devops/' rel='bookmark' title='Permanent Link: Why Automated Testing is a Must for DevOps'>Why Automated Testing is a Must for DevOps</a></li>
<li><a href='http://www.agileweboperations.com/20-devops-guys/' rel='bookmark' title='Permanent Link: 20 DevOps guys you should follow'>20 DevOps guys you should follow</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=SwNr15503OM:W3lJB8L4ZVQ:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=SwNr15503OM:W3lJB8L4ZVQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=SwNr15503OM:W3lJB8L4ZVQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=SwNr15503OM:W3lJB8L4ZVQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=SwNr15503OM:W3lJB8L4ZVQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=SwNr15503OM:W3lJB8L4ZVQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/SwNr15503OM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/do-you-have-a-devops-culture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/do-you-have-a-devops-culture/</feedburner:origLink></item>
		<item>
		<title>Agile Methodologies: Scrum vs. Kanban</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/Hhd-wYCqqAo/</link>
		<comments>http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 19:14:13 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Agile Methodologies]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2275</guid>
		<description><![CDATA[When inflexible and wasteful processes are making your organization inefficient, it&#8217;s time to introduce agile methodologies. Scrum vs. Kanban then becomes an essential question: Which one is better suited for my own situation? Scrum &#8211; A Fundamental Shift Scrum is a well defined process framework for structuring your organization. Introducing Scrum is quite a change [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/scrum-what-new-community-edited-qa-site-about-agile-lean-kanban-and-scurm/' rel='bookmark' title='Permanent Link: Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm'>Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm</a></li>
<li><a href='http://www.agileweboperations.com/scrum-alone-wont-cut-it/' rel='bookmark' title='Permanent Link: Scrum alone won&#8217;t cut it'>Scrum alone won&#8217;t cut it</a></li>
<li><a href='http://www.agileweboperations.com/kanban-wip-limits-the-fine-art-of-focus/' rel='bookmark' title='Permanent Link: Kanban WIP Limits &#8211; The Fine Art of Focus'>Kanban WIP Limits &#8211; The Fine Art of Focus</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/" title="Permanent link to Agile Methodologies: Scrum vs. Kanban"><img class="post_image alignleft" src="http://farm5.static.flickr.com/4082/4819057787_f49122ab1a_m.jpg" width="240" height="159" alt="Image by xelcise" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fagile-methodologies-scrum-vs-kanban%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fagile-methodologies-scrum-vs-kanban%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>When inflexible and wasteful processes are making your organization inefficient, it&#8217;s time to introduce agile methodologies. Scrum vs. Kanban then becomes an essential question: Which one is better suited for my own situation?</p>
<h3>Scrum &#8211; A Fundamental Shift</h3>
<p>Scrum is a well defined process framework for structuring your organization. Introducing Scrum is quite a change for a team not used to agile methodologies: They have to start working in iterations, build cross-functional teams, appoint a product owner and a scrum master, as well as introducing regular meetings for iteration planning, daily status updates and sprint reviews. The benefits are well understood: Less superfluous specifications and less hand overs due to cross-functional teams, more flexibility in roadmap planning due to short sprints, etc. Switching your organization to use Scrum is a fundamental shift which will shake-up old habbits and transform them into more effective ones.</p>
<h3>Scrum Leverages Commitment As Change Agent</h3>
<p>The initial introduction of Scrum is not an end in itself of course. Working with Scrum you want to change habits inside your team: Take more responsibility, raise code quality, increase speed. As your teams commit to sprint goals, they are intrinsically motiviated to get better and faster in order to deliver what they promised. Scrum leverages team commitment as change agent. It&#8217;s amazing to see how much teams demand from themselves &#8211; often way more you as a manager ever dared ask for.</p>
<h3>Kanban &#8211; Incremental Improvements</h3>
<p>Kanban is way less structured than Scrum. It&#8217;s no process framework at all, but a model for introducing change through incremental improvements. You can apply Kanban principles to any process you are already running (even to Scrum <img src='http://www.agileweboperations.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . In Kanban, you organize your work on a Kanban Board. There you have states which every work item passes through from left to right. You start left with the Backlog, and push your work items along through the <em>in progress</em>, <em>testing</em>, <em>ready for release</em>, and <em>released</em> columns. And you may have various <em>swim lanes</em> &#8211; horizontal &#8220;pipelines&#8221; for different types of work. The only management criteria introduced by Kanban is the so called &#8220;Work In Progress (WIP)&#8221;. Nothing else needs to be changed to get started with Kanban.</p>
<h3>Kanban Leverages Work In Progress (WIP) Limits as Change Agent</h3>
<p>For every column (state) on your Kanban board you should define a &#8220;Work In Progress&#8221;-Limit (WIP Limit). The WIP limit tells you how much work items are allowed to stay in a certain state. If the state is &#8220;full&#8221;, no new work can enter that state. The whole team has to help clear the filled up state first. That way your team will find out about bottlenecks in the progress simply by looking at the Kanban Board and is challenged to change the way they work to avoid such bottlenecks in the future. In that way, the WIP limit acts as change agent in Kanban.</p>
<h3>Scrum vs. Kanban</h3>
<p>Looking at both agile methodologies it should be more clear what to introduce when: If your organization is really stuck and needs a fundamental shift towards a more efficient process, Scrum seems to be more appropiate. If you already have working processes, which you want to improve over time without shaking up the whole system, Kanban should be your tool of choice.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/scrum-what-new-community-edited-qa-site-about-agile-lean-kanban-and-scurm/' rel='bookmark' title='Permanent Link: Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm'>Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm</a></li>
<li><a href='http://www.agileweboperations.com/scrum-alone-wont-cut-it/' rel='bookmark' title='Permanent Link: Scrum alone won&#8217;t cut it'>Scrum alone won&#8217;t cut it</a></li>
<li><a href='http://www.agileweboperations.com/kanban-wip-limits-the-fine-art-of-focus/' rel='bookmark' title='Permanent Link: Kanban WIP Limits &#8211; The Fine Art of Focus'>Kanban WIP Limits &#8211; The Fine Art of Focus</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=Hhd-wYCqqAo:6gQqqlnzIn8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=Hhd-wYCqqAo:6gQqqlnzIn8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=Hhd-wYCqqAo:6gQqqlnzIn8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=Hhd-wYCqqAo:6gQqqlnzIn8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=Hhd-wYCqqAo:6gQqqlnzIn8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=Hhd-wYCqqAo:6gQqqlnzIn8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/Hhd-wYCqqAo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/</feedburner:origLink></item>
		<item>
		<title>LogicMonitor: My Virtual SysAdmin</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/JMYvhsObddY/</link>
		<comments>http://www.agileweboperations.com/logicmonitor-my-virtual-sysadmin/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 07:54:01 +0000</pubDate>
		<dc:creator>Dan Ackerson</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[logicmonitor]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2204</guid>
		<description><![CDATA[I&#8217;d recently ordered a new round of servers for NetDoktor and was positively dreading having to setup Nagios &#038; Munin on them. This is where the fact that I&#8217;m a &#8220;born &#038; raised&#8221; developer really shines through. The configuration of Nagios is simply beyond me. No matter how much documentation I read, I just can&#8217;t [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/getting-a-grip-on-your-operations-with-munin/' rel='bookmark' title='Permanent Link: Getting a Grip on your Operations with Munin'>Getting a Grip on your Operations with Munin</a></li>
<li><a href='http://www.agileweboperations.com/monitoring-tools-essentials-munin-vs-nagios/' rel='bookmark' title='Permanent Link: Monitoring tools essentials: Munin vs. Nagios'>Monitoring tools essentials: Munin vs. Nagios</a></li>
<li><a href='http://www.agileweboperations.com/give-your-servers-some-tlc-10-seconds-a-day-with-munin/' rel='bookmark' title='Permanent Link: Give Your Servers Some TLC: 10 Seconds A Day With Munin'>Give Your Servers Some TLC: 10 Seconds A Day With Munin</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/logicmonitor-my-virtual-sysadmin/" title="Permanent link to LogicMonitor: My Virtual SysAdmin"><img class="post_image alignleft" src="http://www.logicmonitor.com/images/logo.gif" width="237" height="61" alt="LogicMonitor" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Flogicmonitor-my-virtual-sysadmin%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Flogicmonitor-my-virtual-sysadmin%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;d recently ordered a new round of servers for NetDoktor and was positively dreading having to setup Nagios &#038; Munin on them. This is where the fact that I&#8217;m a &#8220;born &#038; raised&#8221; developer really shines through. The configuration of Nagios is simply beyond me. No matter how much documentation I read, I just can&#8217;t get all the pieces moving right. Try to bolt Munin on top of this and I simply walk away in frustration. There had to be a better way&#8230;</p>
<h2>The Competition</h2>
<p>I had actually outsourced this initial setup, so of course I toyed around with the idea of having the same guys do it again on the new servers. But then I thought to myself, why should I have to do this at all? Aren&#8217;t there &#8220;all-in-one&#8221; products that can do this for me? I started with <a href="http://www.centreon.com/">Centreon</a> and then <a href="http://www.zenoss.com/">Zenoss</a>. But I hadn&#8217;t really understood SNMP well enough to have one monitor cover my disparate network of servers.</p>
<p>Arrgggh &#8211; weren&#8217;t there companies out there that did this sort of thing? Why do I have to reinvent the wheel here?</p>
<h2>The Tweet Heard &#8216;Round the World</h2>
<p><a href="http://www.agileweboperations.com/wp-content/uploads/2010/07/tweet.png"><img src="http://www.agileweboperations.com/wp-content/uploads/2010/07/tweet.png" alt="" title="" width="591" height="551" class="aligncenter size-full wp-image-2205" /></a></p>
<h2>LogicMonitor to the Rescue</h2>
<p>Over the weekend, I dug around a little on the <a href="http://www.logicmonitor.com">LogicMonitor</a> site and figured I&#8217;d give them a shot. Monday I was contacted by their sales and we scheduled a desktop session for that evening. I was asked to install a lightweight java agent on my test server and configure SNMP properly. They guided me through that process and within a few minutes, all the basic datapoints were being gathered and graphed. All well in fine, but was it worth the cost?</p>
<p>Later, I started to get interesting alert emails &#8211; warnings about excess TcpRetrans and query cache prunes:<br />
<code><br />
www2 has 21.42  query cache prunes per second due to low memory. The Query cache has a hit ratio of greater than 50% - so it is likely to benefit more from increasing the cache size to alleviate this memory pressure.<br />
This state started at 2010-07-23 20:36:35 CEST and has been going on for 0h 12m.<br />
</code></p>
<p>Wow &#8211; not just a plain alert because a given threshhold was tripped, but a bit of background information and even a suggestion on how to fix it! Suddenly, the light went on <strong>Logic</strong>Monitor! I now had a virtual system administrator watching my servers and pointing me in the right direction when it noticed something strange. Just yesterday, I created my first custom datasources with graphs to keep track of my website response time for different pages.<br />
<a href="http://www.agileweboperations.com/wp-content/uploads/2010/07/board_response_times.png"><img src="http://www.agileweboperations.com/wp-content/uploads/2010/07/board_response_times.png" alt="" title="" width="442" height="227" class="aligncenter size-full wp-image-2206" /></a></p>
<p>It took about 10 minutes to setup 2 of these graphs and it&#8217;s the first step to being able to easily gather and plot relevant business data. An example next step would be how many people have logged in within the past 5 minutes? How many people have posted articles or questions? And the &#8220;holy-grail&#8221;, how does our response times (and load) compare when plotted against these other metrics? </p>
<p>Naturally, I&#8217;ve had second thoughts about pushing such a core business value like server metrics out to a SaaS provider. But are the metrics themselves a core value? Or is it the visualization and business decisions that are made after comprehending these metrics that are the real value?<br />
I&#8217;m going with the latter and am extremely happy to not have to worry about how to setup my own metrics system. </p>
<p>Understand that LogicMonitor is based in California and this caused some minor headaches during the sales &#038; support process as I&#8217;m located here in Munich, Germany. The 9hrs time difference basically meant my problems/questions were answered next business day. Nevertheless, within a week I had full monitoring setup and configured on my test servers. The week after that I moved it into the production systems and haven&#8217;t looked back since.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/getting-a-grip-on-your-operations-with-munin/' rel='bookmark' title='Permanent Link: Getting a Grip on your Operations with Munin'>Getting a Grip on your Operations with Munin</a></li>
<li><a href='http://www.agileweboperations.com/monitoring-tools-essentials-munin-vs-nagios/' rel='bookmark' title='Permanent Link: Monitoring tools essentials: Munin vs. Nagios'>Monitoring tools essentials: Munin vs. Nagios</a></li>
<li><a href='http://www.agileweboperations.com/give-your-servers-some-tlc-10-seconds-a-day-with-munin/' rel='bookmark' title='Permanent Link: Give Your Servers Some TLC: 10 Seconds A Day With Munin'>Give Your Servers Some TLC: 10 Seconds A Day With Munin</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=JMYvhsObddY:mDTFQBdaa18:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=JMYvhsObddY:mDTFQBdaa18:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=JMYvhsObddY:mDTFQBdaa18:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=JMYvhsObddY:mDTFQBdaa18:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=JMYvhsObddY:mDTFQBdaa18:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=JMYvhsObddY:mDTFQBdaa18:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/JMYvhsObddY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/logicmonitor-my-virtual-sysadmin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/logicmonitor-my-virtual-sysadmin/</feedburner:origLink></item>
		<item>
		<title>The Irresistable Pull To Self Organization</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/dOwmL0_XPwU/</link>
		<comments>http://www.agileweboperations.com/the-irresistable-pull-to-self-organization/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 13:49:02 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Agile Methodologies]]></category>
		<category><![CDATA[agile development process]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2198</guid>
		<description><![CDATA[Every organization has to deal with a mix of ongoing and project oriented work. But, even if you structure your teams into departments to optimize ongoing work, they keep trying to self organize into project focused teams. Matrix Management vs Project Organization There are the regular tasks and chores, and there are the bigger undertakings [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/successful-teams-are-small-and-dedicated/' rel='bookmark' title='Permanent Link: Successful Teams Are Small And Dedicated'>Successful Teams Are Small And Dedicated</a></li>
<li><a href='http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/' rel='bookmark' title='Permanent Link: Agile Methodologies: Scrum vs. Kanban'>Agile Methodologies: Scrum vs. Kanban</a></li>
<li><a href='http://www.agileweboperations.com/waterfall-scrum-and-lean-software-development-simulation-as-teaching-platform/' rel='bookmark' title='Permanent Link: Waterfall, SCRUM and Lean Software Development simulation as teaching platform'>Waterfall, SCRUM and Lean Software Development simulation as teaching platform</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/the-irresistable-pull-to-self-organization/" title="Permanent link to The Irresistable Pull To Self Organization"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3035/3604733512_f3cbc14c7f_m.jpg" width="240" height="180" alt="Image by sophiea" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fthe-irresistable-pull-to-self-organization%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fthe-irresistable-pull-to-self-organization%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Every organization has to deal with a mix of ongoing and project oriented work. But, even if you structure your teams into departments to optimize ongoing work, they keep trying to self organize into project focused teams.</p>
<h3>Matrix Management vs Project Organization</h3>
<p>There are the regular tasks and chores, and there are the bigger undertakings which try to bring the organization as a whole forward. To balance both, you have two ways to structure your organization: Structure by department and have cross-departmental project teams or structure by project. Structuring by department is often called <a href="http://en.wikipedia.org/wiki/Matrix_management"> Matrix Management</a> whereas structuring by project is often referred to as &#8220;project-oriented organization&#8221;.</p>
<h3>Departments Focus On Specialization</h3>
<p>The advantage of splitting teams into departments is that even though they might work in different projects they still can share their experiences and exchange ideas and learnings in their specific field. That way everyone can improve his specialization e.g. in product management. A disadvantage of that structure is that your project teams are distributed over various departments. This makes it harder for everyone to focus on the project goals as top most priority.</p>
<h3>Project-oriented Organizations Foster Cross-Functional-Work</h3>
<p>If your main way of structuring your organization is by project you group all specialists around those bigger undertakings. Everyone required for project success sits and works together and everyone can focus on the project goal. The disadvantage of this structure is that all people with the same specialization like product management hardly get to exchange experiences and learnings. There is a need for cross-project exchange, which you need to enforce to make it happen.</p>
<h3>Teams Gravitate To Project-oriented Organizations</h3>
<p>So, which organizational form is better? Of course, it depends &#8482;. But, more often than not, people given a choice prefer working in cross-functional project teams. Even loosing the advantages of working with collegues of the same trade, they seem to gain more profit out of working together in a project. Co-location and constant informal information flow within the project team gives a team a great boost in productivity and reduces stress and friction between team members.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/successful-teams-are-small-and-dedicated/' rel='bookmark' title='Permanent Link: Successful Teams Are Small And Dedicated'>Successful Teams Are Small And Dedicated</a></li>
<li><a href='http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/' rel='bookmark' title='Permanent Link: Agile Methodologies: Scrum vs. Kanban'>Agile Methodologies: Scrum vs. Kanban</a></li>
<li><a href='http://www.agileweboperations.com/waterfall-scrum-and-lean-software-development-simulation-as-teaching-platform/' rel='bookmark' title='Permanent Link: Waterfall, SCRUM and Lean Software Development simulation as teaching platform'>Waterfall, SCRUM and Lean Software Development simulation as teaching platform</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dOwmL0_XPwU:akaKMwtbKeg:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dOwmL0_XPwU:akaKMwtbKeg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=dOwmL0_XPwU:akaKMwtbKeg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dOwmL0_XPwU:akaKMwtbKeg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=dOwmL0_XPwU:akaKMwtbKeg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dOwmL0_XPwU:akaKMwtbKeg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/dOwmL0_XPwU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/the-irresistable-pull-to-self-organization/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/the-irresistable-pull-to-self-organization/</feedburner:origLink></item>
		<item>
		<title>Far Future Expires Headers For Ruby On Rails With Nginx</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/6DJ2d7IvFbQ/</link>
		<comments>http://www.agileweboperations.com/far-future-expires-headers-for-ruby-on-rails-with-nginx/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 20:05:45 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2171</guid>
		<description><![CDATA[Browsers load static images from your website again and again if your web server does not send an expires header with a date far in the future. To avoid that unnecessary traffic on your servers and unnecessary load times for your users, it&#8217;s a good idea to let your nginx send those expires headers. But, [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/seed-data-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Seed Data In Ruby On Rails'>Seed Data In Ruby On Rails</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='Permanent Link: 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>
<li><a href='http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/' rel='bookmark' title='Permanent Link: 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>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/far-future-expires-headers-for-ruby-on-rails-with-nginx/" title="Permanent link to Far Future Expires Headers For Ruby On Rails With Nginx"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3520/3463984860_110b9675f8_m.jpg" width="240" height="240" alt="Image by seier+seier" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Ffar-future-expires-headers-for-ruby-on-rails-with-nginx%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Ffar-future-expires-headers-for-ruby-on-rails-with-nginx%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Browsers load static images from your website again and again if your web server does not send an <em>expires</em> header with a date far in the future. To avoid that unnecessary traffic on your servers and unnecessary load times for your users, it&#8217;s a good idea to let your nginx send those <code>expires</code> headers. But, what if you tell the browser not to come back for your css files until next year and now you change some style within it? The Rails URL helpers automatically attach a timestamp representing the last modification date to each URL (like <code>?2345346654</code>). That changes the URL every time you deploy making the browser load the modified file. In this post, I want to show you all the not so obvious things to consider when you introduce far future expires headers with rails and nginx.</p>
<h3>Far Future Expires Headers In nginx</h3>
<p>The first thing you have to do is to tell your nginx to send those <code>expires</code> headers with all your images, css and javascript files. Just add the following section to your server configuration in nginx:</p>

<div class="wp_syntax"><div class="code"><pre class="nginx" style="font-family:monospace;">	server {
	    ...
	    location ~* \.(ico|css|js|gif|jp?g|png) {
	        if ($args ~ [0-9]+) {
	           expires max;
	           break;
	        }
	    }
	    ...
	}</pre></div></div>

<p>First, you match the location with a regular expression catching all your static resources. If you have additional file types you want to equip with a far future expires header, just add them to the regex. The important part, which a lot of people get wrong, is to additionally check for the timestamp parameter. You only want to add the expires header to files if the URL has the timestamp attached. Otherwise you have no chance to push out your changes anymore! In quite a <a href="http://effectif.com/articles/configure-the-expires-header-on-your-rails-site-with-nginx">few</a> <a href="http://stackoverflow.com/questions/873235/nginx-not-setting-expires-headers-on-rails-static-assets">places</a> around the net you find people attaching <code>\?[0-9]+$</code> to the regex matching the location. This cannot work as location does not include the <code>$args</code>.</p>
<h3>Adding Timestamps To URLs In CSS Files</h3>
<p>Using far future expires headers in nginx only for files having a timestamp is great for every URL you generate using the rails helpers. But what about e.g. background images you define in your static css files? As they do not have a timestamp attached they will <em>not</em> get any <code>expires</code> headers and therefore will not be cached by the browsers. Especially if you use larger image maps for css sprites, that hurts. You can use the yslow and live HTTPheaders firefox plugins to validate the headers.</p>
<p>There are a few ways to add timestamps to URLs in your css:</p>
<ul>
<li><a href="http://deaddeadgood.com/2009/9/28/far-future-expires-headers-for-css-images-in-rails/">Make your css files ERB templates and use page caching to avoid re-generating them for every request</a></li>
<li><a href="http://weblog.redlinesoftware.com/">Use an initalizer to parse through your css files and add the timestamps when loading your Ruby on Rails app</a></li>
<li>Monkey patch the <code>stylesheet_link_tag</code> helper to parse your css files and add timestamps when collecting all individual css files and building the one big one.</li>
</ul>
<p>We are currently using the monkey patch, but I would recommend you to do it in an initializer.</p>
<p>Using far future expires headers with rails and nginx is simple and very effective. Your servers and your users will love it!</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/seed-data-in-ruby-on-rails/' rel='bookmark' title='Permanent Link: Seed Data In Ruby On Rails'>Seed Data In Ruby On Rails</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='Permanent Link: 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>
<li><a href='http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/' rel='bookmark' title='Permanent Link: 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>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=6DJ2d7IvFbQ:cKQKL7iJWjM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=6DJ2d7IvFbQ:cKQKL7iJWjM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=6DJ2d7IvFbQ:cKQKL7iJWjM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=6DJ2d7IvFbQ:cKQKL7iJWjM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=6DJ2d7IvFbQ:cKQKL7iJWjM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=6DJ2d7IvFbQ:cKQKL7iJWjM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/6DJ2d7IvFbQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/far-future-expires-headers-for-ruby-on-rails-with-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/far-future-expires-headers-for-ruby-on-rails-with-nginx/</feedburner:origLink></item>
		<item>
		<title>Getting Started With The Opscode Chef Platform – Configuration Management In The Cloud</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/rFgqbl3sSFI/</link>
		<comments>http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 19:47:25 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[chef]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[knife]]></category>
		<category><![CDATA[opscode]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2163</guid>
		<description><![CDATA[Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud In &#8220;The Moving Parts of Opscode Chef&#8221; there was an interesting discussion about the need of a highly available chef server if you want to use opscode chef as your configuration management tool of choice. Especially for small to medium sized enviroments [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/automated-configuration-management-with-opscode-chef-the-basic-moving-parts/' rel='bookmark' title='Permanent Link: Automated Configuration Management With Opscode Chef: The Basic Moving Parts'>Automated Configuration Management With Opscode Chef: The Basic Moving Parts</a></li>
<li><a href='http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/' rel='bookmark' title='Permanent Link: 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/configuration-management-remixed-introducing-carpet/' rel='bookmark' title='Permanent Link: Configuration Management remixed: Introducing Carpet'>Configuration Management remixed: Introducing Carpet</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/" title="Permanent link to Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud"><img class="post_image alignleft" src="http://farm1.static.flickr.com/106/288486945_131a2c873f_m.jpg" width="240" height="161" alt="Image by jamesfischer" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fgetting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fgetting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Getting Started With The Opscode Chef Platform &#8211; Configuration Management In The Cloud</p>
<p>In &#8220;<a href="http://www.agileweboperations.com/automated-configuration-management-with-opscode-chef-the-basic-moving-parts/">The Moving Parts of Opscode Chef</a>&#8221; there was an interesting discussion about the need of a highly available chef server if you want to use opscode chef as your configuration management tool of choice. Especially for small to medium sized enviroments running your own chef server is overkill. If you don&#8217;t want to use chef-solo (a local &#8220;push&#8221; tool instead of the client-server model of chef), you can sign up for an account at the <a href="http://www.opscode.com/">opscode chef platform</a>. The opscode chef platform gives you an highly available chef server in the cloud. After sign up, it&#8217;s only a matter of minutes to get your first client (or &#8216;node&#8217; in chef speak) under configuration management control.</p>
<h3>Bootstrap A Chef-Client With Knife</h3>
<p>If you have a box you want to have managed by the chef platform all you need is ssh access to it and chef installed on your local workstation. Just run</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">knife bootstrap www.example.com</pre></div></div>

<p> (be sure you have the <code>Net::SSH::Multi</code> gem installed on your local workstation: <code>$ sudo gem install net-ssh-multi</code>)<br />
to get chef-client installed and hooked up to the chef platform. After a few minutes you&#8217;ll find your brand new node ready to run cookbooks.</p>
<h3>Roles, Nodes, And Cookbooks</h3>
<p>Now you have the opscode chef platform acting as your chef server and another box acting as chef-client. It&#8217;s time to get something installed on that client using chef. Before we write any code, let&#8217;s have a look at how everything plays together:</p>
<ul>
<li><strong>Node:</strong> Every box you want to manage with Opscode Chef is a node. The node definition lives only on the chef server and can be modified by the command line tool <code>knife</code>. To display all the attributes of a node you simply type <code>knife node show www.example.com</code> at your local workstation.</li>
<li><strong>Role:</strong> Roles define what a node should be. Examples of roles could be <em>mysql_master</em>, <em>load_balancer</em>, <em>gateway</em>, etc. Within roles you define so called &#8220;run_list&#8221;s of recipies (or other roles) telling chef what to install on every box having this role assigned.</li>
<li><strong>Recipes:</strong> A recipe is a set of instructions which ensures that a node has everying setup as you need it. You can define a variety of <a href="http://wiki.opscode.com/display/chef/Resources">resources</a> like users, directories, packages, files, etc. You could have e.g. a recipe called <code>nginx::source</code> which will grab the source tarball of nginx form a website, unpack it, configure, make, make install it, and upload configuration files as well as setting up a runit service for it. As you&#8217;ve already seen, you tell a role which recipes it shall run on every node having that role.</li>
<li><strong>Cookbooks:</strong> Cookbooks are collections of recipes. There are simple cookbooks including only one recipe (like the logrotate cookbook) and others having multiple recipes (like the nginx cookbook which includes recipes for installing nginx from source or using a package manager). Opscode provides a huge set of ready made cookbooks. If you want to use them you can include them into your chef setup by using knife: <code>knife cookbook site vendor nginx -d</code>.</li>
</ul>
<h3>Assign A Role To A Node</h3>
<p>Assuming you have a set of roles and cookbooks ready (that means: edited them on your local workstation and then uploaded them to the chef platform using e.g. <code>knife cookbook upload load_balancer</code>) its time now to get something installed on your new node. Just type <code>knife node run_list add [NODE] [ENTRY]</code> where [NODE] could be www.example.com and [ENTRY] could be <code>role[load_balancer]</code> if you want to assign the role <code>load_balancer</code> to your node www.example.com.</p>
<p>Now just run <code>chef-client</code> on www.example.com and it will grab the required cookbook and run its default recipe.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/automated-configuration-management-with-opscode-chef-the-basic-moving-parts/' rel='bookmark' title='Permanent Link: Automated Configuration Management With Opscode Chef: The Basic Moving Parts'>Automated Configuration Management With Opscode Chef: The Basic Moving Parts</a></li>
<li><a href='http://www.agileweboperations.com/how-to-deploy-ruby-on-rails-with-the-opscode-chef-application-cookbook/' rel='bookmark' title='Permanent Link: 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/configuration-management-remixed-introducing-carpet/' rel='bookmark' title='Permanent Link: Configuration Management remixed: Introducing Carpet'>Configuration Management remixed: Introducing Carpet</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=rFgqbl3sSFI:FaqFdYLJ3CU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=rFgqbl3sSFI:FaqFdYLJ3CU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=rFgqbl3sSFI:FaqFdYLJ3CU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=rFgqbl3sSFI:FaqFdYLJ3CU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=rFgqbl3sSFI:FaqFdYLJ3CU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=rFgqbl3sSFI:FaqFdYLJ3CU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/rFgqbl3sSFI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/getting-started-with-the-opscode-chef-platform-configuration-management-in-the-cloud/</feedburner:origLink></item>
		<item>
		<title>Scrum alone won’t cut it</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/dMzn3yGABxs/</link>
		<comments>http://www.agileweboperations.com/scrum-alone-wont-cut-it/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 20:23:34 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Agile Methodologies]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2157</guid>
		<description><![CDATA[Scrum is a great framework for organizing projects. It defines exact roles and procedures to structure your work environment. You gain a lot of visibility and you empower your teams. All that is great. But in software development or operations it&#8217;s not sufficient. You need an underlying set of values and practices which drive quality [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/' rel='bookmark' title='Permanent Link: Agile Methodologies: Scrum vs. Kanban'>Agile Methodologies: Scrum vs. Kanban</a></li>
<li><a href='http://www.agileweboperations.com/scrum-what-new-community-edited-qa-site-about-agile-lean-kanban-and-scurm/' rel='bookmark' title='Permanent Link: Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm'>Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm</a></li>
<li><a href='http://www.agileweboperations.com/waterfall-scrum-and-lean-software-development-simulation-as-teaching-platform/' rel='bookmark' title='Permanent Link: Waterfall, SCRUM and Lean Software Development simulation as teaching platform'>Waterfall, SCRUM and Lean Software Development simulation as teaching platform</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/scrum-alone-wont-cut-it/" title="Permanent link to Scrum alone won&#8217;t cut it"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3257/2923990549_9a4e734051_m.jpg" width="240" height="97" alt="Image by al_green" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fscrum-alone-wont-cut-it%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fscrum-alone-wont-cut-it%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Scrum is a great framework for organizing projects. It defines exact roles and procedures to structure your work environment. You gain a lot of visibility and you empower your teams. All that is great. But in software development or operations it&#8217;s not sufficient. You need an underlying set of values and practices which drive quality and speed.</p>
<h3>Scrum is optimized for projects, not recurring work</h3>
<p>In every company there are regular tasks like out of band user requests, really urgent bug fixes, the weekly report generation and distribution, etc. Scrum doesn&#8217;t really tell you how to deal with those types of issues. They don&#8217;t fit into iterations and can&#8217;t be put on a backlog. They make it hard for a team to commit to a sprint goal.</p>
<h3>Kanban for recurring work</h3>
<p>Kanban is all about optimizing flow. Especially recurring issues should be optimized to flow as fast as possible through your organization to minimize impact on project work. That&#8217;s where Kanban shines. One option is to organize big feature packages as projects using Scrum and have one or two teams dedicated to ongoing operations using Kanban.</p>
<h3>Clean Code</h3>
<p>Another important ingredient for a successful software business is to focus on Clean Code. Keeping your software maintainable is one of the most easily sacrificed but also most important factors for keeping speed and quality up.</p>
<p>By combining various agile practices like Scrum, Kanban, and good old Extreme Programming Ideas you can optimize your software process. Focusing on only one of them implies the risk of missing to address critical areas in your organization.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/agile-methodologies-scrum-vs-kanban/' rel='bookmark' title='Permanent Link: Agile Methodologies: Scrum vs. Kanban'>Agile Methodologies: Scrum vs. Kanban</a></li>
<li><a href='http://www.agileweboperations.com/scrum-what-new-community-edited-qa-site-about-agile-lean-kanban-and-scurm/' rel='bookmark' title='Permanent Link: Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm'>Scrum What? New Community Edited Q&#038;A Site About Agile, Lean, Kanban and Scurm</a></li>
<li><a href='http://www.agileweboperations.com/waterfall-scrum-and-lean-software-development-simulation-as-teaching-platform/' rel='bookmark' title='Permanent Link: Waterfall, SCRUM and Lean Software Development simulation as teaching platform'>Waterfall, SCRUM and Lean Software Development simulation as teaching platform</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dMzn3yGABxs:CftAEG14SDU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dMzn3yGABxs:CftAEG14SDU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=dMzn3yGABxs:CftAEG14SDU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dMzn3yGABxs:CftAEG14SDU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=dMzn3yGABxs:CftAEG14SDU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=dMzn3yGABxs:CftAEG14SDU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/dMzn3yGABxs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/scrum-alone-wont-cut-it/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/scrum-alone-wont-cut-it/</feedburner:origLink></item>
		<item>
		<title>Empower Your Team – You Won’t Regret It</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/kvOEPmi7lns/</link>
		<comments>http://www.agileweboperations.com/empower-your-team-you-wont-regret-it/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 20:12:16 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Agile Methodologies]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2150</guid>
		<description><![CDATA[It&#8217;s hard to find the right structure for any organization. A lot of existing management wisdom comes from a time when you had to organize a physical work force. However, with today&#8217;s &#8220;knowledge workers&#8221; those structures don&#8217;t work as nicely anymore. Everyone needs to prioritize Every developer or devops has to prioritize the current work [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/launch-dates-the-good-the-bad-and-the-ugly/' rel='bookmark' title='Permanent Link: Launch Dates – The Good, The Bad, And The Ugly'>Launch Dates – The Good, The Bad, And The Ugly</a></li>
<li><a href='http://www.agileweboperations.com/a-luxury-problem-how-emerging-iterations-eat-team-commitment-for-breakfast/' rel='bookmark' title='Permanent Link: A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast'>A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast</a></li>
<li><a href='http://www.agileweboperations.com/open-communication-stops-demotivating-your-team/' rel='bookmark' title='Permanent Link: Open Communication Stops De-Motivating your Team'>Open Communication Stops De-Motivating your Team</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/empower-your-team-you-wont-regret-it/" title="Permanent link to Empower Your Team &#8211; You Won&#8217;t Regret It"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3285/3146364197_cb64c655e8_m.jpg" width="229" height="240" alt="Image by _dougie" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fempower-your-team-you-wont-regret-it%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fempower-your-team-you-wont-regret-it%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>It&#8217;s hard to find the right structure for any organization. A lot of existing management wisdom comes from a time when you had to organize a physical work force. However, with today&#8217;s &#8220;knowledge workers&#8221; those structures don&#8217;t work as nicely anymore.</p>
<h3>Everyone needs to prioritize</h3>
<p>Every developer or devops has to prioritize the current work &#8211; nearly constantly. Do I work on a new feature next? Shall I answer those emails first? My box needs an upgrade &#8211; is now the right time for it? You hardly find a pointy haired boss standing behind you dictating your every step (hopefully <img src='http://www.agileweboperations.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Because of this, it&#8217;s extremely important to ensure that everyone shares the same goals and has all information needed to decide what&#8217;s most important right now. If only an archaic elite circle of managers know the whys and whats of a project and just delegate tasks, bad decisions by the executing team are inevitable.</p>
<h3>Empowerment leads to better results, faster</h3>
<p>Giving your team the responsibility for the success of their work is the next logical step. By letting the team know <em>all</em> the surrounding conditions <em>and</em> letting <em>them</em> add to the task list produces the best picture of work to be done you can get. I see it way too often that mostly the technical people in a team know exactly what needs to be done but do not feel to have the power to voice their concerns. Of course, those concerns like &#8220;we need to rethink this module as it will not scale as it is now&#8221; have to be taken into the prioritization of the backlog. If you ignore them for too long, you&#8217;ll see two bad effects:</p>
<ol>
<li>You run into serious technical issues</li>
<li>You stress out your best and most dedicated people</li>
</ol>
<p>Both effects can and should be avoided by choosing a fitting organizational structure: Empowerment of your best people.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/launch-dates-the-good-the-bad-and-the-ugly/' rel='bookmark' title='Permanent Link: Launch Dates – The Good, The Bad, And The Ugly'>Launch Dates – The Good, The Bad, And The Ugly</a></li>
<li><a href='http://www.agileweboperations.com/a-luxury-problem-how-emerging-iterations-eat-team-commitment-for-breakfast/' rel='bookmark' title='Permanent Link: A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast'>A Luxury Problem: How Emerging Iterations Eat Team Commitment For Breakfast</a></li>
<li><a href='http://www.agileweboperations.com/open-communication-stops-demotivating-your-team/' rel='bookmark' title='Permanent Link: Open Communication Stops De-Motivating your Team'>Open Communication Stops De-Motivating your Team</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=kvOEPmi7lns:ar2PjrFlFdU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=kvOEPmi7lns:ar2PjrFlFdU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=kvOEPmi7lns:ar2PjrFlFdU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=kvOEPmi7lns:ar2PjrFlFdU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=kvOEPmi7lns:ar2PjrFlFdU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=kvOEPmi7lns:ar2PjrFlFdU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/kvOEPmi7lns" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/empower-your-team-you-wont-regret-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/empower-your-team-you-wont-regret-it/</feedburner:origLink></item>
		<item>
		<title>Size Matters – Why You Should Prefer Small User Stories</title>
		<link>http://feedproxy.google.com/~r/agileweboperations/~3/GK-6ypxFpic/</link>
		<comments>http://www.agileweboperations.com/size-matters-why-you-should-prefer-small-user-stories/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 20:26:23 +0000</pubDate>
		<dc:creator>Matthias Marschall</dc:creator>
				<category><![CDATA[Agile Methodologies]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[single piece flow]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://www.agileweboperations.com/?p=2114</guid>
		<description><![CDATA[If you have a lot of big user stories, your velocity will jump up and down wildly. This makes it extremely difficult to tell when a user story will be done. Breaking down your huge user stories into smaller ones will help you smooth the flow and give you a clearer picture. User Stories Start [...]


Related posts:<ul><li><a href='http://www.agileweboperations.com/how-to-estimate-user-stories-when-using-pivotaltracker/' rel='bookmark' title='Permanent Link: How To Estimate User Stories When Using PivotalTracker'>How To Estimate User Stories When Using PivotalTracker</a></li>
<li><a href='http://www.agileweboperations.com/estimation-user-stories-story-points-abstract-size-measure/' rel='bookmark' title='Permanent Link: Estimation of User Stories With Story Points as Abstract Size Measure'>Estimation of User Stories With Story Points as Abstract Size Measure</a></li>
<li><a href='http://www.agileweboperations.com/kanban-vs-iterative-development/' rel='bookmark' title='Permanent Link: Kanban vs. Iterative Development'>Kanban vs. Iterative Development</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://www.agileweboperations.com/size-matters-why-you-should-prefer-small-user-stories/" title="Permanent link to Size Matters &#8211; Why You Should Prefer Small User Stories"><img class="post_image alignleft" src="http://farm4.static.flickr.com/3472/3394011066_0d7e995a5f_m.jpg" width="240" height="180" alt="Image by couchlearner" /></a>
</p><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.agileweboperations.com%2Fsize-matters-why-you-should-prefer-small-user-stories%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.agileweboperations.com%2Fsize-matters-why-you-should-prefer-small-user-stories%2F&amp;source=mmarschall&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>If you have a lot of big <a href="http://www.agileweboperations.com/user-stories-making-sure-your-customers-get-first-class-seats/">user stories</a>, your <a href="http://www.agileweboperations.com/velocity-what-will-we-be-able-deliver-week/">velocity</a> will jump up and down wildly. This makes it extremely difficult to tell when a user story will be done. Breaking down your huge user stories into smaller ones will help you smooth the flow and give you a clearer picture.</p>
<h3>User Stories Start Big</h3>
<p>Often you have an idea for a new feature. There is a vague picture in your mind how it could look and work. You put it on the backlog to be able to estimate and prioritize it. Teams new to agile often make the mistake to keep it that way. They assign it a huge amount of story points and start hacking away.</p>
<h3>Big User Stories Are Abstract</h3>
<p>The problem with this approach is that you skip an important design step in your process. A rough feature idea needs further break down to find out how exactly it should look like. By doing that you will replace the big, abstract story with a lot of smaller, more concrete ones. If your feature idea was &#8220;mobile support&#8221; you might start breaking it down into stories like &#8220;show my location&#8221;, &#8220;show nearby friends&#8221;, etc. These stories will replace the &#8220;mobile support&#8221; story. Now, it might be possible to estimate those stories. Usually the sum of story points for the descendent stories is bigger than the very vague estimate for the original user story.</p>
<h3>Big User Stories Block Your Flow</h3>
<p>Another issue of keeping user stories too big is that they will block your flow. If you use one week long iterations a big story might span multiple iterations. That means you deliver 0 story points for a couple of weeks and then suddenly you earn all 40 or so points for that one huge story. Unfortunately even after quite some weeks you have no idea which velocity you could deliver ongoing. Dividing the 40 story points by number of iterations will not cut it.</p>
<p>Only if you use small enough stories, which you can complete within one iteration, will you get a reasonable value for your velocity iteration after iteration. Only then you&#8217;ll be able to tell when stories could be finished in the future.</p>


<p>Related posts:<ul><li><a href='http://www.agileweboperations.com/how-to-estimate-user-stories-when-using-pivotaltracker/' rel='bookmark' title='Permanent Link: How To Estimate User Stories When Using PivotalTracker'>How To Estimate User Stories When Using PivotalTracker</a></li>
<li><a href='http://www.agileweboperations.com/estimation-user-stories-story-points-abstract-size-measure/' rel='bookmark' title='Permanent Link: Estimation of User Stories With Story Points as Abstract Size Measure'>Estimation of User Stories With Story Points as Abstract Size Measure</a></li>
<li><a href='http://www.agileweboperations.com/kanban-vs-iterative-development/' rel='bookmark' title='Permanent Link: Kanban vs. Iterative Development'>Kanban vs. Iterative Development</a></li>
</ul></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/agileweboperations?a=GK-6ypxFpic:QzFiIV8Wjvs:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=GK-6ypxFpic:QzFiIV8Wjvs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=GK-6ypxFpic:QzFiIV8Wjvs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=GK-6ypxFpic:QzFiIV8Wjvs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/agileweboperations?i=GK-6ypxFpic:QzFiIV8Wjvs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/agileweboperations?a=GK-6ypxFpic:QzFiIV8Wjvs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/agileweboperations?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/agileweboperations/~4/GK-6ypxFpic" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.agileweboperations.com/size-matters-why-you-should-prefer-small-user-stories/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.agileweboperations.com/size-matters-why-you-should-prefer-small-user-stories/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 5.050 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-02 21:26:10 --><!-- Compression = gzip -->
