<?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>Situated Geekery</title>
	
	<link>http://anarchycreek.com</link>
	<description>Towards a Way of Excellence</description>
	<lastBuildDate>Fri, 27 Aug 2010 18:59:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SituatedGeekery" /><feedburner:info uri="situatedgeekery" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Use ‘Overweening’ In A Sentence</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/Zd1i9wuxHos/</link>
		<comments>http://anarchycreek.com/2010/08/27/use-overweening-in-a-sentence/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 18:59:17 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1697</guid>
		<description><![CDATA[Too many coaches manifest an overweening rationality. Have you seen the type? Many would-be leaders, including coaches, are one-trick ponies. The only trick they have for coaching is to clothe an idea in a thin tissue of &#8220;reason&#8221;, then use it to beat every nearby person about the head, neck, and shoulders. The saddest ones [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span style="font-size: 13.3333px;"><strong><em>Too many coaches manifest an </em></strong><a href="http://www.google.com/search?rlz=1C1CHNB_enUS339US339&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=define:+overweening"><strong><em>overweening</em></strong></a><strong><em> rationality.</em></strong></span></p>
<p>Have you seen the type?</p>
<p><span style="font-size: 13.3333px;">Many would-be leaders, including coaches, are one-trick ponies. The only trick they have for coaching is to clothe an idea in a thin tissue of &#8220;reason&#8221;, then use it to beat every nearby person about the head, neck, and shoulders. The saddest ones even do it to themselves.</span></p>
<p><span style="font-size: 13.3333px;">Here&#8217;s the thing: There are many and complex ways for one person to influence another person&#8217;s behavior. An overweening rationality is one of the weakest. If you really want to be a great coach, you&#8217;ll investigate and experiment with them all.</span></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Rational Bullies Are Still Bullies</span></em></h3>
<p>Being right is not guaranteed by being rational. Further, even if you are right from time to time, being right doesn&#8217;t &#8212; shouldn&#8217;t &#8212; automagically make the people around you follow your lead. This is not philosophy, here: there are sound <em>reasons</em> why humans don&#8217;t jump to a rationalist&#8217;s every tune.</p>
<p>If being &#8220;rationally right&#8221; is the only thing you got going for you, give it up.</p>
<p>That&#8217;s all for today.</p>
<p><em><strong>Oh, weekend homework: think of a *specific* geek you can help with a *specific* approach other than &#8220;logic is my handgun&#8221;.</strong></em></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/Zd1i9wuxHos" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/08/27/use-overweening-in-a-sentence/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/08/27/use-overweening-in-a-sentence/</feedburner:origLink></item>
		<item>
		<title>A Place To Stand</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/Caz6WunnVSc/</link>
		<comments>http://anarchycreek.com/2010/08/25/a-place-to-stand/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 17:22:18 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile coaching]]></category>
		<category><![CDATA[agile principles]]></category>
		<category><![CDATA[agile transition]]></category>
		<category><![CDATA[braided excellence]]></category>
		<category><![CDATA[business value]]></category>
		<category><![CDATA[coaching]]></category>
		<category><![CDATA[geek joy]]></category>
		<category><![CDATA[thrown agency]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1663</guid>
		<description><![CDATA[Remember Archimedes and his (apocryphal) quote about the lever? &#8220;Give me the place to stand, and I shall move the earth.&#8221; I have felt for some time now that I had no good place to stand. I&#8217;ve been an &#8220;XP coach&#8221; forever, since the earliest months of that movement. Over the years, the rigor of the XP [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 13.3333px;">Remember Archimedes and his (apocryphal) quote about the lever? &#8220;Give me the place to stand, and I shall move the earth.&#8221;</span></p>
<p><span style="font-size: 13.3333px;">I have felt for some time now that I had no good place to stand.</span></p>
<p><span style="font-size: 13.3333px;">I&#8217;ve been an &#8220;XP coach&#8221; forever, since the earliest months of that movement. Over the years, the rigor of the XP concept faded into the misty vagueness of &#8220;agile&#8221;, <em><strong>through the efforts of many proselytes, including myself, </strong></em>to make it seem palatable.</span></p>
<p><span style="font-size: 13.3333px;">The results have generally not pleased me.</span></p>
<p><span style="font-size: 13.3333px;">Bob Martin pointed out the other day (via tweet), that the Agile Conference this year contained fewer than 10% technical presentations. I shot him a rude remark about it having been true for some time, but after apologies (Bob&#8217;s pretty strong on code, after all), the spurring fact is the same.</span></p>
<p><span style="font-size: 13.3333px;"><em>I may not know what the exact right mix is, but I surely know it&#8217;s more than 10%.</em></span></p>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">XP Is About The Balance<br />
Lose The Balance, Lose The Movement.</span></strong></em></h3>
<p><span style="font-size: 13.3333px;">Upon a time, once, I heard a critique of XP that said &#8220;It&#8217;s too code-centric.&#8221; Then and now, I visualize the guys at the Road-Building Universe conference being busted for being too &#8220;asphalt-centric&#8221;.</span></p>
<p><span style="font-size: 13.3333px;">Meanwhile, setting aside cheap shots (temporarily), I soldiered on.</span></p>
<p><span style="font-size: 13.3333px;">I&#8217;ve been talking for the last year about braiding together <em>geek joy</em> and <em>business value</em> as an approach towards excellence.</span></p>
<p><span style="font-size: 13.3333px;">But you can&#8217;t really call it braiding when it&#8217;s just two strands. Braiding two things together is <em>twisting, </em>not <em>braiding </em>(Props to <a href="http://kaleidic.com">Tracy Kaleidic</a> for reminding me of that again.) I needed that all-important 3rd strand.</span></p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><strong><em>Meanwhile, Back At The Ranch&#8230;</em></strong></span></h3>
<p><span style="font-size: 13.3333px;">I kept inserting little articles  about, well, you know, <em>humans</em> and how they are conditioned by both their species history (evolution) and their development (ontogeny). You know, blah-blah-blah. I knew it was important, so I kept (unconsciously) trying to sneak the idea into the door.</span></p>
<p><span style="font-size: 13.3333px;">Not so, anymore.</span></p>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">Towards Excellence: A Three-Stranded Braid</span></strong></em></h3>
<p><span style="font-size: 13.3333px;">My belief is that success in the world of software development &#8212; excellence, if you will &#8212; is a matter of <em>braiding</em> three strands together: <em>geek joy, business value, thrown agency. </em>(Eh? What was that third one again?)</span></p>
<p><span style="font-size: 13.3333px;">If all that comes at you a little fast, no sweat. I have a *lot* to say about this, and I&#8217;ll be saying it here for the foreseeable future. Just to get the mind wandering, let&#8217;s do some one-liners and call it a day:</span></p>
<ul>
<li><strong><em>Geek Joy </em><span style="font-weight: normal;">means finding ways to maximize that sweet spot where technical workers can frequently experience that awesome pleasure that brought them to their trade in the first place.</span></strong></li>
<li><strong><em>Business Value</em><span style="font-weight: normal;"> means finding ways to be constantly aiming at the things our surrounding corporation needs from us the most.</span></strong></li>
<li><strong><em>Thrown Agency</em><span style="font-weight: normal;"> means working in full awareness that we&#8217;re constantly bound by being real humans in a real universe.</span></strong></li>
</ul>
<p><span style="font-size: 13.3333px;"><strong><span style="font-weight: normal;">Gotcha on that last one, didn&#8217;t I?</span></strong></span></p>
<p><span style="font-size: 13.3333px;"><strong><span style="font-weight: normal;">No matter, there&#8217;s plenty of time going forward to explore thrown agency at length.</span></strong></span></p>
<p><span style="font-size: 13.3333px;"><strong><span style="font-weight: normal;">That&#8217;s it for today, except I have one more definition to throw at you:</span></strong></span></p>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">Braided Means We Need Three Strands: </span></strong></em></h3>
<h3 style="text-align: center;"><strong><em><span style="color: #0000ff;">Geek Joy, Business Value, And Thrown Agency.</span></em></strong></h3>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">Miss One, Miss Excellence.</span></strong></em></h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/Caz6WunnVSc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/08/25/a-place-to-stand/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/08/25/a-place-to-stand/</feedburner:origLink></item>
		<item>
		<title>“Excellence” Opposing “Improvement”</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/JgGpF4wIcQk/</link>
		<comments>http://anarchycreek.com/2010/08/23/excellence-opposing-improvement/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 21:11:40 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1679</guid>
		<description><![CDATA[My regulars will have noticed a rather lengthy hiatus. At least I hope they have. I want to end that silence starting today. See, I&#8217;ve written the first two paragraphs of many draft posts, but I haven&#8217;t posted them: Too tentative; Too minor; Too insufficiently cooked; Too illiterate; Too damned embarrassing; &#8230;Too this and that and [...]]]></description>
			<content:encoded><![CDATA[<p>My regulars will have noticed a rather lengthy hiatus. At least I hope they have.</p>
<p>I want to end that silence starting today.</p>
<p>See, I&#8217;ve written the first two paragraphs of many draft posts, but I haven&#8217;t posted them:</p>
<ol>
<li>Too tentative;</li>
<li>Too minor;</li>
<li>Too insufficiently cooked;</li>
<li>Too illiterate;</li>
<li>Too damned embarrassing;</li>
<li>&#8230;Too this and that and the other thing.</li>
</ol>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">My Best Laboratory For Exploring Foolishness, Again.</span></strong></em></h3>
<p>That&#8217;d be me.</p>
<p>There&#8217;s an ancient saying about &#8220;the best being the enemy of the better&#8221;. I use that saying and its conclusions all the time when I&#8217;m working with <em>other </em>people.</p>
<p>But see, that&#8217;s different. In <em>those </em>cases, the timber of those poor benighted excellence seeking souls is far far larger than my own itty-bitty-tiny mote.</p>
<p>Those people are opposing an increment of improvement because they&#8217;re too enamored of some currently unreachable goal. I, on the other hand, are simply, that is, I mean, what I&#8217;m doing is, ummmm, different, in that, my, errr, behavior, is &#8211;</p>
<p><span style="font-size: 13.3333px;">Fine. </span></p>
<h3 style="text-align: center;"><span style="font-size: 13.3333px;"><em><strong><span style="color: #0000ff;">The shoe fits. I&#8217;m wearing it. </span></strong></em></span></h3>
<p><span style="font-size: 13.3333px;">When you notice a team stall improvements on the grounds that they&#8217;re not perfection, what is the correct recommendation to give?</span></p>
<p><span style="font-size: 13.3333px;">The correct recommendation is that today&#8217;s gain in insight is far more important to us than tomorrow&#8217;s, next weeks, next release&#8217;s, next quarter&#8217;s, next year&#8217;s.</span></p>
<p><span style="font-size: 13.3333px;">As penance, I will do my best to post some short-but-real every other day henceforth, regardless of its readily apparent imperfection.</span></p>
<h3 style="text-align: center;"><span style="font-size: 13.3333px;"><em><span style="color: #0000ff;">I Hate This Business</span></em></span></h3>
<p><span style="font-size: 13.3333px;"><br />
</span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/JgGpF4wIcQk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/08/23/excellence-opposing-improvement/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/08/23/excellence-opposing-improvement/</feedburner:origLink></item>
		<item>
		<title>Coaching Against TDD Inhibitors</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/OjWR5YNzb1s/</link>
		<comments>http://anarchycreek.com/2010/04/28/coaching-against-tdd-inhibitors/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 18:44:10 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1560</guid>
		<description><![CDATA[We&#8217;ve spoken already of the test driven development (TDD) mental game. Now it&#8217;s time to consider the situation on the ground. The main TDD disabler we&#8217;ve already met: a broken or too-slow build/run/result flow. If your team has that issue, throw all your weight at it, and do not try to launch TDD itself. It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve spoken already of the test driven development (TDD) <a href="http://anarchycreek.com/2010/04/16/coaching-the-tdd-inner-game/">mental game.</a> Now it&#8217;s time to consider the situation on the ground.</p>
<p>The main TDD disabler we&#8217;ve already met: a broken or too-slow build/run/result flow. If your team has that issue, throw all your weight at it, and<strong><em> do not try to launch TDD itself.</em></strong></p>
<p>It&#8217;s very important that the team&#8217;s initial experiences with TDD are not blocked by externalities. Whether its easy or hard to roll the first few microtests, the difficulty needs to be focused on the<em> pre-TDD code, </em>not the process itself.</p>
<p>If you have a disabler, your coaching story is clear: we can&#8217;t do TDD until we fix it. Once the disabler(s) are cleared, we need to turn to the various factors that don&#8217;t quite stop the show: the inhibitors.</p>
<h3 style="text-align: center;"><em><strong><span style="color: #0000ff;">Inhibitors</span></strong></em></h3>
<p>An inhibitor doesn&#8217;t <em>block </em>TDD, it just makes it harder to apply.</p>
<p>(Don&#8217;t relax: if you pile a few of them on, you&#8217;ll long for a good old-fashioned disabler, because it would at least have kept you off the TDD road until  you tackled it.)</p>
<p>Inhibitors are usually about technique.</p>
<p>(And still don&#8217;t relax: you can&#8217;t simultaneously introduce 82 slightly different variants of technical solutions.)</p>
<p>Let&#8217;s take one detailed example, then sketch a few others with their related solutions.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>The Promiscuous Database</em></span></h3>
<p>The promiscuous database is an inhibitor I&#8217;ve found very common, especially in IT shops. It&#8217;s easy to spot: just grep the source for &#8220;SELECT&#8221; and inspect the results. In a typical nightmare, virtually every source file will contain explicit SQL.</p>
<p>(Sometimes there is some awful framework in place, that makes the grep not look so bad, because the actual SQL is in some bizarre xml file. Same problem, different grep.)</p>
<p>The promiscuous database does its damage by forcing all microtests to rig up the database and then connect to it. How do you spell heartache?</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>Moving The Database Out</em></span></h3>
<p>The solution is straightforward: extract each SQL statement, or each hardwired database statement, into a separate class named for the intention of its calls. Now we can easily use a hand-rolled or automagic fake.</p>
<p>Some details:</p>
<ul>
<li>Name the class for its intention, e.g. GetOutstandingLoans, not ComplexSQLCmdWithThreeParameters.</li>
<li>Pass the parameters in the constructor.</li>
<li><span style="font-size: 13.1944px;">Return typed containers.</span></li>
<li>Discover, don&#8217;t pre-implement, shared code to pull up.</li>
<li>Consider a hierarchy based on command return-type rather than &#8216;tables touched&#8217;</li>
<li>You may want to use a factory approach for getting the actual command.</li>
<li>You certainly want some way easy way to slip a fake in. This can be done at the caller&#8217;s constructor, or just use a factory method that can be overridden.</li>
<li>Wonderful side-effect, it often shows you more dup than you thought was present.</li>
</ul>
<p>I hope this solution isn&#8217;t too telegraphic. If so, holler at me in the comments. The real point here is that we&#8217;re talking about learning and using programming technique to solve most inhibitors.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Readily != Painlessly</span></em></h3>
<p>It is readily possible to solve the promiscuous database using coding technique. But <em>readily</em> doesn&#8217;t mean <em>painlessly in the beginning</em>.</p>
<p>Everyone who&#8217;s got work in the caller-class has to be able and willing to do these extractions. It <em>can </em>be done, but until a few tries are under a noob&#8217;s belt, it will feel like a useless formalism.</p>
<p>This is the general tenor of working against TDD inhibitors.</p>
<p>Let&#8217;s sketch a few more inhibitors and their solutions.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>The Very Large GUI Of The World</em></span></h3>
<p>GUI classes that do frighteningly complex work are the bane of any team working legacy TDD.</p>
<p>The problem here is tremendous and obvious: you can&#8217;t test the functionality without launching the GUI itself. Say goodbye to rapid feedback.</p>
<p>The answer is easy, or easy-esque: create a class whose lifetime is exactly coterminous with the GUI class, then rework your GUI class so that all non-graphical work is done by the shadow class. Turn the GUI class into a specialist who removes GUI-isms before passing on to worker, then puts GUI-isms back in on the way out.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">The Hardware Distraction Layer</span></em></h3>
<p>Direct calls into the hardware are everywhere. This is a hallmark of the embedded scene. Look for globals.</p>
<p>Solution: You need an adapter that fronts <em>just </em>the calls that this particular client needs. Work to make that adapter really hide the underlying dependencies. Once done, you can readily fake the adapter as needed.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">The In-House Framework Of Universal Despair</span></em></h3>
<p>The colossal ass-hattery known as &#8220;our in-house framework&#8221; is often an inhibitor par excellence.</p>
<p>The framework provides needed services, such as a database connection, that we don&#8217;t know how to get access to without launching the framework.</p>
<p>In this case, usually we&#8217;re seeing significant work done in a class that derives off of something from the framework. The trick here is just another variation on the theme of &#8216;take away frameworkisms on the way in, and put them back on the way out&#8217;.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Coaching On Inhibitors</span></em></h3>
<p>The meta-pattern for inhibitors is simple.</p>
<p>Coach two or three teammates through the process of working around a given inhibitor.</p>
<p>This will give you two key advantages: the ability to show multiple instances of &#8216;problem-solved&#8217;, and the support of the teammates who actually lived through the solution.</p>
<p>So? Use lottery learning, or some other meeting, to introduce the problem and its solution. Show them the two or three. (Without the show you&#8217;re just being an abstract chatterer.)</p>
<p>In early days, just make the team aware you want to be tripling any time that problem comes up.</p>
<p>Ultimately, early days pass, and you can say with some confidence that your whole team knows how to finesse the solved problem.</p>
<p>After that time, and only after it, the team can raise their standard of excellence to say &#8220;files like this are hereby declared TDD&#8217;able&#8221;.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Inhibitors Are Crushed By Experiences</span></em></h3>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Go To It</span></em></h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/OjWR5YNzb1s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/28/coaching-against-tdd-inhibitors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/28/coaching-against-tdd-inhibitors/</feedburner:origLink></item>
		<item>
		<title>Go Do A Code Retreat, You’ll Thank Me</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/L5Iem3hjjEI/</link>
		<comments>http://anarchycreek.com/2010/04/26/go-do-a-code-retreat-youll-thank-me/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 16:21:43 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1605</guid>
		<description><![CDATA[I just did a code retreat in lovely Floyd, Virginia. You should. For those who haven&#8217;t yet, a code retreat is a long day of programming, constrained in such a way as to create an open-ended opportunity to learn. The formula is simple: we do six sessions of paired TDD. Each one is on the [...]]]></description>
			<content:encoded><![CDATA[<p>I just did a <a href="http://coderetreat.com">code retreat</a> in lovely Floyd, Virginia.</p>
<p><em><strong>You should.</strong></em></p>
<p>For those who haven&#8217;t yet, a code retreat is a long day of programming, constrained in such a way as to create an open-ended opportunity to learn.</p>
<p>The formula is simple: we do six sessions of paired TDD. Each one is on the same problem, but with a different partner. The code is destroyed at the end of each session. That is, each session starts entirely from scratch.</p>
<p>That&#8217;s all there is to it, or so I thought going in.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Getting Hooked</span></em></h3>
<p>The remarkable effect of the constraints is to focus a very high intensity onto the problem domain and its potential solutions.</p>
<p><strong>You <em>care</em>.</strong></p>
<p>The problem itself is readily understandable, but its potential solutions are really not. They are just one hair too complex to hold in your head all at one time, which is brilliant.</p>
<p>A toy challenge would not work nearly as well.</p>
<p>On the other hand, if the challenge were harder, you wouldn&#8217;t, or at least I wouldn&#8217;t, approach it with the easy certainty that you know the solution already. The experience wouldn&#8217;t be nearly as valuable without the scorched arrogance.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Test First vs Test Driven</span></em></h3>
<p>The certainty of solution starts boiling off in the first round, and somewhere in the third it runs out altogether.</p>
<p>This is good, partly because the smell of burning ego is good for the soul, but also because it makes it much easier to open one&#8217;s heart and mind to learning.</p>
<p>Once I got opened, I learned many things, some small and some not-so-small.</p>
<p>After the sessions, we talked about what, if any, lessons were learned. Perhaps the single most common statement was that the participant learned that having a pre-formed solution in mind could cause lots of pain.</p>
<p><a href="http://www.coreyhaines.com/">Corey Haines</a> calls this &#8216;pre-conceived solution&#8217; thing &#8216;test first&#8217;, as opposed to &#8216;test <em>driven&#8217;</em>. It&#8217;s an excellent distinction.</p>
<p>The idea is that in test first you solve the problem in your head, then write a test to force that solution, then type it in. Truly driving by tests, on the other hand, means typing in the test with beginner&#8217;s mind, and starting to solve it only after you&#8217;ve written it.</p>
<p>That&#8217;s exactly how it should be in our daily work.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Old Friends and New</span></em></h3>
<p>It was fun to see some old friends, my pal <a href="http://blog.gdinwiddie.com/">George Dinwiddie</a>, and my until-now-twitter-only-friend John Stoneham. I knew Corey Haines from the scene, but mostly also on twitter, and it was a blast to get so much good time with him.</p>
<p>But it wasn&#8217;t just my old friends. Many of the folks there came from one or more of the sponsors. The local hosts, Gustin Prudner&#8217;s <a href="http://www.entryway.net/">Entryway</a>, did an amazing job. They procured and prepared two excellent venues for our sessions, and everything went off without any hitch.</p>
<p>I won&#8217;t list the new friends I made, but I was delighted to hang with so many people who clearly care about excellence in software development.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Geek Joy &#8212; *Shared*</span></em></h3>
<p>The most important lesson was one I re-learned rather than encountering for the first time: to share geek joy is delightful, intense, and absolutely revitalizing.</p>
<p>I feel like I need to rush right out and do good geek work today.</p>
<p>I&#8217;m already on record for saying that what the industry needs most is to learn how to intertwine geek joy with business value. But to be reminded so forcefully is just terrific.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Go <a href="http://www.coderetreat.com">Sign Up</a> Now</span></em></h3>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">It&#8217;s Cheap And Amazing!</span></em></h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/L5Iem3hjjEI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/26/go-do-a-code-retreat-youll-thank-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/26/go-do-a-code-retreat-youll-thank-me/</feedburner:origLink></item>
		<item>
		<title>Shhh. We’re Hunting Yabbits</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/UCR5Ig1OtyU/</link>
		<comments>http://anarchycreek.com/2010/04/21/yabbits-and-the-marathon-principle/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 18:49:48 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1573</guid>
		<description><![CDATA[Ever get the yabbits when introducing a new idea? Oh, wait, maybe I better define my terms first. Yabbitting is when people go through a sequence of resistance statements, where each statement begins with the words, &#8220;Yeah, but&#8230;&#8221;. Like this: &#8220;Yabbit, our shop does shrinkwrap, so what works for some web app isn&#8217;t gonna work [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1596" class="wp-caption aligncenter" style="width: 233px"><img class="size-full wp-image-1596" title="Be Vewy Vewy Qwiet" src="http://anarchycreek.com/wp-content/uploads/2010/04/elmer_fudd_a_wild_hare.jpg" alt="" width="223" height="250" /><p class="wp-caption-text">Me, Hunting For Yabbits</p></div>
<p>Ever get the yabbits when introducing a new idea?</p>
<p>Oh, wait, maybe I better define my terms first.</p>
<p><em>Yabbitting</em> is when people go through a sequence of resistance statements, where each statement begins with the words, &#8220;Yeah, but&#8230;&#8221;.</p>
<p>Like this: &#8220;Yabbit, our shop does shrinkwrap, so what works for some web app isn&#8217;t gonna work here.&#8221; or &#8220;Yabbit, we all work 80 hours a week, so we don&#8217;t need slack.&#8221; or &#8220;Yabbit, if you write tests + code, that&#8217;s more code than if you just write code&#8221;.</p>
<p>Let&#8217;s try again: Ever get the yabbits when introducing a new idea?</p>
<p>Yes, I thought so.</p>
<h3 style="text-align: center;"><em><span style="color: #3366ff;">Aren&#8217;t Yabbits Annoying?</span></em></h3>
<p>Yabbits can get a person down.</p>
<p>Worse, if the person has GeePaw-ish tendencies, yabbits can really bring out the sarcastic asshole:</p>
<p>&#8220;Wow, you&#8217;re right. No one ever mentioned that to me before. I should probably leave, now. Thank you. Thanks, thank you. You&#8217;ve saved me a lot of wasted time. Uhh, bye.&#8221;</p>
<p>But responding to yabbits like this is a grave error. (Trust me on this.)</p>
<p>A noob coach usually sees yabbits as a huge annoyance at best, and a wall of resistance at worst,<em><strong> but this is a big mistake.</strong></em></p>
<p>Getting yabbits should please you. They <em>sound </em>like they represent resistance, but they actually indicate just the opposite.</p>
<h3 style="text-align: center;"><em><span style="color: #3366ff;">The Economics Of  Thinking</span></em></h3>
<p>How many times a day do humans choose one thing over another? Certainly hundreds, if not thousands or tens of thousands. Which socks? Left or right? Coke or Pepsi? and on and on.</p>
<p>Many of these choices are somewhat automagic: the answers to them have typically been made way in the past, and are not really &#8216;re-chosen&#8217; every time the question comes up.</p>
<p>Others, on the contrary, are the result of full and thorough efforts to consider variant choices, project their results, and decide how we feel about them.</p>
<p><span style="font-size: 13.1944px;">So some choices are virtually free, and others are quite expensive.</span></p>
<p>So what&#8217;s the most frequent choice made by a human?</p>
<p>It&#8217;s the meta-choice, of course. <em><strong>Whether you make a cheap choice or a pricey one is itself a choice.</strong></em> Cheap or expensive?</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbits Are A Heuristic</span></em></h3>
<p>Yabbits are actually a tool for making the meta-choice. It works like this:</p>
<p style="margin-left: 2em; margin-right: 2em; padding-top: 2px; padding-right: 6px; padding-bottom: 4px; color: #a000a0; padding-left: 36px;"><strong><em>If an idea can&#8217;t defend itself against simple one- and two-sentence arguments, then it certainly can&#8217;t handle any serious ones, so I don&#8217;t need to investigate in depth.</em></strong></p>
<p>Yabbits don&#8217;t always, or even usually, represent real resistance to change. On the contrary, they are probes, whose intent is to test an idea&#8217;s <a href="http://en.wikipedia.org/wiki/Prima_facie">prima facie</a> validity.</p>
<p><span style="font-size: 13.1944px;">A person who offers you yabbits is typically more open to an idea than a person who says nothing at all. </span></p>
<h3 style="text-align: center;"><em><span style="color: #3366ff;">Responding To Yabbits</span></em></h3>
<p>The most obvious aspect of your response is just to note that, since yabbits are a good thing rather than a bad, you should prolly refrain from indicating displeasure.</p>
<p>Now, I can&#8217;t say you should smile when you get a yabbit, because that can easily look like smugness. But you <em>can </em>respond positively. Never hack at a yabbit. Instead, relax, and calmly show exactly how your idea doesn&#8217;t suffer from any trivial  flaws.</p>
<p>The rest of this page is just a set of common yabbits, pulled from various practices in the agile toolkit.</p>
<p>Notice that each one is just a few lines long. That&#8217;s on purpose: don&#8217;t overload a yabbit with a long response. That&#8217;s using big guns on small quail.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbit, We Want 100% Load</span></em></h3>
<p><span style="font-size: 13.1944px;">Actually, no you don&#8217;t. </span></p>
<p><span style="font-size: 13.1944px;">100% load means full stop for most of the team. </span><span style="font-size: 13.1944px;">Don&#8217;t believe me? Think about the last traffic jam you were in. The optimal load of cars for a highway is far less than 100%. More cars != more throughput.</span></p>
<p><span style="font-size: 13.1944px;">What you really want is <em>optimal load, </em>which is the highest load for which actual throughput continues to rise. </span></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbit, It&#8217;s Just Until The Release</span></em></h3>
<p><span style="font-size: 13.1944px;">I always ask teams about their <em>last release.</em> </span></p>
<p><span style="font-size: 13.1944px;">So what happened? You shipped the release, then everyone took two or three weeks off to catch up with their families, or take care of their mental or physical health? No?</span></p>
<p><span style="font-size: 13.1944px;">For some teams, shipping on Friday means coming in Monday and starting the next release. </span></p>
<p><span style="font-size: 13.1944px;">For many, maybe even most, shipping on Friday means coming in Monday and immediately jumping in to hot-patch mode.</span></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbit, No Pressure Means No Production</span></em></h3>
<p><span style="font-size: 13.1944px;">You mean, you hired a bunch of people who won&#8217;t work if you don&#8217;t constantly harass them? What a drag. Next time choose different people.</span></p>
<p>Of all the bizarre taylorisms in bad management practice, this one is the least connected to reality. <span style="font-size: 13.1944px;">We are called geeks <em>precisely </em>because we take so much joy from our work.</span></p>
<p>You don&#8217;t have to force geeks to do geek work, you have to get out of their way.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbit, How Can We Assess Merit?</span></em></h3>
<p>This one tickles me, too. The idea is that the marathon and village principles seem to work against the easy assignment of rewards to individuals. If we pair all the time, rotate pairs all the time, and all sit together and work, then how can management tell who to reward and who to punish?</p>
<p><span style="font-size: 13.1944px;">You can assess merit by a) working with the individual, or b) watching the individual when she is at work, or c) asking the people she works with.</span></p>
<p>It is trivially the case that everyone on a team has a complete ordering of merit for everyone else on that team. Gather the orderings (not the votes, the <em>orderings)</em> anonymously, and you will certainly see a pattern. Use that pattern as the basis for your assessment.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>Yabbits Are Your Friends</em></span></h3>
<p>It is easy to think of yabbits as temporary distractions from the real game of changing behavioral patterns, but that&#8217;s a mistake. Answering yabbits won&#8217;t change anyone&#8217;s mind, but it <em>will build confidence and support for your ideas.</em></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Yabbits Are On The Road To Success</span></em></h3>
<p><em><br />
</em></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/UCR5Ig1OtyU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/21/yabbits-and-the-marathon-principle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/21/yabbits-and-the-marathon-principle/</feedburner:origLink></item>
		<item>
		<title>Coaching The TDD Inner Game</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/VWkM00ev1VY/</link>
		<comments>http://anarchycreek.com/2010/04/16/coaching-the-tdd-inner-game/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 05:59:34 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1556</guid>
		<description><![CDATA[In the early days of a transition, we gird our loins and take up the lance, however unlikely our ultimate victory, and set ourselves to oppose the biggest TDD inhibitor, the minds of our developers. Use all of the coaching pillars to help instill the message: Situate by teaching and explaining the beliefs. Model by [...]]]></description>
			<content:encoded><![CDATA[<p>In the early days of a transition, we gird our loins and take up the lance, however unlikely our ultimate victory, and set ourselves to oppose the biggest TDD inhibitor, the minds of our developers.</p>
<p>Use all of the <a href="http://anarchycreek.com/2010/03/24/meet-the-coaching-pillars/">coaching pillars</a> to help instill the message:</p>
<ul>
<li>Situate by teaching and explaining the beliefs.</li>
<li>Model by living them publicly.</li>
<li>Invite by having fun writing microtests.</li>
<li>Sort by leaving time for skill development.</li>
<li>Release by letting them manage the &#8216;must-test&#8217; list.</li>
</ul>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Required Understandings</span></em></h3>
<p>Each of the sections below is a statement of belief we want all of our developers to be conversant and comfortable with.</p>
<p>Imagine your teammates talking to members of a non-TDD team. If they can spontaneously explain and defend their behaviors using these beliefs, we&#8217;ll have won most of the battle.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">We&#8217;re In This For Productivity</span></em></h3>
<p>You know my rant on this one. <a href="http://anarchycreek.com/2009/05/26/how-tdd-and-pairing-increase-production/">TDD is not about quality, it&#8217;s about speed.</a></p>
<p>I often use the comical fact of &#8216;night-coding&#8217;, i.e. programming for your own amusement.</p>
<p>When I&#8217;m night-coding, I rarely write storytests. Storytesting is expensive on code not built for it, and besides, storytests are really a collaborative tool. I <em>already</em> collaborate well with me, so I skip storytesting. (Some agilists are disappointed with me about this. I tell them to go to the back of the complaints line.)</p>
<p>On the other hand, I <em>always </em>use <a href="http://anarchycreek.com/2009/09/16/coaching-four-categories-of-most-important-story/">microtests</a>, even for night-code. Driving development by microtesting is a productivity tool. Even when I&#8217;m in the privacy of my own back porch, I want productivity. Everybody wants productivity.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">There&#8217;s No Free Lunch</span></em></h3>
<p>But don&#8217;t kid yourself. TDD is not free.</p>
<p>Some ideas are simple facts, really. Once a C++ programmer learns why she should default to ++i rather than i++, it&#8217;s pretty easy to just always do it without much thought. Simple facts deliver their value instantly.</p>
<p>TDD is not a simple fact, it&#8217;s a whole <em>way of programming.</em></p>
<p>Ask people how long it took for them to learn programming in the first place. The good news is that it will take much less time to learn TDD, because they already know the syntax, the tools, and the problem domain. This time they just have to understand a loose cluster of a couple dozen techniques.</p>
<p>But it ain&#8217;t free. Your team is going to have to practice practice practice. Make them &#8212; and their managers &#8212; completely relaxed about this.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">We&#8217;ll Adopt TDD Sanely</span></em></h3>
<p>Remember the <a href="http://">sit-in-your-own-lap transition</a>? How can we get TDD all-at-once-a-little-at-a-time?</p>
<p>We make a list of classes called the &#8216;must-test list&#8217;. If a developer is going to touch a must-test class, she has to use full-on TDD: microtests written before changes, the ol&#8217; red-green-refactor-integrate cycle, the whole kit and caboodle.</p>
<p>Over time, we grow the must-test list in two ways.</p>
<p>First, we grow it by turning more and more classes into &#8216;must-tests&#8217;. We do that by fixing awkward dependencies, either at the class doing the calling, or the class being called.</p>
<p>Second, we grow it by learning the patterns of refactoring that can make a non-testable become a readily-testable. Each time we get the whole team to perform a new refactoring, we can add classes that would be testable if only we knew that refactoring.</p>
<p>Let&#8217;s do an example: many teams have yet to recover from the singleton pattern, so they have classes that depend heavily on global data. Using alternate constructors is a simple  pattern that can solve this problem. An hour of study and one successful attempt, and you&#8217;re good to go. Once the team has that pattern, we can add to our must-test list classes that would be readily testable <em>except for their use of globals.</em></p>
<p>The must-test list starts life as a list you control. Think in terms of adding two classes a week in the beginning. Make the changes in the must-test list at the iteration break, say, during the planning. As the team builds their experience and excitement about TDD, you can gradually hand over management directly to the team.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Coach The Inner Game<br />
Give Their Minds The Right Stance</span></em></h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/VWkM00ev1VY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/16/coaching-the-tdd-inner-game/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/16/coaching-the-tdd-inner-game/</feedburner:origLink></item>
		<item>
		<title>The Projector Rule: A Moving Target Code Standard</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/IbgRbFYxESk/</link>
		<comments>http://anarchycreek.com/2010/04/14/the-projector-rule-a-moving-target-code-standard/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 16:59:39 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1546</guid>
		<description><![CDATA[My favorite part is the refactoring. Sometimes I do it by itself, as in the DoubleDawg. Mostly, though, I do it inline as part of the TDD discipline. I love it either way, and I can&#8217;t explain why. Loving refactoring so openly is good good good when I&#8217;m coaching: other people can&#8217;t help but watch [...]]]></description>
			<content:encoded><![CDATA[<p>My favorite part is the refactoring.</p>
<p>Sometimes I do it by itself, as in the DoubleDawg. Mostly, though, I do it inline as part of the TDD discipline. I love it either way, and I can&#8217;t explain why.</p>
<p>Loving refactoring so openly is good good good when I&#8217;m coaching: other people can&#8217;t help but watch what I&#8217;m doing and then try to see if it&#8217;s really as fun as all that. (It is.)</p>
<p>But once a team jumps into the act itself, there&#8217;s a question that just has to pop into some minds, especially the ones who feel it&#8217;s very important to, you know, <em>ship:</em></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">How Do I Know When I&#8217;m Done Refactoring?</span></em></h3>
<p>&#8220;You&#8217;re done refactoring when the code meets our current standard of coding excellence.&#8221;</p>
<p>I&#8217;m always surprised when someone just nods their head to this and turns away, as if I&#8217;ve actually given an answer. I guess questions can sometimes be pro forma gestures, too.</p>
<p>Anyway, that&#8217;s a terrible answer, but on good days it leads right to the next question: <span style="font-size: 13.3333px;">What&#8217;s our current standard of coding excellence?</span></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">The Challenges Of Standard-Setting</span></em></h3>
<p>Setting standards seems to cry out for the clarity and detail of a perfectly written set of rules. Ya know? If we just sat down and carefully listed all the things you can do, and all the things you can&#8217;t do, using maximum simplicity and maximum clarity, we&#8217;d have a perfect standard.</p>
<p>Then there are those of us who have either studied law, or babysat a truculent nine-year-old, or both.</p>
<ol>
<li>We want our rules to cover everything, but only a small handful of situations can really be described that way.</li>
<li>We want our rules to be stable, but time and experience make mockery of our earlier attempts, time and again.</li>
<li><span style="font-size: 13.3333px;">We want our rules to be axiomatic, but as Kurt Godel demonstrated, any such that are sufficiently powerful to be of interest are also suffiicently powerful to contain undecidable propositions.</span></li>
<li><span style="font-size: 13.3333px;">We want our rules to be simple and no-nonsense, but as any handy nine-year-old can demonstrate, when it comes to misinterpretation, where there&#8217;s a will there&#8217;s a way.</span></li>
</ol>
<p>So? What to do?</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>The Simplest Thing That Could Possibly Work</em></span></h3>
<p>When I first studied the XP process, I was struck by Kent Beck&#8217;s ability to construct rules that were as perfectly detailed as they could be, but no further.</p>
<p>&#8220;Do The Simplest Thing That Could Possibly Work&#8221; is a wonderful example of this.</p>
<p><span style="font-size: 13.3333px;">Without a rigorous definition of simplest, possibly, and work, a computer would find this rule absolutely empty. </span><span style="font-size: 13.3333px;">All the important words in the rule are left to individual human judgment. Defining them would take years and years and would still fail. (Read the XP list some time.)</span></p>
<p>But the rule works in spite of the uncertainty, because it contains an implicit &#8216;you&#8217; for each of the ambiguous words. <em>Simplest</em> means <em>simplest-to-<strong>you</strong></em>, and <em>possibly</em> means <em>possibly-to-<strong>you</strong></em>, and <em>work</em> means <em>work-the-way-<strong>you</strong>-want</em>.</p>
<p>Notice that this kind of rule completely evades the problems list from above. Clever.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>My Rule For Refactoring</em></span></h3>
<p style="margin-left: 5em; margin-right: 5em; padding-top: 2px; padding-right: 6px; padding-bottom: 4px; color: #000000; background-color: #a0a0f0; padding-left: 36px; border: 2px solid #dddddd;"><strong><em>You are done refactoring when you&#8217;re ready to project the code onto the wall for the whole team to see.</em></strong></p>
<p>This rule works just like the XP ones: it is full of opinion, judgment, and <em>you-ness.</em></p>
<p>This rule works best when its coupled with <em>actual code projection, </em>along the lines of a lottery learning session.</p>
<p>I like that we simultaneously release the team, empowering them to decide for themselves what&#8217;s enough, and also situate them, showing them that their coding standard is going to be super-local, theirs and theirs alone.</p>
<p>I also love that I get to watch the actual meaning of that rule change. Every actual projected code session makes changes to the underlying meaning, and so do most pairing sessions between a junior and a senior.</p>
<h3>
<p style="text-align: center;"><span style="color: #0000ff;"><em>Use The Projector Rule</em></span></p>
<p style="text-align: center;"><span style="color: #0000ff;"><em>To Identify The Moving Target Code Standard</em></span></p>
</h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/IbgRbFYxESk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/14/the-projector-rule-a-moving-target-code-standard/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/14/the-projector-rule-a-moving-target-code-standard/</feedburner:origLink></item>
		<item>
		<title>Coaching The Automation Principle</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/Ffu-9cQnecA/</link>
		<comments>http://anarchycreek.com/2010/04/12/coaching-the-automation-principle/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 18:16:59 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1515</guid>
		<description><![CDATA[Because the human mind is the most expensive resource, don’t spend it where you don&#8217;t have to. The automation principle is  one sentence long, but it points a dozen directions at once. Teams are usually all-or-nothing in automation. Once a team realizes how lovely it is to not-think on no-thinking-required tasks, they jump right in [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-left: 5em; margin-right: 5em; padding-top: 2px; padding-right: 6px; padding-bottom: 4px; color: #000000; background-color: #60a560; padding-left: 36px; border: 2px solid #dddddd;"><strong>Because the human mind is the most expensive resource, don’t spend it where you don&#8217;t have to.</strong></p>
<p>The automation principle is  one sentence long, but it points a dozen directions at once.</p>
<p>Teams are usually all-or-nothing in automation. Once a team realizes how lovely it is to not-think on no-thinking-required tasks, they jump right in and build or tune all their tools for maximum advantage.</p>
<p>Don&#8217;t you worry, I&#8217;m just <em>sure</em> your team will be one of those easy ones. If that&#8217;s the case, you can just skip this article and make a cash donation to the charity of your choice.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Urgency + Automation</span></em></h3>
<p>Ahhh, yes, not one of the lucky ones, eh?</p>
<p>Your first challenge is just to decide what your first challenge is. The sheer number of possible automation stories is daunting: it&#8217;s one of the biggest reasons I advocate the <a href="http://anarchycreek.com/2010/03/09/half-and-half-in-agile-transition/">half-and-half</a> transition. A sizable portion of your energy can then be given just to tackling automation stories.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">The Inner Cycle</span></em></h3>
<p>The inner TDD cycle is <em>always </em>the most urgent target for automation.</p>
<p>We need a single-step for &#8220;save my changes, compile/link/copy, and if there are no errors, launch the microtests-of-interest&#8221;.</p>
<ul>
<li><strong><em>Save my changes:</em><span style="font-weight: normal;"> Many almost-ready automation sequences shortchange this step, but it&#8217;s important. You <em>never</em> want to run your microtests against the code <em>before your changes.</em></span></strong></li>
<li><strong><em>Compile/Link/Copy: </em><span style="font-weight: normal;">The two most important issues are the 100% problem (for optimal builds), and for some teams, the need to take binaries and put them in the &#8216;right&#8217; place for running.</span></strong></li>
<li><em><strong>Run Microtests-Of-Interest:<span style="font-style: normal;"> <span style="font-weight: normal;">some teams stumble here. The final step of the inner cycle is to run and examine the microtest results. Starting the actual program running is not a necessity.</span></span></strong></em></li>
</ul>
<p>It&#8217;s important to understand that we are not looking for three separate gestures here. We want all of the above action to happen with a single gesture.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Integrate It!</span></em></h3>
<p>Next after the inner cycle is integration. This time, it&#8217;s not a single gesture:</p>
<ul>
<li><strong><em>Show Me Everything I Changed<span style="font-weight: normal;">: <span style="font-style: normal;">The output should be in the identical tree shape of the source. If you made some changes you don&#8217;t want, revert them here.</span></span></em></strong></li>
<li><span style="font-weight: normal;"><span style="font-style: normal;"><strong><em>Merge Out:</em><span style="font-weight: normal;"> Bring me everyone else&#8217;s changes, with a merge system for each collision between my changes and theirs.</span></strong></span></span></li>
<li><span style="font-weight: normal;"><span style="font-style: normal;"><strong><span style="font-weight: normal;"><em><strong>Run Inner Cycle:</strong></em> We&#8217;re not done merging out until the microtests run green.</span></strong></span></span></li>
<li><strong><em>Commit Everything I Changed: </em><span style="font-weight: normal;">Usually there&#8217;s another round of show-me here, followed by the actual commit.</span></strong></li>
</ul>
<p>When we can do all four of these actions with simple and thoughtless gestures, we&#8217;re in good shape.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>The Trap Trio</em></span></h3>
<p>The integration automation is a good place to consider the three most likely coaching difficulties, as they each can be found there. These are all noob problems: an experienced automater sees these situations all the time, but doesn&#8217;t fall for them.</p>
<p><strong>All-Or-Nothing-At-All</strong>: Engineers, yo. They get trapped here because they can&#8217;t think of an automated solution that solves every conceivable variant. This is an easy one to resolve: teach them how to implement their scripts and macros as fail-fast. If our scripts can establish that it&#8217;s a situation they can&#8217;t handle, then they can fail right out. Sometimes 91.5% is just fine.</p>
<p><strong>Mind-In-The-Middle:</strong> Automation can&#8217;t work because there are some sub-steps that absolutely require human intervention. No, that&#8217;s not quite it. It&#8217;s because there are a bunch of mind-needed sub-steps, spread throughout the process. This problem might fall as in all-or-nothing: automate what you can, don&#8217;t sweat what you can&#8217;t. But more likely, a clever person can smoosh the sub-steps in time, so that the mindful parts are all in the same place. Then we just leave that single hole in our automation and have everything else mechanical as can be.</p>
<p><strong>More Controls = More Control:</strong> This one&#8217;s endemic. Folks who couldn&#8217;t code a fucking for-loop sitting in front of the jet cockpit of a universally-mandated fabulously-expensive entirely-wasted version control system like they have some clue what they&#8217;re doing. These systems justify their wretched excess on the theory that they give you every conceivable control over your integrations. Agilists in particular should not buy this theory. The resolution? It&#8217;s a combination of the two that just came: rearrange mindful steps, and settle for less than perfect solutions. In particular, don&#8217;t be afraid to write front-end scripts that quietly drive the VCS for the most typical variant.</p>
<p style="text-align: center;">
<div id="attachment_1539" class="wp-caption aligncenter" style="width: 370px"><a href="http://steampunkworkshop.com/visit-steampunked-home"><img class="size-full wp-image-1539 " title="Click To See This Beast Up Close" src="http://anarchycreek.com/wp-content/uploads/2010/04/Steampunk-organ-cockpit-desk-15.jpg" alt="" width="360" height="455" /></a><p class="wp-caption-text">A Radically Simplified VCS</p></div>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>Leading Automation Efforts Is </em></span></h3>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>Perfect Releasing!</em></span></h3>
<p><span style="font-size: 13.3333px;"><br />
</span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/Ffu-9cQnecA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/12/coaching-the-automation-principle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/12/coaching-the-automation-principle/</feedburner:origLink></item>
		<item>
		<title>Coaching The Urgency Principle</title>
		<link>http://feedproxy.google.com/~r/SituatedGeekery/~3/S0T4wpyJONY/</link>
		<comments>http://anarchycreek.com/2010/04/08/coaching-the-urgency-principle/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 17:19:13 +0000</pubDate>
		<dc:creator>GeePawHill</dc:creator>
				<category><![CDATA[Situated Geekery]]></category>

		<guid isPermaLink="false">http://anarchycreek.com/?p=1500</guid>
		<description><![CDATA[Give most of your effort to the most important story, a little to less important stories, and none at all to unimportant stories. To me, the most amazing thing about the urgency principle is how I ever managed to live without it. As an individual, it reminds me to stop screwing around doing stuff that [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-left: 5em; margin-right: 5em; padding-top: 2px; padding-right: 6px; padding-bottom: 4px; color: #000000; background-color: #60a560; padding-left: 36px; border: 2px solid #dddddd;"><strong>Give <em>most</em> of your effort to the most important story, a <em>little </em>to less important stories, and <em>none at all </em>to unimportant stories.</strong></p>
<p>To me, the most amazing thing about the urgency principle is how I ever managed to live without it.</p>
<p>As an individual, it reminds me to stop screwing around doing stuff that is anything less than the most important thing. This works for me whether I am coaching, coding, writing, blogging, or doing home repair.</p>
<p>The quantity of empirical data that says multi-tasking is inefficient staggers a researcher’s mind. <em>No one </em>advocates doing two things at the same time. It follows, then, that if I’m not doing two things at once, I have to choose which one of those two is most important and do that one.</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">As For The Team</span></em></h3>
<p>As a team, the urgency premise is all about sorting user stories – software development for the business – into a <em>literal</em> stack, where the most important story is at the top and the least important at the bottom, and every story between is more important than the one below it and less important than the one above it.</p>
<p>Many companies bucketize their work. They pick some small integer, usually 4, and divide all their stories into those buckets. They’re usually called “Must-Have”, “Should-Have”, “Like-To-Have”, and “Optional”. This technique has <em><strong>the rather remarkable property that it does not work in any way</strong></em>. Every customer voice in such an organization knows that the only way to get something actually done is to get it into Must-Have, and even that isn’t always enough to guarantee its inclusion. Optional is always empty, and Like-To-Have has one or two token stories.</p>
<h3 style="text-align: center;"><span style="color: #0000ff;"><em>Coaching Urgency</em></span></h3>
<p>The key to coaching urgency successfully is to help the team understand why story-size is so important. Granularity is key, here. We want them to understand why we shrink the granularity of stories as small as we possibly can.</p>
<p>Take a look at these features (large stories) sorted by importance:</p>
<p><img class="aligncenter size-full wp-image-1503" title="Stories That Are Really Features" src="http://anarchycreek.com/wp-content/uploads/2010/04/granularity-large.jpg" alt="" width="515" height="284" /></p>
<p>It’s pretty easy here to say that we should do our work 1-2-3-4, yes?</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Same Order, Smaller Stories</span></em></h3>
<p><span style="font-size: 13.3333px;">But what if we take those same four features, but this time broken into smaller stories. </span><span style="font-size: 13.3333px;">Everything in the figure below that isn’t in light blue is lost value. If we follow the 1-2-3-4 strategy, we’re going to implement B and C before we implement D, and that’s clearly sub-optimal.</span></p>
<p style="text-align: center;"><span style="font-size: 13.3333px;"><img class="aligncenter size-full wp-image-1504" title="Features Are Made Of Stories" src="http://anarchycreek.com/images/granularity-both.jpg" alt="" width="515" height="279" /><br />
</span></p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">The Actual Optimal Order</span></em></h3>
<p>The final figure below shows the same work as before, this time sorted absolutely by value. Do you see that by splitting and re-sorting we have dramatically changed our implementation order? So will your customer team.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1505" title="Smaller Stories Deliver More Value" src="http://anarchycreek.com/images/granularity-small.jpg" alt="" width="515" height="279" /></p>
<p>The shape here is called the <em>diminishing value curve</em>. Producing stories A-D-B-G-E-H-F-J-C-I-K-L is far better suited as a strategy. If that&#8217;s not obvious, let&#8217;s take the same diagram and add a shipping date:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1507" title="granularity-with-ship-day" src="http://anarchycreek.com/images/granularity-with-ship-day.jpg" alt="" /></p>
<p>There&#8217;s room here for another whole conversation about the <em>shape </em>of a user-story. Soon, soon. For now, this will do:</p>
<h3 style="text-align: center;"><em><span style="color: #0000ff;">Choose One Story, Hammer It. Repeat</span></em></h3>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://anarchycreek.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p><img src="http://feeds.feedburner.com/~r/SituatedGeekery/~4/S0T4wpyJONY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://anarchycreek.com/2010/04/08/coaching-the-urgency-principle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://anarchycreek.com/2010/04/08/coaching-the-urgency-principle/</feedburner:origLink></item>
	</channel>
</rss>
