<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Charles Hooper</title>
	
	<link>http://www.charleshooper.net</link>
	<description />
	<lastBuildDate>Wed, 25 Jan 2012 01:02:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/subversity" /><feedburner:info uri="subversity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>subversity</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsubversity" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsubversity" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsubversity" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsubversity" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsubversity" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
		<title>We Have the Tools but What About the Techniques?</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/Yuibz6j5tb8/</link>
		<comments>http://www.charleshooper.net/blog/we-have-the-tools-but-what-about-the-techniques/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 08:27:44 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[devops]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=498</guid>
		<description><![CDATA[In my previously-written article &#8220;Concurrent Engineering: The Foundation of DevOps&#8221; I wrote &#8220;just because you use puppet does not necessarily mean your organization is practicing DevOps.&#8221; I didn&#8217;t spend much time on it then, but I think it bears repeating and further explanation. The DevOps &#8220;movement&#8221; has seen, and will likely continue to see, a [...]]]></description>
			<content:encoded><![CDATA[<p>In my previously-written article &#8220;<a title="Concurrent Engineering: The Foundation of DevOps" href="http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/">Concurrent Engineering: The Foundation of DevOps</a>&#8221; I wrote &#8220;<em>just because you use puppet does not necessarily mean your organization is practicing DevOps.</em>&#8221; I didn&#8217;t spend much time on it then, but I think it bears repeating and further explanation. The <strong>DevOps &#8220;movement&#8221; has seen</strong>, and will likely continue to see, <strong>a huge influx of new tools</strong> as organizations attempt to find ways to adopt DevOps within their organizations. These tools have included (and certainly have not been limited to) tools that aid in monitoring (statsd), configuration management (puppet), and continuous delivery (hubot).</p>
<p>Operations engineers, software developers, and managers are in a mad dash to develop, utilize, and integrate these tools within their organizations. And that&#8217;s where we&#8217;re going wrong; we are focused on a single component of the Software/Systems Engineering Process. This process model contains three main components that are central to its existence: <em>methodologies</em>, <em>techniques</em>, and <em>tools</em> (Valacich 2009). While I don&#8217;t need to go into each one specifically, it&#8217;s clear that the tools are just a single factor in the overall process. Following the model further, it becomes clear that the makeup of each of these components influences the other components in the process.</p>
<p>Put simply, <strong>DevOps is a methodology</strong> and, as such, it&#8217;s natural that we&#8217;re seeing a huge response in tools. What I feel we&#8217;re missing, however, is more information about the different techniques used throughout organizations in <em>their</em> software and operations engineering processes. An excellent example of this is <a href="http://scottchacon.com/2011/08/31/github-flow.html" target="_blank">Scott Chacon&#8217;s explanation of how Github uses Git (and Github!) to deliver continuous improvement</a> to their service. With that said, I would like to see more organizations refine their techniques and talk about <em>these</em> as much as they talk about their tools.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=Yuibz6j5tb8:knmuzQhFRHg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=Yuibz6j5tb8:knmuzQhFRHg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=Yuibz6j5tb8:knmuzQhFRHg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=Yuibz6j5tb8:knmuzQhFRHg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=Yuibz6j5tb8:knmuzQhFRHg:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/we-have-the-tools-but-what-about-the-techniques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/we-have-the-tools-but-what-about-the-techniques/</feedburner:origLink></item>
		<item>
		<title>Year-End and New-Year Updates</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/mg7axQpDkhc/</link>
		<comments>http://www.charleshooper.net/blog/year-end-and-new-year-updates/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 06:33:37 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=482</guid>
		<description><![CDATA[Happy New Years, everyone. I thought I’d ring in the new year with some site stats from 2011. Only 10 posts published. 59,238 pageviews. 24,829 visitors (22,634 unique) 1.32% bounce rate. Multiple job and business opportunities in direct response to articles I wrote including a new job (more details below). I really want to write [...]]]></description>
			<content:encoded><![CDATA[<p>Happy New Years, everyone.</p>
<p>I thought I’d ring in the new year with some site stats from 2011.</p>
<ul>
<li>Only 10 posts published.</li>
<li>59,238 pageviews.</li>
<li>24,829 visitors (22,634 unique)</li>
<li>1.32% bounce rate.</li>
<li>Multiple job and business opportunities in direct response to articles I wrote including a new job (more details below).</li>
</ul>
<p>I really want to write more. My resolution then is to “<strong>write more</strong>.” Using a more quantified approach,<strong> I will spend at least 30 minutes a day writing for at least five days a week</strong>. That doesn’t mean I will publish five articles a week. One of my big issues with writing is the amount of time that goes into each post. I approach my writing very academically and try to back up my ideas with citations; this research takes time. I also, very frequently, solicit feedback from other people before publishing. But I really enjoy writing and I really enjoy receiving feedback on my ideas through this blog so I would like to continue doing it.</p>
<p>Other resolutions of mine include physical health and professional development (I’d really like to <em>give a talk at a conference</em> this year).</p>
<p>I also have some really exciting news. Starting on Monday I will officially begin my employment with <a href="https://www.dotcloud.com/" target="_blank">dotCloud</a> on their <em>Site Reliability Engineering</em> team! This is exciting for two reasons.</p>
<p>First, working at dotCloud is going to be an awesome experience. Everyone I’ve talked to is incredibly smart. Our CEO, <a href="https://www.dotcloud.com/">Solomon Hykes</a>, was also just named on Forbes’ <a href="http://www.forbes.com/special-report/2011/30-under30-12/30-under-30-12_land.html" target="_blank">“30 Under 30” list</a>. Third, and probably most importantly, is that I’m going to absolutely love the work. I love solving problems, particularly in devops, and I love writing tools that make people’s lives easier (which is precisely what dotCloud does). If you’re looking for a Platform as a Service provider, try out dotCloud and let us know how you like it.</p>
<p>The second reason this is exciting because, in the process of starting at a new company, I’ve managed to expand my personal consulting practice. I don’t think I’ve said so before, but I provide <em>systems engineering services</em> to <a href="http://www.loud3r.com/" target="_blank">Loud3r Inc</a>. I’m their only “web ops” guy and we’ve managed to completely turn things around in the past 6 months; we’re providing our services better (more reliable, more frequent updates), faster, and cheaper than before. Rather than cancel the contract entirely, the CEO of Loud3r and I felt it was a good idea for me to subcontract a large portion of my workload to a trusted colleague of mine.</p>
<p>How about you? Is there anything exciting you would like to share about the progress you made during 2011 or large changes you&#8217;re making in the start of 2012? Tell me all about it!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=mg7axQpDkhc:Me0EFal-DR8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=mg7axQpDkhc:Me0EFal-DR8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=mg7axQpDkhc:Me0EFal-DR8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=mg7axQpDkhc:Me0EFal-DR8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=mg7axQpDkhc:Me0EFal-DR8:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/year-end-and-new-year-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/year-end-and-new-year-updates/</feedburner:origLink></item>
		<item>
		<title>Concurrent Engineering: The Foundation of DevOps</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/K_xVVXuuks0/</link>
		<comments>http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 12:21:28 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=452</guid>
		<description><![CDATA[DevOps is all about trying to avoid that epic failure and working smarter and more efficiently at the same time. It is a framework of ideas and principles designed to foster cooperation, learning and coordination between development and operational groups. In a DevOps environment, developers and sysadmins build relationships, processes, and tools that allow them [...]]]></description>
			<content:encoded><![CDATA[
<a href='http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/cedp1/' title='cedp1'><img width="150" height="150" src="http://www.charleshooper.net/wp-content/uploads/cedp1-150x150.jpg" class="attachment-thumbnail" alt="cedp1" title="cedp1" /></a>
<a href='http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/devops/' title='Devops'><img width="150" height="150" src="http://www.charleshooper.net/wp-content/uploads/Devops-150x150.png" class="attachment-thumbnail" alt="Devops" title="Devops" /></a>

<blockquote><p>DevOps is all about trying to avoid that epic failure and working smarter and more efficiently at the same time. It is a framework of ideas and principles designed to foster cooperation, learning and coordination between development and operational groups. In a DevOps environment, developers and sysadmins build relationships, processes, and tools that allow them to better interact and ultimately better service the customer (<a title="What DevOps Means to Me" href="http://www.kartar.net/2010/02/what-devops-means-to-me/" target="_blank">James Turnbull</a>).</p></blockquote>
<p>At the time of writing, if you were to search for &#8220;devops&#8221; you would find eight results attempting to explain what devops is, one result for a conference, and one rather satirical article (although not necessarily incorrect) where the author answers the question of &#8220;how do you implement devops&#8221; with &#8220;<a title="DevOps is a Poorly Executed Scam" href="http://teddziuba.com/2011/03/devops-scam.html" target="_blank">nobody seems to know</a>&#8221; (Ted Dziuba).</p>
<p>The big problem with the DevOps &#8220;movement&#8221; is that we essentially have a bunch of operations and development people promoting it and trying to implement it within their organizations. Meanwhile, those with management and business responsibilities, even if explained the &#8220;what,&#8221; don&#8217;t understand the &#8220;how.&#8221; Just because you use puppet does not necessarily mean your organization is practicing DevOps.</p>
<p>This shortcoming is the result of us devops proponents either falsely claiming these techniques and methodologies are new or not knowing any better. If we had something more relatable for the business people (and, by principle, <em>we</em> should be business-oriented, too) then I think DevOps would have more of a chance.</p>
<p>Well, get your product and management together because the truth is that DevOps is actually a form of Concurrent Engineering.</p>
<blockquote><p>Concurrent Engineering (CE) is a systematic approach to integrated product development that emphasizes the response to customer expectations. It embodies team values of co-operation, trust and sharing in such a manner that decision making is by consensus, involving all perspectives in parallel, from the beginning of the product life-cycle (<a title="What is concurrent engineering?" href="http://www.esa.int/esaMI/CDF/SEM1OF1P4HD_0.html" target="_blank">ESA &#8211; Concurrent Engineering Facility</a>).</p></blockquote>
<p>Concurrent Engineering encompasses several major principles which just so happen to fit the definition (however formal or informal) of devops.</p>
<p>I&#8217;ll list them from the <a title="Basic Principles of Concurrent Engineering" href="http://best.berkeley.edu/~pps/pps/concurrent.html#basic" target="_blank">Synthesis Coalition</a> here:</p>
<ul>
<li>Get a strong commitment from senior management.</li>
<li>Establish unified project goals and a clear business mission.</li>
<li>Develop a detailed plan early in the process.</li>
<li>Continually review your progress and revise your plan.</li>
<li>Develop project leaders that have an overall vision of the project and goals.</li>
<li>Analyze your market and know your customers.</li>
<li>Suppress individualism and foster a team concept.</li>
<li>Establish and cultivate cross-functional integration and collaboration.</li>
<li>Break project into its natural phases.</li>
<li>Develop metrics.</li>
<li>Set milestones throughout the development process.</li>
<li>Collectively work on all parts of project.</li>
<li>Reduce costs and time to market.</li>
<li>Complete tasks in parallel.</li>
</ul>
<div>By approaching the issues of devops as  concurrent engineering and implementing it as such, you open the movement to a well-researched, well-documented, and well-accepted product design philosophy. By shedding this light on the devops methodologies, this enables those of us pushing the devops movement to finally put the movement into a more business-oriented perspective.</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=K_xVVXuuks0:sptrkDfNnW0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=K_xVVXuuks0:sptrkDfNnW0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=K_xVVXuuks0:sptrkDfNnW0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=K_xVVXuuks0:sptrkDfNnW0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=K_xVVXuuks0:sptrkDfNnW0:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/concurrent-engineering-the-foundation-of-devops/</feedburner:origLink></item>
		<item>
		<title>Hypersensitivity and Political Correctness</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/tB8nGu2ocZg/</link>
		<comments>http://www.charleshooper.net/blog/hypersensitivity-and-political-correctness/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 00:41:00 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=441</guid>
		<description><![CDATA[I wrote a blog post this week on how engineers or &#8220;technical people&#8221; don&#8217;t have to, and shouldn&#8217;t, be jerks. My argument was that the stereotype that technically-minded people are bad at social skills was just that, a stereotype, and that employers should stop allowing us to get away with it. I knew it was going to [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a blog post this week on how <a title="Stop Letting Technical People Get Away With Social Ineptitude" href="http://www.charleshooper.net/blog/stop-letting-tech-people-be-socially-inept/">engineers or &#8220;technical people&#8221; don&#8217;t have to, and shouldn&#8217;t, be jerks</a>. My argument was that the stereotype that <em>technically-minded people are bad at social skills</em> was just that, a stereotype, and that employers should stop allowing us to get away with it. I knew it was going to be controversial when I wrote it, especially because the type of people who find my blog (HackerNewsers) <em>are</em> usually technically-minded people (with a nod to the rest of you entrepreneurs, biz, and VC folk). As expected, a large chunk of commentors (both on HN and on my blog) disagreed with my argument and a large chunk agreed.</p>
<p>What I did not expect, however, was to be misunderstood so severely that I would be accused of wanting to ruin the lives of those who are &#8220;psychologically incapable&#8221; of learning social skills. One commentor posted a picture of a child with autism and accused me of trying to make him a second-class, unemployable citizen. Another commentor went as far as to paint a grisly picture of these &#8220;psychologically incapable&#8221; people committing suicide &#8211; all because of me.</p>
<p>This blog is set up in such a way that I must manually approve comments from first-time commentors. This means that I have read every comment that was posted to my article (a few people posted more than once, but I read those too) before they appeared on my blog. I approved the comments despite the fact that I found them extremely upsetting because, even though this is my blog, I felt that everyone deserved to be heard.</p>
<p>I want to take the opportunity to say that I think this combination of hypersensitivity and political correctness is an awful thing. It&#8217;s OK to be offended, but I feel that very often the thing that offends us is a misunderstanding. In this case, my point was that <em>engineers shouldn&#8217;t be jerks and should instead learn some social skills so they can interact more effectively with co-workers and clients</em> but it was misunderstood as <em>if you&#8217;re bad at social skills, even if you can&#8217;t help it, then you should be treated like garbage</em>. I don&#8217;t think that bloggers should have to acknowledge every exception to the points they make or write disclaimers into each of their posts &#8211; that kind of defeats the point (which I feel is<em> free speech on a massive scale</em>, by the way).</p>
<p>So please, the next time you feel offended, consider asking the offender for clarification before you react. You might save yourself, and them, from a lot of unnecessary heartache.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=tB8nGu2ocZg:vz92tSCknno:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=tB8nGu2ocZg:vz92tSCknno:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=tB8nGu2ocZg:vz92tSCknno:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=tB8nGu2ocZg:vz92tSCknno:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=tB8nGu2ocZg:vz92tSCknno:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/hypersensitivity-and-political-correctness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/hypersensitivity-and-political-correctness/</feedburner:origLink></item>
		<item>
		<title>Stop Letting Technical People Get Away With Social Ineptitude</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/pAw3memktG4/</link>
		<comments>http://www.charleshooper.net/blog/stop-letting-tech-people-be-socially-inept/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 13:00:12 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=424</guid>
		<description><![CDATA[As a technical person who has worked many customer-facing support roles, I&#8217;m offended by the often-cited notion that technical people have poor people skills or are poor at filling customer support roles. Earlier this week, a web host incited a Public Relations nightmare when their &#8220;Technical Director&#8221; responded childishly to some customers, disabled their accounts, [...]]]></description>
			<content:encoded><![CDATA[<div><img class="alignleft" title="I deal with the damn customers! I have people skills!" src="http://www.collegeflavor.com/changer/images/people-skills-zoom.png" alt="I deal with the damn customers! I have people skills!" width="262" height="400" />As a technical person who has worked many customer-facing support roles, I&#8217;m offended by the often-cited notion that technical people have poor people skills or are poor at filling customer support roles. Earlier this week, a web host incited a Public Relations nightmare when their &#8220;Technical Director&#8221; responded childishly to some customers, disabled their accounts, and deleted their backups. The company&#8217;s response was to create a new customer support position so they could keep their Technical Director yet isolate him from their customers. In this new customer support personnel&#8217;s recap of the situation, he wrote:</div>
<blockquote>
<div>Jules [is] the Technical Director. Jules does a fantastic job looking after things and keeping the infrastructure running well. Unfortunately though, as is often the case with very technically minded people, customer service is not always his strong point.</div>
</blockquote>
<div>As I stated above, I find this absolutely offensive. Unfortunately, it&#8217;s often believed to be true because there <em>are</em> so many engineers and technical personnel with poor people skills. I never have seen statistics to support the notion that the ratio is <em>higher</em> in these professions than in others, yet employers often find that people filling these roles with poor people skills are still employable. This needs to stop.</div>
<div>I&#8217;m of the opinion that every position is customer-facing. Sure, some positions might not interface with the <em>company&#8217;s</em> customers, but the position is likely to have customers of its own &#8211; whether internal or external. All it takes for someone to be good at customer service is:</div>
<div>
<ul>
<li>The understanding that they represent their employer and that people are relying on them,</li>
<li>A compassionate, helpful, and courteous attitude,</li>
<li>The knowledge of whatever they&#8217;re supporting.</li>
</ul>
<div>Frankly, if you don&#8217;t have those qualities, how can you work with anyone at all?</div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=pAw3memktG4:8NdlEPTpByY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=pAw3memktG4:8NdlEPTpByY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=pAw3memktG4:8NdlEPTpByY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=pAw3memktG4:8NdlEPTpByY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=pAw3memktG4:8NdlEPTpByY:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/stop-letting-tech-people-be-socially-inept/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/stop-letting-tech-people-be-socially-inept/</feedburner:origLink></item>
		<item>
		<title>Problems at Scale</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/2d-wU8Cgx18/</link>
		<comments>http://www.charleshooper.net/blog/problems-at-scale/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 17:41:07 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=386</guid>
		<description><![CDATA[Over on HackerNews, saturn wrote that: Cloud computing scales the efficiencies, yes. It also scales the problems. This is exactly right. Problems in simple architectures are relatively easy to solve. In fact, I&#8217;d go as far as to say that we&#8217;ve probably solved them in all of the traditional archetypes, both in theory and in [...]]]></description>
			<content:encoded><![CDATA[<p>Over on <a href="http://news.ycombinator.com/item?id=2881122" target="_blank">HackerNews</a>, saturn wrote that:</p>
<blockquote><p>Cloud computing scales the efficiencies, yes. It also scales the problems.</p></blockquote>
<p>This is exactly right. Problems in simple architectures are relatively easy to solve. In fact, I&#8217;d go as far as to say that we&#8217;ve probably solved them in all of the traditional archetypes, both in theory and in practice.</p>
<p>On the other hand, complex architectures lead to exponentially more difficult problems. There are probably lots of problems in these various complex architectures that we don&#8217;t even know exist yet. And then there are those problems that we <em>do</em> know about that we think will only occur in very rare (or even &#8220;impossible&#8221;) circumstances so they get considerably less attention devoted to them.</p>
<p>Those of us who have careers, jobs, and hobbies in an engineering discipline need to remember this when we make decisions about the design of a new or existing system. Just because we can&#8217;t <em>see</em> the underlying platform, because it&#8217;s been abstracted away from us, doesn&#8217;t mean that it doesn&#8217;t exist. For example, much of the recent AWS downtime was contributed to by design flaws in the Elastic Block Store system. If you think you should be hosted on the cloud, use it, but take the time to understand the systems under the hood.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=2d-wU8Cgx18:fZbw_EXpnB4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=2d-wU8Cgx18:fZbw_EXpnB4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=2d-wU8Cgx18:fZbw_EXpnB4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=2d-wU8Cgx18:fZbw_EXpnB4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=2d-wU8Cgx18:fZbw_EXpnB4:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/problems-at-scale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/problems-at-scale/</feedburner:origLink></item>
		<item>
		<title>Amazon’s Relational Database Service (RDS) – The Black Box From Hell</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/tyhXgxDHCtk/</link>
		<comments>http://www.charleshooper.net/blog/amazons-relational-database-service-rds-the-black-box-from-hell/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 03:25:04 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=376</guid>
		<description><![CDATA[One morning I woke up early and checked my email. My plan was to check that my inbox was empty for some peace of mind and then go back to bed for a few more hours (I love Sundays). But that isn&#8217;t what happened. Instead, upon opening my inbox I was alerted that one of [...]]]></description>
			<content:encoded><![CDATA[<p>One morning I woke up early and checked my email. My plan was to check that my inbox was empty for some peace of mind and then go back to bed for a few more hours (I love Sundays). But that isn&#8217;t what happened. Instead, upon opening my inbox I was alerted that one of a client&#8217;s database servers was offline. I snapped out of my haze and immediately got to work.</p>
<p>This particular database server was a RDS instance. RDS, or <a href="http://aws.amazon.com/rds/" target="_blank">Relational Database Service</a>, is an Amazon-provided MySQL (or Oracle) server that runs on top of the EC2 platform. The advantages to this service are that backups are performed automatically (complete with point-in-time recovery,) snapshots are supported, the instances can be resized with more or less RAM/CPU/storage through the AWS console, and a whole bunch of other stuff (&#8220;maintenance&#8221;) is supposed to be performed for you automatically.</p>
<p>The disadvantages don&#8217;t make themselves apparent until you need to debug or troubleshoot a performance or availability issue. While CloudWatch metrics are included as part of the RDS package, knowing how much CPU, RAM, or storage space you&#8217;re using is only a very small part of knowing what your database instance is actually doing.</p>
<p>Prior to attempting recovery, the first thing I did was to check the <a href="http://aws.amazon.com/cloudwatch/" target="_blank">CloudWatch</a> metrics. CloudWatch seems to have trouble reporting its data when the system is under durress because there were periods where there was data and there were periods where there wasn&#8217;t. The next thing I did was check the RDS event logs. Don&#8217;t get excited, the RDS event log is not a UI wrapped around system logs, it&#8217;s just a couple of entries here and there on what Amazon RDS decides to publish. The last entry in the event log was a backup job that started several hours before and never finished. These typically only take one to two minutes to finish on this instance so I knew something was wrong.</p>
<p>I didn&#8217;t want to waste time trying to troubleshoot while the database was down so I instead moved immediately to recovery and rebooted the instance through the AWS console. It&#8217;s like <a href="http://onlinelibrary.wiley.com/doi/10.1002/bltj.20187/abstract" target="_blank">Charles McPhail</a> says, &#8220;<a href="http://onlinelibrary.wiley.com/doi/10.1002/bltj.20187/abstract" target="_blank">Respond, Restore, Resolve</a>.&#8221; After about a whole 20 to 30 minutes the database server began accepting connections again but the instance was never taken out of the &#8220;REBOOTING&#8221; state when it should have transitioned to &#8220;STARTED&#8221;. With the instance in the &#8220;REBOOTING&#8221; state, my only option now was to recover from a previous backup as the rest of the functionality is disabled unless the instance is in a &#8220;STARTED&#8221; state.</p>
<p>To make matters worse, the various components in our infrastructure were connecting to this database server and were making it impossible to find out what&#8217;s going on. The max connection limit was reached and I was no longer able to login and view the process list or analyze the status variables.</p>
<p>At this point, I decided my only course of action was to spin up a new instance from a previous backup. I made this request through the AWS console and, two to three hours later, my new instance was finally up and running. About a half an hour prior to this, the old instance was transitioned into a &#8220;FAILED&#8221; state and shut down. When your instance is in the &#8220;FAILED&#8221; state, you cannot restart it. Your only option is to restore from backup. In my case, it took several hours for AWS to declare the instance as failed and it took several hours to restore the backup. I did not know that the &#8220;FAILED&#8221; state was even a possible state and had no idea that AWS could just kill an instance like that. To top it all off, Amazon sent a very nice email to the owner of the account (my client the CEO) explaining that we&#8217;ve been using an unsupported storage engine all this time.</p>
<p>As it turns out, I missed the note in the <a href="http://docs.amazonwebservices.com/AmazonRDS/latest/UserGuide/" target="_blank">RDS User Guide</a> that says that MyISAM is not supported, particularly when it comes to data recovery. While I understand why RDS made this decision (MyISAM gets corrupted easily and is not easy to repair sometimes,) I felt misled and uninformed about the support of the storage engines. Yes, the note is in the RDS User Guide, however, it is not mentioned anywhere in the main page about RDS nor is it in the <a href="http://aws.amazon.com/rds/faqs/" target="_blank">RDS FAQs</a> (where the string &#8220;MyISAM&#8221; only appears once).</p>
<p>A few weeks have gone by and we have taken steps to avoid and reduce the damage from these types of outages in the future. However, we still occasionally receive an alert where an RDS instance stops accepting connections for one to two minutes at a time and all the event log has to say is that the instance has been &#8220;recovered.&#8221; Recovered from what exactly? What did you do to it? Why does this keep happening? How do we make it stop?</p>
<p>In summary, I&#8217;ll probably never know because on RDS you do not have access to the underlying OS. This means:</p>
<ul>
<li>You do not have access to the OS process list</li>
<li>You do not have access to things like top, htop, iostat, or dstat</li>
<li>You do not have access to the process list if the MySQL process isn&#8217;t accepting connections</li>
<li>You do not have access to any system logs</li>
</ul>
<div>If you just need a quick and dirty MySQL server and you almost never want to worry about the status of your backups, go ahead and use RDS. However, if you&#8217;re concerned about reliability (that you control,) being able to effectively troubleshoot problems, and knowing the state of your underlying OS, RDS is not right for you.</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=tyhXgxDHCtk:F2EQdO1_4lY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=tyhXgxDHCtk:F2EQdO1_4lY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=tyhXgxDHCtk:F2EQdO1_4lY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=tyhXgxDHCtk:F2EQdO1_4lY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=tyhXgxDHCtk:F2EQdO1_4lY:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/amazons-relational-database-service-rds-the-black-box-from-hell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/amazons-relational-database-service-rds-the-black-box-from-hell/</feedburner:origLink></item>
		<item>
		<title>A Couple of Python Snippets</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/PBRhD5gCNoM/</link>
		<comments>http://www.charleshooper.net/blog/a-couple-of-python-snippets/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 16:54:41 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=369</guid>
		<description><![CDATA[I haven&#8217;t updated in awhile but I decided to drop a couple of gists in here and call it a post. These snippets are incredibly simple and I don&#8217;t expect to &#8220;wow&#8221; anybody here, but I was asked for them recently and am posting them here. Group words by their first letter in Python Merging [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t updated in awhile but I decided to drop a couple of gists in here and call it a post. These snippets are incredibly simple and I don&#8217;t expect to &#8220;wow&#8221; anybody here, but I was asked for them recently and am posting them here.</p>
<h1>Group words by their first letter in Python</h1>
<script src="http://gist.github.com/1050517.js"></script>
<h1>Merging list of lists in Python using reduce</h1>
<script src="http://gist.github.com/1054819.js"></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=PBRhD5gCNoM:bGuJj2zzZmM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=PBRhD5gCNoM:bGuJj2zzZmM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=PBRhD5gCNoM:bGuJj2zzZmM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=PBRhD5gCNoM:bGuJj2zzZmM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=PBRhD5gCNoM:bGuJj2zzZmM:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/a-couple-of-python-snippets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/a-couple-of-python-snippets/</feedburner:origLink></item>
		<item>
		<title>Common Single Point of Failure: People</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/S02_f7AzBMA/</link>
		<comments>http://www.charleshooper.net/blog/common-single-point-of-failure-people/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 05:04:34 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=355</guid>
		<description><![CDATA[Yesterday, when I arrived at my other job on my school&#8217;s help desk, I found out that my supervisor was not coming into work at all. This is OK; I enjoy the autonomy of working unsupervised. However, at this particular university&#8217;s help desk, my supervisor is the only person who can reset security profile information [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, when I arrived at my other job on my school&#8217;s help desk, I found out that my supervisor was not coming into work at all. This is OK; I enjoy the autonomy of working unsupervised. However, at this particular university&#8217;s help desk, my supervisor is the <em>only</em> person who can reset security profile information on student accounts. She is also the only person who assigns work orders to the technicians that work here. I&#8217;ll spare you the details, but probably 80-90% of our workload on any given day gets passed through this one person.</p>
<p>This is a serious problem. By passing tasks through a single person with no backup we are guaranteeing the collapse of our support system. I&#8217;ve seen this at other gigs and I bet you have, too.</p>
<p>Maybe it&#8217;s the &#8220;one guy&#8221; who has access to the firewall or router. Or maybe there&#8217;s that only person who knows how to configure a particular piece of software or solve a specific problem. Truthfully, you&#8217;re probably that guy and don&#8217;t even realize it. Ever get work-related phone calls (or worse: called in) during your &#8220;time off?&#8221; Red flag.</p>
<p>All of these conditions are single points of failures (SPoF). Too often, we sysadmins, developers, and engineers only think of SPoFs in terms of hardware and software. But if we look at what actually makes up the entire information system (hardware, software, data, procedures, and <em>people)</em>, we see that we&#8217;re part of it too. This hoarding of knowledge often results in a failure of the system itself and very frequently makes existing failures worse.</p>
<h1>Example</h1>
<p>A customer-facing database server stops responding. You&#8217;re not really familiar with what database(s) it serves but customers are complaining that it&#8217;s down or very slow. There&#8217;s another guy that normally handles this system but he&#8217;s out of town and completely unreachable. You want to diagnose but you don&#8217;t even know how to access the system. Do you blindly reboot (risking data loss and corruption)? Sit and wait it out? Learn how to summon your co-worker&#8217;s spirit?</p>
<p>One very real situation occurred when I worked at a small Internet Service Provider. A very big client of ours called and said that a very large portion of their network was down (we managed it, too). Did I have the credentials to the router in question? No. Did the client? No. Who did? <em>That guy </em>did, the one who is usually too busy running around to return calls (incidentally, the owner). He did finally return our cries for help&#8230; 3 hours later. Was the problem difficult to solve? No. In fact, it was fixed within minutes of receiving the proper credentials. (Funny story, one of their on-staff techs plugged a network camera into the network and accidentally assigned their router&#8217;s address as the camera&#8217;s IP :)) Sure, this mistake was dumb, but did this client need to suffer degraded availability for these 3 hours? Absolutely not.</p>
<h2>Solution</h2>
<p>The obvious, and perhaps only, solution to this problem is to make as much of your knowledge available as possible. The more knowledge you offload from your brain, the better and more efficient the system becomes. I know to some this might seem a little counter-productive. After all, having this knowledge is job security&#8230;right?</p>
<p>No, absolutely not. Holding company knowledge hostage should never be how you ensure your job security (<em>that&#8217;s a myth anyways</em>).</p>
<p>With that being said, please don&#8217;t spend all your energy and effort on documentation only to abandon the effort a month later. I was speaking to a friend of mine earlier when he mentioned that very often he comes across company Wikis all the time that usually contain outdated information and haven&#8217;t even been logged into in 6 months.</p>
<p>Allow me to re-iterate, do<em> not</em> go on documentation sprees. Document everything <em>when</em> you do it and share that information <em>when </em>you do it. Regularly. Constantly. If you wait until you have alot of information to document, then you will probably become overwhelmed and just not do it. When I was in the Air Force, we had a saying:</p>
<h2>The job ain&#8217;t over till the paperwork is done.</h2>
<p>Simply put, add documentation into your regular workflow. The investment is small and the returns are great.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=S02_f7AzBMA:SaXAjyf91OM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=S02_f7AzBMA:SaXAjyf91OM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=S02_f7AzBMA:SaXAjyf91OM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=S02_f7AzBMA:SaXAjyf91OM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=S02_f7AzBMA:SaXAjyf91OM:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/common-single-point-of-failure-people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/common-single-point-of-failure-people/</feedburner:origLink></item>
		<item>
		<title>Controlling Django Apps with an Init Script</title>
		<link>http://feedproxy.google.com/~r/subversity/~3/Mr0z8fLoPzI/</link>
		<comments>http://www.charleshooper.net/blog/controlling-django-apps-with-an-init-script/#comments</comments>
		<pubDate>Sun, 29 May 2011 14:55:13 +0000</pubDate>
		<dc:creator>Charles Hooper</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[init]]></category>

		<guid isPermaLink="false">http://www.charleshooper.net/?p=350</guid>
		<description><![CDATA[If you&#8217;re reading this, you probably already know that an init script is a specific style of script that allows you to control daemon processes. In particular, they are used to start processes at boot and terminate them at shutdown. What follows is an example script I use to control one of my Django+FastCGI projects. [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re reading this, you probably already know that an init script is a specific style of script that allows you to control daemon processes. In particular, they are used to start processes at boot and terminate them at shutdown. What follows is an example script I use to control one of my Django+FastCGI projects. This particular example was written for Ubuntu and Debian but could probably be modified for RedHat/CentOS or other distros.</p>
<p>Please refer to your Distro&#8217;s documentation on how to install and activate init scripts (hint: See /etc/init.d/ and the man page for update-rc.d if on Debian or Ubuntu.)</p>
<script src="http://gist.github.com/997829.js"></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/subversity?a=Mr0z8fLoPzI:ugVLGIHNdv0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/subversity?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=Mr0z8fLoPzI:ugVLGIHNdv0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/subversity?i=Mr0z8fLoPzI:ugVLGIHNdv0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/subversity?a=Mr0z8fLoPzI:ugVLGIHNdv0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/subversity?i=Mr0z8fLoPzI:ugVLGIHNdv0:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.charleshooper.net/blog/controlling-django-apps-with-an-init-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.charleshooper.net/blog/controlling-django-apps-with-an-init-script/</feedburner:origLink></item>
	</channel>
</rss>

