<?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>Andy Balaam's Blog &#187; Scrum</title>
	<atom:link href="http://www.artificialworlds.net/blog/category/scrum/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.artificialworlds.net/blog</link>
	<description>Four in the morning, still writing Free Software</description>
	<lastBuildDate>Fri, 10 Feb 2012 09:42:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Talk in code</title>
		<link>http://www.artificialworlds.net/blog/2009/03/05/talk-in-code/</link>
		<comments>http://www.artificialworlds.net/blog/2009/03/05/talk-in-code/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 10:31:00 +0000</pubDate>
		<dc:creator>Andy Balaam</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Lean and Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Test Driven]]></category>

		<guid isPermaLink="false">http://www.artificialworlds.net/blog/?p=118</guid>
		<description><![CDATA[Last week we had an extended discussion at work about how we were going to implement a specific feature. This discussion hijacked our entire Scrum sprint planning meeting (yes, I know, we should have time-boxed it). It was painful, but the guy who was going to implement it (yes, I know, we should all collectively [...]]]></description>
			<content:encoded><![CDATA[<p>Last week we had an extended discussion at work about how we were going to implement a specific feature.</p>
<p>This discussion hijacked our entire <a href="http://www.scrumalliance.org/">Scrum</a> <a href="http://www.scrumalliance.org/pages/scrum_ceremonies">sprint planning meeting</a> (yes, I know, we should have <a href="http://en.wikipedia.org/wiki/Timebox">time-boxed</a> it).  It was painful, but the guy who was going to implement it (yes, I know, we should all collectively own our tasks) needed the discussion: otherwise it wasn&#8217;t going to get implemented.  It certainly wasn&#8217;t going to get broken into short tasks until we knew how we were going to do it.</p>
<p>Anyway, asides aside, I came out of that discussion bruised but triumphant.  We had a plan not only on how to write the code, but also how to test it.  I believe the key thing that slowly led the discussion from a <a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt">FUD</a>-throwing contest into a constructive dialogue was the fact that we began to <strong>talk in code</strong>.</p>
<p>There are two facets to this principle:</p>
<h3>1. Show me the code</h3>
<p>As Linus once said, &#8220;<a href="http://lkml.org/lkml/2000/8/25/132">Talk is cheap. Show me the code.</a>&#8220;.</p>
<p>If you are at all disagreeing about how what you&#8217;re doing will work, open up the source files in question.  Write example code &#8211; modify the existing methods or sketch a new one.  Outline the classes you will need.  Code is inherently unambiguous.  White board diagrams and hand-waving are not.</p>
<p>Why wouldn&#8217;t you do this?  Fear you might be wrong?  Perhaps you should have phrased your argument a little less strongly?</p>
<p>Is this slower than drawing boxes on a whiteboard?  Not if you include time spent resolving the confusion caused by the ambiguities inherent in line drawings.</p>
<p>Does <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a> make whiteboards less ambiguous?  Yes, if all your developers can be bothered to learn it.  But why learn a new language when you can communicate using the language you all speak all day &#8211; code?</p>
<h3>2. Create a formal language to describe the problem</h3>
<p>If your problem is sufficiently complex, you may want to codify the problem into a formal (text-based) language.</p>
<p>In last week&#8217;s discussion we were constantly bouncing back and forth between different corner cases until we started writing them down in a formal language.</p>
<p>The language I chose was an adaptation of a <a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html">Domain-specific language</a> I wrote to test a different part of our program.  I would love to turn the cases we wrote down in that meeting into real tests that run after every build (in fact I am working on it) but their immediate value was to turn very confusing &#8220;what-if&#8221;s into concrete cases we could discuss.</p>
<p>Before we started using the formal language, the conversations went something like this:</p>
<p><strong>Developer:</strong> &#8220;If we implement it like that, this bad thing will happen.&#8221;</p>
<p><strong>Manager:</strong> &#8220;That&#8217;s fine &#8211; it&#8217;s a corner case that we can tidy up later if we need it.&#8221;</p>
<p><strong>Developer:</strong> (Muttering) &#8220;He clearly doesn&#8217;t understand what I mean.&#8221;</p>
<p><strong><em>Repeat</em></strong></p>
<p>After we started using the formal language they went something like this:</p>
<p><strong>Developer:</strong> &#8220;If we implement it like that, this bad thing will happen.&#8221;</p>
<p><strong>Me:</strong> &#8220;Write it down, I tell you.&#8221;</p>
<p><strong>Developer:</strong> (Typing) &#8220;See, this will happen!&#8221;</p>
<p><strong>Manager:</strong> &#8220;That&#8217;s fine &#8211; it&#8217;s a corner case that we can tidy up later if we need it.&#8221;</p>
<p><strong>Developer:</strong> (Muttering) &#8220;Flipping managers.&#8221;</p>
<h3>Summary</h3>
<p>The conversation progresses if all parties believe the others understand what they are saying.  It is not disagreement that paralyses conversations &#8211; it is misunderstanding.</p>
<p>To avoid misunderstanding, talk in code &#8211; preferably a real programming language, but if that&#8217;s too verbose, a text-based code that is unambiguous and understood by everyone involved.</p>
<h3>Note on whiteboards</h3>
<p>You can&#8217;t copy and paste them, and you can&#8217;t (easily) keep what you did with them, and you can&#8217;t use them to communicate over long distances.</p>
<p>And don&#8217;t even try and suggest an electronic whiteboard.  In a few years they may solve all of the above problems, but not now.  They fail the &#8220;can I draw stuff?&#8221; test at the moment.</p>
<p>Even when electronic whiteboards solve those problems, they won&#8217;t solve the fact that lines and boxes are more ambiguous and less detailed than code in text form.</p>
<p>If you all know and like UML, that makes your diagrams less ambiguous, but still they often don&#8217;t allow enough detail: why bother?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artificialworlds.net/blog/2009/03/05/talk-in-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

