<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://www.agileweboperations.com">
<channel>
 <title>Agile Web Operations</title>
 <link>http://www.agileweboperations.com</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/agileweboperations" type="application/rss+xml" /><feedburner:emailServiceId>1963350</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item>
 <title>Pimp my Website: Downsizing your Web Pages</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/454642131/pimp-my-website-downsizing-your-web-pages</link>
 <description>&lt;style type="text/css" rel="stylesheet"&gt;
a.credits { font-size:7pt; color:black; font-style:italic; }
a.credits:link    { text-decoration:underline; }
a.credits:visited { text-decoration:underline; }
a.credits:hover   {  text-decoration:underline; }
a.credits:active  {  text-decoration:underline; }
&lt;/style&gt;&lt;p&gt;&lt;span class="inline inline-right"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/smart_compare.jpg" alt="downsizing page content" title=""  class="image image-_original " width="240" height="160" /&gt;&lt;br /&gt;
&lt;p style="text-align:right;"&gt;&lt;a class="credits" href="http://flickr.com/photos/barteverts/2683571037/"&gt;Photo by b&amp;nbsp;a&amp;nbsp;r&amp;nbsp;t&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In the current economic downturn, everyone's keeping an extra close eye on the bottom line and looking for ways to save money. Let's compare the bytes of data on your network to water droplets and your website to a leaky faucet. You know you should take an afternoon and fix the damn thing, but something more important always comes up. But this doesn't stop the monthly bill from coming, does it? Holy cow, those drops add up! Today, I'd like to share a few tips on how you can get this faucet fixed up to save on monthly bandwidth fees.&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;/p&gt;
&lt;h2&gt;HTML Compression&lt;/h2&gt;
&lt;p&gt;There are a lot of different ways you can reduce the size of your served content. Perhaps the easiest (and most important) is using a server side compression library like mod_gzip (for Apache 1.x servers) or mod_deflate (for Apache 2.x). All modern browsers can identify and reconstitute compressed content and both of these libraries allow you to set the &lt;a href="http://www.devarticles.com/c/a/Apache/Compressing-Web-Content-with-mod-gzip-and-mod-deflate/"&gt;default compression algorithm&lt;/a&gt; (between fast and best compressed). An average compression rate &lt;a href="http://developer.yahoo.com/performance/rules.html#gzip"&gt;is about 70%&lt;/a&gt; so if you're currently paying any monthly overage fees to your hosting provider, check this out immediately.&lt;/p&gt;
&lt;h2&gt;Image Compression&lt;/h2&gt;
&lt;p&gt;Images &lt;em&gt;used to be&lt;/em&gt; trickier. You'd have to play around with some locally installed picture editor trying to figure out which file type and which compression left the image pretty much the same but substantially reduced its size. Now, you can just head over to &lt;a href="http://smushit.com/"&gt;Smush.it&lt;/a&gt; and upload an image from your desktop or enter a URL of an online image for "smushing". In my initial &lt;a href="http://www.agileweboperations.com/website-performance-optimization"&gt;Website Performance Optimization&lt;/a&gt; post, I hesitantly added 5 fairly big images. While trying to keep their sizes as small as possible yet still be understandable, one pic 'pingdom.png' still weighed in at a hefty 52KB. After "Smushing it" :&lt;/p&gt;
&lt;p&gt;&lt;span class="inline inline-center"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/smushit.optimized.png" alt="smush.it image optimization" title=""  class="image image-_original " width="640" height="92" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pretty cool! But then I dug around some more and found the &lt;a href="http://tools.dynamicdrive.com/imageoptimizer/index.php"&gt;Online Image Optimizer&lt;/a&gt; site from Dynamic Drive. Just for fun, I fed the the above image into it to see what it could do :&lt;/p&gt;
&lt;p&gt;&lt;span class="inline inline-center"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/dynamicdrive.png" alt="dynamicdrive image optimization" title="dynamicdrive"  class="image image-preview " width="590" height="612" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Wow! I can go from 30KB down to 6KB for a similar image (and if you right click on this image above, you'll see that I did so). Great to be able to see in-line all the results of the various algorithms (and gives you a sneak-peek into how these tools work as well). &lt;/p&gt;
&lt;h2&gt;CSS &amp;amp; JS Compression&lt;/h2&gt;
&lt;p&gt;Depending on how desperate you are, you can even go as far as removing whitespace from large CSS and javascript files. There are lots of &lt;a href="http://www.websiteoptimization.com/speed/tweak/whitespace/"&gt;tools&lt;/a&gt; to help you with this but remember to do this at deploy time (so as not to make these files unmaintainable). &lt;/p&gt;
&lt;p&gt;Even more hardcore, renaming (essentially obfuscating) your CSS class names to save on bytes transferred over the wire. Why specify  &lt;span class="geshifilter"&gt;&lt;code class="geshifilter-text"&gt;&amp;lt;div id=&amp;quot;border_top_frame&amp;quot; class=&amp;quot;input_blackout_field&amp;quot;&amp;gt;&lt;/code&gt;&lt;/span&gt; when &lt;span class="geshifilter"&gt;&lt;code class="geshifilter-text"&gt;&amp;lt;div id=&amp;quot;btf&amp;quot; class=&amp;quot;ibf&amp;quot;&amp;gt;&lt;/code&gt;&lt;/span&gt; will do? Initially, the 30 byte savings may not seem like a lot. But if you're using this to render every row in a 100 record dataset, you've just shaved 3K off the page size. Again, only do this obfuscation step as part of a pre-production deployment to your web servers. &lt;/p&gt;
&lt;p&gt;To recap:&lt;/p&gt;
&lt;dl&gt;
&lt;li&gt;HTML : &lt;a href="http://sourceforge.net/projects/mod-gzip/"&gt;mod_gzip&lt;/a&gt; or &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html"&gt;mod_deflate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;images : &lt;a href=""&gt;Smush.it&lt;/a&gt; and &lt;a href=""&gt;Online Image Optimizer from Dynamic Drive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CSS &amp;amp; JS : &lt;a href="http://websitetips.com/articles/optimization/css/crunch/"&gt;whitespace remover&lt;/a&gt; and &lt;a href="http://javascriptcompressor.com/"&gt;obfuscation enhancement&lt;/a&gt;&lt;/li&gt;
&lt;/dl&gt;
&lt;h2&gt;Content Delivery Network (CDN)&lt;/h2&gt;
&lt;p&gt;Why transfer the bytes yourself at all if you don't have to? Google offers &lt;a href="http://code.google.com/apis/ajaxlibs/documentation/"&gt;free hosting&lt;/a&gt; for the latest versions of many, well-known scripts like jQuery, Prototype and script_aculo_us. Take advantage of this! A lot of these requests will even be automatically routed to the closest regional cache (for improved download speeds). &lt;/p&gt;
&lt;p&gt;Depending on how large an audience you have, it might be time to step up to the big leagues. &lt;a href="http://www.akamai.com/"&gt;Akamai&lt;/a&gt;, &lt;a href="http://www.bitgravity.com/"&gt;BitGravity&lt;/a&gt;, &lt;a href="http://www.limelightnetworks.com/"&gt;Limelight Networks&lt;/a&gt;, or &lt;a href="http://www.pantherexpress.net/"&gt;Panther Express&lt;/a&gt; all cost money but can improve end-user response times by 20% or more by serving up your static content from their huge, regionalized caches.&lt;/p&gt;
&lt;h2&gt;Cookies&lt;/h2&gt;
&lt;p&gt;The bane of privacy trumpeters, cookies are the de-facto standard for interacting with most popular websites nowadays. While standards are a good thing, abuses still run rampant especially in the sheer size of some of these cookies. Going through my cookies, I stumbled across this 1KB monster from komtrack.com:&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;&amp;lt;TDT&amp;gt;&amp;lt;USERID&amp;gt;abcdef1234567000&amp;lt;/USERID&amp;gt;&amp;lt;CLICKLOGID&amp;gt;abcdef123z456000&amp;lt;/CLICKLOGID&amp;gt;&amp;lt;VIEWLOGID&amp;gt;0&amp;lt;/VIEWLOGID&amp;gt;&amp;lt;IMPRLOGID&amp;gt;0&amp;lt;/IMPRLOGID&amp;gt;&amp;lt;CLICK_PARTNER&amp;gt;17&amp;lt;/CLICK_PARTNER&amp;gt;&amp;lt;VIEW_PARTNER&amp;gt;0&amp;lt;/VIEW_PARTNER&amp;gt;&amp;lt;CLICK_PT&amp;gt;&amp;lt;/CLICK_PT&amp;gt;&amp;lt;CLICK_BLOCK&amp;gt;1&amp;lt;/CLICK_BLOCK&amp;gt;&amp;lt;CLICK_PP1&amp;gt;1&amp;lt;/CLICK_PP1&amp;gt;&amp;lt;CLICK_PP2&amp;gt;0&amp;lt;/CLICK_PP2&amp;gt;&amp;lt;CLICK_PP3&amp;gt;0&amp;lt;/CLICK_PP3&amp;gt;&amp;lt;CLICK_PP4&amp;gt;0&amp;lt;/CLICK_PP4&amp;gt;&amp;lt;CLICK_PP5&amp;gt;0&amp;lt;/CLICK_PP5&amp;gt;&amp;lt;CLICK_PP6&amp;gt;0&amp;lt;/CLICK_PP6&amp;gt;&amp;lt;CLICK_PP7&amp;gt;0&amp;lt;/CLICK_PP7&amp;gt;&amp;lt;CLICK_PP8&amp;gt;0&amp;lt;/CLICK_PP8&amp;gt;&amp;lt;CLICK_PP9&amp;gt;0&amp;lt;/CLICK_PP9&amp;gt;&amp;lt;CLICK_TP1&amp;gt;6&amp;lt;/CLICK_TP1&amp;gt;&amp;lt;CLICK_TP2&amp;gt;0&amp;lt;/CLICK_TP2&amp;gt;&amp;lt;CLICK_TP3&amp;gt;2&amp;lt;/CLICK_TP3&amp;gt;&amp;lt;CLICK_TP4&amp;gt;3&amp;lt;/CLICK_TP4&amp;gt;&amp;lt;CLICK_TP5&amp;gt;0&amp;lt;/CLICK_TP5&amp;gt;&amp;lt;CLICK_TP6&amp;gt;0&amp;lt;/CLICK_TP6&amp;gt;&amp;lt;CLICK_TP7&amp;gt;0&amp;lt;/CLICK_TP7&amp;gt;&amp;lt;CLICK_TP8&amp;gt;1&amp;lt;/CLICK_TP8&amp;gt;&amp;lt;CLICK_TP9&amp;gt;0&amp;lt;/CLICK_TP9&amp;gt;&amp;lt;CLICK_TP10&amp;gt;0&amp;lt;/CLICK_TP10&amp;gt;&amp;lt;VIEW_PP1&amp;gt;0&amp;lt;/VIEW_PP1&amp;gt;&amp;lt;VIEW_PP2&amp;gt;0&amp;lt;/VIEW_PP2&amp;gt;&amp;lt;VIEW_PP3&amp;gt;0&amp;lt;/VIEW_PP3&amp;gt;&amp;lt;VIEW_PP4&amp;gt;0&amp;lt;/VIEW_PP4&amp;gt;&amp;lt;VIEW_PP5&amp;gt;0&amp;lt;/VIEW_PP5&amp;gt;&amp;lt;VIEW_PP6&amp;gt;0&amp;lt;/VIEW_PP6&amp;gt;&amp;lt;VIEW_PP7&amp;gt;0&amp;lt;/VIEW_PP7&amp;gt;&amp;lt;VIEW_PP8&amp;gt;0&amp;lt;/VIEW_PP8&amp;gt;&amp;lt;VIEW_PP9&amp;gt;0&amp;lt;/VIEW_PP9&amp;gt;&amp;lt;VIEW_TP1&amp;gt;0&amp;lt;/VIEW_TP1&amp;gt;&amp;lt;VIEW_TP2&amp;gt;0&amp;lt;/VIEW_TP2&amp;gt;&amp;lt;VIEW_TP3&amp;gt;0&amp;lt;/VIEW_TP3&amp;gt;&amp;lt;VIEW_TP4&amp;gt;0&amp;lt;/VIEW_TP4&amp;gt;&amp;lt;VIEW_TP5&amp;gt;0&amp;lt;/VIEW_TP5&amp;gt;&amp;lt;VIEW_TP6&amp;gt;0&amp;lt;/VIEW_TP6&amp;gt;&amp;lt;VIEW_TP7&amp;gt;0&amp;lt;/VIEW_TP7&amp;gt;&amp;lt;VIEW_TP8&amp;gt;0&amp;lt;/VIEW_TP8&amp;gt;&amp;lt;VIEW_TP9&amp;gt;0&amp;lt;/VIEW_TP9&amp;gt;&amp;lt;VIEW_TP10&amp;gt;0&amp;lt;/VIEW_TP10&amp;gt;&amp;lt;CP1&amp;gt;0&amp;lt;/CP1&amp;gt;&amp;lt;CP2&amp;gt;0&amp;lt;/CP2&amp;gt;&amp;lt;MOD&amp;gt;&amp;lt;/MOD&amp;gt;&amp;lt;/TDT&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
An entire XML document as a cookie - nice! No clue how often this had to be transferred back and forth but its definitely a great example of &lt;a href="http://developer.yahoo.com/performance/rules.html#cookie_size"&gt;bad cookie practice&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another idea - if you use multiple domains for serving content, you can ensure that cookies are &lt;a href="http://developer.yahoo.com/performance/rules.html#cookie_free"&gt;tied to only one of these domains&lt;/a&gt; This will free your static requests (images, javascript files, etc.) from cookie overhead. Keep your cookies lean and mean and your users will feel the difference.&lt;/p&gt;
&lt;p&gt;You now have a few extra tricks up your sleeve to reduce your website's overall bandwidth utilization and reduce your monthly hosting bill. Speaking of which, when's the last time you actually reviewed this? Take a look at your monthly bandwidth limit, extra fee per GB overage and ratio of uploads to downloads. Does your hosting provider offer a contact that better fits your site's usage? Remember, everything is negotiable! You could save yourself a load of cash without tweaking a single configuration file.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=bz57n"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=bz57n" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=QbT0n"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=QbT0n" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=tKqln"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=tKqln" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=N6i8N"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=N6i8N" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/454642131" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/pimp-my-website-downsizing-your-web-pages#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/optimization">optimization</category>
 <category domain="http://www.agileweboperations.com/tags/performance">performance</category>
 <pubDate>Sun, 16 Nov 2008 06:15:22 +0000</pubDate>
 <dc:creator>Dan Ackerson</dc:creator>
 <guid isPermaLink="false">102 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/pimp-my-website-downsizing-your-web-pages</feedburner:origLink></item>
<item>
 <title>I want to start agile, how can I do that?</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/452162374/i-want-start-agile-how-can-i-do</link>
 <description>&lt;p&gt;Last week a new colleague of a former colleague of mine ;-) asked me: "How can I get agile started? I really like the ideas but don't know where to begin or how to convince others around me to try it out. What should I do?"&lt;/p&gt;
&lt;p&gt;Getting started with agile is not easy. First, you have to convince everybody that it's a good idea to try it and then, if you really managed to get the ball rolling, you begin to uncover all the hidden problems which have existed since decades in your development processes. Ouch. Only if you make it through these two phases will you be blessed with the advantages of an agile process: high speed, high quality, high visibility and high value of what you are doing.&lt;/p&gt;
&lt;p&gt;Today I want to show you one way to tackle the first hurdle.&lt;/p&gt;
&lt;h3&gt;Identify the Biggest Problem&lt;/h3&gt;
&lt;p&gt;When I struggled to introduce agile processes and practices within my former organization, the single most useful tool which enabled my break through was a Value Stream Map as described by Marry and Tom Poppendieck in their first book about &lt;a href="http://www.poppendieck.com/ld.htm"&gt;Lean Software Development&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I used the most simple version like the following picture shows:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/value_stream_map_big.png" alt="Value Stream Map" title="Value Stream Map" class="image image-_original " width="640" height="241" /&gt;&lt;/p&gt;
&lt;p&gt;The green lines are productive time spent to create value. The red lines represent the time that value sits around your office (not released to your customers) - wasted time. The x-axis shows the timeline. Just doing this simple exercise shows how badly out of proportion your value-added time is compared to wasted time. If you want to speed up feature delivery, you have to minimize the time wasted. There are a lot of red line segments, each of them pointing out an area of possible improvement. But you should focus your resources. Instead of trying to attack all problems at once you should only attack the biggest one. And the biggest problem is your biggest red line segment.&lt;/p&gt;
&lt;p&gt;In my case, it was the waiting time from a feature being ready for release until the next release. We only did two releases a year so this waiting time could be close to &lt;strong&gt;six months&lt;/strong&gt; in worst case. Compare that to the couple of &lt;em&gt;days&lt;/em&gt; between development and testing and its pretty obvious which problem needs to be addressed first.&lt;/p&gt;
&lt;h3&gt;Attack the Biggest Problem&lt;/h3&gt;
&lt;p&gt;With such a Value Stream Map in hand you should be able to get the attention of your co-workers: "What? We really take up to two and a half years to deliver a feature :-O ?" Yes, we do. It wasn't nice to be forced to accept that truth, but it set the stage for change. After identifying our 6 month release cycles as the biggest waste, it was rather easy to come up with an initial idea: Let's do releases more often.&lt;/p&gt;
&lt;p&gt;First, we decided to try to release something every two months. This was a classical "stretch goal" - a goal you can only reach by substantially changing the way you work because you'd never be able to attain it if you keep working like today. That need for a substantial, innovative change of our procedures gave us the required kick-start for agile. &lt;/p&gt;
&lt;p&gt;Speeding up the process showed us one bottleneck after the other: Manual regression testing wasn't possible anymore as there wasn't enough time for it. So, we had to introduce automated tests. Month long design phases creating "perfect specs" were not possible anymore either. So we introduced user stories and acceptance test criteria. And so on. The Agile Train was rolling...&lt;/p&gt;
&lt;p&gt;What are your experiences with introducing agile practices and processes? Did it work out well? How did you get it started? We would love to hear your story in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=O0Dyn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=O0Dyn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=d8bSn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=d8bSn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=zi7En"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=zi7En" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=tnK0N"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=tnK0N" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/452162374" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/i-want-start-agile-how-can-i-do#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/agile-software-development">agile software development</category>
 <pubDate>Thu, 13 Nov 2008 19:43:02 +0000</pubDate>
 <dc:creator>Matthias Marschall</dc:creator>
 <guid isPermaLink="false">108 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/i-want-start-agile-how-can-i-do</feedburner:origLink></item>
<item>
 <title>Pimp my Website: Streamlining Your Content</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/447158253/pimp-my-website-streamlining-your-content</link>
 <description>&lt;style type="text/css" rel="stylesheet"&gt;
a.credits { font-size:7pt; color:black; font-style:italic; }
a.credits:link    { text-decoration:underline; }
a.credits:visited { text-decoration:underline; }
a.credits:hover   {  text-decoration:underline; }
a.credits:active  {  text-decoration:underline; }
&lt;/style&gt;&lt;p&gt;&lt;span class="inline inline-left"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/streamline.jpg" alt="streamlining content" title=""  class="image image-_original " width="240" height="140" /&gt;&lt;br /&gt;
&lt;p style="text-align:left;"&gt;&lt;a class="credits" href="http://flickr.com/photos/ansik/2509267754/"&gt;Photo by ansik&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hopefully, you have a better idea about how (un)performant and (un)optimized your website is after going through some of the tools I introduced you to &lt;a href="http://www.agileweboperations.com/website-performance-optimization"&gt;last week&lt;/a&gt;. You've made the first step in getting to know more about how your site is really served to your users. Now, I'll start walking you through some of the basic things you can do to start tuning up your website.&lt;/p&gt;
&lt;p&gt;Ever caught yourself saying "yeah, I know the homepage is a bit heavy but the users only have to load it once - after that, it'll be cached and much faster". Well, according to Tenni Theurer, last year roughly &lt;strong&gt;half&lt;/strong&gt; of the visitors that come through Yahoo! &lt;a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/"&gt;had an empty cache&lt;/a&gt; - meaning they have to download all the images and scripts on the page. This means that even if your page is viewed as often as Yahoo!'s, a lot of your users will be having to download all the content &lt;em&gt;on a daily basis&lt;/em&gt;. Even if you're lucky enough to earn more than one page view per day, you should definitely be streamlining your homepage for the long haul. After all, you want these users to come back, right?&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;/p&gt;
&lt;h2&gt;Minimize HTTP Requests&lt;/h2&gt;
&lt;p&gt;The first step, according to Yahoo!'s &lt;a href="http://developer.yahoo.com/performance/rules.html#num_http"&gt;"Best Practices for Speeding Up Your Web Site"&lt;/a&gt; is minimizing the number of HTTP requests made by the users' browser to your web server(s). What we are basically trying to eliminate here is overhead. For every request and response (and all the packets in between) the TCP-IP stack adds a number of bytes which help make this protocol so reliable. As bytes add up (and browsers can only download so many files in parallel), we're looking to save some overhead and make the request and response handshake as efficient as possible. &lt;/p&gt;
&lt;p&gt;A few of the ways to do this include :&lt;/p&gt;
&lt;dl&gt;
&lt;li&gt;combining separate javascript files at deploy time: multiple files can be concatenated into one, saving request overhead&lt;/li&gt;
&lt;li&gt;combining separate CSS files at deploy time: same idea as above&lt;/li&gt;
&lt;li&gt;combining images into a single file: either in an image map or CSS sprite&lt;/li&gt;
&lt;/dl&gt;
&lt;p&gt;Don't know what a &lt;a href="http://www.fiftyfoureleven.com/weblog/web-development/css/css-sprites-images-optimization"&gt;CSS sprite&lt;/a&gt; is? It's actually quite "old school technology" used in the early 8-bit and 16-bit game development era. Basically, take all your image files, stores them in a single file (&lt;code&gt;background-image&lt;/code&gt;) and reference their (x, y) grid coordinates with &lt;code&gt;background-position&lt;/code&gt; for page placement. I spent some time overhauling a site which had over 60 images (the vast majority less than 100 &lt;em&gt;bytes&lt;/em&gt;). By the time I was through, there were 7 images and site load times were improved by almost 33%. Watch out for single pixel images which are used in repeat-x or repeat-y styles. You will have to create 2 separate sprites (i.e. repeat-x_sprite.png and repeat-y_sprite.png) to hold these 1-pixel instances in order to be able to correctly use the CSS sprite technique. &lt;/p&gt;
&lt;p&gt;CSS sprites are indeed &lt;a href="http://css-tricks.com/css-sprites-what-they-are-why-theyre-cool-and-how-to-use-them/"&gt;very cool&lt;/a&gt;. The heavy lifting is already entirely automated! The folks over at Website Performance host this &lt;a href="http://spritegen.website-performance.org/"&gt;great tool&lt;/a&gt; which takes a zipped archive of all the images on your page (up to 500KB) and actually generates a single image file with the corresponding CSS coordinate map. As you go through your original CSS file meticulously updating the relative &lt;code&gt;px&lt;/code&gt; and &lt;code&gt;em&lt;/code&gt; positions, you'll find the &lt;a href="http://riddle.pl/emcalc/"&gt;emcalc&lt;/a&gt; tool indispensable.&lt;/p&gt;
&lt;h2&gt;Multiple Domains&lt;/h2&gt;
&lt;p&gt;Most modern browsers invoke parallel, concurrent requests to separate domains. This means if you have your website hosted at 'www.mysite.net' you could host your images under images.mysite.net and the browser would invoke simultaneous requests (and process parallel responses) for javascript, css and image files. Website Performance Optimization has a &lt;a href="http://www.websiteoptimization.com/speed/tweak/parallel/"&gt;nice write up&lt;/a&gt; of this technique where they conclude that up to a 40% improvement in web page latency can be attained in many sites. &lt;/p&gt;
&lt;p&gt;But be careful not to overdo it - the sweet spot seems to be between 2 and 4 domains. Because of DNS lookups, you don't want to delay your page load in case of some troublesome roundtrip times. For instance, if the user gets unlucky 4x120ms ~= 1/2 second of &lt;strong&gt;blocked&lt;/strong&gt; time lost (where no other content is loaded or rendered). &lt;/p&gt;
&lt;h2&gt;Caching AJAX requests&lt;/h2&gt;
&lt;p&gt;We all know the phenomenon of Web 2.0 and its AJAX underpinnings. What was such a boon to users and usability has pushed alot of poor web servers way over their thresholds. Consider a simple AJAX chat client. How often should you poll the server to see if a message has been written (or a friend is online)? Such seemingly harmless questions can quickly overload and kill a website. Let's say you have 100 chat users logged in to your site. You've decided to poll for new messages every 2 seconds and contact list updates every 10 seconds. In just one minute of elapsed time you're users have unknowingly generated over 3000 clickless requests. &lt;/p&gt;
&lt;p&gt;If your server utilizes &lt;a href="http://developer.yahoo.com/performance/rules.html#expires"&gt;future &lt;code&gt;Expire&lt;/code&gt; or &lt;code&gt;Cache-Control&lt;/code&gt; headers&lt;/a&gt; for AJAX, and there hasn't been any update in message or contact list status, these responses can be pulled from the browser's local cache negating a round trip and greatly improving rendering speeds.&lt;/p&gt;
&lt;h2&gt;Loading of Components&lt;/h2&gt;
&lt;p&gt;Only load what you need when you need it. Sounds pretty straightforward but can cause some headaches to the unwary. Relevant stylesheets should be placed in the document HEAD using LINK tags to help make pages &lt;em&gt;appear&lt;/em&gt; to be loading faster. Because the browser will start rendering these as soon as it has the data, items begin to popup for the user who's brain begins to interact with your site (load times &lt;em&gt;feel&lt;/em&gt; faster). &lt;/p&gt;
&lt;p&gt;Javascript should be placed as far to the bottom of the page as possible. This is because browsers stop all other requests and page rendering while parsing any scripts. While you may not be able to place all javascripts and their references at the end of the page, every one you do saves precious rendering time.&lt;/p&gt;
&lt;h2&gt;Avoid redirects and 404s&lt;/h2&gt;
&lt;p&gt;Redirects are often helpful for developers and sysadmins, but consume unnecessary time for the user. By default, neither 301 nor 302 statuses are cached by the browser unless &lt;code&gt;Expires&lt;/code&gt; or &lt;code&gt;Cache-Control&lt;/code&gt; are specifically added. A particularly wasteful redirect is when a trailing slash (/) is missing from a URL that should otherwise have one. For example, going to 'http://www.webmd.com/a-to-z-guides' results in &lt;strong&gt;two&lt;/strong&gt; 301 responses; first to 'http://www.webmd.com/a-to-z-guides/default.htm' and then to 'http://www.webmd.com/a-to-z-guides/common-topics/default.htm'! If you're using Apache, you can fix this by setting up an &lt;code&gt;Alias&lt;/code&gt; or &lt;code&gt;mod_rewrite&lt;/code&gt;, or the &lt;code&gt;DirectorySlash&lt;/code&gt; directive (for Apache handlers).&lt;/p&gt;
&lt;p&gt;HTTP requests are expensive enough without getting a useless response like "404 Not Found". Particularly obnoxious is when an external JavaScript is taken down without warning. Not only will your browser block everything else while it tries to retrieve it, but it may even try to parse the 404 response as javascript, hoping against hope to find something usable. Yuck!&lt;/p&gt;
&lt;p&gt;I've given you just a taste of some ideas for streamlining your website's content to delight both your users and your resident sysadmin. Next week, I want to give you some pointers on how to &lt;em&gt;reduce the overall size&lt;/em&gt; of your web page to further increase load times and take a bite out of your monthly bandwidth bill. Subscribe to &lt;a href="http://www.agileweboperations.com/rss.xml"&gt;our feed&lt;/a&gt; to get it served up piping fresh in your favorite news reader.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=YojHn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=YojHn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=ICnTn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=ICnTn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=xb6pn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=xb6pn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=PRpWN"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=PRpWN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/447158253" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/pimp-my-website-streamlining-your-content#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/optimization">optimization</category>
 <category domain="http://www.agileweboperations.com/tags/performance">performance</category>
 <pubDate>Sun, 09 Nov 2008 06:15:09 +0000</pubDate>
 <dc:creator>Dan Ackerson</dc:creator>
 <guid isPermaLink="false">100 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/pimp-my-website-streamlining-your-content</feedburner:origLink></item>
<item>
 <title>Review: Joyent Accelerator 2.1 beta</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/444719900/review-joyent-accelerator-21-beta</link>
 <description>&lt;p&gt;As you might remember, I recently interviewed &lt;a href="http://www.agileweboperations.com/kent-langley-talks-about-joyent-their-new-accelerators-and-their-use-opensolaris"&gt;Kent about the new Joyent Accelerators&lt;/a&gt;.  I've now had a chance to give the new Joyent Accelerator template (version 2.1.3) a spin. The current release is 2.1.4 including some updates, which I'll point out below. Joyent provided me with two Accelerators for one week to try 'em out. Being a guy who normally tweaks everything to his liking (I'm kind of a perfectionist), I didn't expect much from the pre-installed software. Usually, when I start using a box with pre-installed packages I delete most of what's there and then install and configure to my preferences.&lt;/p&gt;
&lt;p&gt;This was my first surprise in testing out the Accelerator. It comes with tons of software pre-installed, but, instead of generating an urge to get rid of it as fast as possible, I found everything set up very much in a way I couldn't have done better. In fact, I have to admit that I learned one or two things I could use to tweak my own setup ;-)&lt;/p&gt;
&lt;p&gt;In the following sections I want to share with you the details about what I tested and how I liked it.&lt;/p&gt;
&lt;h3&gt;Welcome Email And Securing Your Accelerator&lt;/h3&gt;
&lt;p&gt;My first contact with the Accelerator was the welcome email containing the IP address of the Accelerator as well as usernames and passwords for SSH and webmin access. Additionally, there were some links to introductory articles on the Joyent wiki. What I missed was a link to the article which describes &lt;a href="http://wiki.joyent.com/accelerators:kb:change-passwords"&gt;changing default accelerator passwords&lt;/a&gt;. It  will be in the final welcome email. Kent already notified me, that the descriptions there were clarified based on feedback they received.&lt;/p&gt;
&lt;h3&gt;Package Management&lt;/h3&gt;
&lt;p&gt;Joyent does not use a pre-packaged version of OpenSolaris, opting to instead run a Nevada build. According to Kent, they do this to be able to get the most stability for their clients. Earlier this year they decided to switch from Blastwave to pkgsrc, the &lt;a href="http://www.netbsd.org/docs/software/packages.html"&gt;NetBSD package management system&lt;/a&gt;. They even host their own pkgsrc repository with a bulk load of precompiled packages optimized for running on an Accelerator. As I'm used to the OpenSolaris Package Manager IPS, I tried to play around a little with pkgsrc. The first thing I ran into was that I confused pkgsrc's &lt;em&gt;pkg_add&lt;/em&gt; command with the additionally installed &lt;em&gt;pkgadd&lt;/em&gt; commmand from Blastwave. I tried to follow the &lt;a href="http://wiki.joyent.com/facebook:kb:jpkgsrc"&gt;instructions to install a new package&lt;/a&gt; using the wrong command and obviously the syntax did not fit. To avoid that pitfall for other users new to Solaris, it might be better to provide only pkgsrc by default and an easy, optional way of installing Blastwave support if you need it.&lt;/p&gt;
&lt;h3&gt;Rails Stack&lt;/h3&gt;
&lt;p&gt;The new Accelerator comes with a full Ruby on Rails stack pre-installed. It features the latest versions of Ruby (1.8.7p72) and Rails (2.1). Unfortunately, Ruby 1.8.7 is not yet DTrace enabled. I had a short look at &lt;a href="https://dev.joyent.com/projects/ruby-dtrace/wiki/Ruby+DTrace"&gt;Joyent's Ruby DTrace patches&lt;/a&gt; for Ruby 1.8.5 and 1.8.6 but my &lt;em&gt;make&lt;/em&gt; knowledge is too rusty to port it to 1.8.7 within a reasonable timeframe :-(&lt;/p&gt;
&lt;p&gt;One thing I liked was that the accelerators have &lt;a href="http://www.modrails.com/"&gt;Phusion Passenger (aka mod_rails)&lt;/a&gt; pre-installed. I wanted to try that one out for a long time and now I had the chance. It was not enabled by default in the beta version I tested (2.1.3), but now, in the current 2.1.4 release, it is. Now starting a rails app is as trivial as typing &lt;code&gt;rails myapp&lt;/code&gt; within your web root directory. I didn't do a heavy load test but it seems to work quite nicely.&lt;/p&gt;
&lt;h3&gt;Installing Wordpress&lt;/h3&gt;
&lt;p&gt;As I didn't find an immediate way to get wordpress from pkgsrc, I used the Subversion install method to get it running. Everything required by Wordpress is already pre-installed and set up. Subversion, Apache, PHP and MySQL are all there and waiting for you to give them some work to do. Using &lt;a href="http://birdhouse.org/software/2008/04/wp-create/"&gt;scot hacker's excellent script&lt;/a&gt; it took me less than 5 minutes to get Wordpress up and running on the Accelerator. I was impressed. Trying to do the same on a plain slicehost VPS took me 1-2 hours as I had to setup all the prerequisites in addition to Wordpress itself.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;Getting started with a Rails project or a blog using Wordpress is a piece of cake using a Joyent Accelerator. I tried shared hosts like dreamhost and virtual root servers like slicehost, but never found the perfect combination of ease of use, power and flexibility. Personally, I really like OpenSolaris, and am currently switching our production environment from Debian + Xen to OpenSolaris and zones. ZFS, SMF and beadm already sold me on Solaris and I haven't even had a closer look at DTrace yet. To ease the (really nasty) pain of switching from Linux to Solaris, Joyent goes the extra mile to make you comfortable. Things like sudo and top, which aren't there in Solaris by default (approximated by pfexec and prstat respectively) are pre-installed. They might be the worse alternative in comparison to the native Solaris tools, but if you come from Linux, you will be glad to have them around 'til you get used to the native ones.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=eQZrn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=eQZrn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=3Obcn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=3Obcn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=rpWin"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=rpWin" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=yF8GN"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=yF8GN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/444719900" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/review-joyent-accelerator-21-beta#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/joyent">joyent</category>
 <category domain="http://www.agileweboperations.com/tags/reviews">reviews</category>
 <pubDate>Thu, 06 Nov 2008 19:37:15 +0000</pubDate>
 <dc:creator>Matthias Marschall</dc:creator>
 <guid isPermaLink="false">92 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/review-joyent-accelerator-21-beta</feedburner:origLink></item>
<item>
 <title>Website Performance Optimization</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/439728727/website-performance-optimization</link>
 <description>&lt;p&gt;Since &lt;a href="http://stevesouders.com/bio.html"&gt;Steve Souders's&lt;/a&gt; published &lt;a href="http://www.stevesouders.com/hpws/"&gt;"High Performance Websites"&lt;/a&gt; back in September 2007, a lot of people finally sat up and took notice of front-end web performance optimization techniques. Over a year later, you'd hope that most folks had figured out the basics like compressing content, using expires headers and reducing requests. Unfortunately, it seems that multi-core processors and bandwidth explosions have pretty much drowned out the awareness of this topic. Case in point, take a look at the search trends for mod_gzip vs. mod_deflate over the last 5 years. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="inline inline-center"&gt;&lt;a href="http://trends.google.com/trends?q=mod_gzip%2C+mod_deflate&amp;amp;date=all&amp;amp;geo=all&amp;amp;ctab=0&amp;amp;sort=1&amp;amp;sa=N" onclick="launch_popup(85, 240, 180); return false;" target="_blank"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/mod_gzip_deflate.png" alt="" title=""  class="image image-_original " width="586" height="220" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Doesn't exactly represent a growing trend, does it?&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;br /&gt;
Website performance optimization is yet another perfect bridge for developers and operations staff to come together and help each other out. Developers want their pages to load as fast as possible, delivering the best user experience. Sysadmins want to reduce load on their servers and decrease operation costs. To start out, have a look at some of the available tools you can use to measure the performance of your website.&lt;/p&gt;
&lt;h3&gt;Local tools for measuring&lt;/h3&gt;
&lt;dl&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt;  web development evolved&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
What started out as a javascript debugger for the Firefox web browser has evolved into the Swiss Army Knife of web development tools. The "Net" tab (pictured below) is what we're interested in : it shows the queuing of all HTTP requests and indicates which of these are loaded in parallel and which are blocked.&lt;br /&gt;
&lt;span class="inline inline-left"&gt;&lt;a href="http://getfirebug.com"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/firebug-net.jpg" alt="firebug-net" title="firebug-net"  class="image image-_original " width="640" height="292" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt; for Firebug&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
A Yahoo! development add-on for the Firebug plug-in (yes, you heard me right - an add-on for a plug-in!), YSlow actually grades your website against best practice optimization ideas.&lt;br /&gt;
&lt;span class="inline inline-left"&gt;&lt;a href="http://developer.yahoo.com/yslow/"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/yslow-perf.jpg" alt="yslow-perf" title="yslow-perf"  class="image image-_original " width="640" height="329" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://www.httpwatch.com/"&gt;HttpWatch&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
Developing for Windows and Internet Explorer? That's still not an excuse as the basic tool from Simtec Limited provides a comparable functionality to Firebug including the ability to decrypt and display HTTPS traffic.&lt;/li&gt;
&lt;/dl&gt;
&lt;h3&gt;Websites for measuring&lt;/h3&gt;
&lt;dl&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://tools.pingdom.com/"&gt;Pingdom Tools&lt;/a&gt; - Full Page Test&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
An online (read no local network side-effects, but your site's performance measured straight from the backbone) HTTP request analyzer in the same vein as the "Net" tab from Firebug above.&lt;br /&gt;
&lt;span class="inline inline-right"&gt;&lt;a href="http://tools.pingdom.com"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/pingdom_0.png" alt="" title=""  class="image image-_original " width="640" height="212" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://site-perf.com/"&gt;Site-Perf.com&lt;/a&gt; Site Performance&lt;/strong&gt;&lt;br /&gt;
Another HTTP request analyzer but with an added feature to choose one of three hub cities including New York &amp;amp; Amsterdam - very helpful for us folks here across the pond.&lt;/span&gt;&lt;span class="inline inline-right"&gt;&lt;a href="http://site-perf.com"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/site-perf.jpg" alt="" title=""  class="image image-_original " width="640" height="385" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caption" style="width: 638px;"&gt;&lt;strong&gt;&lt;a href="http://websiteoptimization.com/services/analyze/"&gt;Web Page Analyzer&lt;/a&gt; Free Website Performance Tool and Web Page Speed Analysis&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
WebSiteOptimization.com's tool is a little less flashy than the preceding sites, but mixes in-depth analysis of HTTP requests with some best practice recommendations.&lt;/li&gt;
&lt;/dl&gt;
&lt;p&gt;Interestingly enough, in making this post I realized that all these screenshots were becoming a bit expensive (5 images at around 320KB). So, I went back through and exchanged those expensive PNGs for comparable JPGs saving almost 50% of the total page size! Such simple considerations can mean the difference between your site surviving that initial Digg surge or conceding "502 Service Temporarily Overloaded" defeat. &lt;/p&gt;
&lt;p&gt;That should keep you busy for awhile. Next week, I'd like to share some of the optimization experiences and techniques recommended by &lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;Yahoo's Exceptional Performance team&lt;/a&gt;. Subscribe &lt;a href="http://www.agileweboperations.com/rss.xml"&gt;here&lt;/a&gt; to add it to your favorite newsreader!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=VnQXn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=VnQXn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=WBzdn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=WBzdn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=PYqwn"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=PYqwn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=BL8dN"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=BL8dN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/439728727" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/website-performance-optimization#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/operations">operations</category>
 <category domain="http://www.agileweboperations.com/tags/optimization">optimization</category>
 <category domain="http://www.agileweboperations.com/tags/performance">performance</category>
 <pubDate>Sun, 02 Nov 2008 06:52:00 +0000</pubDate>
 <dc:creator>Dan Ackerson</dc:creator>
 <guid isPermaLink="false">90 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/website-performance-optimization</feedburner:origLink></item>
<item>
 <title>Kent Langley Talks About Joyent, Their New Accelerators And Their Use of Opensolaris</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/437302549/kent-langley-talks-about-joyent-their-new-accelerators-and-their-use-opensolaris</link>
 <description>&lt;p&gt;&lt;a href="http://www.productionscale.com/"&gt;Kent Langley&lt;/a&gt; is a Senior Director at &lt;a href="http://www.joyent.com"&gt;Joyent&lt;/a&gt;, a cloud computing provider running and offering OpenSolaris Nevada based virtual servers, called Accelerators. Not only was he kind enough to answer my questions about his role at Joyent, details about the brand new Accelerator release, and Solaris, but he even brought in Ben Rockwood to give us an insight into the OpenSolaris community and Joyent's reasons for using pkgsrc.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Kent, you joined Joyent a couple of months back. What are your responsibilities as Sr. Director?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;My full title is Sr. Director of Scale Consulting.  My focus is a blend of business and technical goals.  At this time I work in and manage the Joyent Channel Partner programs, Joyent Labs, and Scale Consulting Services.  But, one of the most important things I do here is leverage my experiences to help customers large and small to understand and meet the challenges faced when migrating to a Cloud Computing infrastructure.  One of the great things here is that migrating customers to Joyent is relatively easy overall because of how much the overall technology stack mirrors what they are often already used to seeing in their own data centers.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Joyent is releasing a brand new version of its Accelerator. What are the major improvements for power users?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Yes 2.1.x will be releasing in just a few days.  The amazing teams here at Joyent created the Accelerator and all the surrounding technology that enables it to do what it does so well.  It is an embodiment of a huge amount of Systems, Software, and Internet knowledge.  &lt;/p&gt;
&lt;p&gt;The biggest improvements for most users out of the box will be things like integration of Phusion Passenger (mod_rails), updated versions of Java, PHP, Ruby on Rails, Python, Erlang, Perl, MySQL, Postgres.  We actually, for the first time, will be including ffmpeg and mencoder as well which is interesting if you need them.  Also, all the celebs will be at the 2.1.x release party.  Apache, memcached, varnish on Solaris, Merb, MySQL, Postfix, Mono, Subversion, Git, and a whole lot more.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Why did you switch from Blastwave to pkgsrc. And why did you completely remove IPS?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I'll roughly quote Ben Rockwood here.  He says we did it for "fine grained control over versions of the packages that we need to support and use for ourselves and our clients. Also, Blastwave seems to have some stability issues."&lt;/p&gt;
&lt;p&gt;We didn't really remove IPS.  It's just not part of Nevada.  So, it wasn't there to remove in the first place.&lt;/p&gt;
&lt;p&gt;The switch from blastwave to pkgsrc was official in March 2008.  One of the things that we have been working hard to do is make things generally easier for people developing and deploying internet applications in the cloud that want the power of Solaris, Dtrace, and ZFS but might be more familiar with other operating systems.  Using pkgsrc allows us to take a step in this direction.  Additionally, we maintain a significant pkgsrc repository for use by our clients.  Recently a beta client said, "The new template is so fully configured that pretty much everything that had been causing me issues is now just installed by default."  This is probably true for anyone that uses or ever used Solaris for anything.  It's kind of a more friendly Solaris.  An accelerator is a full featured building block for creating much more complex services while reducing operational efforts and TCO substantially.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;You're currently running snv_89. OpenSolaris 2008.05 was snv_86 and current (as of this writing) is snv_99. How do you decide which build is stable enough for you to deploy? How much different is your version of OpenSolaris from the official releases? What do you tweak (besides using pkgsrc instead of IPS)?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Technically we don't use OpenSolaris.  The naming conventions are unfortunate.  The best way to think of it is that we do not use Indiana.  We run the Nevada build.  Again, to quote Ben Rockwood, "we do extensive testing of each release and determine which is best and most importantly stable."  Stability is a primary concern, not bells and whistles.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;You aren't using zfs as root filesystem for your Accelerator zones. Why not? Are there any serious technical issues holding you back or is it more a matter of taste?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Actually, we do use ZFS for all the filesystems here.  It's just that most of the details of that are hidden at the Accelerator level.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;You offer shared (Managed) Big IP f5 load balancers to be used to, well, load balance your customers applications. What type of access and configuration possibilities do customers have themselves? When would you recommend starting to use Big IPs?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Direct access to the BigIP's by customers is not allowed.  It's essentially a managed service.  We will work with clients to create and install custom IRules, VIP's, and any variety of setups.  This is an extremely powerful part of our overall infrastructure.&lt;/p&gt;
&lt;p&gt;A short list of the times to use the bigIP's is when your traffic patterns have either exceeded the abilities of a single Acclerator at the application or even the database level in some cases, when you want to use IRules to do application switching based functional partitioning, when you want to “hide” the real IP address of your machine from the world, to replace a software based load balancer that is no longer able to keep up with demand, or if you want to build in some High Availability.  IRules are extremely powerful.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;You send out passwords via e-mail. You ask your users to secure their Accelerator in your welcome mail, but there are quite some steps to be done. I know of hosting companies sending out passwords to mobile phones only. What are the reasons for your current approach. Do you think about changing it? Couldn't you  e.g. offer (at least optionally) the possibility to upload a public key while ordering a new Accelerator?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Once your accelerator is delivered, it's security becomes your responsibility at the password level.  If you change those passwords we can't even get into your Accelerators without some significant effort.&lt;/p&gt;
&lt;p&gt;I think the concept of adding public key at order time would be nice.  I'll float that to the team.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;You are running all possible kinds of web application stacks on your Accelerators. E.g. you talked about a huge drupal site on your blog and joyent is known to host high traffic ruby sites. What are your personal preferences and why?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Yes, the Accelerator is a very flexible building block.  A short list of some stacks would include Tomcat, Gigaspaces XAP, Axiom Stack, GlassFish, CakePHP, Symfony, Drupal, Django, Merb, Ruby on Rails, Mono, CouchDB, Ejabberd, and SunGridEngine.&lt;/p&gt;
&lt;p&gt;We host some of the largest Ruby on Rails, PHP, and other sites on the internet using Joyent Accelerators.  There are multiple sites that serve billions of page views per month.  These are no longer uncommon.  Around here I joke that a billion (pageviews) is the new million.  &lt;/p&gt;
&lt;p&gt;I am pleased that our overall technology stack works well enough to do this even with existing frameworks.  But, it's rather brute force in many cases.  For my personal preferences, I find most technology stacks and frameworks lacking for today's needs when peak loads can be 10x or more above the mean.&lt;/p&gt;
&lt;p&gt;Cloud Computing, the actual act of doing computing in the cloud, has very strong parallels (no pun intended) to distributed programming models.  But, there are only a fraction of existing web frameworks that do this well or even at all.  The more interesting ones allow or provide fully distributed access to a horizontally scalable data layer either in memory or on disk.  It's this data layer that's changing things because it allows a path to scalability that's been unavailable before and all to uncommon still today in every day use.&lt;/p&gt;
&lt;p&gt;So, my personal preferences lean toward languages, frameworks, and products that follow the number of tenants - recently well put in an article in InfoQ about Ebay's architectural policies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infoq.com/articles/ebay-scalability-best-practices" title="http://www.infoq.com/articles/ebay-scalability-best-practices"&gt;http://www.infoq.com/articles/ebay-scalability-best-practices&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;There are claims that the OpenSolaris community is heavily dominated by Sun. What are your experiences with the OpenSolaris community?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I leaned on our resident Sun Community expert, Ben Rockwood, again for this answer:&lt;/p&gt;
&lt;p&gt;The OpenSolaris Community is heavily dominated by Sun. The OpenSolaris Community took an existing close-sourced OS with an enormous corporate infrastructure comprised of several thousand people and opened it to all.  It is natural that the community is dominated by Sun given that those people have been working on the code for the last 20 years are from Sun.  However, a large amount of non-Sun community involvement exists. There are well over 100,000 registered community members (more than 3 times the size of Sun's employee base) and growing steadily.  Several non-Sun community members have served on the OpenSolaris Governing Board, including Ben Rockwood of Joyent.  The CDDL was reviewed by Sun and non-Sun community members alike prior to its ISO launch, pre-OpenSolaris. Given that Solaris is the cornerstone of Sun Microsystems product it's likely that the community will always be dominated by Sun, but its important to distinguish between "comprising the bulk of..." from "iron fisted control".&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What is your personal favorite feature in Solaris? Would you recommend using it? And why?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Broadly speaking there are two high profile features that make Solaris shine.  One is DTrace and the other is ZFS.  Once you begin to understand the power and flexibility of real time active tracing using DTrace it's hard to make do with other tools.&lt;/p&gt;
&lt;p&gt;I would totally recommend working with Solaris.  However, I will be the first to admit that there is a learning curve.  It's not Linux, It's not BSD.  It's Solaris and that comes in various flavors.  As noted, our flavor of Solaris, the Accelerator, is different than most and more than likely a more gentle introduction without losing any of the great features.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Thanks a lot for taking the time to answer these questions.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;My Pleasure.  Thank you for being one of our best beta testers this round!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=B0rcm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=B0rcm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=n6VFm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=n6VFm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=ROGAm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=ROGAm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=BfmdM"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=BfmdM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/437302549" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/kent-langley-talks-about-joyent-their-new-accelerators-and-their-use-opensolaris#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/interviews">interviews</category>
 <category domain="http://www.agileweboperations.com/tags/joyent">joyent</category>
 <category domain="http://www.agileweboperations.com/tags/opensolaris">OpenSolaris</category>
 <pubDate>Thu, 30 Oct 2008 19:28:13 +0000</pubDate>
 <dc:creator>Matthias Marschall</dc:creator>
 <guid isPermaLink="false">89 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/kent-langley-talks-about-joyent-their-new-accelerators-and-their-use-opensolaris</feedburner:origLink></item>
<item>
 <title>Visible Ops: Continuous Improvement</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/432369434/visible-ops-continuous-improvement</link>
 <description>&lt;style type="text/css" rel="stylesheet"&gt;
a.credits { font-size:7pt; color:black; font-style:italic; }
a.credits:link    { text-decoration:underline; }
a.credits:visited { text-decoration:underline; }
a.credits:hover   {  text-decoration:underline; }
a.credits:active  {  text-decoration:underline; }
&lt;/style&gt;&lt;p&gt;&lt;span class="inline inline-right"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/toolbox.jpg" alt="" title=""  class="image image-_original " width="240" height="180" /&gt;&lt;br /&gt;
&lt;p style="text-align:right;"&gt;&lt;a class="credits" href="http://flickr.com/photos/furryscalyman/312210315/"&gt;Photo by furryscaly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;
In my last posts, I've &lt;a href="http://www.agileweboperations.com/visible-ops-4-agile-steps-itil-compliance"&gt;introduced&lt;/a&gt; you to the &lt;a href="http://www.itpi.org"&gt;IT Process Institute's&lt;/a&gt; "Visible Ops Handbook" which presents IT managers and system administrators with a clear road map of how to adopt best practices within their organizations and how to work smarter instead of harder. The first three phases outlined include &lt;a href="http://www.agileweboperations.com/visible-ops-rolling-out-change-management"&gt;change management&lt;/a&gt;, &lt;a href="http://www.agileweboperations.com/visible-ops-setting-your-configuration-management-database"&gt;configuration management&lt;/a&gt;, and &lt;a href="http://www.agileweboperations.com/visible-ops-if-first-you-dont-succeed-build-build-again"&gt;build processes&lt;/a&gt;. Today, I want to share with you their keystone practice that really ties all these pieces together in a single whole that will give your company the competitive edge in today's agile business world.&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;/p&gt;
&lt;h2&gt;Metrics&lt;/h2&gt;
&lt;p&gt;You've been given the basic tools for this already. Change management is tremendously advantageous in the release process; without it your success rate for releases will be drastically lower and you'll undoubtedly have more unplanned work ("firefighting") in production. Configuration management dictates the quality of your builds and software library which will directly impact the resolution process (remember, rebuilding always beats troubleshooting!). The final phase discussed in "Visible Ops" is continuous improvement and it's basically about measuring &lt;strong&gt;and acting upon&lt;/strong&gt; critical metrics gathered from your newly implemented change and configuration management processes. You cannot manage what you cannot measure, and I'm not talking about grepping through a log file here! You need to methodically plan which metrics will give you the information you need to improve upon your processes and ultimately deliver more business value per server than your competitors!&lt;/p&gt;
&lt;p&gt;So what exactly should you measure? Again, the folks at the IT Process Institute give you a great head start. How effectively do you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Release: generate and provision infrastructure?&lt;/li&gt;
&lt;li&gt;Controls: make good change decisions that keep production infrastructure available, predictable and secure?&lt;/li&gt;
&lt;li&gt;Resolution: diagnose and resolve issues when things go wrong?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Carefully analyzing and presenting these metrics should easily give you the mandate to:&lt;/p&gt;
&lt;dl&gt;
&lt;li&gt;increase the staff working on process areas &lt;em&gt;early&lt;/em&gt; in the IT web operations life cycle (moving key staff into pre-production engineering roles)&lt;/li&gt;
&lt;li&gt;increase time spent on proactive and planned work, instead of reactive and unplanned firefighting&lt;/li&gt;
&lt;li&gt;increase the number of successful, meaningful releases&lt;/li&gt;
&lt;li&gt;decrease variance between configurations, planned and actual work and even builds&lt;/li&gt;
&lt;/dl&gt;
&lt;h2&gt;Release Metrics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Time to provision known good builds: how long does it take to build and provision infrastructure from bare-metal?&lt;/li&gt;
&lt;li&gt;Number of turns to a known good build: how many times must the build be modified before its acceptable for deployment&lt;/li&gt;
&lt;li&gt;Shelf life of builds: how long will the build be in production until its replaced?&lt;/li&gt;
&lt;li&gt;Percent of systems that match known good builds: how many production systems can claim this?&lt;/li&gt;
&lt;li&gt;Percent of builds that have security sign-off: how serious is your organization about security?&lt;/li&gt;
&lt;li&gt;Number of fast-tracked builds: how many builds were rushed into production via the emergency change process?&lt;/li&gt;
&lt;li&gt;Ratio of release engineers to sysadmins: are you too busy &lt;em&gt;doing&lt;/em&gt; stuff instead of &lt;em&gt;thinking&lt;/em&gt; about it first?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Control Metrics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;# of actual changes per week : how many were authorized?&lt;/li&gt;
&lt;li&gt;# successful changes: what's the ratio of "emergencies" to "special" to "business as usual"?&lt;/li&gt;
&lt;li&gt;# of service-affecting outages&lt;/li&gt;
&lt;li&gt;# of hours spent on change management&lt;/li&gt;
&lt;li&gt;# of changes submitted vs. changes actually reviewed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Resolution Metrics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MTTR (Mean Time To Repair): average time to restore service after any interruptions&lt;/li&gt;
&lt;li&gt;MTBF (Mean Time Between Failures): the average time between service incidents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These numbers alone, however, won't convince your boss to turn the company upside down. You'll have to convince him through meaningful presentations demonstrating a clear business value in your revolutionary ideas. If this aspect of "visible operations" gives you any pause, then have a look at Matthias's &lt;a href="http://www.agileweboperations.com/presentations-made-simple-how-connect-non-technical-audience"&gt;gentle guide&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I've certainly given you plenty of food for thought this past month and really can't give enough praise to this 100 page volume of operational wisdom. If you're looking for a way to get your company out of IT chaos, &lt;a href="http://www.itpi.org/home/visibleops.php"&gt;"The Visible Ops Handbook"&lt;/a&gt; will start you down the right path!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=BCAjm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=BCAjm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=JjSpm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=JjSpm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=OUIlm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=OUIlm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=y6S0M"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=y6S0M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/432369434" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/visible-ops-continuous-improvement#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/agile">agile</category>
 <category domain="http://www.agileweboperations.com/tags/itil">ITIL</category>
 <category domain="http://www.agileweboperations.com/tags/operations">operations</category>
 <pubDate>Sun, 26 Oct 2008 06:47:00 +0000</pubDate>
 <dc:creator>Dan Ackerson</dc:creator>
 <guid isPermaLink="false">86 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/visible-ops-continuous-improvement</feedburner:origLink></item>
<item>
 <title>Critical Bugs: Blame Or Chance?</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/429977581/critical-bugs-blame-or-chance</link>
 <description>&lt;style type="text/css" rel="stylesheet"&gt;
a.credits { font-size:7pt; color:black; font-style:italic; }
a.credits:link    { text-decoration:underline; }
a.credits:visited { text-decoration:underline; }
a.credits:hover   {  text-decoration:underline; }
a.credits:active  {  text-decoration:underline; }
&lt;/style&gt;&lt;p&gt;&lt;span class="inline inline-left"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/2252180954_e8ae57dab9.jpg" alt="" title=""  class="image image-_original " width="160" height="240" /&gt;&lt;br /&gt;&lt;a class="credits" href="http://www.flickr.com/photos/catatronic/"&gt;Photo by catatronic&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today we noticed that a feature we released yesterday created a really nasty side effect. While experimenting with a new content structure for &lt;a href="http://www.autoplenum.de/Auto/AUDI"&gt;AUDI&lt;/a&gt;, which was the only one we wanted the search engine bots to crawl, we accidentally invited the bots to crawl &lt;em&gt;all&lt;/em&gt; content for &lt;em&gt;all&lt;/em&gt; brands. As the content of all other brands was not migrated to the new content structure this bore the risk of spoiling our search engine ranking of our most important pages and thereby hurting our bottom line. Ouch. It was time for an emergency fix to stop the bots from reading too much stuff which might confuse their judgement about our site.&lt;/p&gt;
&lt;h3&gt;Root Cause Analysis&lt;/h3&gt;
&lt;p&gt;It's bad enough that such things happen once. But what I want to avoid by any means is that such a thing might happen again. Just fixing it and then going on as usual doesn't cut it for me. I really want to understand all the factors which led to such an error. It's not about blaming anyone but it is about learning what happened, and, even more important, what to change to prevent it from happening again.&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;br /&gt;
So, which forces were at play? Our usual process for critical changes like yesterday's looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Business Owner enters a user story into our backlog. Usually the story describes how a certain feature shall look.&lt;/li&gt;
&lt;li&gt;The developer starts implementing the story in a test driven manner&lt;/li&gt;
&lt;li&gt;As soon as the story is ready for test, the Business Owner tests it and signs it off&lt;/li&gt;
&lt;li&gt;If it's critical enough, I usually do some more rigorous testing for side effects&lt;/li&gt;
&lt;li&gt;Then the story goes live&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Usually, this process ensures that we avoid releasing badly broken stuff. We have enough quality gates in the way to catch nearly all the bad guys. So how could this one sneak through? Thinking about it for a minute, I immediately came up with a list of stuff to further investigate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Was there too much logic in the views? Is the stuff really unit tested?&lt;/li&gt;
&lt;li&gt;We already developed the same story once before and dropped the result as it didn't suffice. So this was the second approach to the same issue. It might be the case that we didn't judge the side-effects as serious as the first time (wear-off effect)&lt;/li&gt;
&lt;li&gt;Only "positive" testing. Sign off testing focuses quite mainly on "Is the new stuff there?". I have the feeling that we don't do enough "negative" testing like "Is this old feature broken now because of the new stuff?"&lt;/li&gt;
&lt;li&gt;As I was busy with other tasks, and we already tested it once, I didn't give it a second look&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking at those points, two root causes seem to surface: Lack of well defined, acceptance test criteria and lack of peer review.&lt;/p&gt;
&lt;h3&gt;Writing Bullet Proof Acceptance Test Criteria&lt;/h3&gt;
&lt;p&gt;While fleshing out a story, we do a very detailed concept of the desired effects: How shall a new page look like?, Shall the new links be 'follow'?, etc. Sometimes we mention some invariants like: "Keep all other pages like they are" or "This does not apply for that page". But what we usually leave out is describing test cases to verify that everything works as expected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Given the brand AUDI, the links in the "top-link-box" shall be &lt;strong&gt;follow&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Given any other brand, the links in the "top-link-box" shall be &lt;strong&gt;nofollow&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So far it worked out, but this time we got bitten :-(&lt;/p&gt;
&lt;p&gt;Good acceptance test criteria should guide a tester to validate all critical points of a new feature. The most difficult part here is to find out which side-effects might come up and how to test for them. Finding those usually requires a detailed understanding of the dependencies within the application. Those are usually best understood by the developers. Because of that, it's usually a good idea that the developer adds some test criteria as well. He knows better than anyone else what might break.&lt;/p&gt;
&lt;h3&gt;Peer Review Saves Your Day&lt;/h3&gt;
&lt;p&gt;As we're a very small team where each of us has comparable experience, we trust each other completely. This is a good thing, of course. But, it leads to the negative side effect that we don't do enough code reviews. In my experience, everyone can only profit from a code review: The reviewer practices his code reading and feedback giving skills, and the coder being reviewed gets to practice explaining his code and perhaps some additional insight into any trouble spots.&lt;/p&gt;
&lt;p&gt;The same is true with testing. Too often we, the tech folks, think: Business signs it off, so it's good to go, right? But, we should know better. More than once, I've double checked a signed off story and found bugs in it. So even for testing, peer review is a helpful thing. It should also help in improving your test cases (see above).&lt;/p&gt;
&lt;h3&gt;Actions To Improve The Status Quo&lt;/h3&gt;
&lt;p&gt;Neither of these root causes can be quickly fixed. Both require changing habits rather than just flipping a switch. What might help improve the situation with acceptance test criteria is adding a template for User Stories which explicitly asks for this test criteria. It could look like this:&lt;/p&gt;
&lt;pre&gt;
Steps to verify this story:
*
*
*

Steps to verify nothing related is broken:
*
*
*
&lt;/pre&gt;&lt;p&gt;
&lt;a href="http://github.com/aslakhellesoy/cucumber/wikis"&gt;Cucumber&lt;/a&gt;, a tool to make feature documentation executable, might be one step further in that direction.&lt;/p&gt;
&lt;p&gt;Finding concrete measures for increasing our frequency of code reviews is a little harder and will need some team discussions. Let's see what we come up with.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Our tightly knit team is doing a great job already. Still, if a critical bug sneaks through, I want to use it as a chance to further improve our processes and as a reminder to remain vigilant. Continuous improvement of processes is as important as keeping your code clean!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=ksQAm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=ksQAm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=JsO3m"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=JsO3m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=DC2Pm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=DC2Pm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=VojAM"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=VojAM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/429977581" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/critical-bugs-blame-or-chance#comments</comments>
 <pubDate>Wed, 22 Oct 2008 20:03:18 +0000</pubDate>
 <dc:creator>Matthias Marschall</dc:creator>
 <guid isPermaLink="false">87 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/critical-bugs-blame-or-chance</feedburner:origLink></item>
<item>
 <title>Presentations Without PowerPoint - Tools For Bridging The Gap</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/423047297/presentations-without-powerpoint-tools-bridging-gap</link>
 <description>&lt;p&gt;Last week, I introduced three key factors to help you &lt;a href="http://www.agileweboperations.com/presentations-made-simple-how-connect-non-technical-audience"&gt;connect to a non-technical audience&lt;/a&gt;. This week I want to introduce you to some tools and techniques for preparing your presentations. And, no, I'm not going to talk much about using PowerPoint ;-) ...&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;/p&gt;
&lt;h3&gt;Know Your Goal&lt;/h3&gt;
&lt;p&gt;Every good presentation starts with a message. What do you want your audience to remember or do after your presentation? Sometimes it's as easy as "I want approval to buy that new server" but sometimes it's not as clear. Teaching an Agile class is a good example. What &lt;em&gt;single&lt;/em&gt; thing do you want your students to remember? Agile processes are such a wide field, it's hard to pick your goal for the class. Even if it sounds pretty obvious once you read it, I had to rule out lots of possibilities before coming up with "Be able to conduct a software development project using agile practices" for the course I'll be teaching again this November. It's not "know all the various agile approaches like Scrum, XP, Lean, etc" or something similar. It clearly focuses on being able to &lt;em&gt;use&lt;/em&gt; Agile, not just know about it. That set the direction for how to present Agile to my students.&lt;/p&gt;
&lt;h3&gt;Structure Your Thoughts&lt;/h3&gt;
&lt;p&gt;Once you know what you want it's time to find a way to get there. I prefer &lt;a href="http://en.wikipedia.org/wiki/Mind_map"&gt;mind mapping&lt;/a&gt; in the early stages of structuring my thoughts. Even though it is sometimes preferable to leave your computer and do your brain storming offline, I regularly use &lt;a href="http://en.wikipedia.org/wiki/List_of_Mind_Mapping_software"&gt;mind mapping tools&lt;/a&gt; to capture my thoughts. Using software in the process simplifies organizing and sharing your ideas.&lt;/p&gt;
&lt;p&gt;If you want to use a tool I recommend &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;freemind&lt;/a&gt;. It's Java based , open source and really gets out of your way when you use it.&lt;/p&gt;
&lt;p&gt;Recently, I started playing around with &lt;a href="http://www.mindmeister.com/"&gt;Mindmeister&lt;/a&gt;, a web based alternative. It imports freemind files and offers the advantage of easily sharing and collaborating on your mind maps. There is a free, entry-level version, but, if you need it,  the full-blown product will cost some money.&lt;/p&gt;
&lt;h3&gt;Create Graphs And Diagrams&lt;/h3&gt;
&lt;p&gt;If you want to visualize a complex process or structure, you'll need to draw a diagram. While experimenting with a lot of tools over the years (like MS Visio, StarDraw, etc), I never found one I liked. I'm looking for something plain and simple, but most tools I tried out were bloated with features.&lt;/p&gt;
&lt;p&gt;Not so long ago I came across &lt;a href="http://www.gliffy.com"&gt;gliffy.com&lt;/a&gt;, a flash based app which does just what I need: Draw a simple diagram no matter on which platform I work. You can create public diagrams for free. For serious business use you'll have to pay $5/month for an individual license which gives you private and ad free diagrams.&lt;/p&gt;
&lt;h3&gt;Find Creative Commons Licensed Pictures To Support Your Point&lt;/h3&gt;
&lt;p&gt;If you want to enrich your presentation with pictures to better connect with your audience, you might wonder where to get them from. Luckily, flickr provides a &lt;a href="http://www.flickr.com/creativecommons/by-2.0/"&gt;specialized search for pictures published using the creative commons license&lt;/a&gt;. Sort the results by "Most Interesting" and you'll get really good pictures.&lt;/p&gt;
&lt;p&gt;If money is not too much of an issue, sites like &lt;a href="http://www.istockphoto.com"&gt;iStockphoto&lt;/a&gt; provide you with perfect pictures for any kind of presentations. For a presentation, small images should be sufficient, which set you back $3 each.&lt;/p&gt;
&lt;h3&gt;Not So Mainstream Presentation Tools For PowerPoint Haters ;-)&lt;/h3&gt;
&lt;p&gt;Finally, after defining your goal, structuring your message, creating some diagrams, and finding photos supporting your message it is time to come up with some slides. Sure, you could fire up PowerPoint, Numbers, or OpenOffice, but hey, you're a geek, right? If you prefer to avoid the "uncool" stuff ;-) have a look at these alternatives.&lt;/p&gt;
&lt;li&gt;&lt;strong&gt;LaTeX&lt;/strong&gt;&lt;br /&gt;
There are at least two serious ways for doing presentations in LaTeX. If you are already familiar with LaTeX, these might be for you: &lt;a href="http://amath.colorado.edu/documentation/LaTeX/prosper/"&gt;Prosper&lt;/a&gt; or &lt;a href="http://latex-beamer.sourceforge.net/"&gt;Beamer&lt;/a&gt;. I used LaTeX to present my diploma thesis and was very glad about the possibility to use a normal text editor without all the bells and whistles which usually come with more graphically oriented presentation packages.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Java&lt;/strong&gt;&lt;br /&gt;
If you are a real code slinger, you might even want to &lt;em&gt;code&lt;/em&gt; your presentations. While this approach is bound to Windows as a platform, it is definitely the coolest way of producing PowerPoint presentations ;-)
&lt;p&gt;Just download the &lt;a href="http://poi.apache.org/hslf/index.html"&gt;Apache POI&lt;/a&gt; project and just code a new slide show:&lt;/p&gt;
&lt;pre&gt;
    //create a new empty slide show
    SlideShow ppt = new SlideShow();

    //add first slide
    Slide s1 = ppt.createSlide();

    //save changes in a file
    FileOutputStream out = new FileOutputStream("slideshow.ppt");
    ppt.write(out);
    out.close();
&lt;/pre&gt;&lt;p&gt;
Adding new pictures is easy, too:&lt;/p&gt;
&lt;pre&gt;
  // add a new picture to this slideshow and insert it in a  new slide
  int idx = ppt.addPicture(new File("clock.jpg"), Picture.JPEG);

  Picture pict = new Picture(idx);

  //set image position in the slide
  pict.setAnchor(new java.awt.Rectangle(100, 100, 300, 200));

  Slide slide = ppt.createSlide();
  slide.addShape(pict);
&lt;/pre&gt;&lt;p&gt;
And if you really keep your slides simple, this is about all you need to do. For a complete list of code examples check out the &lt;a href="http://poi.apache.org/hslf/how-to-shapes.html"&gt;Busy Developers' Guide to HSLF drawing layer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By the way: There is even a &lt;a href="http://poi.apache.org/poi-ruby.html"&gt;Ruby binding for Apache POI&lt;/a&gt; ;-)
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SlideRocket&lt;/strong&gt;
&lt;p&gt;You aren't convinced that coding your presentation is the way to go? Hmm, but you still want to be cool, right? Why not try &lt;a href="http://www.sliderocket.com"&gt;SlideRocket&lt;/a&gt;, a flash based PowerPoint replacement with some really nice features like sharing slides, doing online presentations and directly searching for pictures from within the application. It even has an offline client based on Adobe AIR.
&lt;/p&gt;&lt;/li&gt;
&lt;p&gt;Currently, SlideRocket is my preferred way of creating presentations. What are your choices? Do you have good reasons to stick with PowerPoint? Or are you more the "Source Code Guy"? Share your approach and favorite tools in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=FxNBm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=FxNBm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=Zkkzm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=Zkkzm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=EtuMm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=EtuMm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=FHOLM"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=FHOLM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/423047297" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/presentations-without-powerpoint-tools-bridging-gap#comments</comments>
 <pubDate>Thu, 16 Oct 2008 20:12:30 +0000</pubDate>
 <dc:creator>Matthias Marschall</dc:creator>
 <guid isPermaLink="false">84 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/presentations-without-powerpoint-tools-bridging-gap</feedburner:origLink></item>
<item>
 <title>Visible Ops: If At First You Don't Succeed, Build, Build Again</title>
 <link>http://feeds.feedburner.com/~r/agileweboperations/~3/418356364/visible-ops-if-first-you-dont-succeed-build-build-again</link>
 <description>&lt;style type="text/css" rel="stylesheet"&gt;
a.credits { font-size:7pt; color:black; font-style:italic; }
a.credits:link    { text-decoration:underline; }
a.credits:visited { text-decoration:underline; }
a.credits:hover   {  text-decoration:underline; }
a.credits:active  {  text-decoration:underline; }
&lt;/style&gt;&lt;p&gt;&lt;span class="inline inline-left"&gt;&lt;img src="http://www.agileweboperations.com/sites/agileweboperations.com/files/images/fuse.jpg" alt="" title=""  class="image image-_original " width="240" height="160" /&gt;&lt;br /&gt;
&lt;p style="text-align:left;"&gt;&lt;a class="credits" href="http://flickr.com/photos/benchun/209730452/"&gt;Photo by benchun&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;By now you should have a better understanding of how your data center is setup and exactly what's all in there. You've been carefully monitoring changes to this environment and are ready to take it to the next level. The &lt;a href="http://www.itpi.org/home/visibleops.php"&gt;"Visible Ops Handbook"&lt;/a&gt; introduces the concept of "production fuses" : when things go wrong with a fuse, you don't try to repair it; instead, you simply replace it with a working one right out of the package. Not only does this require less downtime, but you can be pretty sure that the new fuse will work as expected (and not accidentally burn down your entire home!). Your confidence in the correct functioning of the new fuse is directly related to how well you've been monitoring changes on that production fuse. If some engineer has made undocumented fixes or "improvements" to it (which is probably what caused it to short out to begin with), then the pre-fabricated fuse you replace it may cause unintentional side effects and further headaches. Replacing instead of fixing is what all high-performing organizations do, giving them high server to sysadmin ratios, less unplanned work, and the ability to maintain manageable system configurations.&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;/p&gt;
&lt;h3&gt;Create A Release Management Team&lt;/h3&gt;
&lt;p&gt;This team's primary responsibility is constructing the mechanisms to deploy the best configurations into production. They won't be &lt;em&gt;doing&lt;/em&gt; the builds; instead, they'll be &lt;strong&gt;designing&lt;/strong&gt; the build. You'll want your best and brightest for this critical task. Take the most senior IT operations folks and get them out of reactive, firefighting and into a more proactive, structured regimen of release engineering designed to decrease downtime and increase your successful change rate. To reduce complexity and cost while improving the manageability of your operations environment, note the following benefits of rebuilding infrastructure as opposed to repairing (in increasing order of importance):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;An automated process takes a &lt;strong&gt;known&lt;/strong&gt; amount of time, as opposed to firefighting which almost always takes longer than original estimates
&lt;/li&gt;&lt;li&gt;&amp;nbsp;It introduces less configuration variance, as opposed to repeated break &amp;amp; fix cycles (&lt;em&gt;"What all did we just change to get it to work now?"&lt;/em&gt;)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;They are usually better documented and less complicated so they can be monitored by junior staff which frees up senior staff from firefighting
&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;When senior staff break free of firefighting, they can work on new build projects fixing other systemic issues (addressing the real root causes of issues instead of just their symptoms)
&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Create A Repeatable Build Process&lt;/h3&gt;
&lt;p&gt;From the "Find Fragile Artifacts" step I introduced last week, we have our starting point in this next project - namely, getting fragile infrastructure replaced with stable builds that can be run by junior staff. Infrastructure blueprints should be stored in an online, protected, backed-up repository known as a Definitive Software Library (DSL).  This library not only houses all the relevant software applications your environment requires to operate, but also license keys, patches, etc. The release management team should now consider the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Identify the common set of essential services and components used across your infrastructure (OSs, applications, business rules, and data)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Create a list of standardized components, called a "build catalog." Look for ways to create components that can be reused and combined to create standardized configurations (i.e. Apache and Oracle both installed on a Solaris OS)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;For each component in the build catalog, create a repeatable build process that generates it. The goal is to have an automated build system that can provision the package by "pushing a button" (i.e. NIM for AIx or Jumpstart for Solaris)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Any testing environment should be isolated from the production network to ensure that it does not disrupt production systems and to make sure that all dependencies outside the test environment are fully documented and understood
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Ensure that you can recreate each system with a bare metal build. Our goal is a repeatable process that eliminates anything tedious and error-prone, as well as reducing work and errors (i.e. virtual images from Xen or VMware)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;For critical HA or load-balanced environments develop reference builds that can provision a box from bare metal without human intervention (i.e. triggered as a workflow action based on a certain Nagios alert)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;When the build engineering process has been completed, store them in the DSL
&lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Create And Maintain The Definitive Software Library (DSL)&lt;/h3&gt;
&lt;p&gt;Let's face it - it can be downright horrifying having to check out some source code from a development repository for release at 1am in the morning. As a sysadmin, you cringe while executing the build script, cross your fingers and plead "Will it build without any errors?" If you weren't able to convince the development group to adopt a &lt;a href="http://www.agileweboperations.com/ownership-takes-commitment"&gt;Committer Role&lt;/a&gt;, here's your second chance. Let the release management guys build it for you and commit this into the DSL (and this at 1pm in the &lt;strong&gt;afternoon&lt;/strong&gt; when they can easily go track that developer down who made that "oh, just one more quick fix" commit) for the operations team to confidently release.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Designate a manager to maintain the DSL who will be responsible for authorizing the acceptance of new applications and packages
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Create an approval process for accepting items into the DSL
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Establish a disparate network to house the DSL and the required build servers (i.e. a DMZ)
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Any software accepted into the DSL (both retail and internally developed applications) must be under revision control
&lt;/li&gt;&lt;li&gt;&amp;nbsp;Audit the DSL to ensure that it contains only authorized components
&lt;/li&gt;&lt;/ol&gt;
&lt;h3&gt;Close The Loop Between Production And Pre-Production&lt;/h3&gt;
&lt;p&gt;So you have a beautiful test environment upon which you're running production infrastructure - or so you think. Do you have automated detection of changes on all production servers? Are you sure that not a single developer has access to production? Even if only your operations staff has access, as most systems nowadays number thousands of files and perhaps hundreds of separate configurations, the odds are against them for remembering to document every single production change. You have to use a some automated configuration management tools (like &lt;a href="http://www.agileweboperations.com/configuration-management-introduction-cfengine"&gt;Cfengine&lt;/a&gt; or &lt;a href="http://www.agileweboperations.com/configuration-management-introduction-puppet"&gt;Puppet&lt;/a&gt;)  to ensure that production builds stay in sync with the golden builds in your DSL.&lt;/p&gt;
&lt;p&gt;If you've made it to here, you should have reduced the amount of unplanned work down to 15% or less. The ITIL Institute reports that by drastically reducing configuration counts, you can significantly change the staffing allocation from unplanned to planned work, and consequently increase the server to sysadmin ratio. Now you've:&lt;/p&gt;
&lt;dl&gt;
&lt;li&gt;&amp;nbsp;created a release engineering team to define and generate infrastructure that can be repeatedly built
&lt;/li&gt;&lt;li&gt;&amp;nbsp;further decreased uncontrolled production changes, which increases the amount of time available to work on planned tasks
&lt;/li&gt;&lt;li&gt;&amp;nbsp;created a new problem resolution mechanism, making it cheaper to rebuild than to repair - a viable alternative to protracted fire-fighting
&lt;/li&gt;&lt;li&gt;&amp;nbsp;enabled shifting of senior staff from the front-lines to the release management area, where the defect repair costs are lowest
&lt;/li&gt;&lt;li&gt;&amp;nbsp;closed the loop between production and release management, to curb production configuration variance
&lt;/li&gt;&lt;li&gt;&amp;nbsp;enabled the continual reduction of unique configurations in deployment,  increasing the server to sysadmin ratio&lt;br /&gt;
&lt;/li&gt;&lt;/dl&gt;
&lt;p&gt;Stay tuned next week for some concluding words about the Visible Ops Handbook and how to pull it all together!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=9aG8m"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=9aG8m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=KB9zm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=KB9zm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=AoCEm"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=AoCEm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/agileweboperations?a=UhEIM"&gt;&lt;img src="http://feeds.feedburner.com/~f/agileweboperations?i=UhEIM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/agileweboperations/~4/418356364" height="1" width="1"/&gt;</description>
 <comments>http://www.agileweboperations.com/visible-ops-if-first-you-dont-succeed-build-build-again#comments</comments>
 <category domain="http://www.agileweboperations.com/tags/agile">agile</category>
 <category domain="http://www.agileweboperations.com/tags/itil">ITIL</category>
 <category domain="http://www.agileweboperations.com/tags/operations">operations</category>
 <pubDate>Sun, 12 Oct 2008 06:15:00 +0000</pubDate>
 <dc:creator>Dan Ackerson</dc:creator>
 <guid isPermaLink="false">80 at http://www.agileweboperations.com</guid>
<feedburner:origLink>http://www.agileweboperations.com/visible-ops-if-first-you-dont-succeed-build-build-again</feedburner:origLink></item>
</channel>
</rss>
