<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Scout ~ The Blog</title>
    <link>http://blog.scoutapp.com/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Scout ~ The Blog</description>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/scoutapp" /><feedburner:info uri="scoutapp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>RVM, Bundler and Cron in Production: Round 2</title>
      <description>&lt;p&gt;&lt;a href="http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production"&gt;Back in 2010&lt;/a&gt;, we suggested using &lt;span class=terminal style="padding:1px"&gt;/bin/bash -l -c&lt;/span&gt; to run scout via Cron when using &lt;a href="https://rvm.io"&gt;RVM&lt;/a&gt;. However, this was a brute approach:  &lt;span class=terminal style="padding:1px"&gt;/bin/bash -l -c&lt;/span&gt; tells bash to behave as a login, interactive process. However, as Daniel Szmulewicz elequently stated in the comments for the original blog post, "Cron jobs are by nature non-login, non-interactive processes".&lt;/p&gt;

&lt;p&gt;Fast-forward to today: RVM usage is continuing in production, and to make things more complicated, Cron jobs often need to account for both RVM and Bundler. So, what's our preferred approach when running Ruby executables via Cron in an RVM, RVM+Bundler, or Bundler environment? &lt;a href="https://rvm.io/integration/cron/#environment"&gt;A shell script&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;Cron Shell Script: RVM + Bundler&lt;/h2&gt;

&lt;p&gt;Lets say we want to run a Ruby executable (&lt;span class=terminal style="padding:1px"&gt;scout [KEY]&lt;/span&gt;) via Cron with (1) Ruby 1.9.2 and (2) my Rails App's Gem bundle:&lt;/p&gt;

&lt;script src="https://gist.github.com/itsderek23/5731080.js"&gt;&lt;/script&gt;

&lt;p&gt;Make the shell script executable: &lt;span class=terminal&gt;chmod +x FILE.sh&lt;/span&gt;. &lt;/p&gt;

&lt;p&gt;Add the Cron job:&lt;/p&gt;

&lt;div class=terminal&gt;
* * * * * shell_script.sh
&lt;/div&gt;

&lt;h2&gt;But that's a lot of typing...&lt;/h2&gt;

&lt;p&gt;It's tempting to use &lt;span class=terminal style="padding:1px"&gt;/bin/bash -l -c&lt;/span&gt; when you are busy/lazy. To get around this, the &lt;span class=terminal style="padding:1px"&gt;scout install [KEY]&lt;/span&gt; command will detect if you are using (1) RVM and/or (2) Bundler. If so, we generate the shell script for you and make it executable. &lt;/p&gt;

&lt;pre class=terminal&gt;
scout install BNrIneEBMwE8h6VlhO4Bw4WmOVSLmnygSFZEPCfi
=== Scout Installation Wizard ===

It looks like you've installed Scout under RVM and/or Bundler. 
We've generated a shell script for you.

Run `crontab -e`, pasting the line below into your Crontab file:

* * * * * /Users/dlite/.scout/scout_cron.sh
&lt;/pre&gt;

&lt;p&gt;How do we detect RVM and Bundler? We've encapsulated it into an &lt;a href="https://github.com/scoutapp/scout-client/blob/master/lib/scout/environment.rb"&gt;Environment class&lt;/a&gt;:&lt;/p&gt;

&lt;script src="https://gist.github.com/itsderek23/5731147.js"&gt;&lt;/script&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/5kUXru9VeQs" height="1" width="1"/&gt;</description>
      <pubDate>Fri,  7 Jun 2013 14:02:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/06/07/rvm-bundler-and-cron-in-production-round-2</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/5kUXru9VeQs/rvm-bundler-and-cron-in-production-round-2</link>
      <category>HowTo</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/260</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/06/07/rvm-bundler-and-cron-in-production-round-2</feedburner:origLink></item>
    <item>
      <title>The winding path to server roles</title>
      <description>&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/roles_background/roles_timeline.png" alt="roles timeline"/&gt;&lt;/p&gt;

&lt;p&gt;We're overjoyed with &lt;a href="https://twitter.com/jasongarber/status/314100386782908417"&gt;the&lt;/a&gt; &lt;a href="https://twitter.com/darkhelmetlive/status/337602264044802048"&gt;reaction&lt;/a&gt; &lt;a href="https://twitter.com/michaelbiven/status/309087892624510976"&gt;to&lt;/a&gt; &lt;a href="http://blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy"&gt;server roles&lt;/a&gt;, our new feature that makes monitoring many servers as easy as monitoring a few. The end result hits our favorite sweet spot: it makes something that used to be painful into something fun. &lt;/p&gt;

&lt;p&gt;Server Roles was the biggest release since the launch of Scout and the path to the release was anything but a smooth, rolling path. It's a story of fast-changing deployment environments, tangents, a failed experiment, listening, first-hand experience, and finally, something we were happy with. &lt;/p&gt;

&lt;p&gt;Here's the story of Scout's evolution to roles.&lt;/p&gt;

&lt;h2&gt;Oct 2007: Before AWS&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/roles_background/first_account.jpg" alt="first account"/&gt;&lt;/p&gt;

&lt;p&gt;Scout started as an internal tool at Highgroove Studios (now &lt;a href="http://www.bignerdranch.com/index"&gt;Big Nerd Ranch&lt;/a&gt;) in 2007, or, roughly one year before AWS exited Beta status. For you young chicks out there, this was a time when you couldn't click a button to provision a server. &lt;/p&gt;

&lt;p&gt;Since it wasn't as easy to provision servers, there was less churn in the size of environments. When you wanted to monitor a new server in Scout, you'd create it in our UI and then use the provided locally in your Crontab entry. The manual step of copying the key to to the server didn't feel tedious (and was way easier than configuring Nagios, Munin, etc) since our customers weren't provisioning servers frequently. &lt;/p&gt;
&lt;h2&gt;Oct 2008: AWS Exits Beta&lt;/h2&gt;

&lt;p&gt;Using a unique key per-monitored server didn't align well with EC2. As our customers encountered this, they initially requested that we provide an API method to provision a new server and its associated key. This would be run as part of the instance provisioning process. &lt;/p&gt;

&lt;p&gt;However, we weren't big fans of this: it's vital that monitoring works. If the script to initiate a Scout server failed during the startup sequence, the server wouldn't be monitored. Everything from a temporary network hiccup to a missing gem dependency could cause monitoring to fail.&lt;/p&gt;

&lt;h2&gt;Jan 2009: The emergence of Chef and Configuration Management Tools&lt;/h2&gt;

&lt;p&gt;The release of Chef in 2009 rapidly accelerated the configuration management world for our customers. While the &lt;a href="http://redmonk.com/sogrady/2012/03/13/chef-and-puppet/"&gt;overall adoption between Puppet and Chef&lt;/a&gt; appears to be fairly equal, we received far more inquiries about configuring Scout with Chef. &lt;/p&gt;

&lt;h2&gt;Sep 2009: Cloud Images&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/roles_background/cloud_image.jpg" alt="cloud image"/&gt;&lt;/p&gt;

&lt;p&gt;EC2 made it much easier to deploy more servers and create redundant setups. This meant our customers began to have groups of similar servers ( web servers, database servers, etc) that have the same monitoring configuration. &lt;/p&gt;

&lt;p&gt;What if you could re-use an existing server's key in Scout on new servers? Then, those new servers would use all of the same settings as the original server. This was a much better approach than creating servers via the Scout API as well: it's a Crontab entry that runs every minute, so if for some reason the first Scout run fails, no big deal: it'll keep trying.&lt;/p&gt;

&lt;p&gt;We &lt;a href="http://blog.scoutapp.com/articles/2009/09/28/cloud-monitoring"&gt;launched cloud monitoring&lt;/a&gt; in September 2009.&lt;/p&gt;

&lt;h2&gt;Consistency&lt;/h2&gt;

&lt;p&gt;A problem soon emerged: when a new server reported with a cloud key, we copied the plugins from the original server, but we didn't keep things consistent (ex: adding a new plugin to the original server didn't add it to the other servers). &lt;/p&gt;

&lt;p&gt;Why? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers would often use the cloud key as a base template - it monitored key metrics, then they would add additional monitoring plugins as they saw fit. &lt;/li&gt;
&lt;li&gt;Inevitably, some servers end up needing slight modifications from their base image (ex: testing out Memcached on a single app server).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, taking the step of making everything consistent would be a big jump. We needed more time to see how cloud images were used.&lt;/p&gt;

&lt;h2&gt;Jan 2010: A Tangent - Copy and Paste&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://img.skitch.com/20100112-1wdm94iwirn225u21pxu79s9qm.png" width=560/&gt;&lt;/p&gt;

&lt;p&gt;We punted on the consistentcy issue, but we introduced a tool to make it easy to copy one server's settings to another: &lt;a href="http://blog.scoutapp.com/articles/2010/01/27/updating-monitoring-large-server-cluster"&gt;Copy and Paste&lt;/a&gt; launched in January 2010. It allowed you to copy a plugin (and all of its settings) to any number of servers. It made it easier to keep things consistent, but required a manual step.&lt;/p&gt;

&lt;h2&gt;Sep 2011: Failed Attempt - Synced Groups&lt;/h2&gt;

&lt;p&gt;&lt;img width=560 src="https://dl.dropboxusercontent.com/u/468982/blog/roles_background/synced_groups.png"/&gt;&lt;/p&gt;

&lt;p&gt;Our first attempt at making things consistent? Synced groups: define a group of servers (ex: web servers), pick one server to act as the template server. All other servers in the group will use that server's configuration. &lt;/p&gt;

&lt;p&gt;We started working on this in the fall of 2011. However, issues soon emerged:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Too ambitious&lt;/em&gt; - We envisioned representing these synced groups differently in the UI. In addition to the standard server views, there would be additional views to represent the aggregate synced group. We've found UI issues to be the longest to rollout - it takes a while to get the experience right.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Overlapping terms&lt;/em&gt; - We already had groups - so we thought about calling these "synced groups" or "clusters". We were hesitate to add more Scout-specific terminology. We like clean, easy-to-use tools and adding more terms heads in the opposite direction.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Servers that should belong to multiple groups&lt;/em&gt; - For example, a single app server may also perform some utility functions.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;One-off changes&lt;/em&gt; - For example, testing Memcached on a single app server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Apr 2013: Roles - A common language&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/roles_background/roles_commit.jpg" alt="roles"/&gt;&lt;/p&gt;

&lt;p&gt;We started using configuration management tools vs. hand-rolled scripts to deploy servers at Scout in the summer of 2011. As our first-hand experience with configuration management tools increased, our ability to make editorial decisions on how syncing should be done was strengthened.&lt;/p&gt;

&lt;p&gt;Our first commit to roles was in late September 2012. We put our first customer on roles in November 2012 and &lt;a href="blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy"&gt;opened it up everyone in the begining of April 2013&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;Apr 2013: Chef Recipe + Install Instructions&lt;/h2&gt;

&lt;p&gt;&lt;img src="https://f.cloud.github.com/assets/7880/496524/85097400-bbe4-11e2-978f-6c7e31655d2a.png" /&gt;&lt;/p&gt;

&lt;p&gt;We wanted to make it super-easy to use Chef with Scout, so inspired by &lt;a href="boundary.com"&gt;Boundary&lt;/a&gt;, we added Chef-specifc instructions for Scout when adding a new server. &lt;/p&gt;

&lt;p&gt;The original Scout Chef recipe was written by Drew Blas. &lt;a href="https://github.com/scoutapp/scout_cookbooks/tree/master/scout"&gt;We forked it on Github&lt;/a&gt; and updated it w/role support. &lt;/p&gt;

&lt;h2&gt;Tl;dr&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;We realized keeping monitoring settings in sync across servers would be a big win a couple of years ago. &lt;/li&gt;
&lt;li&gt;We didn't want to make the customer experience complicated when syncing was enabled. &lt;/li&gt;
&lt;li&gt;It took (1) our own experience with configuration management tools (2) regular customer feedback to make something easy-to-use yet powerful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More on roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy"&gt;Server Roles: Fewer Clicks, More Joy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.scoutapp.com/articles/2013/04/23/roles-by-the-numbers"&gt;Three weeks with roles: by the numbers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/fp79RNXqxTo" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 29 May 2013 09:39:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/05/29/the-winding-path-to-server-roles</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/fp79RNXqxTo/the-winding-path-to-server-roles</link>
      <category>Development</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/259</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/05/29/the-winding-path-to-server-roles</feedburner:origLink></item>
    <item>
      <title>Debugging request bottlenecks with realtime charts</title>
      <description>&lt;p&gt;Last week, one of our application servers died. We have four app servers, so in theory, the death of one app server shouldn't bring the entire platoon down. However, real-life had other plans: 95% of requests were handled fine, but around 5% were being dropped. Here's the story of how we diagnosed and fixed the issue with our realtime charts.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;

&lt;p&gt;Our web stack looks like this: A web server running HAProxy (using Apache to process HTTPS requests), which then uses round-robin load balancing to send requests to four app servers running Apache + Passenger.&lt;/p&gt;

&lt;p&gt;One of our customers reported seeing sporadic "503 Service Temporarily Unavailable" errors in their web browser. From experience, we know this typically means HAProxy is unable to handoff a request to an app server. &lt;/p&gt;

&lt;h2&gt;1. How frequent are 503 errors?&lt;/h2&gt;

&lt;p&gt;We scanned our load balancer access logs and checked for the number of 503 errors. There were a lot of 503s:&lt;/p&gt;

&lt;div class=terminal&gt;grep 503 /var/log/apache2/access.log | wc -l&lt;br/&gt;BIG NUMBER&lt;/div&gt;

&lt;p&gt;Not good. Next, a quick sanity check. Did we get this many 503s before the app server went out of rotation? &lt;/p&gt;

&lt;div class=terminal&gt;grep 503 /var/log/apache2/access.log.1 | wc -l&lt;br/&gt;SMALL NUMBER&lt;/div&gt;

&lt;p&gt;Thankfully, no. This was a pretty good sign the 503s were tied to a bottleneck with the loss of the app server.&lt;/p&gt;

&lt;h2&gt;2. Can we identify the bottleneck by watching request activity in realtime?&lt;/h2&gt;

&lt;p&gt;I fired up a &lt;a href="http://blog.scoutapp.com/articles/2012/01/09/announcing-scout-real-time"&gt;realtime chart session&lt;/a&gt;, fetching the following metrics from each app server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Available Workers&lt;/li&gt;
&lt;li&gt;Passenger Global Queue Depth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passenger was showing a rise in the Global Queue Length and Apache Available Workers were dropping to zero. Because the global queue depth was so high, we knew the bottleneck was at the application server (Passenger) and not the web server (Apache). &lt;/p&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/bottleneck_chart.png" alt="bottleneck"/&gt;&lt;/p&gt;

&lt;h2&gt;3. When is the queue spiking?&lt;/h2&gt;

&lt;p&gt;The chart showed that the vast majority of requests were bunched between 20-30 seconds. Why? &lt;/p&gt;

&lt;p&gt;Originally, every Scout agent would checkin on the minute. This resulted in an inefficent request profile: virtually all requests to scoutapp.com occurred between 1-7 seconds. We then added a modifiable variable sleep - later agents reported to scoutapp.com between 15-30 seconds. This spread out the request volume (older agents report close to on the minute, new versions a bit later).&lt;/p&gt;

&lt;p&gt;Today, almost all agents are checking in w/an agent version that supports the sleep interval. This means the bunching just moved to later time period. The fix: re-balance the checkins. We adjusted the sleep interval on the agents to be between 0-30 seconds, not just 15-30 seconds. &lt;/p&gt;

&lt;h2&gt;4. Did it work?&lt;/h2&gt;

&lt;p&gt;We simulated a dead app server by removing one from our HAProxy configuration and fired up a realtime chart session. With the request distribution spread fairly evenly from 0-30 seconds, there were zero 503s:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/bottleneck_chart2.png" alt="bottleneck"/&gt;&lt;/p&gt;

&lt;p&gt;Nice. Finally, we added a trigger to alert us in the future when the rate of 503 errors dramatically increases.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/Najs06TBPPs" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 14 May 2013 15:19:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/05/14/debugging-request-bottlenecks-with-realtime-charts</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/Najs06TBPPs/debugging-request-bottlenecks-with-realtime-charts</link>
      <category>Examples</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/258</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/05/14/debugging-request-bottlenecks-with-realtime-charts</feedburner:origLink></item>
    <item>
      <title>RailsConf 2013!</title>
      <description>&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/portland.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m sitting in the Denver Airport &amp;#8211; in a couple of minutes, I&amp;#8217;ll board the plane to RailsConf in Portland, Oregon. I&amp;#8217;m already getting amped for Voodoo Donuts, Stumpdown Coffee, well-trimmed beards, and of-course, lots of Rails-related chats.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m bringing a fresh load of Scout T-Shirts. These aren&amp;#8217;t your normal heavy-weight, poor-fitting shirts. They are tastefully designed, American Apparel &amp;#8211; Tri-Blend (otherwise known as the most comfortable shirt you&amp;#8217;ll own). If you&amp;#8217;re attending RailsConf, shoot us an &lt;a href="mailto:support@scoutapp.com"&gt;email&lt;/a&gt; so we can meetup and improve your wordrobe at the same time. Or, just look for us (Andre and Derek). We don&amp;#8217;t always rest our arms on each other, but when we do, we look like this:&lt;/p&gt;


	&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/derek_andre.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/-qyfMw6cznM" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 28 Apr 2013 18:20:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/04/28/railsconf-2013</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/-qyfMw6cznM/railsconf-2013</link>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/257</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/04/28/railsconf-2013</feedburner:origLink></item>
    <item>
      <title>Three weeks with roles: by the numbers</title>
      <description>&lt;p&gt;It's been three weeks since the launch of the largest feature enhancement in Scout's existence: roles. Haven't heard of roles? Nutshell: &lt;a href="http://blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy"&gt;roles let you monitor many serves with fewer clicks and more joy&lt;/a&gt;. Roles were driven by your feedback and it's showing in the fast adoption numbers below. &lt;/p&gt;

&lt;p&gt;&lt;img src="https://dl.dropboxusercontent.com/u/468982/blog/roles_info_pub.png" alt="roles infographic"/&gt;&lt;/p&gt;

&lt;p&gt;Time to give an awkward nerd high-five of thanks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customers on our Roles BETA program&lt;/strong&gt; - your feedback and willingness to try new things helped us iron out the edges for the public rollout. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contributors to our Chef recipe&lt;/strong&gt; - we've already had six authors commit to our &lt;a href="https://github.com/scoutapp/scout_cookbooks/tree/master/scout"&gt;Chef recipe&lt;/a&gt; for deploying Scout. It's great to see a hardened Chef recipe based on real-world usage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback since the launch&lt;/strong&gt; - we built roles because of your feedback, and &lt;a href="mailto:support@scoutapp.com"&gt;we've enjoyed reading your suggestions post-launch&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Haven't tried roles yet? To get started, see the "Roles" dropdown on your account, and read the &lt;a href="https://scoutapp.com/help#roles"&gt;FAQ on roles&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/W59vJx0auGc" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 23 Apr 2013 16:42:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/04/23/roles-by-the-numbers</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/W59vJx0auGc/roles-by-the-numbers</link>
      <category>Features</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/256</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/04/23/roles-by-the-numbers</feedburner:origLink></item>
    <item>
      <title>Server Roles: Fewer Clicks, More Joy</title>
      <description>&lt;p&gt;&lt;span style="float:right;padding-left: 10px"&gt;
&lt;img src="https://dl.dropbox.com/u/468982/blog/roles_launch/role.png" alt="role screenshot"/&gt;
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roles are a new feature available immediately for all new and existing accounts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have a carefully thought out architecture. You frequently add new servers as your business grows.  In fact, scaling up is part of business as usual. Monitoring should scale easily with you -- that's why we're introducing roles. &lt;/p&gt;

&lt;p&gt;Roles make it easy to setup plugins and triggers across many servers. Instead of individually configuring servers, configure roles. Then, apply roles to your servers through our UI, the command line, or your configuration management tool. &lt;/p&gt;

&lt;p&gt;Some examples of how roles will make your life easier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating a trigger on 50 app servers&lt;/li&gt;
&lt;li&gt;Adding a Memory Usage plugin on 100 memcached servers&lt;/li&gt;
&lt;li&gt;Updating a plugin to a new version across all 10 MongoDB servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Getting started&lt;/h2&gt;

&lt;p&gt;&lt;span style="padding:0 0 10px 10px;;float:right"&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/roles_launch/roles_header.png" alt="Roles Nav](![role screenshot"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Roles are available now on your account. Look for the new "Roles" item on the top navigation. If you previously had servers organized by groups, your groups have been upgraded to roles. &lt;a href="https://scoutapp.com/help#roles"&gt;See documentation here&lt;/a&gt; on creating roles and organizing your existing plugins into roles.&lt;/p&gt;

&lt;p&gt;Your account now has a single, account-wide key -- use it for any new servers you add. Your existing keys will continue to work, so you don't have to touch any servers you're currently monitoring.&lt;/p&gt;

&lt;h2&gt;Why Roles?&lt;/h2&gt;

&lt;p&gt;Most setups have a limited number of server configurations (app, db, utility, for example), and several servers of each configuration. When you add another app server, it probably needs the same monitoring template as your existing app servers. Adding more servers using existing templates is the scenario we wanted to make dead simple in Scout.&lt;/p&gt;

&lt;p&gt;There's no need to stick to one template at a time: servers can have any number of roles in Scout, so feel free to mix and combine roles as needed to reflect the functionality of your servers. Is one of your HAProxy boxes also running memcached? No need to create a brand new roles, just apply two of the roles you already have.&lt;/p&gt;

&lt;p&gt;Once defined, roles are "active": if you update a role (say by adding a plugin or a trigger), all the servers in that role are automatically updated to reflect the changes. It's a much easier way to to manage your monitoring configuration.&lt;/p&gt;

&lt;h2&gt;Best friends with Chef&lt;/h2&gt;

&lt;p&gt;&lt;span style="float:left;padding-right: 10px"&gt;
&lt;img src="https://dl.dropbox.com/u/468982/blog/roles_launch/chef.png" alt="role screenshot"/&gt;
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;We provide an &lt;a href="https://github.com/scoutapp/scout_cookbooks/tree/master/scout"&gt;official Chef Recipe&lt;/a&gt; designed to work with roles.&lt;/p&gt;

&lt;p&gt;To simplify deployment, Scout now provides a single, account-wide key you can use on all your servers. &lt;/p&gt;

&lt;p&gt;Even if you're not using Chef, you can (optionally) specify roles directly through the Scout executable: &lt;code&gt;scout -rdb,app&lt;/code&gt; to assign the db and app roles, for example. This makes role assignments highly script-able, whether you're using Chef, Puppet, or Moonshine.&lt;/p&gt;

&lt;h2&gt;Fine-tuned for large environments&lt;/h2&gt;

&lt;p&gt;With the recent notification group changes and now roles, we're making monitoring easier for large environments. Our previous tools -- cloud keys and plugin copy-paste -- were useful, but it was easy for things to get out of sync. Roles our our answer for keeping monitoring in sync in large environments.&lt;/p&gt;

&lt;h2&gt;Roles in Summary&lt;/h2&gt;

&lt;p&gt;With Roles, we want to make deploying and scaling scout on large environments as easy as possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Roles are "active":&lt;/strong&gt; updating role's triggers or plugins propagates to all the role's servers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better than templates:&lt;/strong&gt; Servers can belong to more than one role.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account-wide keys:&lt;/strong&gt; no need to provision keys for new servers - reuse the same 40-character account key in the crontab across all your servers &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specify roles via the crontab:&lt;/strong&gt; optionally, you can pass a command-line argument to the scout agent to specify the roles it should belong to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Friendly with Chef:&lt;/strong&gt; we also provide an official chef recipe for roles-enabled server configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started, see the "Roles" dropdown on your account, and read the &lt;a href="https://scoutapp.com/help#roles"&gt;FAQ on roles here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/8b081bcZ7Tg" height="1" width="1"/&gt;</description>
      <pubDate>Tue,  2 Apr 2013 09:50:00 EDT</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/8b081bcZ7Tg/server-roles-fewer-clicks-more-joy</link>
      <category>Features</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/255</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/04/02/server-roles-fewer-clicks-more-joy</feedburner:origLink></item>
    <item>
      <title>Notification Schedules and PagerDuty</title>
      <description>&lt;p&gt;&lt;a href="http://pagerduty.com"&gt;&lt;img src="http://f.cl.ly/items/022s0u3o2j1b2e3d1S2j/Image%202013.02.27%209:33:35%20AM.png" style="margin: 0 auto 10px auto; display:block"&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Whenever we&amp;#8217;re asked how to make on-call notification schedules for Scout alerts, we recommend &lt;a href="pagerduty.com"&gt;PagerDuty&lt;/a&gt;. PagerDuty has invested a ton of time in building a dedicated notification scheduling service, and it&amp;#8217;s a great complement to Scout.&lt;/p&gt;


	&lt;p&gt;With our recent release of &lt;a href="http://blog.scoutapp.com/articles/2013/01/02/notifcation-groups-coming-jan-15th"&gt;notification groups&lt;/a&gt;, Scout&amp;#8217;s integration with PagerDuty got even more powerful:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Multiple PagerDuty services:&lt;/strong&gt; add as many PagerDuty services to Scout as necessary.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Trigger-specific escalation policies&lt;/strong&gt;: assign any PagerDuty escalation policy to any threshold in Scout. If you need to create multiple thresholds on a given metric with different escalation policies, it&amp;#8217;s simple to do &amp;#8211; just add another trigger.&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Automatic incident resolution from Scout&lt;/strong&gt;: since all integrations are routed through PagerDuty&amp;#8217;s &lt;span class="caps"&gt;API&lt;/span&gt;, Scout now auto-resolves any PagerDuty incidents when Scout&amp;#8217;s trigger stops firing.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Multiple services in PagerDuty:&lt;/h2&gt;


	&lt;p&gt;&lt;img src="http://f.cl.ly/items/3q47150E3J2g1f3B0I0Q/pagerduty-pagerduty.png" style="width:300px"&gt;&lt;/p&gt;


	&lt;p&gt;&lt;br&gt;
... and those same services integrated into Scout: 
&lt;br&gt;&lt;br&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://f.cl.ly/items/1e3A1z0F3U2W0Y0O2a1T/pagerduty-scout.png" style="width:550px"&gt;&lt;/p&gt;


	&lt;h2&gt;Adding PagerDuty services within Scout&lt;/h2&gt;


	&lt;p&gt;You need to start in Scout to create a PagerDuty integration:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Click on Notifications (in the top navigation bar),&lt;/li&gt;
		&lt;li&gt;Click on &amp;#8220;Add PagerDuty Integration.&amp;#8221; &lt;/li&gt;
		&lt;li&gt;You&amp;#8217;ll be given the option to create a new PagerDuty service, or connect to an existing service within your account.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;To assign a PagerDuty service to a trigger, ensure the PagerDuty integration is part of a notification group (the notification group can contain other items too, if needed), then assign that notification group to a trigger.&lt;/p&gt;


	&lt;h2&gt;Related posts&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blog.scoutapp.com/articles/2013/01/02/notifcation-groups-coming-jan-15th"&gt;Notification groups announcement&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://blog.scoutapp.com/articles/2012/03/21/webhooks"&gt;Webhooks&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/WOXT4Q1_gCs" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 27 Feb 2013 09:37:00 EST</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/02/27/notification-schedules-and-pagerduty</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/WOXT4Q1_gCs/notification-schedules-and-pagerduty</link>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/254</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/02/27/notification-schedules-and-pagerduty</feedburner:origLink></item>
    <item>
      <title>Sidekiq and Puppet Monitoring Plugins = 70+ plugins strong!</title>
      <description>&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/sidekiq_puppet.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;With the &lt;a href="https://scoutapp.com/plugin_urls/7111-sidekiq-monitor"&gt;&lt;strong&gt;Sidekiq Monitor Plugin&lt;/strong&gt;&lt;/a&gt; (by &lt;a href="https://twitter.com/scootklein"&gt;Scott Klein&lt;/a&gt; of &lt;a href="https://www.statuspage.io/"&gt;StatusPage.io&lt;/a&gt;) and the &lt;a href="https://scoutapp.com/plugin_urls/6831-puppet-last-run"&gt;&lt;strong&gt;Puppet Last Run Plugin&lt;/strong&gt;&lt;/a&gt; (by &lt;a href="http://twitter.com/didip"&gt;Didip Kerabat&lt;/a&gt; of &lt;a href="http://www.kongregate.com/"&gt;Kongregrate&lt;/a&gt;) Scout&amp;#8217;s plugin directory count has now passed 70 plugins!&lt;/p&gt;


	&lt;p&gt;The Sidekiq Monitor Plugin monitors key metrics for &lt;a href="http://mperham.github.com/sidekiq/"&gt;Sidekiq&lt;/a&gt;, a Ruby message processing library. Didip&amp;#8217;s Puppet Last Run Plugin tracks key metrics for the most recent &lt;a href="https://puppetlabs.com/"&gt;Puppet&lt;/a&gt; run on a monitored server.&lt;/p&gt;


	&lt;p&gt;Have a useful plugin sitting around? Share it! Send a pull request to our &lt;a href="https://github.com/scoutapp/scout-plugins"&gt;scout-plugins repository&lt;/a&gt; on Github.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/tAJMvx9hBUE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 14 Feb 2013 22:29:00 EST</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/02/14/sidekiq-and-puppet-monitoring-plugins-70-plugins-strong</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/tAJMvx9hBUE/sidekiq-and-puppet-monitoring-plugins-70-plugins-strong</link>
      <category>Plugins</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/253</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/02/14/sidekiq-and-puppet-monitoring-plugins-70-plugins-strong</feedburner:origLink></item>
    <item>
      <title>The reward of redundancy: time</title>
      <description>&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/mont_pass.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s been a month since I started attaching torture devices disguised as boots to my feet, long wooden sticks to each torture device, and tumbling down mountains. Skiing has changed my outlook on winter. It&amp;#8217;s a season to enjoy, not a time where I gaze wistfully out the window, hoping the short, cold days pass by as quickly as possible.&lt;/p&gt;


	&lt;p&gt;However, there&amp;#8217;s a problem when skiing becomes a favorite hobby: not everyday is a great day on the mountain. If it hasn&amp;#8217;t snowed in a while, the surface is hard. The temperature might be in the single digits and the wind may be gusting 50 &lt;span class="caps"&gt;MPH&lt;/span&gt;+. It might dump snow in the backcountry, but the avalanche conditions may make it unsafe.&lt;/p&gt;


	&lt;p&gt;There&amp;#8217;s something special about being able to sneak away when the conditions are the best, even if it&amp;#8217;s during the work week. It feels a bit like being a kid again (correction: a kid with a receding hairline). It&amp;#8217;s a fun reminder that it&amp;#8217;s not always bad to feel redundant.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/TVAYaqfj4XY" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 31 Jan 2013 16:39:00 EST</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/01/31/time-the-most-valuable-resource</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/TVAYaqfj4XY/time-the-most-valuable-resource</link>
      <category>Business</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/252</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/01/31/time-the-most-valuable-resource</feedburner:origLink></item>
    <item>
      <title>Our DIY Homepage Process</title>
      <description>&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/new_homepage.png" width=565/&gt;&lt;/p&gt;


	&lt;p&gt;We recently decided it was time for a major update to the &lt;a href="https://scoutapp.com"&gt;public side of Scout&lt;/a&gt;. We&amp;#8217;d start with a more polished homepage. Since we&amp;#8217;re both developers, the obvious next step seemed like hiring a designer. However, working with an outside designer isn&amp;#8217;t a hire-and-forget experience:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Good designers are difficult to find. Design doesn&amp;#8217;t scale like a product business. &lt;/li&gt;
		&lt;li&gt;Good designers are busy. It could take 30-60 days to start work, then another 30 days for it to come together. This means we could be looking at a 90 day timeline. We wanted to launch it faster.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Instead of starting work with a designer on a blank slate, we decided to start firming up what we wanted the homepage to look like. We&amp;#8217;d end up with one of the following outcomes:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;We&amp;#8217;re terrible at design, but we&amp;#8217;ve at least thought it through. Hire a designer. &lt;/li&gt;
		&lt;li&gt;We can get 80% of the way there, but we&amp;#8217;ll need a designer for touchups. &lt;/li&gt;
		&lt;li&gt;If we iterate enough, we can launch something we&amp;#8217;ll be happy with.&lt;/li&gt;
	&lt;/ul&gt;
&lt;h2&gt;Structure&lt;/h2&gt;


	&lt;p&gt;We had a rough idea of what we wanted for the structure of the site:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Tagline and overview &amp;#8211; In as few of words as possible, give an overview of Scout. Highlight Scout&amp;#8217;s sweet spot.&lt;/li&gt;
		&lt;li&gt;Social Proof &amp;#8211; Our lightweight approach to monitoring can scare off larger teams that think Scout won&amp;#8217;t meet their needs. Show this isn&amp;#8217;t the case: large teams love using Scout. &lt;/li&gt;
		&lt;li&gt;Feature highlights&lt;/li&gt;
		&lt;li&gt;7 days on Scout &amp;#8211; Highlight how Scout fits into a developer&amp;#8217;s day-to-day life, similar to the &lt;a href="http://www.nest.com/living-with-nest/"&gt;Living with Nest&lt;/a&gt; section on nest.com.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Inspiration&lt;/h2&gt;


	&lt;p&gt;In the past, finding design inspiration has been a laborious task. Blog posts that highlight good design often don&amp;#8217;t cover products. This time, I used &lt;a href="http://dribbble.com"&gt;Dribbble&lt;/a&gt;, creating a &lt;a href="http://dribbble.com/dhaynes23/buckets/96941-Public-Site-Inspiration"&gt;Public Site Inspiration Bucket&lt;/a&gt;. I searched Dribble with terms like &amp;#8220;homepage&amp;#8221;, &amp;#8220;minimal&amp;#8221;, and &amp;#8220;landingpage&amp;#8221;.&lt;/p&gt;


	&lt;h2&gt;Showing up for work&lt;/h2&gt;


	&lt;p&gt;I was leading the design on this and warned Andre not to expect any works of art in the beginning. Instead, my plan was to simply show up for work: work on design a bit every day, valuing rapid experiments and lots of mockups. The first week was rough &amp;#8211; it started out a bit like this:&lt;/p&gt;


	&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/lingscars.png" width=565/&gt;&lt;/p&gt;


	&lt;p&gt;As we focused in on a style we liked, I started applying more polish and things came together. In all, I created 24 iterations of the homepage. Iterations often had several alternates as well.&lt;/p&gt;


	&lt;p&gt;About half-way through, it felt like we could probably do this ourselves. It took 30 days (including a break over the holidays) to launch.&lt;/p&gt;


	&lt;h2&gt;Copy&lt;/h2&gt;


	&lt;p&gt;I admire product sites with solid copy &amp;#8211; it&amp;#8217;s especially hard to find with technical products. Early-on in our process, I replaced placeholder text with actual copy. This gave us lots of time to firm up both the design and the text on the page.&lt;/p&gt;


	&lt;h2&gt;Tagline &amp;#8211; &amp;#8220;Neckbeard Optional&amp;#8221;.&lt;/h2&gt;


	&lt;p&gt;Products like Scout that emphasis simplicity often strike a negative or snobbish-tone with their tagline:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&amp;#8220;FOO done right&amp;#8221; &lt;/li&gt;
		&lt;li&gt;&amp;#8220;FOO that doesn&amp;#8217;t suck&amp;#8221;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I wanted to avoid this. I assembled 30 possible taglines for Scout and the term &amp;#8220;neckbeard&amp;#8221; consistently floated to the top, because, obviously, neckbeards are the awesome:&lt;/p&gt;


	&lt;p&gt;&lt;img src="https://dl.dropbox.com/u/468982/blog/neckbeards-everywhere.jpeg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;The general public may not know what we&amp;#8217;re referencing, but a developer visiting our homepage probably does. My high school English teacher always emphasized &amp;#8220;show, don&amp;#8217;t tell&amp;#8221;. Referencing a neckbeard shows how every part of Scout is really written by (and for) developers, including the marketing copy.&lt;/p&gt;


	&lt;h2&gt;Decreasing the scope&lt;/h2&gt;


	&lt;p&gt;About halfway through the process, we decided to cut the &amp;#8220;7 days on Scout&amp;#8221; section. We love the idea, but doing it right would require a significant amount of time. There&amp;#8217;s no reason we can&amp;#8217;t add it to our homepage later.&lt;/p&gt;


	&lt;h2&gt;Browser Testing with Browserstack&lt;/h2&gt;


	&lt;p&gt;Since Scout doesn&amp;#8217;t support Windows, an incredibly small percentage of our visits come from Internet Explorer. However, our homepage attracts a more general audience, so we wanted to make sure it looked solid in IE as well. Instead of dealing with something slow and complicated on my Mac, I just used &lt;a href="http://browserstack.com"&gt;Browserstack&lt;/a&gt;. Browserstack is great: tons of browsers (way more than I&amp;#8217;d ever install locally) and support for &lt;span class="caps"&gt;SSH&lt;/span&gt; tunneling straight to my laptop.&lt;/p&gt;


	&lt;h2&gt;Summary&lt;/h2&gt;


	&lt;p&gt;We were able to put together a design we liked by:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Using Dribble to quickly assemble a bucket of designs we liked.&lt;/li&gt;
		&lt;li&gt;Working on the homepage design every day. Be OK with ugly things in the beginning.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Remember, the worst case &lt;span class="caps"&gt;DIY&lt;/span&gt; design route: you form a much clearer picture of what you&amp;#8217;re looking for.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/scoutapp/~4/XqGnpLawMvo" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 21 Jan 2013 11:44:00 EST</pubDate>
      <guid isPermaLink="false">http://blog.scoutapp.com/articles/2013/01/21/our-diy-homepage-process</guid>
      <link>http://feedproxy.google.com/~r/scoutapp/~3/XqGnpLawMvo/our-diy-homepage-process</link>
      <category>Development</category>
      <trackback:ping>http://blog.scoutapp.com/articles/trackback/251</trackback:ping>
    <feedburner:origLink>http://blog.scoutapp.com/articles/2013/01/21/our-diy-homepage-process</feedburner:origLink></item>
  </channel>
</rss>
