<?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/"
	>

<channel>
	<title>Liz Keogh&#039;s blog &#187; humour</title>
	<atom:link href="http://lizkeogh.com/category/humour/feed/" rel="self" type="application/rss+xml" />
	<link>http://lizkeogh.com</link>
	<description>Software, Training, Coaching, Writing</description>
	<lastBuildDate>Mon, 30 Jan 2012 19:27:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Giving effective feedback: How to change your Code&#8217;s behaviour</title>
		<link>http://lizkeogh.com/2010/12/02/giving-effective-feedback-how-to-change-your-codes-behaviour/</link>
		<comments>http://lizkeogh.com/2010/12/02/giving-effective-feedback-how-to-change-your-codes-behaviour/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 16:52:19 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=617</guid>
		<description><![CDATA[Have you ever wanted to change the behaviour of some code that you work with?
I&#8217;d like to share a few techniques with you which have helped me to change the behaviour of code I&#8217;ve worked with, with little conflict, great success and positivity all round.
Imagine a legacy system who&#8217;s been in the job for five [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted to change the behaviour of some code that you work with?</p>
<p>I&#8217;d like to share a few techniques with you which have helped me to change the behaviour of code I&#8217;ve worked with, with little conflict, great success and positivity all round.</p>
<p>Imagine a legacy system who&#8217;s been in the job for five years and can&#8217;t see the problem with the way he&#8217;s behaving.</p>
<p>Imagine a class, who feels like he needs to be in control of everything, and can&#8217;t delegate or trust other classes effectively.</p>
<p>Imagine a service who&#8217;s overloaded, doing the job of three systems that no longer perform, but who just heroically accepts all the work and never gives any signal that he&#8217;s about to collapse, again.</p>
<p>We&#8217;ve successfully used these techniques to help change our codebases, our systems, our services and our applications, as well as our people. I&#8217;d like to share these simple guidelines with you, based on the sandwich model of feedback. They are:</p>
<ul>
<li> Start with the right mindset </li>
<li> Anchor the things you value </li>
<li> Avoid labelling </li>
<li> Use examples </li>
<li> Work towards a bright future </li>
</ul>
<h3>Start with the right mindset</h3>
<p>There are lots of reasons we might want to change our code. I&#8217;ve seen people work on code</p>
<ul>
<li>because it doesn&#8217;t work the way they expect</li>
<li>because it&#8217;s annoying</li>
<li>because it refuses to do something which isn&#8217;t really its responsibility anyway</li>
<li>because it&#8217;s fun and powerful to change code for the sake of it.</li>
</ul>
<p>I believe there are only two good reasons to change code:</p>
<ul>
<li>to reinforce valuable behaviour</li>
<li>to increase effectiveness.</li>
</ul>
<p>If you&#8217;re not approaching the code with one of these mindsets, stop. How much do you actually respect the code you&#8217;re about to change? All code wants to do a job effectively. No code is perfect. Remember that time when you first wrote code? You were learning, too. If you can approach the code with an appreciation for the things it does right, and build on those, you&#8217;re more likely to meet with success.</p>
<p>As an example, I had one piece of code which controlled the registration of pets. I really wanted this controller to broadcast a pet&#8217;s registration, but instead of communicating asynchronously, the controller was insisting that anyone who requested the registration of a pet hung around, waiting.</p>
<p>Unfortunately, one of the people who requested pets was the GUI &#8211; an extremely important class with a lot of other jobs to do too!</p>
<p>The code was frustrating me so much that I almost got rid of him and replaced him with someone else&#8230; but then I thought about it, and remembered that apart from the fractious relationship with the GUI, the controller had been doing his job very well. This respect allowed me to change the code&#8217;s behaviour instead of replacing him.</p>
<h3>Anchor the things you value</h3>
<p>Once you have an appreciation of the value of the code, make sure that the code knows. Reinforce this. You can call out specific examples of times when the code has done something well.</p>
<p>I told my controller, &#8220;I appreciate the way in which you register pets, and the effective way you delegate to the repository. Here&#8217;s an example. I registered a new rabbit, Snowy. I gave you his date of birth, his breeder and the price I wanted to sell him for, and when I verified it with the repository later, I found that you&#8217;d passed the information on very well. This is important to me.&#8221;</p>
<p>I tend to use a unit testing framework and perhaps a mocking framework &#8211; Moq or mockito &#8211; to translate these conversations into the language of the code.</p>
<p>If it&#8217;s a whole team whose behaviour needs to change &#8211; perhaps an entire application &#8211; then I&#8217;ll get everyone together and talk about the things that the entire team does well. For this, I use scenarios, either with a DSL or perhaps a BDD tool like Cucumber or JBehave. Automation tools like Selenium or WiPFlash let me translate my feedback into something they understand.</p>
<p>By anchoring the things that I value about the code, I can change his behaviour without fear that he&#8217;ll change in ways I <em>didn&#8217;t</em> want.</p>
<h3>Avoid labelling</h3>
<p>There are two types of labelling that I avoid: negative labelling, and pattern labelling.</p>
<p>Once I was judging a competition in which a coder announced, &#8220;This code is shite!&#8221; I marked him down. &#8220;If any other coder hears you say that,&#8221; I said, &#8220;they&#8217;ll either be wary of trying things out or they&#8217;ll think it&#8217;s OK to start devaluing other people&#8217;s code.&#8221; Labelling code negatively this way can be damaging for everyone involved in the project, <em>even if you wrote the code</em>.</p>
<p>Labelling code by calling out the patterns of behaviour can also be unhelpful. I remember one piece of code that got labelled as a &#8220;Visitor&#8221;. From then on, everyone expected it to behave like a Visitor. No matter what its responsibilities were, coders expected it to behave like a Visitor and encouraged the other classes in the system to do the same. Eventually the code broke down so badly that we had to replace it altogether, just because we had labelled it badly.</p>
<h3>Use examples</h3>
<p>We already looked at how to use examples to anchor positive behaviour instead. We can also use examples to show the difference between the behaviour we want, and the behaviour we&#8217;ve actually got.</p>
<p>&#8220;Instead of watching the repository,&#8221; I told the controller, &#8220;I&#8217;d like you to listen to him instead, and trust him more. Sometimes the repository might give you a message. I&#8217;d like you to respond to that message.&#8221;</p>
<p>&#8220;How long do you want me to wait after saving to get the message?&#8221; the controller asked.</p>
<p>&#8220;Don&#8217;t wait,&#8221; I told him. &#8220;Instead of telling me it&#8217;s done, I&#8217;d like you to tell me that it&#8217;s in progress instead. Let&#8217;s say that the repository takes five seconds. You should be responding in less than one.&#8221; We used some threading to illustrate how the repository might go off and do its job, and talked through the example in the controller&#8217;s language until I knew he understood.</p>
<h3>Work towards a bright future</h3>
<p>By focusing on the positive goals we want to achieve, we don&#8217;t really have to spend much time on the negative aspects of the code&#8217;s behaviour. After the examples were written, the controller was able to verify that his behaviour had changed appropriately, with as little fuss as possible. What&#8217;s more, he had those tests available to him going forward, so his behaviour <em>stayed</em> fixed. Eventually he became one of the most important classes in the system, responsible for the interactions of ten other imports &#8211; but he never got overwhelmed by the job.</p>
<p>We can do the same thing with scenarios and applications, or performance tests and whole systems. The ability to define the behaviour we want is one of the most important aspects of changing the behaviour which exists.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2010/12/02/giving-effective-feedback-how-to-change-your-codes-behaviour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estimation anti-patterns</title>
		<link>http://lizkeogh.com/2009/11/30/estimation-anti-patterns/</link>
		<comments>http://lizkeogh.com/2009/11/30/estimation-anti-patterns/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 18:15:04 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[humour]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=468</guid>
		<description><![CDATA[Dan North&#8217;s talk on &#8220;the Fallacy of Effectiveness&#8221; prompts me to put down the many estimation anti-patterns I&#8217;ve encountered. It also reminds me of his blog post on the Perils of Estimation.
Here they are, in alphabetical order, because none is any better than any other:
Budget-driven Estimation
Whatever estimate you come up with will be enlarged by [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dannorth.net">Dan North&#8217;s</a> <a href="http://www.vimeo.com/7849591">talk on &#8220;the Fallacy of Effectiveness&#8221;</a> prompts me to put down the many estimation anti-patterns I&#8217;ve encountered. It also reminds me of <a href="http://dannorth.net/2009/07/the-perils-of-estimation">his blog post on the Perils of Estimation.</a></p>
<p>Here they are, in alphabetical order, because none is any better than any other:</p>
<h3>Budget-driven Estimation</h3>
<p>Whatever estimate you come up with will be enlarged <em>by the customer</em> so that he can spend the rest of this year&#8217;s budget, otherwise he won&#8217;t get it again next year.</p>
<h3>Catch-up Estimation</h3>
<p><strong>Scrum Master:</strong> We have 30 points of work still to do, and only 2 more sprints to do it in. How many points can we manage in a sprint?<br />
<strong>Team:</strong> 15!<br />
<strong>Scrum Master:</strong> But we only managed 5 last week! How many do you really think we can manage?<br />
<strong>Team:</strong> 15!<br />
<strong>Scrum Master:</strong> <em><a href="http://en.wikipedia.org/wiki/Types_of_gestures">(facepalm)</a></em></p>
<h3>Comedy-driven Estimation</h3>
<p>As told to me by <a href="http://dannorth.net">Dan</a> from a talk he saw &#8211; if you know who it was please let me know so I can credit:</p>
<p><strong>Presenter:</strong> How tall am I?<br />
<strong>Crowd:</strong>5&#8242;8&#8243;! 5&#8242;9&#8243;! 2 metres!<br />
<strong>Presenter:</strong> Go on, you can manage more than that. How tall am I?<br />
<strong>Crowd:</strong> 6&#8242;2&#8243;?<br />
<strong>Presenter:</strong> Come on! You can do better than that! HOW TALL AM I?<br />
<strong>Crowd:</strong> <em>(Giggles nervously.)</em><br />
<strong>Presenter:</strong> Just because a project manager tells you you can do more, it doesn&#8217;t make it true.</p>
<h3>Done-driven Estimation</h3>
<p>A symptom of a pressured team, this method of estimating allows a pair of developers to get the story out of their stream as quickly as possible by eliminating time spent on tedious things like refactoring to make the code maintainable, deployment, manual testing, etc. Symptoms include the oft-quoted <a href="http://www.codinghorror.com/blog/archives/000818.html">&#8220;Works on my machine.&#8221;</a></p>
<h3>Done-done-driven Estimation</h3>
<p>A good team knows, of course, that the code counts for nothing until it&#8217;s out there in production, doing the thing it was built to do. Estimates are given with this in mind, but without the help of anyone involved in production deployment, systems integration, performance testing, UAT, etc., because they&#8217;re in <em>different teams</em>.</p>
<h3>Fractal Estimation</h3>
<p>After the scope of the project has been constructed, some stories may be considered too large to fit into an iteration, so the team decide to split them into the smallest possible deliverable slices, re-estimating each slice. Of course, this is a bit like <a href="http://en.wikipedia.org/wiki/How_Long_Is_the_Coast_of_Britain%3F_Statistical_Self-Similarity_and_Fractional_Dimension">measuring the coast of Britain</a>. The epic which was 13 points at project inception becomes 16 points of features, and 23 points of stories by the time it&#8217;s done in the sprints. Analysts wonder where this extra scope came from, while advocates of <a href="http://en.wikipedia.org/wiki/Burn_down_chart">burn-down charts</a> tuck the growing scope away somewhere where it won&#8217;t be noticed.</p>
<div style="font-size: 70%; color: #A0A0A0">
<a href="http://en.wikipedia.org/wiki/How_Long_Is_the_Coast_of_Britain%3F_Statistical_Self-Similarity_and_Fractional_Dimension"><img src="http://lizkeogh.com/wp-content/uploads/2009/11/Britain-fractal-coastline-combined.jpg" alt="The coastline of Britain gets longer as the increments in which it's measured get smaller." /></a><br />
<a href="http://commons.wikimedia.org/wiki/File:Britain-fractal-coastline-combined.jpg">Wikimedia Commons, CC Attributions ShareAlike 3.0</a></div>
<h3>Goat Estimation</h3>
<p><a href="http://estimategoat.com">Asking a goat can help</a> when you know it doesn&#8217;t really matter what you say, you&#8217;ll probably end up doing target-driven estimation anyway.</p>
<h3>Job-driven Estimation</h3>
<p>As practiced by residential consultancies on Time and Expenses, contract Project Managers and anyone else with an interest in seeing the project go on as long as possible.</p>
<h3>M25 driven Estimation</h3>
<p>&#8220;Yes, I know it took me 3 hours to get around London yesterday, but that was because there was a traffic jam on the M25. <a href="http://en.wikipedia.org/wiki/The_Road_to_Hell_(song)">Today will be much quicker.</a>&#8221;</p>
<h3>Pareto Estimation</h3>
<p>Often used by teams which have work still left over at the end of an iteration and desperately want to include the incomplete work in their velocity. Unfortunately the <a href="http://en.wikipedia.org/wiki/Pareto_principle">Pareto principle</a>, applied to tasks, suggests that 20% of any task will take 80% of the time. Let&#8217;s hope the 20%&#8217;s not the bit that got left till last.</p>
<h3>Post-mortem Estimation</h3>
<p>The team chooses estimates that will allow them to avoid the post-mortem <a href="http://lizkeogh.com/2007/10/04/when-estimates-go-wrong/">inflicted by the project manager when they missed the deadlines last time</a>.</p>
<h3>Promise-driven Estimation</h3>
<p><strong>Developer:</strong> &#8220;These estimates&#8230; they&#8217;re just estimates, right?&#8221;<br />
<strong>PM:</strong> &#8220;Don&#8217;t let the business hear you say that!&#8221;</p>
<p>Like Scrum&#8217;s sprint commitments, but used for release or project planning, this estimation method often leads to three-week long project planning meetings before the project starts. Frequently occurs as a result of fixed-price contracts with first-time suppliers. Also the second time. And the third.</p>
<h3>Star-Trek Estimation</h3>
<p><strong>Geordi La Forge:</strong> I told the captain I&#8217;d have this analysis done in an hour.<br />
<strong>Scotty:</strong> How long would it really take?<br />
<strong>Geordi La Forge:</strong> An hour!<br />
<strong>Scotty:</strong> Oh. You didn&#8217;t tell him how long it would REALLY take, did you?<br />
<strong>Geordi La Forge:</strong> Of course I did.<br />
<strong>Scotty:</strong> Oh, laddie. You&#8217;ve got a lot to learn if you want people to think of you as a miracle worker. </p>
<h3>Student Estimation</h3>
<p>If an estimate is chosen wisely, 50% of measurements will fall under the estimate, and 50% will fall over the estimates. Strangely, <a href="http://www.amazon.com/Critical-Chain-Eliyahu-M-Goldratt/dp/0884271536/">nothing ever gets handed in early</a>, no matter how inflated the estimate is.</p>
<h3>Target Estimation</h3>
<p><strong>PM:</strong> How many story points can you manage this week?<br />
<strong>Team:</strong> 10.<br />
<strong>PM:</strong> That&#8217;s not good enough. I need you to do 12. How many can you manage this week?<br />
<strong>Team:</strong> 12.</p>
<h3>Velocity-driven Estimation</h3>
<p>Once a target velocity has been established &#8211; sometimes by the team itself &#8211; the team members will find a reason as to why the work they&#8217;re capable of doing does actually add up to 12 story points. Often applied in conjunction with Fractal Estimation.</p>
<h3>Zero-outlier Estimation</h3>
<p>If being wrong is uncomfortable, a team will wait for the most experienced developer to &#8220;throw&#8221; their estimate first before following suit. Planning poker fixes the symptoms, but <em>not the problem</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2009/11/30/estimation-anti-patterns/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The pair chair</title>
		<link>http://lizkeogh.com/2009/02/06/the-pair-chair/</link>
		<comments>http://lizkeogh.com/2009/02/06/the-pair-chair/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 16:29:57 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[humour]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=400</guid>
		<description><![CDATA[Finally, an approach to pairing which maximises colocation. It&#8217;s guaranteed to bring people closer to my thoughts. I can&#8217;t wait for the new batch to arrive.
]]></description>
			<content:encoded><![CDATA[<p>Finally, an <a href="http://www.cenqua.com/pairon/?epicfail">approach to pairing</a> which maximises colocation. It&#8217;s guaranteed to bring people closer to my thoughts. I can&#8217;t wait for the new batch to arrive.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2009/02/06/the-pair-chair/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If&#8230;</title>
		<link>http://lizkeogh.com/2008/09/11/if/</link>
		<comments>http://lizkeogh.com/2008/09/11/if/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 18:56:04 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[humour]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=379</guid>
		<description><![CDATA[
If you can scan your threads when all around you
Are searching for the last response they knew
If you can kill the spammers with a button
While others must select a different view
If you can wait and not be tired of waiting
For others to get round to their replies
If email’s not the greatest thing you’re hating
And others’ [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://lizkeogh.com/wp-content/uploads/2008/09/notesuidocument_save_cancelled.jpg'><img src="http://lizkeogh.com/wp-content/uploads/2008/09/notesuidocument_save_cancelled.jpg" alt="Save cancelled" title="notesuidocument_save_cancelled" class="alignnone size-medium wp-image-382" /></a></p>
<p>If you can scan your threads when all around you<br />
Are searching for the last response they knew<br />
If you can kill the spammers with a button<br />
While others must select a different view<br />
If you can wait and not be tired of waiting<br />
For others to get round to their replies<br />
If email’s not the greatest thing you’re hating<br />
And others’ weary rants are a surprise</p>
<p><a href='http://lizkeogh.com/wp-content/uploads/2008/09/preview_pane_deletion.jpg'><img src="http://lizkeogh.com/wp-content/uploads/2008/09/preview_pane_deletion.jpg" alt="" title="preview_pane_deletion" class="alignnone size-medium wp-image-384" /></a></p>
<p>If you don’t need to dream of working faster<br />
And swift communication is your game<br />
If you believe that emailing your master<br />
And mastering your email are the same<br />
If you can find the words that you have spoken<br />
Within the folders chosen by your rules<br />
If you can fix the email list that’s broken<br />
Without the need to curse your dodgy tools</p>
<p><a href='http://lizkeogh.com/wp-content/uploads/2008/09/unable_to_launch_program.jpg'><img src="http://lizkeogh.com/wp-content/uploads/2008/09/unable_to_launch_program.jpg" alt="" title="unable_to_launch_program" class="alignnone size-medium wp-image-386" /></a></p>
<p>If you can start again from the beginning<br />
And find out that your draft is not yet lost<br />
If you must fight your inbox and you’re winning<br />
Without your leisure time bearing the cost<br />
If you find others accidentally bin you<br />
Or cc you in mails they forward on<br />
If you can laugh and even find it in you<br />
To help discover where they might have gone</p>
<p><a href='http://lizkeogh.com/wp-content/uploads/2008/09/type_mismatch.jpg'><img src="http://lizkeogh.com/wp-content/uploads/2008/09/type_mismatch.jpg" alt="" title="type_mismatch" class="alignnone size-medium wp-image-385" /></a></p>
<p>If typos with control keys never hurt you<br />
And buttons don’t exist you fear to touch<br />
If sanity and reason don’t desert you<br />
When all the mailing lists become too much<br />
If you find you can spend a single minute<br />
And get some useful work done while you’re free<br />
Yours is the Net and everything that’s in it -<br />
And I guess you use a different client to me!</p>
<p><a href='http://lizkeogh.com/wp-content/uploads/2008/09/0241.jpg'><img src="http://lizkeogh.com/wp-content/uploads/2008/09/0241.jpg" alt="" title="0241" class="alignnone size-medium wp-image-383" /></a></p>
<div style="font-size: smaller">(With apologies to <a href="http://en.wikipedia.org/wiki/If%E2%80%94">Rudyard Kipling</a>)</div>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/09/11/if/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

