<?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>brettdargan.com &#187; communication</title>
	<atom:link href="http://brettdargan.com/blog/tag/communication/feed/" rel="self" type="application/rss+xml" />
	<link>http://brettdargan.com/blog</link>
	<description>&#955; Thoughts and rants</description>
	<lastBuildDate>Fri, 28 May 2010 01:35:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Considerations in Communicating the Intent of Software Design</title>
		<link>http://brettdargan.com/blog/2009/01/08/considerations-in-communicating-the-intent-of-software-design/</link>
		<comments>http://brettdargan.com/blog/2009/01/08/considerations-in-communicating-the-intent-of-software-design/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 14:17:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[intent]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[sdec]]></category>

		<guid isPermaLink="false">http://brettdargan.com/blog/?p=169</guid>
		<description><![CDATA[I finished reading Neal Fords book &#34;The Productive Programmer&#34; [Ford2008] It wasn't quite what I expected, but none the less it was well worth the purchase. While there are a few topics I agree with but not to the same extent as him, the topic I strongly disagree with is on the generation of large [...]]]></description>
			<content:encoded><![CDATA[
<div class="document">


<!-- -*- mode: rst -*- -->
<p>I finished reading Neal Fords book &quot;The Productive Programmer&quot; <a class="citation-reference" href="#ford2008" id="id1">[Ford2008]</a>
It wasn't quite what I expected, but none the less it was well worth the purchase.</p>
<p>While there are a few topics I agree with but not to the same extent as him, the topic I strongly disagree with is on the generation of large amounts of documentation.</p>
<p>Documentation in this form merely serves as another one of those checklist items on a project plan.</p>
<p><strong>&quot;Conveying understanding&quot;</strong> should be the underlying purpose for which usually wiki pages or documentation is produced in order to communicate with others through time and space. Documentation is <strong>not just about information</strong>.</p>
<p>Consider your own experience when it comes to picking up documentation produced by others no longer working on the systems.</p>
<p>Most documentation is brain dumped with little thought given to the actual writing or conveying of information.
Anyone can describe the complicated in a complex manner, it takes <strong>more skill</strong> to take a complicated details and make them <strong>simple to understand</strong>.</p>
<p>Large volumes of javadoc, don't help me, it is another layer of indirection and as Robert C. Martin says regarding code, <strong>&quot;all comments are lies&quot;</strong>. Deep down everyone knows this, even though many people are still in denial.</p>
<dl class="docutils">
<dt>Rarely did I get documentation that was:</dt>
<dd><ul class="first last simple">
<li><em>reasonably accurate</em> in terms of what it was meant to do</li>
<li>mostly it differed significantly in how it was actually implemented</li>
<li>usually had typos in crucial lines that didn't aid understanding at all</li>
<li>large <em>gotchas</em> aka time-bombs are not mentioned</li>
<li>building and configuration where slightly covered</li>
<li>the best you usually wish for is some clues for which you can pull out your best Dr. Holmes hat and get to work with</li>
</ul>
</dd>
</dl>
<p>The choice of <strong>conveying understanding</strong> via documentation is one of the least effective mediums for communication. Refresh your memory of Alistair Cockburn's <a class="citation-reference" href="#cockburnambler" id="id2">[CockburnAmbler]</a>; analysis of various communication mediums and it's effectiveness.</p>
<div class="section" id="so-it-begs-the-question-why-are-comments-in-code-not-helping">
<h3>So it begs the question, why are comments in code not helping?</h3>
<p>With current tools and technologies there are so many layers that the <strong>code</strong> is scattered all around the place, in xml files, in os scripts, in java, stored procedures.</p>
<p>Fundamentally the <strong>Intention of Design</strong> being conveyed comments, or even as class diagrams are insufficient, therefore wasteful.</p>
<dl class="docutils">
<dt>There are a number of actors and forces at play</dt>
<dd><ul class="first last simple">
<li>The <strong>wrong</strong> things are asked by management to be documented. Things that are most likely to change are given prime focus in the documentation. Unstable or fast changing parts of the code base, things that are easily inspected directly in code and tests (<em>you have tests right?</em>).</li>
<li>Developers don't know any better, they are documenting, what they have produced, in the easiest way that they can, because
- they know <strong>no one will read it</strong>
- or if it is read the readers won't pay much attention to it anyway ie. <strong>they don't trust it</strong></li>
</ul>
</dd>
</dl>
<p>One approach to improve this situation could be learn from other fields of study, ones that rely a lot on <strong>communication of intent</strong> rather than <strong>ticking off items on the project plan</strong></p>
<p>Last year, I spent a little time thinking about this problem, as we had the problem of improving inter team communication with as little overhead as possible. They already had a typical template for the usual type of things, general design, building, testing, technical details, including implemenation details.</p>
<p>But as a reviewer, what really struck me was the fragility of this documentation, a lot of things that were most likely to change, composed a reasonable chunk of the document.</p>
<p>Lucky for me, I had recently read a book &quot;Sources of Power&quot; <a class="citation-reference" href="#klein1998" id="id3">[Klein1998]</a>.
It so happens that the armed forces represent a very large organisation with large communication issues. Orders need to be carried out and passed down the chain of command.</p>
</div>
<div class="section" id="considerations-in-communicating-intent">
<h3>Considerations in Communicating Intent</h3>
<p>(From pg. 225, ever so slightly modified)</p>
<ol class="arabic">
<li><dl class="first docutils">
<dt>Purpose.</dt>
<dd><ul class="first last simple">
<li>What are the High Level goals and within what context.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Objective of task.</dt>
<dd><ul class="first last simple">
<li>What is the desired outcome.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Plan.</dt>
<dd><ul class="first last simple">
<li>Sequence of Steps in the Plan.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Rationale.</dt>
<dd><ul class="first last simple">
<li>Why is this plan good, what makes this approach a better one over other approaches.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Key Decisions.</dt>
<dd><ul class="first last simple">
<li>Explicit expectation that there is uncertainty in the plan. Some anticipated key decisions will need to be made at more appropriate and beneficial times as progress.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Unwanted Outcomes.</dt>
<dd><ul class="first last simple">
<li>Anti Goals. There are many unwanted outcomes, often these may be things that immediately spring to mind. ie. that doing <strong>the simplest thing possible</strong> would be bad as it will attribute to an unwanted outcome. But in fact developers may unknowingly compromise the design of the system.</li>
</ul>
</dd>
</dl>
</li>
<li><p class="first">Constraints and other considerations.</p>
</li>
</ol>
<p>Things I like about these considerations:</p>
<blockquote>
<ul>
<li><dl class="first docutils">
<dt>Things that are most likely to change less frequently are documented.</dt>
<dd><ul class="first last simple">
<li>Purpose, goals within a business context, can last 12-18mths.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Ample opportunity to highlight &quot;tradeoffs&quot; that occurred.</dt>
<dd><ul class="first last simple">
<li>Things that &quot;come back to <em>haunt</em> you&quot; should be mentioned in something with a longer memory than your brain. Perhaps when the next team get it they don't become <em>&quot;Angry Monkeys&quot;</em>. Eg. Due to &quot;abc&quot; constraint we took &quot;sdf&quot; workaround OR  <em>when you touch this next make sure you fix &quot;xyz&quot;</em>.</li>
<li>That sort of information can take <strong>hours or days to re-learn next time</strong>, not to mention the fact that someone may learn it after planning has occurred. Yet all it takes is a one or two lines to actually make documenting deliver some value.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Plan.</dt>
<dd><ul class="first last simple">
<li>must not be a duplication of some other list, it needs to convey meaning and include the important bits for discussion, it is not a replacement for story or task cards or gantt charts.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Developers will often get focused on a small item.</dt>
<dd><ul class="first last simple">
<li>In a broader context that small item may have very little relevance.</li>
<li>Context and purpose get considered and documented to help <strong>keep it real</strong>.</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>When circumstances change.</dt>
<dd><ul class="first last simple">
<li>as they often do, developers have some contextual information to make <strong>informed decisions</strong>.</li>
</ul>
</dd>
</dl>
</li>
<li><p class="first">As the project progresses and we learn more about the project, tools and users, we will discover better ways of achieving goals or ways of eliminating steps in the plan.</p>
</li>
<li><p class="first">There is a larger &quot;surface area&quot; for less experienced developers to gain some insight into factors that are discussed and decided upon during design and to raise questions.</p>
</li>
</ul>
</blockquote>
<p>As I work <em>amongst</em> several project teams, I strive to get the leads to write about these considerations. Even if they don't make it for prosperity we are sure to have the conversations.</p>
<p>These considerations fit in with the primary aim of that book, which is Decision Making, but I'll leave that for another time.</p>
<p>The thing to remember is with your documentation is, what are you trying to achieve. Follow the DRY principle and don't reiterate stuff that people should already know.</p>
<table class="docutils citation" frame="void" id="ford2008" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[Ford2008]</td><td>Neal Ford, <em>The Productive Programmer</em>, O'Reily Media, Sebastopol, 2008</td></tr>
</tbody>
</table>
<table class="docutils citation" frame="void" id="schwartz2004" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[Schwartz2004]</td><td>. Barry Schwartz, <em>Paradox of Choice</em>. HarperCollins, New York, 2004.</td></tr>
</tbody>
</table>
<table class="docutils citation" frame="void" id="cockburnambler" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[CockburnAmbler]</td><td>Scott Ambler sourced from Alistair Cockburn</td></tr>
</tbody>
</table>
<!-- Amblers Essay: http://www.agilemodeling.com/essays/communication.htm#HowDoWeCommunicate -->
<table class="docutils citation" frame="void" id="klein1998" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[Klein1998]</td><td>Gary Klein, <em>Sources of Power</em>, Massachusetts Institute of Technology, 1998</td></tr>
</tbody>
</table>
</div>
</div>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=Considerations+in+Communicating+the+Intent+of+Software+Design+http%3A%2F%2Ftinyurl.com%2F657b98e" title="Post to Twitter"><img class="nothumb" src="http://brettdargan.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Considerations+in+Communicating+the+Intent+of+Software+Design+http%3A%2F%2Ftinyurl.com%2F657b98e" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://brettdargan.com/blog/2009/01/08/considerations-in-communicating-the-intent-of-software-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

