<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Talk About Quality</title>
	<atom:link href="http://talkaboutquality.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://talkaboutquality.wordpress.com</link>
	<description>Tom Harris</description>
	<lastBuildDate>Sun, 25 Sep 2011 20:29:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='talkaboutquality.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Talk About Quality</title>
		<link>http://talkaboutquality.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://talkaboutquality.wordpress.com/osd.xml" title="Talk About Quality" />
	<atom:link rel='hub' href='http://talkaboutquality.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Error-Proofing Made Simple</title>
		<link>http://talkaboutquality.wordpress.com/2011/05/02/error-proofing-made-simple/</link>
		<comments>http://talkaboutquality.wordpress.com/2011/05/02/error-proofing-made-simple/#comments</comments>
		<pubDate>Mon, 02 May 2011 10:19:15 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[Failure]]></category>
		<category><![CDATA[Fast food]]></category>
		<category><![CDATA[Poka-yoke]]></category>
		<category><![CDATA[Prevention]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Success]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=391</guid>
		<description><![CDATA[Error-proofing is preventing errors rather than just warning about them. With compiler warnings, that means setting warnings-as-errors in your compiler so you cannot complete your build. Yes, you also need tests that can fail and a source control system that refuses promotion of versions that fail test. And code review to ensure that code changes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=391&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Error-proofing is preventing errors rather than just warning about them.</p>
<p>With compiler warnings, that means setting warnings-as<a href="http://www.qualitydigest.com/inside/quality-insider-news/simple-brilliant-error-proofing-amazing-n-out-burger.html"><img class="alignright size-medium wp-image-395" title="Graban_Simple_fig2_4-7" src="http://talkaboutquality.files.wordpress.com/2011/05/graban_simple_fig2_4-7.jpg?w=223&#038;h=300" alt="Cannot throw away fast-food tray by mistake says Mark Graban" width="223" height="300" /></a>-errors in your compiler so you cannot complete your build. Yes, you also need tests that can fail and a source control system that refuses promotion of versions that fail test. And code review to ensure that code changes to address compiler warnings only improve the code. But the key is warnings-as-errors.</p>
<p>While error-proofing is simpler with fast-food trays, the idea is the same. Read &#8220;<a href="http://www.qualitydigest.com/inside/quality-insider-news/simple-brilliant-error-proofing-amazing-n-out-burger.html">Simple, Brilliant, Error Proofing at the Amazin</a><a href="http://www.qualitydigest.com/inside/quality-insider-news/simple-brilliant-error-proofing-amazing-n-out-burger.html">g In-N</a><a href="http://www.qualitydigest.com/inside/quality-insider-news/simple-brilliant-error-proofing-amazing-n-out-burger.html">-Out Burger</a>&#8221; (Mark Graban  |  04/11/2011  <em>Quality Digest</em>) and look for where else you can error-proof your process.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/391/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/391/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=391&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2011/05/02/error-proofing-made-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>

		<media:content url="http://talkaboutquality.files.wordpress.com/2011/05/graban_simple_fig2_4-7.jpg?w=223" medium="image">
			<media:title type="html">Graban_Simple_fig2_4-7</media:title>
		</media:content>
	</item>
		<item>
		<title>Don&#8217;t Call it Testing</title>
		<link>http://talkaboutquality.wordpress.com/2010/11/18/dont-call-it-testing/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/11/18/dont-call-it-testing/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 08:44:26 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Clarity]]></category>
		<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[Purpose]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=386</guid>
		<description><![CDATA[Recently I went to a workshop on Exploratory Testing given by John Stevenson. Just as exploratory testing finds the unexpected, so I learned something unexpected. Every time John used the word &#8220;testing&#8221;, he meant it as (re)defined in Michael Bolton&#8217;s Testing vs. Checking. It&#8217;s a powerful redefinition, and simpler to say than what I&#8217;ve always [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=386&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I went to a workshop on <a href="http://www.satisfice.com/articles/what_is_et.shtml">Exploratory Testing</a> given by <a href="http://www.steveo1967.blogspot.com/">John Stevenson</a>. Just as exploratory testing finds the unexpected, so I learned something unexpected. Every time John used the word &#8220;testing&#8221;, he meant it as (re)defined in Michael Bolton&#8217;s <em><a href="http://www.developsense.com/blog/2009/08/testing-vs-checking/">Testing vs. Checking</a></em>. It&#8217;s a powerful redefinition, and simpler to say than what I&#8217;ve always meant by &#8220;adversarial testing&#8221;. Here&#8217;s how the redefinition works:</p>
<ol>
<li>Notice that many tests don&#8217;t find defects</li>
<li>Decide we need a new definition for the word &#8220;test&#8221;</li>
<li>But the current definition is useful, so move it to the word &#8220;check&#8221;</li>
<li>Now the word &#8220;test&#8221; is open for redefinition</li>
<li>Define &#8220;test&#8221; as in <em><a href="http://www.developsense.com/blog/2009/08/testing-vs-checking/">Testing vs. Checking</a></em></li>
</ol>
<p>Quick summary of new and useful definition:</p>
<blockquote><p>Let  &#8220;test&#8221; mean an exercise of the software under test that helps a thinking tester answer the question, “Is there a problem here?”</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/386/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=386&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/11/18/dont-call-it-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Change the Software</title>
		<link>http://talkaboutquality.wordpress.com/2010/09/15/change-the-software/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/09/15/change-the-software/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 20:11:23 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Change]]></category>
		<category><![CDATA[Clarity]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Correction]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Purpose]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Stability]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=375</guid>
		<description><![CDATA[Software version control systems that let you manipulate changes rather than versions make so much sense because what users want from software is changes -- problems fixed and features added. Tools like Mercurial and Git should be called software changeset control systems and they're suddenly consistent with defect tracking systems and code review tools. It's all about changes.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=375&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I became the unwitting user of a new piece of consumer software, when our office upgraded our mobile phones. Suddenly, with every phone call, appointment reminder, and even when charging the phone, I&#8217;m acutely aware of what I want from this piece of embedded software that I did not even buy. As a software user I want only two things: more or better features, and problems fixed. I don&#8217;t care what version the software is &#8212; I care what&#8217;s changed. It would make sense, then, that software developers should focus on changes, not versions, and that tools should support them.</p>
<p>The most common tool on a software development project is always the &#8220;bug tracker&#8221; or defect tracking system. It&#8217;s really a change request tracking system, with two kinds of requests for changes: enhancements (performance improvement or new feature requests) and defects (fix requests). Tracking requests for changes. That&#8217;s good.</p>
<p>Now look at the other major tool in every software development group &#8212; it&#8217;s usually called a &#8220;version control system&#8221;. But see above &#8212;  users don&#8217;t care about versions. And developers have to report to the defect tracking system what they&#8217;ve done, and that system is which is full of requests for changes, not requests for versions. So why would we want a <em>version </em>control system?</p>
<p>That&#8217;s why the light went on for me when I read Joel Spolsky&#8217;s <a href="http://hginit.com/"><em>Hg Init: a Mercurial tutorial</em></a>. Not because Mercurial (or Git) makes branching cheap and merges easy. (It does.) But because, as Spolsky writes:</p>
<blockquote><p>Subversion likes to think about <em>revisions</em>. A revision is what the entire file system looked like at some particular point in time. In Mercurial, you think about <em>changesets.</em> A changeset is a concise list of the changes between one revision and the next revision. (When Spolsky writes &#8220;revisions&#8221;, read &#8220;versions&#8221;.)</p></blockquote>
<p>Now I understand why there&#8217;s so much trouble connecting our defect (<em>change</em>) tracking and version control workflows. Testing too &#8212; what we really want to know is, &#8220;Which <em>change </em>broke the build?&#8221; And bringing in code review, more problems, because people want to review whether each <em>change</em> accomplishes the goal of adding or fixing something.  Software development is all about changes: specifying them, designing them, coding them, testing them, and delivering them. Not versions. Changes. Sure, versions have a place in software delivery &#8212; they are labels for the software after a certain number of changes. (Mercurial supports them, as &#8220;tags&#8221;.) So if you want all the tools to work together and make your software development life easier, switch to a software repository that lets you control changes.</p>
<p>What should we call them? Maybe &#8220;software changeset control systems&#8221;. The two big ones these days are Mercurial, and Git. For Mercurial, see Spolsky&#8217;s <a href="http://hginit.com/">tutorial</a>. For Git, listen to <em><a href="http://www.youtube.com/watch?v=4XpnKHJAok8">Linus Torvalds on git</a></em>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/375/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=375&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/09/15/change-the-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Software is Writing</title>
		<link>http://talkaboutquality.wordpress.com/2010/09/15/software-is-writing/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/09/15/software-is-writing/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 22:51:48 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Children]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Cooperation]]></category>
		<category><![CDATA[Correction]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[Purpose]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=369</guid>
		<description><![CDATA[Software is not construction; it's writing. Here's why, and what it means for developers.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=369&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Software is not construction</strong></p>
<p>Software is not construction, no matter how popular that statement may be. A program is not a building. Parts are not chosen first and then fitted into place. Design continues almost to the last minutes of coding. Further, almost nobody spends time creating new code, at least not for very long. Sure there are new products and new codebases. But even then, after a short period, most additional coding is extending or changing an existing codebase. So if coding is not construction, and mostly involves changing what’s already created, what is it?</p>
<p>Well, coding is writing. It’s using text to communicate a message. That may not sound like much, but understanding this helps a lot. Instead of struggling to make up new ways of thinking and learning, as if programming were a completely new human activity, we can look at how good writers write. People have been writing for many hundreds of years, and have become pretty good at it.</p>
<p><strong>Learning to write </strong></p>
<p>How do people get into writing? Do we start, as most do in programming, full grown, writing essays? No, not at all. We start as children, and learn first to talk, then to read, and finally to write. Yes, I know that school seems to teach writing, at least forming the letters, before reading. But it’s an illusion: listening to a bedtime story is essentially reading &#8211; paying attention to someone else’s writing, and understanding it &#8211; and comes before writing. Most people don’t try writing that communicates a message &#8211; expository prose &#8211; until secondary school or later.</p>
<p>Good writers have their audience in mind at all times. They edit their writing through several drafts, as well as getting others to review it, and give written comments. And they talk about their writing. Maybe not always directly, but when a political columnist goes to a dinner party, you can bet he’ll talk politics. When a novelist chats in the park, she’s talking about the same human struggles that will later appear in her books. Even for the solitary writer typing in a darkened room, the life that feeds the writing is one of talking with, listening to, and reading about people.</p>
<p><strong>Software is Writing </strong></p>
<p>Now back to software: software is not like writing, it <em>is</em> writing. In our industrial setting, it is too late or too radical to suggest re-teaching programming, by teaching first how to talk, then to read, then to write programs. But we can highlight where daily programming work already involves each of these three activities, and where it doesn’t, but should.</p>
<p>Talking includes formal design reviews and code reviews, but also whiteboard conversations and hallway arguments. How should I write this here? Why is that data structure that way? Why does the compiler give that warning? Don’t just think alone &#8211; talk it out with someone nearby. It is the same with tests. Why does that scenario fail intermittently? How should I write it differently? And even for defect entries -what does the submitter really mean? Phone him up. Why does this change fix the problem? Find the developer and ask.</p>
<p>Reading is for design documents, training materials and perhaps professional books. But mainly, it includes reading lots of existing code. That’s reading it until you’re really sure what it does, so you know how to change it, fix it, extend it. There is also code review &#8212; where the author asks you to read their code, not just to say that it looks fine, but to identify what’s wrong, or unclear.</p>
<p>Writing is the coding, of course. But who is the audience? There are two audiences. One, the compiler, which is your personal translator, from a non-native language (nobody’s mother spoke to them in C), to an almost unknown language &#8211; the machine language that the hardware actually understands. The compiler is a rigid, simple-minded, sometimes unpredictable audience, just a ghost of the person who wrote it. Here you have to be very precise, careful, and limit yourself to what the compiler understands and to what the hardware will accept. The other audience, is so very different &#8211; the next developer. This may be yourself a few weeks later, or someone else, but there will always be another developer, coming back months or years later, to fix or extend the code. She wants comments, explanations, meaningful names for things, and an easily readable structure. Because now you’re long gone, she can’t talk to you: she must read, so you must write.</p>
<p><strong>Tools!</strong></p>
<p>Well, with all this talk about programming being writing, let’s come back to earth. Software developers are technical people, and expect to use the best tools to do their jobs. There’s the whiteboard in the hallway &#8212; we need more of those, for talking. Defect tracking systems, where we can make sure we write clear resolution notes. And for automatically sharing and discussing code, web-hosted code tools for static analysis and code review are the way to go.</p>
<p>&#8211;<br />
Originally published in company internal newsletter. Edited and released here with permission.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/369/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/369/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/369/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=369&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/09/15/software-is-writing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Tell it to your Teddy Bear</title>
		<link>http://talkaboutquality.wordpress.com/2010/08/30/tell-it-to-your-teddy-bear/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/08/30/tell-it-to-your-teddy-bear/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 17:50:30 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Cooperation]]></category>
		<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[Failure]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Professionalism]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Solution]]></category>
		<category><![CDATA[Solve]]></category>
		<category><![CDATA[Success]]></category>
		<category><![CDATA[Teamwork]]></category>
		<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=353</guid>
		<description><![CDATA[When you're stuck, nothing like explaining your problem to someone else to bring the solution out of yourself. Other simple rules that you're sorry every time you break them.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=353&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After spending more time than I should have troubleshooting a coding (actually static code analysis) problem, I shared the story with a co-worker, who reminded me that Kernighan and Pike had been there before:</p>
<blockquote><p>Another effective technique is to explain your code to someone else.  This will often cause you to explain the bug to yourself.  Sometimes it takes no more than a few sentences, followed by an embarrassed &#8220;Never mind, I see what&#8217;s wrong.  Sorry to bother you.&#8221;  This works remarkably well; you can even use non-programmers as listeners.  One university computer center kept a teddy bear near the help desk.  Students with mysterious bugs were required to explain them to the bear before they could speak to a human counselor.</p>
<p><a href="http://books.google.com/books?id=to6M9_dbjosC&amp;pg=PA123&amp;lpg=PA123&amp;dq=tell+it+to+a+teddy+bear+kernighan&amp;source=bl&amp;ots=3YO0GlzZ4d&amp;sig=jZJJq_L8HYo4RXedY6NmA4mE4as&amp;hl=en&amp;ei=Eup7TJyMAoKuOKHWvbcM&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CBIQ6AEwAA#v=onepage&amp;q&amp;f=false">Brian Kernighan and Rob Pike, in </a><em><a href="http://books.google.com/books?id=to6M9_dbjosC&amp;pg=PA123&amp;lpg=PA123&amp;dq=tell+it+to+a+teddy+bear+kernighan&amp;source=bl&amp;ots=3YO0GlzZ4d&amp;sig=jZJJq_L8HYo4RXedY6NmA4mE4as&amp;hl=en&amp;ei=Eup7TJyMAoKuOKHWvbcM&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CBIQ6AEwAA#v=onepage&amp;q&amp;f=false">The Practice of Programming</a></em></p></blockquote>
<p>Seems that there are rules that we learn, then love to break, and are always sorry afterwards. Here&#8217;s how.</p>
<p><strong>My code doesn&#8217;t work</strong></p>
<ul>
<li>I&#8217;ll just try this change to see if that fixes everything. And then this change, and this other change.</li>
<li>I&#8217;ve been stuck for 10 minutes, but since nobody knows this code like I do, I won&#8217;t ask anyone for help.</li>
<li>I know I don&#8217;t understand what every line of code does, but it&#8217;s OK &#8212; I&#8217;ll figure out the problem anyway.</li>
<li>A complete build takes only a few minutes, so there&#8217;s no need to try a 3-line sample instead.</li>
<li>I&#8217;ve read the documentation and I&#8217;m sure I&#8217;ve understood it, so I won&#8217;t ask anyone for a second opinion.</li>
<li>I already asked someone 3 times for help and got it, so I can&#8217;t bother him or her a fourth time.</li>
<li>It doesn&#8217;t compile (cleanly, or at all) just now, but soon it will again if I just keep at it</li>
</ul>
<p>(The only way I got home today was that somehow I did realize it was, um, OK to call the tool support line.)</p>
<p>What are your favorite &#8221;justifications&#8221; for why it&#8217;s better to stay stuck than to get help, or at least take a break and share your problem with someone else?</p>
<p>While I&#8217;m waiting, I&#8217;ll go talk to my teddy bear.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/353/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=353&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/08/30/tell-it-to-your-teddy-bear/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Two Against the Code</title>
		<link>http://talkaboutquality.wordpress.com/2010/05/17/two-against-the-code/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/05/17/two-against-the-code/#comments</comments>
		<pubDate>Mon, 17 May 2010 07:59:49 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Clarity]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Cooperation]]></category>
		<category><![CDATA[Correction]]></category>
		<category><![CDATA[Effectiveness]]></category>
		<category><![CDATA[Excitement]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Professionalism]]></category>
		<category><![CDATA[Purpose]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Success]]></category>
		<category><![CDATA[Teamwork]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=341</guid>
		<description><![CDATA[Egoless programming is hard to achieve, and may not even be possible or desirable. Yet ego can get in the way of code review. Use this method to make the adversarial aspect of code review serve teamwork, and take an idea from assertive communication to generate nonthreatening code review comments.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=341&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the big human challenges to code review is ego. For all the talk about &#8220;egoless programming&#8221;, ego still means &#8220;self&#8221; and when a person writes code, or owns it for maintenance, s/he identifies with the code. That kind of &#8220;ego&#8221; or &#8220;self&#8221; thinking is what lets the code author work through problems by saying, &#8220;let&#8217;s see, when I receive this signal, I enter this loop and I calculate that value.&#8221; So how can code author and code reviewer(s) go into a code review, whether it be a meeting or online, and yet avoid criticism and defensiveness?</p>
<p>Here&#8217;s an image that can help: when code review participants enter the review, imagine everyone sitting on the same side of the table, with only the code on the other side. The code author is no longer the author or owner &#8212; just another reviewer. The two or more people in the room, or in the online review, form a team together to find as many things as possible in the code to improve. Now nobody needs to defend the code, because everyone is a reviewer. Still, though, if criticism is in the air, the real code author will feel it.</p>
<p>The desired result of a code review is a list of important things to improve. Comments which the code author can take back to the code and say, &#8220;I understand what I need to do to make this code better.&#8221; Take a concept from the topic of assertive communication: The &#8220;I&#8221; message. Best explained by an example:</p>
<blockquote><p>Let&#8217;s say I&#8217;m a busy, pressured group leader who has to lead meetings, and someone is always late for the group meetings &#8212; much later than everyone else . I decide to speak to that person. What can I say to him that will cause him to feel what I feel, and based on that, to join me in solving the problem? Not to feel criticized, and to become defensive. An &#8220;I&#8221; message would be:</p>
<p>&#8220;I&#8217;m under a lot of pressure when leading our weekly status meetings, and when I see you come in 20 minutes late to the meeting, it makes me more tense, and makes it hard for me to keep the meeting on track.&#8221;</p>
<p>The idea is that, while I have mentioned the person&#8217;s lateness, I have described only what <em>I</em> see, and described a problem that <em>I </em>have. All the focus is on me and my problem, which the group member may realize is his problem too, since he may benefit from a calmer group leader and a more effective meeting. Hopefully, he is drawn into solving my, or our, problem.</p></blockquote>
<p>Similarly with code review. Instead of a critical comment like, &#8220;this code is very confusing,&#8221; say, &#8220;when I read through this function &#8212; both the comments and the code &#8212; I get to the end and I still have no idea what it&#8217;s really supposed to do. If I had a change request on this code, I would not be able to confidently make the change.&#8221; Given that the code author probably does not have the same problem, this comment draws the author into saying, &#8220;I understand what the function is supposed to do, but apparently you don&#8217;t from reading the code. I&#8217;ll try to improve the comments or clarify the code so that you understand what I understand.&#8221;</p>
<p>Try this method in your code reviews to get everyone working together against the code, to improve the code.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/341/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=341&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/05/17/two-against-the-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>The Day they Broke the Lever</title>
		<link>http://talkaboutquality.wordpress.com/2010/02/13/the-day-they-broke-the-lever/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/02/13/the-day-they-broke-the-lever/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 20:27:02 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Clarity]]></category>
		<category><![CDATA[Embedded Software]]></category>
		<category><![CDATA[Exception handling]]></category>
		<category><![CDATA[Excitement]]></category>
		<category><![CDATA[Failure]]></category>
		<category><![CDATA[Prevention]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Recovery]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Technology and Society]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=326</guid>
		<description><![CDATA[The hubris and high expectations of embedded software as it tries to replace the lever.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=326&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We may never know all the details of the recent Toyota failures, because, unlike the Challenger and NASA, Toyota is a commercial entity rather than taxpayer-funded government. And <a href="http://www.ganssle.com/tem/tem189.htm">it&#8217;s a bit early to be looking for definitive analysis</a>. What we can do, as embedded software developers, is realize what we&#8217;re up against, and how it didn&#8217;t start yesterday.</p>
<p>When microprocessors first came out the buzz on the news was that soon they were going to be inside everything. I remember wondering what do we need them in everything for? My washer and my microwave oven, for example, worked just fine with a mechanical dial. But I was wrong and now they are in everything.</p>
<p>Much earlier on, complex systems were based on the <a href="http://www.mikids.com/Smachines.htm">Six Simple Machines</a>. I can&#8217;t say which is simplest, but maybe it&#8217;s the lever. What&#8217;s important here is that the behavior of the lever is governed by physical properties of solids, which by now are pretty well understood. Push down on one end, and the other end goes up. Exceptions exist: solids can stretch under tension, deform under pressure, and if you push too hard, they can break. Apparently Toyota had problems with this too, in their <a href="http://www.thetruthaboutcars.com/toyota-gas-pedal-fix-explained-with-exclusive-photos/">gas pedal problem and fix</a>.</p>
<p>Technical advances brought hydraulics &#8212; based on the properties of fluids and gases. I also remember replacing a brake line on an old car once, and getting to see how a leak in the line leads to spongy braking, and, if I hadn&#8217;t been refilling it weekly before the replacement, to brake failure.</p>
<p>In both of those technologies, the basic idea is that the system user (e.g. the driver) pushes on the control, force is transmitted immediately through a physical medium, and the desired effect occurs. Failure modes are well understood and (usually) are prevented.</p>
<p>Now replace the lever with software. No more physical properties: the behavior of the software transmission line is governed by the behavior of people &#8212; software developers writing lists of instructions which are translated several times before reaching the hardware. Now you push on the control, and a cacophony of instructions (okay, I&#8217;m being unfair &#8212; if the software is well-written, it&#8217;s a concert of instructions) rush down a wire to an actuating motor at the other end.</p>
<p>Let&#8217;s be clear about this: real-time software is a myth. The metal of the lever, or even the fluid of the hydraulic line, has been removed and replaced by your entire software development organization. Materials science out the door, organizational sociology in its place. If you want to know where that leaves us, read this short post about <a href="http://www.edn.com/blog/1690000169/post/630052463.html">drive-by-wire</a>, and the many comments there.</p>
<p>What&#8217;s the answer? In the code itself &#8212; perhaps it&#8217;s avoiding interrupts and multi-threading, and moving to synchronous programming where everything proceeds in lock-step. At least then a modern car would run like clockwork. Other than that, notice that many of the suggestions in <a href="http://www.edn.com/blog/1690000169/post/630052463.html">the discussion</a> talk about mechanical back-up systems, which are basically putting the lever back into the system.</p>
<p>But software development is not, as commonly believed, about technology. It is about writing, reading, and communication in ever-larger groups. Those who have said, &#8220;The pen is mightier than the sword&#8221; were thinking of politics. Now writing, in the form of software, interposes itself between every hand and hammer. We have broken the lever; do we know how to wield its replacement?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/326/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/326/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/326/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=326&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/02/13/the-day-they-broke-the-lever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Code Review for People</title>
		<link>http://talkaboutquality.wordpress.com/2010/02/11/code-review-for-people/</link>
		<comments>http://talkaboutquality.wordpress.com/2010/02/11/code-review-for-people/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 08:06:36 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Cooperation]]></category>
		<category><![CDATA[Correction]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Prevention]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Solution]]></category>
		<category><![CDATA[Solve]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=320</guid>
		<description><![CDATA[Code Review -- not a separate activity but rather an integral part of daily coding activities such as coding, learning new code, debugging, defect reporting etc. Each activity that includes code review contributes a different motivating question.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=320&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes I get the feeling that when people consider and talk about code review, they&#8217;re talking about different things but they don&#8217;t know it. I see code review everywhere during coding.</p>
<p>Try this: put aside the image of code review as a meeting, or even code review as an independent activity. Limit your description of code review to: someone else is reading your code, you&#8217;re discussing it together, and there&#8217;s effective writing as a result. If you see those three things happening, you&#8217;re seeing code review.</p>
<p><strong>Debugging</strong></p>
<p>The great hope was that code review would be solely a <em>preventive</em> activity: do code review <em>before</em> execution, and there won&#8217;t be anything to debug. That&#8217;s not going to happen. Too much code is delivered under pressure, without code review. But all is not lost. Just review the code when debugging. Look again at the three steps &#8212; how does code review, as defined above, change debugging? First, don&#8217;t debug alone. Whatever you may think of pair programming for or against, pair debugging is a must. Especially if you wrote the code, having someone else look for the problem, or better, restate the problem, is essential. Second &#8212; discussion. Debugging that rushes to a fix often produces the wrong fix. And finally, effective writing. Sure there&#8217;s the writing which is fixing the code. But what about adding comments? And perhaps more important and effective, especially if it&#8217;s a quick fix: submit a new defect or change request to your tracking system for what <em>really</em> needs changing to reduce the chance of this failure recurring.</p>
<p><strong>Static Analysis</strong></p>
<p>Tools! If I have tools that can find problems, I won&#8217;t have to review code. Yes, you will. And you should want to. Static Analysis tools are great for finding simple errors, and potential defects. For narrowing the field of focus. But then, to find out what&#8217;s really wrong &#8230; code review. Additional benefit of the tool &#8212; since it has no feelings, it can be two of you against the reviewer: read the code with a partner, discuss why the tool thinks there&#8217;s a problem and whether you agree, and again, effective writing. Not just the fix, but why that fix, and also perhaps an adjustment to the tool so it will do better next time. High-end static analysis systems let you document that right inside the tool.</p>
<p><strong>Testing</strong></p>
<p>Testing, and its partner, code coverage, are often seen as the opposite of code review. Whatever I couldn&#8217;t catch by code review (and static analysis) is left for exercising the code under controlled conditions, causing failures, and fixing them. Actually code review is the most important part of developer testing. Not only reviewing the code under test in order to design good white-box tests. But also reviewing the code based on the test results and coverage results. Why does the software <em>intermittently</em> fail this test? Why is it so difficult to cover all the branches in this function? Again, read together, discuss, write. Here the effective writing is likely to be refactoring the code. If someone wants code review &#8220;documentation&#8221; &#8212; give them a diff and a one-sentence explanation of what you did and why.</p>
<p><strong>Code Review is All-Purpose</strong></p>
<p>There are many more activities in the developer&#8217;s daily life. Detailed design, branching and merging, delivery &#8212; all can benefit from in-line code review with this three-step model of reading, discussion, and effective results-writing. And by acknowledging this model, we see that code review, or almost code review, is happening all the time. Just have to complete the steps to get code review that real people will do.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=320&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2010/02/11/code-review-for-people/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>Software Comes of Age</title>
		<link>http://talkaboutquality.wordpress.com/2009/12/29/software-comes-of-age/</link>
		<comments>http://talkaboutquality.wordpress.com/2009/12/29/software-comes-of-age/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 16:38:56 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Children]]></category>
		<category><![CDATA[Coding & Debugging]]></category>
		<category><![CDATA[Embedded Software]]></category>
		<category><![CDATA[Excitement]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Parenting]]></category>
		<category><![CDATA[Professionalism]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=316</guid>
		<description><![CDATA[When software development has these kind of popular books written about it, it has become a mature, if still young field. Onward to the next age!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=316&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When software development has a Lives of the Greats book, a textbook that reads like a prime-time mystery series, and even a children&#8217;s picture book, we have finally come of age. Here are the books, and my reviews. Happy reading, and onward to the next age!</p>
<ul>
<li><em><a href="http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/1430219483">Coders at Work</a></em>, by Peter Seibel (<a href="http://www.amazon.com/review/R2TD83AD5MXLXK/ref=cm_cr_rdp_perm">review </a>by talkaboutquality)</li>
<li><em><a href="http://www.amazon.com/Only-Changed-Software-Phone-Fire/dp/0750682183">If I Only Changed the Software, Why is the Phone on Fire?</a></em> by Lisa K. Simone (<a href="http://www.amazon.com/review/RAZDPZRYXIPGC/ref=cm_cr_rdp_perm">review</a> by talkaboutquality)</li>
<li><em><a href="http://www.amazon.com/I-am-Bug-Robert-Sabourin/dp/0968577407">I am a Bug</a></em>, by Robert Sabourin (<a href="http://www.amazon.com/review/R2UKPPAR63IGIE/ref=cm_cr_rdp_perm">review</a> by talkaboutquality)</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/316/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=316&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2009/12/29/software-comes-of-age/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
		<item>
		<title>What&#8217;s the difference?</title>
		<link>http://talkaboutquality.wordpress.com/2009/11/17/whats-the-difference/</link>
		<comments>http://talkaboutquality.wordpress.com/2009/11/17/whats-the-difference/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 09:01:56 +0000</pubDate>
		<dc:creator>Tom Harris</dc:creator>
				<category><![CDATA[Clarity]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Prevention]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://talkaboutquality.wordpress.com/?p=308</guid>
		<description><![CDATA[Many arguments about what code review is, and what tools and methods to use, can be resolved by accepting that there are different goals for different kinds of code reviews. Two common, but different, goals are (1) protecting the codebase against bad changes, and (2) ensuring low maintenance cost. Use different tools and methods for each.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=308&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What kind of tool is required for code review? What are we trying to accomplish? How much of the code must be reviewed at a time, and why? These are some of the questions that we get caught up in, that prevent us from deploying effective code review in a development organization. One way to cut through the arguments and move forward is to realize that there are different types of code review, with different goals. Here are some parameters of two major, but different types:</p>
<p><strong>Code Review type 1</strong></p>
<p>Key question: Does this <em>change</em> <em>accomplish</em> what it was supposed to, while doing no damage?<br />
Desired code author response to comments: Revise changes<br />
Under review: changed files with diff<br />
Tool: diff comparer<br />
Required feature as a code review tool: right-click submit comment<br />
Nice-to-have features (but could be in a separate app): right-click definitions</p>
<p><strong>Code Review type 2</strong></p>
<p>Key Question: Is this <em>code designed</em> well, so that it is easy to fix and extend?<br />
Desired code author response to comments: Refactoring / renaming<br />
Under review: any subset of entire codebase, starting from a given area of the code<br />
Tool: source code browser<br />
Required feature as a code review tool: right-click submit comment<br />
Nice-to-have features (but could be in a separate app): code editing</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/talkaboutquality.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/talkaboutquality.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/talkaboutquality.wordpress.com/308/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=talkaboutquality.wordpress.com&amp;blog=215543&amp;post=308&amp;subd=talkaboutquality&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://talkaboutquality.wordpress.com/2009/11/17/whats-the-difference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3aaeaf7d29d09e618c63bd80491d3cc5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tom</media:title>
		</media:content>
	</item>
	</channel>
</rss>
