<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Critical Results</title>
	<atom:link href="http://blog.criticalresults.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.criticalresults.com</link>
	<description>get software done faster, sharpen your team, gain balance and control... and make your project NOT SUCK</description>
	<lastBuildDate>Sun, 15 Apr 2012 22:25:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.criticalresults.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Critical Results</title>
		<link>http://blog.criticalresults.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.criticalresults.com/osd.xml" title="Critical Results" />
	<atom:link rel='hub' href='http://blog.criticalresults.com/?pushpress=hub'/>
		<item>
		<title>Look. This SOPA/PIPA thing.</title>
		<link>http://blog.criticalresults.com/2012/01/19/this-sopa-pipa-thing/</link>
		<comments>http://blog.criticalresults.com/2012/01/19/this-sopa-pipa-thing/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 05:01:54 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[ideas]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[PIPA]]></category>
		<category><![CDATA[SOPA]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=377</guid>
		<description><![CDATA[I used to do programming work for an industrial/grunge record label. They actually had lawyers dedicated to suing bootleg T-shirt vendors at concert venues... it was worth it.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=377&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Copyright infringement is already illegal (criminally) and actionable (civilly). SOPA/PIPA is just an attempt by the big media companies to offload their enforcement costs on you and me. Rather than doing their own damn work chasing down copyright violators, they want to keep everyone off sites that *might* be used for unauthorized copying.</p>
<p>SOPA/PIPA is kind of like making it illegal to buy blank T-shirts because you <em>might</em> put someone else&#8217;s trademarked or copyrighted image on them. Which is awesome if you&#8217;re the one with a &#8220;famous&#8221; image or brand, but sucks if you just want to publicize your mom-and-pop business or your kid&#8217;s band.</p>
<p>So since when is it <em>your</em> job and <em>my</em> job to make sure Disney and Comcast&#8217;s copyrights can&#8217;t possibly be infringed upon? Why the hell isn&#8217;t it <em>their</em> job?</p>
<h2>The inevitable war story, because I do that:</h2>
<p>I used to do programming work for an industrial/grunge record label. (Brush with fame: I knew Marilyn Manson&#8217;s accountant.) They actually had lawyers dedicated to suing bootleg T-shirt vendors at concert venues. It was an expensive pain in the ass, but they figured it was a cost of doing business and protecting the brand.</p>
<p>It wasn&#8217;t perfect, because you can&#8217;t catch and sue everyone, but it worked well enough and the label was <em>quite</em> profitable.</p>
<p>It&#8217;s not good enough for Disney though. They think <em>their</em> right to guaranteed profit trumps <em>your</em> right to run a web server. That&#8217;s the issue.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=377&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2012/01/19/this-sopa-pipa-thing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>The Single Most Effective Optimization</title>
		<link>http://blog.criticalresults.com/2011/06/06/optimization/</link>
		<comments>http://blog.criticalresults.com/2011/06/06/optimization/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 20:01:22 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[legacy]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=356</guid>
		<description><![CDATA[A year and a half ago, this really interesting scientific programming project more or less dropped into my lap. The original code was written by a physicist&#8211;let&#8217;s call him Jim&#8211;who wasn&#8217;t a professional programmer but actually did an okay job writing and maintaining this Visual Basic Classic (pre-.NET) code for several years. &#8220;As a programmer,&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=356&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A year and a half ago, this really interesting scientific programming project more or less dropped into my lap.</p>
<p>The original code was written by a physicist&#8211;let&#8217;s call him Jim&#8211;who wasn&#8217;t a professional programmer but actually did an okay job writing and maintaining this Visual Basic Classic (pre-.NET) code for several years. &#8220;As a programmer,&#8221; someone might say in a gently mocking tone, &#8220;Jim&#8217;s quite a good physicist.&#8221;</p>
<p>So it&#8217;s cool. The important thing was to solve the scientific problem, and that it did. When I picked up the code with a mandate to get it working on a .NET platform and add a few features, though, I found it fairly hard to follow. A lot of the operations really needed to be event-driven but simply weren&#8217;t. There were a lot of modal dialogs and there were Windows forms with a ton of overlapping controls that got shown and hidden at various steps in the process.</p>
<p>So it was slow going, getting the thing to build and actually run on .NET. But the thing that saved my sanity in so doing was asking one simple question over and over again:</p>
<p><em>Does this code get used at all?</em></p>
<p>In many cases, the most difficult code was unmaintainable <em>because nobody had to maintain it anyway</em>. I consulted with the client, was told that the code implemented a feature that nobody used or even knew about, and simply deleted it. (After! Of course! Having all the originals under version control!)</p>
<p>There was a mishap or two in that regard, such as code invoked by menu options that <em>seemed</em> to be permanently disabled, but still. I could go back to version control (Subversion in this case), pull the original code back into Visual Studio, and massage it to get it to work.</p>
<p>But the massive reduction in workload caused by not having to work on 30% of the system <em>at all</em> more than made up for the few little problems. I&#8217;m pretty sure that the most effective development optimization of all, when working on legacy code, is simply cutting out the code that is never invoked or nobody cares about.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/356/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=356&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2011/06/06/optimization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>Things learned while pairing</title>
		<link>http://blog.criticalresults.com/2011/03/14/things-learned-while-pairing/</link>
		<comments>http://blog.criticalresults.com/2011/03/14/things-learned-while-pairing/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 18:33:13 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Haines]]></category>
		<category><![CDATA[hubris]]></category>
		<category><![CDATA[LeanDog]]></category>
		<category><![CDATA[Sanyk]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=348</guid>
		<description><![CDATA[Why not unit test private methods? Does an object know if it lives or dies? Beats me.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=348&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I spent a Sunday in January at Corey Haines&#8217;s <a href="http://coderetreat.com/">Code Retreat</a>, out on the <a title="The LeanDog Boat" href="http://www.leandog.com/who-we-are/boat/">LeanDog boat</a>. Aside from being too darned early in the morning, and aside from the fact that I had to bail at the 3pm break because my kid thinks she needs a ride to college, it was a fantastic use of time.</p>
<p>The event is like this: You show up, hang out, grab a pair partner, and start doing <a href="http://www.agiledata.org/essays/tdd.html">test-driven development</a> (TDD) on a specific programming problem. After forty-five minutes, you stop programming, join the big group again for a debriefing, and do it again <em>from the beginning</em> with a new pair partner.</p>
<p>And you do this like six times during the day. (I only stuck around for four iterations.)</p>
<h2>The problem space</h2>
<p>The actual programming problem was to mplement <a href="http://www.bitstorm.org/gameoflife/">Conway&#8217;s Game of Life</a>. It&#8217;s a devilishly clever assignment, partly because anyone who&#8217;s taken more than one Computer Science class <em>thinks they&#8217;ve already solved it</em>. But oh no.</p>
<p>If you don&#8217;t know about the Conway game, it&#8217;s not really a game you win or lose. You have an unlimited &#8220;board&#8221; of square cells arranged in rows and columns. Each cell is considered either &#8220;alive&#8221; or &#8220;dead.&#8221; On each &#8220;turn&#8221; every cell counts its eight immediate neighbors (including diagonals); if it has fewer than two live neighbors it &#8220;dies&#8221; of loneliness; if it has more than two live neighbors it &#8220;comes to life&#8221;; and if it has exactly two live neighbors it just stays the way it is. That is all. You just watch it go, turn after turn. It&#8217;s just cool. There is no object other than watching the patterns that &#8220;grow&#8221; from various starting configurations.</p>
<p>(If the above sounds like a really stupid waste of time, you are not a geek. Please find another career.)</p>
<h2>Harder than it looks</h2>
<p>This is actually kind of hard to implement in a real object-oriented way. How do you design your classes? Is there a Board that contains (&#8220;has-many&#8221;) an infinte number of Cell objects? That won&#8217;t work quite the way I made it sound, will it? How about keeping a collection (like a C# generic) of just the live Cells? (It&#8217;s a lot easier if you get to assume a limited playing field. But alas.)</p>
<h2>What I learned</h2>
<p>Somewhat importantly, Corey didn&#8217;t expect us to use any particular programming language. He encouraged us to pair with colleagues who were using languages we might not even know yet.</p>
<p>I learned a bit about object-oriented design, if by &#8220;learn&#8221; you mean &#8220;find things to argue with.&#8221; Briefly, master crafters like Corey seem to prefer a lot more abstraction in class design than I feel like wrapping my head around. I usually like a one-to-one relationship between code space and problem space; so to me an object is &#8220;a thing that does things,&#8221; and a class is the idea of what that object looks like and does. If I can&#8217;t think of it as a thing, it&#8217;s not an object&#8211; it&#8217;s a method. Maybe.</p>
<p>I didn&#8217;t get very far with my pair partners on any of the iterations. We kept getting hung up on the TDD cycle, confused with the problem space, or stuck on mundane tactical issues. In that way it was frustrating.</p>
<p>On the good side, I got to hang out and pair with <a title="Her Agile Education" href="http://myagileeducation.com/">Angela Harms</a> on an iteration. There was a mutual aha moment when I said out loud, &#8220;A cell knows if it&#8217;s going to live or die.&#8221; Angela thought it was some Zen kind of cool. I thought I was having fun anthropomorphizing the code. We&#8217;re both right.</p>
<p>My man Chris Sanyk was there too. He <a title="Things I Learned at CodeRetreat" href="http://csanyk.com/rants/2011/01/things-i-learned-at-coderetreat/">wrote about it</a>, and wrote about it <a title="Addendum to Things I Learned At CodeRetreat" href="http://csanyk.com/rants/2011/01/addendum-to-things-i-learned-at-coderetreat/">again</a>, and wrote about it <a title="Still More Reflections From CodeRetreat" href="http://csanyk.com/rants/2011/01/still-more-reflections-from-coderetreat/">yet one more time</a>. Our favorite insight occurred when Corey said something about running unit tests only on public methods, which annoys me because sometimes all the interesting logic is in private methods. I was launching into a &#8220;rant&#8221; on this topic, according to Chris, when Chris simply said, &#8220;So write the test method inside your class.&#8221;</p>
<p>I was stunned for a moment, then opened my mouth to argue, realized what I was about to say would be wrong, then started to say something else that was wrong, and finally looked at Chris and went &#8220;aaaaaaah.&#8221;</p>
<p>Is that the right answer? Beats me. It&#8217;s not mainstream as far as I know. But it turned my idea of unit testing on its side.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/348/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/348/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/348/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=348&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2011/03/14/things-learned-while-pairing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>Preparing for GiveCamp 2011</title>
		<link>http://blog.criticalresults.com/2011/03/10/givecamp-2011/</link>
		<comments>http://blog.criticalresults.com/2011/03/10/givecamp-2011/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 22:37:19 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=355</guid>
		<description><![CDATA[Hey, everyone&#8230; I&#8217;ve been out of the blogging space for a while for a lot of reasons. Some of it has to do with having too many projects going on at once, with competing deadlines. Some of it&#8217;s about being tired. Some is because the things I want to write simply aren&#8217;t ready to hatch [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=355&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hey, everyone&#8230; I&#8217;ve been out of the blogging space for a while for a lot of reasons. Some of it has to do with having too many projects going on at once, with competing deadlines. Some of it&#8217;s about being tired. Some is because the things I want to write simply aren&#8217;t ready to hatch yet. And a little of it comes from this project I&#8217;m not supposed to say a lot about.</p>
<p>But here&#8217;s something new! At the end of the day yesterday I spent some time in conference with the organizing team for this year&#8217;s <a href="http://www.clevelandgivecamp.org">Cleveland GiveCamp</a>. We already have bunches of eager volunteers, a <a title="The LeanDog boat!" href="http://www.leandog.com/who-we-are/boat/">floating venue</a>, some early sponsorship interest, and a decently clear idea of what&#8217;s going to happen next.</p>
<h1>What you need to know</h1>
<p>GiveCamp is a bunch of designers, admins, software developers, and business people who pitch in for a weekend to create websites and software applications <em>for free</em> for nonprofit organizations.</p>
<p>This year in Cleveland it&#8217;s the last weekend in July, starting the evening of Friday the 29th and rolling through the afternoon of the 31st.</p>
<p>We haven&#8217;t decided which agencies and organizations are going to get new websites and software applications this year, but we will probably start accepting applications around May 1st.</p>
<p>We are already taking <a title="Volunteer for Cleveland GiveCamp 2011!" href="http://clevelandgivecamp.org/Volunteer">volunteer commitments</a>! If you can design web graphics, or can lead a project, or know something about content management systems (especially WordPress), or write software, or are good at organizing, or if you just want to help&#8211;please sign up now!</p>
<p>We are also working on a sponsor packet, for companies and individuals who might consider donating money, materials, food, T-shirts, or services. That should be available within a couple of weeks. GiveCamp runs cheaply, but we still need a lot of food, caffeine, and supplies to keep it going all weekend.</p>
<h1>Last year</h1>
<p>Cleveland GiveCamp was a huge hit. We used all of the LeanDog boat plus half of Burke Lakefront Airport (thanks everyone!), had about 110 volunteers who worked on 21 projects, and left <em>charged up</em> to do even more this year! I personally know three people who got hooked up with new jobs as a result of the connections they made at GiveCamp, and everyone had fun. Also, the food was far better than at most tech conferences.</p>
<h1>So.</h1>
<p>If you&#8217;re going to be anywhere near Cleveland at the end of July, here&#8217;s what you can do:</p>
<ul>
<li>Volunteer for the big GiveCamp weekend of July 29-31.</li>
<li>Start planting some mental seeds for sponsorship at the places where you eat out, work, or shop.</li>
<li>Talk to your friends and associates in nonprofit organizations&#8211;do their current websites suck? Are they looking for some kind of new software program that doesn&#8217;t already exist?</li>
<li>Watch this space, and <a href="http://www.clevelandgivecamp.org">ClevelandGiveCamp.org</a>, for more in coming months!</li>
<li>Are you in for this year? Were you there last year? Drop a comment and tell us how it went.</li>
</ul>
<p>I promise hard work, nice people, and lots of fun. See you in July!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/355/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=355&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2011/03/10/givecamp-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>What I like about Rails</title>
		<link>http://blog.criticalresults.com/2011/01/21/what-i-like-about-rails/</link>
		<comments>http://blog.criticalresults.com/2011/01/21/what-i-like-about-rails/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 18:13:12 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=350</guid>
		<description><![CDATA[Somebody asked a few months ago on LinkedIn, &#8220;What do you think about building a web application in Ruby on Rails?&#8221; Here&#8217;s my short answer: Specifically, I love the way Rails lets you do database access. The simplest way to hit a database table with Rails is to run a generate scaffold command that creates [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=350&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Somebody <a href="http://www.linkedin.com/answers/technology/software-development/TCH_SFT/739470-444226">asked</a> a few months ago on LinkedIn, &#8220;What do you think about building a web application in Ruby on Rails?&#8221; Here&#8217;s my short answer:</p>
<blockquote><p>Specifically, I love the way Rails lets you do database access. The simplest way to hit a database table with Rails is to run a <tt>generate scaffold</tt> command that creates the table for you and writes all the code for a super-basic CRUD (create, update, delete) web application. You can edit the generated &#8220;scaffold&#8221; to make it prettier or to add functionality.</p>
<p>When you go just a little farther, you find that the ActiveRecord class does most of the boring database work for you. Every table (&#8220;Model&#8221; in MVC parlance) is set up to inherit from ActiveRecord, and you don&#8217;t have to write out (in your code) what columns it contains because ActiveRecord figures it out for you at runtime.</p>
<p>Better still, you can add lines to your Model code such as <tt>:has_many x</tt> or <tt>:belongs_to y</tt> to indicate relationships (joins) with other tables. Again, Rails works out the details. You really don&#8217;t even have to know what database software is being used; ActiveRecord takes care of the vendor-specific differences.</p>
<p>Those are some specific things that make Rails so nice for web and database development. One of the hardest things for some people is getting used to NOT writing so much repetitive code.</p></blockquote>
<p>That&#8217;s at the top of my list. What do you love about Ruby and Rails? Comments are open.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/350/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=350&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2011/01/21/what-i-like-about-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>Testability, Simply</title>
		<link>http://blog.criticalresults.com/2010/10/19/testability-simply/</link>
		<comments>http://blog.criticalresults.com/2010/10/19/testability-simply/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:29:18 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[KanBan]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[offshoring]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=331</guid>
		<description><![CDATA[When they try to "do Agile," many people work too hard at it. The right idea is to cut down on things that don't get the project done and build up things that do get the project done.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=331&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another real-life example of applying Agile values and principles in weird or hostile environments. You can adapt well-known Agile practices or even make up your own. The <a title="Agile manifesto (values)" href="http://agilemanifesto.org/">values</a> and <a title="Agile principles" href="http://agilemanifesto.org/principles.html">principles</a> are what matter.</p>
<p><span id="more-331"></span></p>
<p>This client doesn&#8217;t currently follow any Agile practices, and my project will probably be over with in a few weeks, and the rest of my team is in India. It doesn&#8217;t seem practical to try to change the way they work in such a short time, and quite honestly they seem to be doing pretty well with ordinary project management.</p>
<p>So I simply implemented a little KanBan for myself and pondered the interface to my teammates on the other side of the world. Here&#8217;s what I came up with.</p>
<blockquote>
<table>
<tbody>
<tr>
<td>To:</td>
<td>Client Technical Director</td>
</tr>
<tr>
<td>From:</td>
<td>me</td>
</tr>
</tbody>
</table>
<p>Last week you suggested getting some subset of the Quux Project into a testable form so we don&#8217;t save all the testing for the  end of the project. I am totally with you on this. The earlier we spot defects the better.</p>
<p>If we had a tester right here, I&#8217;d say that person can just pull cards  from my &#8220;QA&#8221; chart (column on the KanBan) and verify that those micro-features work, one at a  time. But that only works when you have a really small feedback loop.  It&#8217;s not so good when the tester&#8217;s in India. We need to work in bigger  chunks.</p>
<h2>Milestones</h2>
<p>I figured a good milestone would be something like this story:</p>
<ul>
<li>I can log into Foo Bar and see the Quux menu option</li>
<li>I get the prompt to choose a Quux type.</li>
<li>When I choose a Quux type I will get the corresponding legal verbage.</li>
<li>I can click &#8220;Continue&#8221; and get prompted for begin and end dates.</li>
<li>If I enter no dates here I&#8217;ll get an error message.</li>
<li>If I enter bogus dates here I&#8217;ll get an error message.</li>
<li>If I enter real dates then the &#8220;Continue&#8221; button will get me to the configuration page.</li>
<li>On the configuration page&#8230;
<ul>
<li>&#8230;I can enter or not enter explanation and/or comments.</li>
<li>&#8230;I can select a titration caliber.</li>
<li>&#8230;I can click the &#8220;kick me&#8221; checkbox on or off.</li>
<li>&#8230;I can drop a Quux by clicking on &#8220;Remove.&#8221;</li>
</ul>
</li>
<li>When I click on &#8220;Complete and Submit&#8221; my Quux will be queued for processing.</li>
<li>And by the way this all works without JavaScript, so it&#8217;s good on mobile devices and security-paranoid environments.</li>
</ul>
<p>Another good milestone would be to demonstrate the stuff above with  JavaScript turned on, seeing the dynamic calendar, and so on.</p>
<h3>Another good milestone would be something like this:</h3>
<ul>
<li>I can log into Foo Bar and see the Quux Management menu option.</li>
<li>I can see the Quux I just entered in the previous story.</li>
<li>I can see the Validation Track that has been set up for me and that Quux type (as you and I discussed on Friday).</li>
<li>Ditto the Verification Track.</li>
<li>I can see the comment/explanation I entered with the original Quux.</li>
<li>I can see the &#8220;kick me&#8221; checkoff I entered when requesting the Quux.</li>
</ul>
<p>Likewise for admin, approval, and verification tasks.</p>
<h2>How to make the testing work</h2>
<p>I was thinking of sending Sarai (the tester) the first story, in &#8220;I can do  such-and-so&#8221; form. I&#8217;d tell her that if someone there pulls current  source out of TFS and builds it on the testing system, she should be  able to follow the story step by step and simply check off for each  item: YES, NO with explanation, or COULDN&#8217;T TEST. Then the next morning  I can follow up and fix the NO and COULDN&#8217;T TEST items.</p>
<h2>The board</h2>
<p>I&#8217;ve already designated the first story as the &#8220;Diamond Story.&#8221; Every card  that is required to implement the Diamond Story has a little diamond on  it. I&#8217;ll move the Diamond cards through to QA as soon as possible, then let Sarai know to try following the Diamond Story.</p>
<p>Next one will the the Club Story, and so on.</p></blockquote>
<h1>It&#8217;s the Simplest Thing</h1>
<p>The mistake a lot of people make when they try to &#8220;do Agile&#8221; is&#8230; well, they kind of work too hard at it. The idea is to cut down on things that <em><strong>don&#8217;t</strong> get the project done</em> and build up things that <em><strong>do</strong> get the project done</em>. Spending a disproportionate amount of time setting up the perfect Agile process is itself not Agile. And it doesn&#8217;t make sense.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/331/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=331&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2010/10/19/testability-simply/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>That&#8217;s what my game is</title>
		<link>http://blog.criticalresults.com/2010/10/04/my-game/</link>
		<comments>http://blog.criticalresults.com/2010/10/04/my-game/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 13:00:27 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[ideas]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[Indian food]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[projects that suck]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=325</guid>
		<description><![CDATA[My idol Naomi Dunford suggested that my fans and readers might not be clear on what I do and why it might matter to them. This makes me sad, because I want to be known for more than throwing rhetorical bombs on Twitter. Don&#8217;t get me wrong, that guy deserved the slam on Twitter, seriously, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=325&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My idol Naomi Dunford <a href="http://ittybiz.com/what-do-you-do/">suggested</a> that my fans and readers might not be clear on what I do and why it might matter to them. This makes me sad, because I want to be known for more than <a title="He really believes Obama is like Hitler?" href="http://twitter.com/dgoerlich/status/19918195176">throwing rhetorical bombs on Twitter</a>.</p>
<p>Don&#8217;t get me wrong, that guy deserved the slam on Twitter, seriously, but slamming isn&#8217;t my game. It&#8217;s not my <em>whole</em> game anyway.</p>
<p>So let me go answer some of Naomi&#8217;s questions here. Go ahead and fire back in the comments.</p>
<h1>Q. What’s your game? What do you do?</h1>
<p>A. Short answer: I take software projects that suck and make them not suck.</p>
<p>Real answer: Look, life is really hard. I&#8217;ve been working on one thing and the next, in about fifty organizations over the last fifteen years, and the same freakin&#8217; things come up over and over again:</p>
<ul>
<li>Everyone&#8217;s tired.</li>
<li>Everyone&#8217;s afraid for their job.</li>
<li>Everyone&#8217;s wasting time spinning wheels on stuff that doesn&#8217;t work.</li>
<li>Every software project is running late and pissing off the boss.</li>
<li>Every boss feels betrayed.</li>
<li>Every developer feels oppressed.</li>
<li>Software projects suck.</li>
</ul>
<p>And I&#8217;m going huh. That shouldn&#8217;t be happening. I mean, this is ostensibly a &#8220;first world&#8221; country with tons of resources and lots of educated people who can do stuff. Software itself is complicated, but it shouldn&#8217;t be as hard as everyone is making it. Very often, <em>we really do know how to make it better</em> but for any of a thousand reasons <em>doing the right thing</em> seems to be beyond us.</p>
<p>And that&#8217;s my calling. It&#8217;s really quite simple. I take the <strong>things that are already actually known</strong> about making software projects go well and apply them to real life, so regular people can solve problems, live better, and maintain a certain level of sanity at work.</p>
<h1>Q. Why do you do it? Do you love it, or do you just have one of those creepy knacks?</h1>
<p>A. That&#8217;s a weird question, Naomi.</p>
<p>I happen to love having knacks for certain things. Is that creepy?</p>
<p>Also, I am in it for the love and the hugs. It&#8217;s <em>so cool</em> when I can help decrease the project suck factor so much they&#8217;re sad to see me go.</p>
<h1>Q. Who are your customers? What kind of people would need or want what you offer?</h1>
<p>A. If you manage, pay for, specify, benefit from, or try to oversee a software development project, and it sucks, we should totally talk.</p>
<p>Things that make you much <em>more</em> likely to benefit from working with me:</p>
<ul>
<li>sense of adventure</li>
<li>willingness to be surprised</li>
<li>reasonable level of vulnerability</li>
</ul>
<p>Things that make it <em>very unlikely</em> that you will benefit from working with me:</p>
<ul>
<li>rather be comfortable than successful</li>
<li>like to be in control</li>
<li>quick to make up your mind about things</li>
<li>quite certain it&#8217;s not you</li>
</ul>
<p>Not to go all New-Agey on you here, but Making Software Projects Not Suck is <em>rarely</em> just a matter of plugging away at code. I&#8217;ve had a few of those, but most of the time the problems are way deeper than that. Sometimes the things that Make Your Project Suck are the <em>exact same things</em> you love about the project: drama! action! involvement! Then you have to choose: would you rather have the drama or the success? Because having both is not an option.</p>
<p>I&#8217;ve even dealt with projects that, when you cut through the crap, are <em>supposed</em> to suck. Like one in which the lead developer was under the impression his job would end when the project did. Or one in which the project manager seriously couldn&#8217;t figure out how to live without the angst and panic. And there was the time&#8211;I&#8217;m not real sure about this one&#8211;but there was this kind of indentured-programmer setup and the boss kind of liked it that way. It was power.</p>
<p>So number one, the thing that totally stands out as the most important distinction, is that <strong>you have to want your project to not suck</strong> and <strong>you have to be willing to change</strong>. Okay, that&#8217;s actually two things.</p>
<h3>Does that sound like therapy?</h3>
<p>I guess it does. I&#8217;ve got people you can work with if what you want is real head-shrinking. That&#8217;s not my bag.</p>
<p>What <em>is</em> my bag is showing you the truth. Things like:</p>
<ul>
<li>control isn&#8217;t progress</li>
<li>action isn&#8217;t accomplishment</li>
<li>progress isn&#8217;t a deliverable</li>
</ul>
<p>If you&#8217;re up for that kind of challenge, let&#8217;s do it. If that scares you, then we should <em>definitely</em> do it. Buck up.</p>
<h1>Q. What’s your marketing USP? Why should I buy from you instead of the other losers?</h1>
<p>A. Losers? There are no losers in this.</p>
<p>But here are a few things that make my services unique:</p>
<ol>
<li>I help you get started using Agile practices (and feeling the Agile principles) at the tactical level. You can try one thing at a time&#8211;such as starting with pair programming&#8211;without having to commit to some big revolutionary cultural shift. It&#8217;s fine to experiment first.</li>
<li>I&#8217;m attracted to, and effective with, the high-stress projects that make people crazy. I tone down the hype and make it easy to keep working  instead of panicking. I&#8217;m anti-drama.</li>
<li>Unlike a lot of shops that offer &#8220;Agile coaching,&#8221; you can see my terms and fees up front, like <a title="Consulting fees" href="http://criticalresults.com/consulting.html#fee">here</a> and <a title="Emergency Agile: what it costs" href="http://emergencyagile.com/#fee">here</a>. I just think it would be weird to hide things like that in the sales cycle when so much of what I do is make your practices transparent. I&#8217;m asking you to open your shop and your mind. The least I can do is be upfront about my side of the exchange.</li>
<li>I still write software myself most days. It&#8217;s not theory.</li>
<li>There is homemade Indian food on Fridays, even though some purists object to the hot reddish-orange cast of my special aloogobi recipe. (It&#8217;s traditionally a yellow curry, and mild.)</li>
</ol>
<h1>Q. What’s next for you? What’s the big plan?</h1>
<p>A. So glad you asked! I&#8217;m doing two things to make Project Desuckification more accessible even when I&#8217;m not.</p>
<h2>The first thing</h2>
<p>The first thing is that I&#8217;m documenting my processes a lot more diligently than I used to.</p>
<p>For example: before, I&#8217;d ask a few dozen questions before doing anything else with a new client. Now I <em>write down</em> a few dozen questions before asking. In a very recent meeting, I planned the whole interview, then diverged from the plan to follow some tangents, then got back to the plan so I could finish (almost) all of the questions.</p>
<p>That accomplished two things:</p>
<ol>
<li>I remembered to ask about some less-immediately obvious things that would have flown out of my head in the give and take of the conversation.</li>
<li>I have a handy list as a jumping-off point for the next such initial meeting.</li>
</ol>
<p>I&#8217;ll refine and augment the list in using it a few more times on successive projects. Before long it will be easy to turn that set of questions into a checklist, an article, a NOTACON presentation, or maybe even a <a title="Online learning management system" href="http://www.prfessor.com/">Prfessor</a> course.</p>
<p>So it goes with the other artifacts of Desucking: the emails that explain pair programming, my notes from debriefings, a particularly amusing burndown chart, bits of open source code. They&#8217;re resources for the next gig, but they&#8217;re also inputs for the next consolidated offering. Their specificity is what makes them so valuable; their universality is what makes them so useful.</p>
<p>At this point you&#8217;re probably wondering how I get away with ripping off all this stuff from clients who pay me to keep things private. I don&#8217;t do that! In fact, depending on the assignment, I ask them to join in my famous &#8220;Disclosure Agreement.&#8221; It protects their proprietary and confidential information, but makes clear that I can talk, blog, and publish everything else about the project. <strong>It&#8217;s like compost for desucking:</strong> useless where it came from, but invaluable for the next cycle.</p>
<h2>The other thing</h2>
<p>The other thing is simple timeline planning. Sure, I&#8217;m thrilled to death to help when your project already sucks. That&#8217;s my Thing. But unfortunately, projects reach the ultimate sucking point at unpredictable times, and there&#8217;s only one of me. They tend to pile up, and I have to turn someone down, and then their project still sucks.</p>
<p>So now I&#8217;m developing ways to make your project not suck <em>before it even starts to suck</em>. They&#8217;re principles and techniques that work at any time, are easy to implement, don&#8217;t require a lot of overhead, and make everyone more productive with less hassle.</p>
<p>That way I can plan ahead a little, and the potential clients can relax if I&#8217;m not right on the spot when things start to sink.</p>
<p>Most importantly and immediately, I&#8217;m developing some resources to help your team learn <em>pair programming</em> relatively quickly and get the most benefit from it. So far I&#8217;ve found that pairing is a very low-cost and simple way to get started with the Agile concept.</p>
<p>My research question: The managers who resist pair programming the most are the ones who just can&#8217;t wrap their heads around Agility. True or false?</p>
<h1>So&#8230;</h1>
<p>There it is. That&#8217;s my game. Wanna play? It&#8217;s easy (and free) to start. Just dive into the comments, and if my way intrigues you, take a nice swim in the <a title="Contrarian Guide, opt-in" href="http://criticalresults.com/freestuff.html">&#8220;Contrarian Guide to Making Software Projects Not Suck,&#8221;</a> even though it&#8217;s an opt-in link. Because the weekly emails are even more fun than what&#8217;s on the blog.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=325&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2010/10/04/my-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>What to ask first</title>
		<link>http://blog.criticalresults.com/2010/09/29/what-to-ask-first/</link>
		<comments>http://blog.criticalresults.com/2010/09/29/what-to-ask-first/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 01:09:12 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[projects that suck]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=308</guid>
		<description><![CDATA[Sometimes you can't make the project not suck right away. You need to do a pre-unsucking project to figure out the actual unsucking.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=308&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Oh my. Here&#8217;s a Project That Sucks. It sucks so much I seriously don&#8217;t (yet) know how to make it not suck. How crazy is that?</p>
<p>Good thing I that Making It Not Suck isn&#8217;t the immediate task. My job now is Figuring Out How It Might Potentially Be Made To Not Suck. In other words, it&#8217;s a <em>pre-desucking evaluation</em>. The deliverables: one report with a recommended technical process, and one report with business recommendations.</p>
<p><span id="more-308"></span></p>
<p>The client is on board with my famous Disclosure Agreement, so I can  give a lot of details, but I don&#8217;t feel like identifying them too  closely. I&#8217;ll just say it&#8217;s kind of a matchup site for third-party  transactions in a niche vertical market. It matches buyers and sellers  of highly specific machine parts.</p>
<p>There&#8217;s been a single developer on this website for five years now. It&#8217;s PHP4 or maybe PHP5. I think they said it&#8217;s maybe 120,000 lines of code or so.</p>
<p>It&#8217;s a membership business model. You don&#8217;t pay for listings or transactions. You just pay a monthly membership fee. Considering the value this thing will deliver, and the size of the realistic potential market for membership, I don&#8217;t think the client is crazy to think there is substantial profit potential here.</p>
<p>The site is technically online and operational now. By that I mean that there are a few members, who are not yet required to pay the membership fee because it&#8217;s all kind of pre-pre-beta.</p>
<p>It&#8217;s just that so many things on the site either don&#8217;t work at all, or work in really clunky ways. Some of the dropdowns don&#8217;t, the search function kind of works some of the time, and the pagination seems to do a SELECT * every time you click Next.</p>
<p>I don&#8217;t know. This could be an absolute nightmare to fix. It looks like a nightmare of Technical Debt. Maybe not. Hard to say.</p>
<p>Here are some of the things I want to ask first when I hang with the developer:</p>
<ol>
<li>Where&#8217;s your version control repository? (I&#8217;m afraid I know the answer to this.)</li>
<li>How do you unit test? (I&#8217;m sure he doesn&#8217;t in the sense of actual TDD, but is there any repeatable process at all?)</li>
<li>Is there a backup you can &#8220;build&#8221; and run from?</li>
<li>How do you know when a feature is done?</li>
<li>How do you know when a feature is requested?</li>
<li>Can we describe this project in terms of Minimum Marketable Features?</li>
<li>Who is doing acceptance testing?</li>
<li>&#8230;and how?</li>
<li>I don&#8217;t suppose you have anyone besides me to review code with?</li>
</ol>
<p>This may become another not-quite-Agile project. Maybe the right answer is to pair with this guy for a while to fill in skills gaps and create a rhythm of progress, set up a KanBan to regulate the feature flow, and work with the actual customer to nail down a <em>very specific</em> set of Minimum Marketable Features.</p>
<p>Also, I&#8217;d be really shocked if they have version control. That&#8217;s got to happen before anything else!</p>
<p>Business-wise, who knows?  There may not be funding to do this right, or even to do it wrong.</p>
<p>Among the <a title="Get &quot;8 Reasons Why Your Project Sucks&quot; with opt-in" href="http://criticalresults.com/freestuff.html">Eight Reasons Why Software Projects Suck</a>, I bet we&#8217;ll hit about six. I&#8217;ll let you know how it goes.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/308/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=308&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2010/09/29/what-to-ask-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>When they won&#8217;t let you do Agile</title>
		<link>http://blog.criticalresults.com/2010/09/22/wont-let-you/</link>
		<comments>http://blog.criticalresults.com/2010/09/22/wont-let-you/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 16:46:47 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[KanBan]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[projects that suck]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=236</guid>
		<description><![CDATA[If management won't let you do Agile, don't fight it. Find the best ways to apply the Principles regardless.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=236&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a fan here, or if you&#8217;ve had more concrete experiences of working on Agile software teams, you probably have a good sense of how well the Agile values and practices can really work.</p>
<p><strong>Problem:</strong> Not everybody sees that. Especially (perhaps) your boss or project sponsor.</p>
<p><span id="more-236"></span>So I threw this question out on LinkedIn earlier this year:</p>
<blockquote><p>How much Agile have you been able to get away with? How?</p></blockquote>
<p>One response in particular stood out for me. <a href="http://www.storiale.com/">Lou Storiale</a> wrote:</p>
<blockquote><p>Sometimes Scrum can be implemented without anyone knowing it&#8230;. At first, I asked my staff (2 others) if they could meet 3 times per week for 15 minutes or so? They of course said yes. So we began meeting, I didn&#8217;t keep a specific regimented routine of &#8220;what did you do, what can you do, what is getting in your way,&#8221; I asked what&#8217;s on your plate for today, how much do you think you can do by &#8220;Friday&#8221; &#8211; anything going on (meetings) that might keep you from doing that?</p></blockquote>
<p>That&#8217;s not a true Scrum, but it embraces the essentials of the standup meeting concept. The boss came along quite a bit later, says Lou, and asked what was going on. Lou (the project manager at the time) admitted he was doing what I call &#8220;Stealth Scrum.&#8221; The boss&#8211;not a big innovator or early adopter type&#8211;rolled her eyes and said, &#8220;Uh, okay.&#8221; And that was it.</p>
<h2>&#8220;It works,&#8221;</h2>
<p>Lou said. &#8220;That is what matters.&#8221;</p>
<h2>Why?</h2>
<p>This sort of thing, the bottom-up movement towards adopting happier development practices, happens all the time.</p>
<p>After my presentation on &#8220;Why Your Software Project Sucks (and how to make it not suck)&#8221; at NOTACON7 a couple of months ago, several participants hung around to ask more questions. One of them was really interested in Test-Driven Development, but he was looking at a million-line &#8220;big ball of mud&#8221; legacy system to start with. I pointed him at <a href="http://www.informit.com/store/product.aspx?isbn=0131177052">Working Effectively With Legacy Code</a>, a book I <a href="http://blog.criticalresults.com/2009/11/16/code-farming-sprouts/">blogged about</a> in the past. At last report he&#8217;s awaiting shipment on the book. Rah!</p>
<p>Along those lines, one of the nice things about <a href="http://c2.com/cgi/wiki?TestDrivenDevelopment">test-driven development</a> is that you can sometimes (not always) just start doing it without permission from anyone. In a .NET environment, it means you have to download (for free!) <a href="http://www.nunit.org">NUnit</a> and add a reference to your Visual Studio project. (Everyone who maintains the same project will have to do the same in order for their builds to work.)</p>
<h3>Back to Why Stealth Scrum Works</h3>
<p>Stealth Scrum works because, like many of the most effective Agile practices, it&#8217;s just a slight formalization of <em>the things smart people are already doing</em> to be as effective as possible. Whatever your formal methodology, or even if you don&#8217;t have a methodology at all, you probably check in periodically to find out what everyone is working on and whether they have any obstacles. If you don&#8217;t, why not?</p>
<p>Stealth TDD works because <em>smart developers do unit testing anyway</em>. The only difference is when you write the tests.</p>
<p>Stealth Pair Programming works because <em>the best developers review each other&#8217;s code anyway</em>. The only difference is that a pair does code review constantly, not just once a day or at week&#8217;s end.</p>
<h1>What&#8217;s in a name?</h1>
<p>Just as there are many shops that call themselves &#8220;Agile&#8221; but insist on top-down control of everything, there are shops that would never call themselves &#8220;Agile&#8221; but are actually doing a decent job of implementing the principles of maximizing the amount of work not done, adjusting and tuning, and making frequent iterations.</p>
<p>So if management won&#8217;t let you do Agile, don&#8217;t fight it. Just say &#8220;We&#8217;re gonna hang out and code in the same cube for a couple of hours.&#8221; Or say, &#8220;I&#8217;ve got this code written that will test our new features before the integration steps.&#8221; You might even get to deliver working code every couple of weeks as long as you don&#8217;t say the word &#8220;sprint.&#8221;</p>
<p>The <a href="http://agilemanifesto.org/principles.html">Agile Principles</a> are important. What you call your technique is not.</p>
<p>Have you tried Stealth Agile? How well has it worked for you? What are your suggestions?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/236/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=236&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2010/09/22/wont-let-you/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
		<item>
		<title>The W part of DTSTTCPW</title>
		<link>http://blog.criticalresults.com/2010/09/01/the-w-part/</link>
		<comments>http://blog.criticalresults.com/2010/09/01/the-w-part/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 21:09:37 +0000</pubDate>
		<dc:creator>Mark W. Schumann</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[DTSTTCPW]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://blog.criticalresults.com/?p=304</guid>
		<description><![CDATA[When developing iteratively, what exactly constitutes premature optimization? When doing the simplest thing that could possibly work, what does it mean to "work"?
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=304&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, a question turned up on the BaseCamp site we use to coordinate one of my projects. One programmer asked what we thought of a certain calculation he was setting up on the database. It had to do with accumulating &#8220;rating&#8221; points of an item in a tree-shaped threaded discussion.</p>
<p><span id="more-304"></span></p>
<p>Stakeholders weren&#8217;t really sure how ratings would work, but at least for now they were okay with saying an item&#8217;s rating could be based on the total of the ratings of all descendant records.</p>
<p>I&#8217;m not positive that&#8217;s the best idea, but it&#8217;s a reasonable one anyway. If your comment spawns a tree of comments-upon-comments that overall garner some high ratings, that may suggest your comment was pretty interesting. By the way, in this application you can have Comments, Questions, and Answers, as well as uploads of PDFs, video, and the like. They&#8217;re all interspersed in the Conversation tree. They can all get ratings.</p>
<h2>The glaringly obvious solution</h2>
<p>Well, you&#8217;d read a main record, then all its child records, then all of those records&#8217; children, and so on. &#8220;But,&#8221; said our star Ruby guy, &#8220;that&#8217;s not gonna work.&#8221;</p>
<p>Rather, he went on,  what if we cached some intermediate results along with something like a cache timestamp, and (if I recall correctly, and I&#8217;m sorry if I don&#8217;t) feed some of the ratings up a level or two as kind of a precalculation. Posting the comment might be a little slower, but at least the ratings display gets a lot quicker in the bargain.</p>
<p>Trying to pull rank and be Mr. Super Agile, I said something like, &#8220;Dude, <a title="DTSTTCPW, on Ward's Wiki" href="http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html">Do The Simplest Thing That Could Possibly Work</a>. DTSTTCPW!&#8221; And I suggested we just skip the caching and pull all those rating records on demand&#8211;because a tree scan is drop-dead easy to code and doesn&#8217;t require a lot of deep thinking.</p>
<p>Also, I have to admit that the other part of my skepticism had to do  with my faith in modern database engines. We hadn&#8217;t even chosen a  production platform, but something like Oracle can optimize the heck out  of a massive self-join operation. Why optimize it in Ruby code if the  database knows best?</p>
<p>Our developer shot back: &#8220;But that can&#8217;t possibly work! You&#8217;re forgetting the W part!&#8221;</p>
<h2>It&#8217;s not &#8220;Do The Simplest Thing,&#8221; full stop.</h2>
<p>It has to be the simplest thing <em>that could actually possibly work</em>. And our guy was saying my admittedly oversimplified implementation concept couldn&#8217;t. Which brought me back to the idea of iterative releases.</p>
<h2>Remember I said <a title="&quot;This isn't a Scrum shop&quot;--memo" href="http://blog.criticalresults.com/2010/08/12/todays-memo/">this isn&#8217;t a Scrum shop</a>?</h2>
<p>Well, it&#8217;s not. That means we don&#8217;t have Scrum Planning meetings, we don&#8217;t have Scrum Retrospective meetings, and we don&#8217;t have a true Scrum-style product backlog. And we don&#8217;t have a release at the end of each sprint, because there are no sprints.</p>
<p>There are intermediate development milestones though. When the star Ruby guy brought up the definition of &#8220;working&#8221; I went &#8220;Aha!&#8221; because he was thinking in terms of a completed, rolled-out, popular, busy website. When you have thousands of active users, caching queries can be important. I, on the contrary, was thinking in terms of iterations, and this iteration was going to be used by&#8230; like four people maybe. And query speed wasn&#8217;t their main momentary concern. And they might have come up with a totally different rating algorithm that would invalidate the caching strategy.</p>
<p>I don&#8217;t know. I&#8217;m not saying that throwing together something slow and crummy is &#8220;good enough&#8221; just because it&#8217;s a limited demo situation. On the other hand, I&#8217;m nervous about anything that smacks of <a title="Donald Knuth on Premature Optimization" href="http://c2.com/cgi/wiki?PrematureOptimization">premature optimization</a>. But when you&#8217;re trying to do the simplest thing that could possibly work, it&#8217;s important to know what you mean by &#8220;working.&#8221; And I guess it&#8217;s important to guage how much the project is likely to change <em>after</em> the next iteration.</p>
<p>Where do you draw the line between slapdash and overkill? Is it an iteration thing? What do you consider &#8220;working&#8221; when doing the simplest thing?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/criticalresults.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/criticalresults.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/criticalresults.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.criticalresults.com&amp;blog=9576650&amp;post=304&amp;subd=criticalresults&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.criticalresults.com/2010/09/01/the-w-part/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b67885b041b92f249c34c51d63a84a98?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markwschumann</media:title>
		</media:content>
	</item>
	</channel>
</rss>
