<?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>The thinking box</title>
	<atom:link href="http://thinkingbox.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkingbox.wordpress.com</link>
	<description>The thinking box is mumbling...</description>
	<lastBuildDate>Sat, 07 Jan 2012 15:15:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thinkingbox.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The thinking box</title>
		<link>http://thinkingbox.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thinkingbox.wordpress.com/osd.xml" title="The thinking box" />
	<atom:link rel='hub' href='http://thinkingbox.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Information dissonance and TDD</title>
		<link>http://thinkingbox.wordpress.com/2011/10/11/information-dissonance-and-tdd/</link>
		<comments>http://thinkingbox.wordpress.com/2011/10/11/information-dissonance-and-tdd/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 06:00:37 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[XP]]></category>
		<category><![CDATA[anti-rant]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=204</guid>
		<description><![CDATA[A colleague from Italy asked me for my opinion about this piece from TechCrunch, You’ve Got To Admit It’s Getting Better. This is a post related to the now infamous rant from Ryan Dahl of Node.js fame about the status of software in general, and how different layers of code and components integrate in particular. Rather [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=204&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A colleague from Italy asked me for my opinion about this piece from TechCrunch, <a title="You’ve Got To Admit It’s Getting Better @ TechCrunch" href="http://techcrunch.com/2011/10/08/you-must-admit/" target="_blank">You’ve Got To Admit It’s Getting Better</a>. This is a post related to the now <a title="Ryan Dahl @ Google +" href="https://plus.google.com/115094562986465477143/posts/Di6RwCNKCrf" target="_blank">infamous rant from Ryan Dahl</a> of Node.js fame about the status of software in general, and how different layers of code and components integrate in particular. Rather than an harmonious dance of well balanced and fine tuned libraries, Dahl is right to point out that quite often we work with layers and layers of complexity and <a title="The Law of Leaky Abstractions" href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html" target="_blank">leaky abstractions</a> which end to expose, most of all, an annoying dissonant impedance mismatch. While I partly agree with Dahl, I have to admit that also Jon Evans of TechCrunch has a valid point: it&#8217;s getting better, not enough probably, but better.</p>
<p>What has caught my attention more is something else though. I&#8217;m pretty sure that my friend asked me about this because of some <em>unkind</em> words for TDD. So let me get the record straight:</p>
<ul>
<li>First of all, it&#8217;s just wrong to say that TDD is &#8220;the notion that a development team’s automated tests are even more important than the actual software they write, and should be written first&#8221; (Jon Evans himself) =&gt; no TDD practitioner in his right mind would describe TDD in that way. In particular, nobody would consider the tests more important than the actual software. So, yes, we <em>TDDers</em> think that testing is important, because for us testing is first of all a <strong>design</strong> technique and tests are a nice byproduct of this technique, one that allows you to <strong>evolve</strong> your code without breaking existing behaviour in an uncontrolled way. But none of us would try to say that tests are more important, please! If you write about something that is clearly not your forte, at the very least you should not make such a gross mistake.</li>
<li>I don&#8217;t know where I&#8217;ve lived in the last 10 years, but TDD has never &#8220;seemed almost sacrosanct&#8221; (Jon Evans again). I&#8217;d argue that still only a minority of developers actually test their code in these days. TDD practitioners then are a minority of a minority. So, please, spare me the drama about the industry changing its mind about TDD.</li>
<li>With regards to the two linked posts, I have to confess that I have no idea who are the authors. That doesn&#8217;t necessarily mean anything <em>per se</em>, just that I don&#8217;t have any prejudice about the authors. I&#8217;ve never read anything from them before.</li>
<ul>
<li><a title="Testing considered evil @ unprotocols.org" href="http://unprotocols.org/blog:17" target="_blank">Pieter Hintjens</a> seems to recommend that rather than testing your code, you should throw it out in the open and have people (users) testing it for you. It seems that his main argument is that, even if you think you know how to test your code, you don&#8217;t know if your code is valid in the hands of users. Apart from the fact that it doesn&#8217;t seem a very professional approach, this is mostly nonsense to me: testing and validation are two different things. Sure, you need your software to do something useful for your users, otherwise it can be correct but it would be of no purpose at all. So, assuming that your software solves the right problem, how do you know that it solves it correctly? Testing to the rescue. In the end the author even admits that he uses TDD for his APIs&#8230;<br />
Having said that, remember that TDD is first of all about design and evolution. So I think that this point is totally wrong.</li>
<li><a title="Test-Driven Development? Give me a break... @ Write More Tests" href="http://www.writemoretests.com/2011/09/test-driven-development-give-me-break.html" target="_blank">Peter Sargeant</a> rants about dogmas and <em>Agile Testing Experts</em> recommending to always write your tests first. The term &#8220;Agile Testing Expert&#8221; is funny enough already: there are no such people, there is no <em>agile testing</em>, thank God at least there is one aspect of XP that the Agile crowd has not been able to jeopardize with their <em>brand </em>(oh, they tried, but they also failed miserably &#8211; some people cover TDD, BDD, ATDD and other practices together under the umbrella of Agile Testing, but it seems quite fictitious to me and it has never been accepted in the community in that way). So, if you talk about Agile Testing Experts I&#8217;m already suspicious. Once again, this post seems to miss the point of TDD: it&#8217;s about design and evolution, testing is a collateral, an important one but still a collateral. Do I always write my code following TDD? No, I don&#8217;t. I rarely use TDD if I&#8217;m spiking or prototyping. I never use TDD for one off pieces of code that won&#8217;t survive to see the light of a new day. I very rarely use TDD for pure UI code, especially when it&#8217;s about HTML and views and layout and CSS&#8230; (you get what I mean I guess). And I never use TDD when I don&#8217;t know what I&#8217;m doing, when I&#8217;m exploring.<br />
Anyway, Peter Sargeant&#8217;s blog is in the end about promoting testing automation, so his rant is more about breaking away from dogmas and using your head to judge when to use a tool, so it doesn&#8217;t seem to me to be such a big deal.</li>
</ul>
</ul>
<p>In conclusion, yes, things may get a little better and no, I don&#8217;t think that there is a whole movement against <em>mainstreamed</em> (!!) TDD in the software industry.</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/anti-rant/'>anti-rant</a>, <a href='http://thinkingbox.wordpress.com/tag/tdd/'>TDD</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/204/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=204&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2011/10/11/information-dissonance-and-tdd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>
	</item>
		<item>
		<title>Craftsmanship is not art and we care like craftsmen do</title>
		<link>http://thinkingbox.wordpress.com/2011/01/12/craftsmanship-is-not-art-and-we-care-like-craftsmen-do/</link>
		<comments>http://thinkingbox.wordpress.com/2011/01/12/craftsmanship-is-not-art-and-we-care-like-craftsmen-do/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 20:35:57 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[book]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[care]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[passion]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=196</guid>
		<description><![CDATA[I&#8217;ve read Dan North post Programming is not a craft and I have to say that I have mixed feelings about it. I&#8217;ve always been against recognizing beauty in software in general and in code in particular. I don&#8217;t think that coding is an art and I don&#8217;t think that any programmer can be characterized [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=196&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignnone" style="width: 458px"><a href="http://www.flickr.com/photos/44136594@N00/4754000/"><img class="    " title="Drawers to Heaven" src="http://farm1.static.flickr.com/5/4754000_6b2c17bdb1_z.jpg?zz=1" alt="Drawers to Heaven" width="448" height="336" /></a><p class="wp-caption-text">Some rights reserved, by Felix E. Guerrero</p></div>
<p>I&#8217;ve read Dan North post <a title="Programming is not a craft, by Dan North" href="http://dannorth.net/2011/01/11/programming-is-not-a-craft/" target="_blank">Programming is not a craft</a> and I have to say that I have mixed feelings about it.</p>
<p>I&#8217;ve always been against recognizing beauty in software in general and in code in particular. I don&#8217;t think that coding is an art and I don&#8217;t think that any programmer can be characterized as an artist. Code has no aim beyond solving a problem and providing some utility to a user (where a user can be another system, an organization, etc., not necessarily the end user alone). Good code is code that solves a problem AND it&#8217;s easy to change, highly cohesive and decoupled, without duplications, etc. Bad code is code that doesn&#8217;t express those qualities. So it would be a stretch to talk about good code in terms of beauty, IMO.</p>
<p>And I agree with a lot more from that post. For example, I like and agree with the analogy of the samurai. And I do actually believe that: &#8220;It takes a real expert – a real craftsman – to see the elegant simplicity buried away inside the mess we call enterprise software, for instance, and tease it out.&#8221;</p>
<p>Having said that, I also disagree with his characterization of craftsmanship, especially in artistic terms. I think that our work, the way I see it, the way I do it every day, has a lot in common with what master craftsmen used to do in Italy during the Renaissance. And a lot of it clearly wasn&#8217;t art at all, it&#8217;s just good work well done.</p>
<p>Back in 2002, I had a lot of troubles trying to communicate to friends and family my passion about writing code. Passion is not even the right word, &#8220;care&#8221; is more appropriate. I do care a lot about the code that gets written. And for me, the idea that code must solve a problem, is a given. Speculative coding is like <em>onanism</em>: you get tired of it very soon. So, taking for granted that code <strong>must</strong> solve a problem, why do I care about how the problem is solved?</p>
<p>Literature to the rescue. In that period I was reading a book from <a rel="nofollow" href="http://en.wikipedia.org/wiki/Erri_De_Luca">Erri De Luca</a>, callend <em>Montedidio</em> (by the way, it has been translated in <a rel="nofollow" href="http://www.amazon.com/Gods-Mountain-Erri-Luca/dp/1573229601">English</a>, I recommend it). A passage just drilled in my brain:</p>
<blockquote><p>Mast&#8217;Errico mi ha messo a stendere il turapori e a carteggiare. Alliscio le ante di un armadio per vestiti. [...] Oggi ha provato la chiusura della prima anta e quella ha combaciato così bene che ha fatto il rumore del soffio, l&#8217;aria se n&#8217;è scappata da dentro. Mi ha fatto mettere la faccia vicina al battente, ho sentito una carezza d&#8217;aria. [...] Poi mast&#8217;Errico l&#8217;ha smontato e l&#8217;ha coperto, è un&#8217;opera importante, aggiusta tutta un&#8217;annata. I cassetti sono di faggio, gli incastri a coda di rondine, una soddisfazione vederglieli uscire da sotto le mani. Controlla gli squadri molte volte, ingrassa le guide, sfila e riinfila i cassetti senza rumore, come la lenza in mare, dice, che sale e scende muta in mano a lui. Mast&#8217;Errì, dico, siete un fenomeno, un ebanista pescatore.</p></blockquote>
<p>A rough translation in English would be:</p>
<blockquote><p>Mast&#8217;Errico put me to spread the filler and sanding. I smooth the doors of a wardrobe. [...] Today, he tried closing the first door and it matched so well that it made the sound of the breath, the air has escaped from inside. It made me put my face close to the door, I felt a caress of air. [...] Mast&#8217;Errico then has dismounted it and covered it, it is an important work, it fits an entire year within. The drawers are made of beech, the joints are shaped like dovetails, such a pleasure watching him crafting them with his hands. He checks out the alignments many times, he greases the rails, and he pulls the drawers back and forth without noise, as the line at sea, he said, rising and falling silent in his hand. Mast&#8217;Errì, I say, you&#8217;re a phenomenon, a cabinetmaker fisherman.</p></blockquote>
<p>So, this is my take at software craftsmanship almost 9 years ago, recorded in a <a rel="nofollow" href="http://it.groups.yahoo.com/group/extremeprogramming-it/message/517">message</a> to the Italian XP mailing list on 12/3/2002, years before anybody even started talking about it. <img src="https://exdocsconf.tzo.com/images/icons/emoticons/smile.gif" border="0" alt="" width="20" height="20" align="absmiddle" /><br />
My message back then ended with the following:</p>
<blockquote><p>A software engineer is a postmodern version of a craftsman. The death of a craftsman can be violent (due to lack of competence, negligence) or because of starvation (overengineering, gold plating). When a technique is overcome a skilled craftsman must reinvent itself or die.</p></blockquote>
<p>PS: I&#8217;ve stopped trying to explain to people my work. In a social context I typically say: &#8220;I work with computers&#8221;. If I&#8217;m really in a good mood I may even say: &#8220;I write software&#8221;. That&#8217;s it. I get less frustrated this way. <img src="https://exdocsconf.tzo.com/images/icons/emoticons/smile.gif" border="0" alt="" width="20" height="20" align="absmiddle" /></p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/book/'>book</a>, <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/agile/'>agile</a>, <a href='http://thinkingbox.wordpress.com/tag/art/'>art</a>, <a href='http://thinkingbox.wordpress.com/tag/care/'>care</a>, <a href='http://thinkingbox.wordpress.com/tag/craftsmanship/'>craftsmanship</a>, <a href='http://thinkingbox.wordpress.com/tag/passion/'>passion</a>, <a href='http://thinkingbox.wordpress.com/tag/software/'>software</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=196&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2011/01/12/craftsmanship-is-not-art-and-we-care-like-craftsmen-do/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/5/4754000_6b2c17bdb1_z.jpg?zz=1" medium="image">
			<media:title type="html">Drawers to Heaven</media:title>
		</media:content>

		<media:content url="https://exdocsconf.tzo.com/images/icons/emoticons/smile.gif" medium="image" />

		<media:content url="https://exdocsconf.tzo.com/images/icons/emoticons/smile.gif" medium="image" />
	</item>
		<item>
		<title>The Technical Debt Trap  at Agile Tour Toronto 2010</title>
		<link>http://thinkingbox.wordpress.com/2010/11/22/the-technical-debt-trap-at-agile-tour-toronto-2010/</link>
		<comments>http://thinkingbox.wordpress.com/2010/11/22/the-technical-debt-trap-at-agile-tour-toronto-2010/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 12:42:22 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[events]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile tour]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[technical debt]]></category>
		<category><![CDATA[toronto]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=186</guid>
		<description><![CDATA[After Fowler&#8217;s keynotes, this is the best session that I have attended. The main reason is that its speaker, Michael Norton, was very good: sharp, clear, concise, as a speaker should be. The presentation was focused on the concept of Technical Debt, conceived by Ward Cunningham back in &#8217;92 and touched by Fowler as well in his third [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=186&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p>After Fowler&#8217;s keynotes, this is the best session that I have attended. The main reason is that its speaker, <a title="DocOnDev" href="http://www.docondev.com/" target="_blank">Michael Norton</a>, was very good: sharp, clear, concise, as a speaker should be.</p>
<p>The presentation was focused on the concept of <a rel="nofollow" href="http://www.youtube.com/watch?v=pqeJFYwnkjE">Technical Debt</a>, conceived by Ward Cunningham back in &#8217;92 and touched by Fowler as well in his <a title="Fowler's keynotes at Agile Tour Toronto 2010 (with mind maps!)" href="http://thinkingbox.wordpress.com/2010/11/18/fowlers-keynotes-at-agile-tour-toronto-2010-with-mind-maps/" target="_blank">third part keynote</a>.</p>
<p>Norton&#8217;s intents are to clarify what the metaphor means and which is the proper way to use it. The point is that it&#8217;s ok to cut corners in the short timeframe to gain an opportunity (for example, for a demo), but things have to be fixed up properly as soon as possible immediately afterwards. The power of the metaphor lies primarily in the concept of <strong>debt</strong> and the need of repaying it:</p>
<ul>
<li>Every corner that you cut for a specific purpose, for example in terms of code that you know should be done in a different, better way, is debt</li>
<li>All the debt adds up very quickly and it slows you down</li>
<li>If you don&#8217;t fix that code potentially you&#8217;ll end up in a situation where development slows down to a halt and the system needs to be rebuilt from scratch</li>
</ul>
<p>We should always remember, however, that this is just a metaphor and we can&#8217;t stretch it beyond its intended use. It&#8217;s indeed a way to think about our own work, it doesn&#8217;t magically replace our work with its own laws because we are leaving in a delusion. Norton uses the term <em>metaphorphosis</em> for this kind of phenomenon. In Cunnigham words:</p>
<ul>
<li>&#8220;[Many] have explained the debt metaphor and <strong>confused it with the idea that you could write code poorly</strong> with the intention of doing a good job later.&#8221;</li>
<li>&#8220;The ability to pay back debt [...] depends upon you writing code that is <strong>clean enough to be able to refactor</strong> as you come to understand your problem.&#8221;</li>
<li>&#8220;<strong>Dirty code is to technical debt as the pawn broker is to financial debt.</strong> Don&#8217;t think you are ever going to get your code back.&#8221;</li>
</ul>
<p>Hence, the important things to remember are:</p>
<ol>
<li>Debt is bad =&gt; if you can get away without it, just do it</li>
<li>Tech debt is a strategic tool =&gt; use it under specific circumstances (eg: I need to change this thing and deploy it in an hour, I&#8217;ll refactor it right after the deployment), not as an excuse to do sloppy work
<ul>
<li>Remember Fowler =&gt; only the quadrant Deliberate/Prudent is acceptable and only for very short timeframes</li>
</ul>
</li>
<li>I&#8217;d say that 99.99% of your daily work should be debt free</li>
<li>Unintentional dirty code, missing tests, bad choices will happen anyway, that&#8217;s why Norton called it <strong>cruft</strong> =&gt; it&#8217;s physiological, but it&#8217;s not technical debt
<ul>
<li>In my team, for example, we do code reviews also to catch that</li>
<li>Intentional cruft is always a bad choice, something that you need to avoid and that when done shows a lack of professionalism</li>
</ul>
</li>
<li>You have to deal with cruft every day/hour/minute, don&#8217;t let it accumulate, because big incremental fixes don&#8217;t work =&gt; the complexity keeps growing up at the same rate</li>
<li>Clean constantly &amp; follow the <a rel="nofollow" href="http://www.informit.com/articles/article.aspx?p=1235624&amp;seqNum=6">Boy Scout Rule</a>: <em>Leave the campground cleaner than you found it</em> (of course campground=code)</li>
<li>Monitor your tech debt, also by means of metrics like test coverage, procedural complexity (aka <a rel="nofollow" href="http://en.wikipedia.org/wiki/Cyclomatic_complexity">cyclomatic complexity, McCabe number</a>) and <a rel="nofollow" href="http://en.wikipedia.org/wiki/Cohesion_(computer_science)">cohesion</a>/<a rel="nofollow" href="http://en.wikipedia.org/wiki/Coupling_(computer_science)">coupling</a></li>
</ol>
<p>I&#8217;m not a huge fan of slideshare &amp; viewing slides without attending a presentation, but FWIW Norton has uploaded <a rel="nofollow" href="http://www.slideshare.net/DocOnDev/the-technical-debt-trap">his slides</a> and they are actually good/helpful. As usual, here you can find my mind map as well.</p>
<div id="attachment_189" class="wp-caption aligncenter" style="width: 460px"><a href="http://thinkingbox.files.wordpress.com/2010/11/norton-pnf.png"><img class="size-full wp-image-189" title="Mind map of Norton's presentation" src="http://thinkingbox.files.wordpress.com/2010/11/norton-pnf.png?w=450&#038;h=296" alt="Mind map of Norton's presentation" width="450" height="296" /></a><p class="wp-caption-text">This is the mind map that I have taken live during Norton&#039;s presentation</p></div>
</div>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/events/'>events</a>, <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/2010/'>2010</a>, <a href='http://thinkingbox.wordpress.com/tag/agile/'>agile</a>, <a href='http://thinkingbox.wordpress.com/tag/agile-tour/'>agile tour</a>, <a href='http://thinkingbox.wordpress.com/tag/design/'>design</a>, <a href='http://thinkingbox.wordpress.com/tag/refactoring/'>refactoring</a>, <a href='http://thinkingbox.wordpress.com/tag/technical-debt/'>technical debt</a>, <a href='http://thinkingbox.wordpress.com/tag/toronto/'>toronto</a>, <a href='http://thinkingbox.wordpress.com/tag/xp/'>XP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=186&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/11/22/the-technical-debt-trap-at-agile-tour-toronto-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/norton-pnf.png" medium="image">
			<media:title type="html">Mind map of Norton&#039;s presentation</media:title>
		</media:content>
	</item>
		<item>
		<title>Fowler&#8217;s keynotes at Agile Tour Toronto 2010 (with mind maps!)</title>
		<link>http://thinkingbox.wordpress.com/2010/11/18/fowlers-keynotes-at-agile-tour-toronto-2010-with-mind-maps/</link>
		<comments>http://thinkingbox.wordpress.com/2010/11/18/fowlers-keynotes-at-agile-tour-toronto-2010-with-mind-maps/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 13:02:06 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[adaptive planning]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile tour]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[continuous planning]]></category>
		<category><![CDATA[deming]]></category>
		<category><![CDATA[drucker]]></category>
		<category><![CDATA[external quality]]></category>
		<category><![CDATA[feature branching]]></category>
		<category><![CDATA[fowler]]></category>
		<category><![CDATA[internal quality]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[people]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[release early and often]]></category>
		<category><![CDATA[self adaptivity]]></category>
		<category><![CDATA[semantic diffusion]]></category>
		<category><![CDATA[taylor]]></category>
		<category><![CDATA[technical debt]]></category>
		<category><![CDATA[toronto]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=166</guid>
		<description><![CDATA[On October 20th I attended the AgileTour Toronto 2010 conference with a colleague. Well, calling it &#8220;conference&#8221; is a bit generous but I&#8217;m not unhappy about it. It was warm and cozy. I&#8217;ll explain more in details in some other posts. For me, the big highlight of the day was Martin Fowler&#8216;s keynote. Let me rephrase: Fowler gave 3 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=166&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On October 20th I attended the <a rel="nofollow" href="http://www.torontoagilecommunity.org/at2010/">AgileTour Toronto 2010</a> conference with a colleague. Well, calling it &#8220;conference&#8221; is a bit generous but I&#8217;m not unhappy about it. It was warm and cozy. I&#8217;ll explain more in details in some other posts.</p>
<p>For me, the big highlight of the day was <a rel="nofollow" href="http://martinfowler.com/">Martin Fowler</a>&#8216;s keynote. Let me rephrase: Fowler gave 3 keynotes in one, which is nice because it&#8217;s not too boring and it flows smoothly.</p>
<h2 style="text-align:left;"><span style="color:#000000;">The essence of Agile</span></h2>
<p>In the first keynote Fowler wanted to clarify his view on Agile, talking about its essence. His motivation was to steer clear of a phenomenon that he calls <a rel="nofollow" href="http://www.martinfowler.com/bliki/SemanticDiffusion.html">Semantic Diffusion</a>: when you start being successful at innovating and modulating a message, people try to copy you without deeply understanding what you&#8217;re doing, just by mimicking your work and distorting your ideas badly. There&#8217;s not a lot that we can do about it, with the exception of reminding people about the core principles at the root of what we are doing.</p>
<p>So he wanted to characterize Agile first of all by difference, talking about traditional <em>plan driven</em> methods. In a plan driven method, success is achieved when you do something according to the plan. This is not absolutely impossible per se, but it requires at the very least that the requirements are stable. The bad news is that outside of very limited and insignificant niches, there is <strong>NO</strong> such thing (and we all know it very well).</p>
<p>So Agile methods are characterized by <strong>adaptive planning</strong>, which means <strong>continuous planning</strong> and <strong>release early and often</strong>. These qualities together constitute an <em>evolutionary design</em> approach, which I&#8217;d prefer to define differently and at the software design level in terms of <strong>responsive design</strong>, but that&#8217;s fine, I can take this.</p>
<p>Fowler also briefly mentioned a quote from the <a rel="nofollow" href="http://www.poppendieck.com/compromise.htm">Poppendiecks</a>, which sounds more or less like this: <em>being able to deal with a lot of changes in requirements is a competitive advantage</em>. This is a fairly powerful tool in your hands, so use it wisely.</p>
<p>Another fundamental quality of Agile is its focus on <strong>people</strong>. We all know that after the industrial revolution the way we intend work has been shaped too much and for too long by <a rel="nofollow" href="http://en.wikipedia.org/wiki/Frederick_Winslow_Taylor">Taylor</a> and his stopwatch, the so-called <em>system process</em>. This has greatly slowed down the evolution of <em>knowledge work</em> and it has taken a long time and great minds like <a rel="nofollow" href="http://en.wikipedia.org/wiki/W._Edwards_Deming">Deming</a> and <a rel="nofollow" href="http://en.wikipedia.org/wiki/Peter_Drucker">Drucker</a> to correct these problems and show a different path. As Deming said, &#8220;A bad process would beat a good person every time&#8221;. So Agile methods are characterized by putting that good person at the core of the method and allow her/him to shine and do great things, rather than suffocating her/him with bureaucracy.</p>
<p>Because of this, Agile methods need to be adapted to the specificities of the people and their organization, while maintaining the other characteristics mentioned above (while this is fundamental, it is also another contributor to Semantic Diffusion, but again we can&#8217;t do much about it). So, Agile methods are characterized by <strong>self adaptivity</strong>. As Kent Beck says, &#8220;In software development, &#8220;perfect&#8221; is a verb, not an adjective&#8221;. This means that the process is never static, but it is continuously verified and improved, always striving for perfection (but of course never achieving it fully).</p>
<div id="attachment_167" class="wp-caption aligncenter" style="width: 460px"><a href="http://thinkingbox.files.wordpress.com/2010/11/fowler1.jpg"><img class="size-full wp-image-167" title="Mind map of first Fowler's keynote" src="http://thinkingbox.files.wordpress.com/2010/11/fowler1.jpg?w=450&#038;h=315" alt="Mind map of first Fowler's keynote" width="450" height="315" /></a><p class="wp-caption-text">This is the mind map that I have taken live during first Fowler&#039;s keynote</p></div>
<h2>Continuous integration &amp; delivery</h2>
<p>In the second keynote Fowler focused on continually adding value to a system.</p>
<p>He started by describing an experience so common if you have developed software for a living in the previous millennium: if you have worked in an environment that doesn&#8217;t adopt continuous integration then you know that a project can be easily doomed, staying in <em>integration mode</em> for a very long time.</p>
<p>The idea is simple:</p>
<ul>
<li>Individual developers work on their own code, that is they develop feature independently</li>
<li>Towards the end of the project they put everything together and of course nothing works</li>
</ul>
<p>The metaphor is having 2 teams digging a tunnel into a mountain from 2 opposite sides and failing to meet in the middle. I actually have seen something like this happening in big construction work in Italy. It&#8217;s scary.</p>
<p>Even when versioning systems became popular, people tended to do <a rel="nofollow" href="http://martinfowler.com/bliki/FeatureBranch.html">feature branching</a> more than anything else:</p>
<ul>
<li>Every developer has his/her own branch, defined for the feature that he/she is developing</li>
<li>Because integration is difficult and painful integrate less often</li>
<li>Because integration happens less and less, when it actually happens is more difficult and painful</li>
</ul>
<p>This brings to what Fowler calls <strong>big scary merges</strong>, where you merge together a lot of files, even through sophisticated tools that do that automatically for you and from a text perspective the code seems good, but what about the semantics? You need tests to tell you whether the merge was good or not. And you have a lot of red bars for a very long time, because no tool can automate a slight change in the semantics of the protocol between two classes, for example.</p>
<p>The amount of pain that a team gets grows exponentially with the amount of time that incurs between integrations. I mean, more pain = more time &amp; more bugs = more costs &amp; fewer opportunities to generate revenues.</p>
<p>In the Agile world, typically when something hurts you wanna do it more often. What does this mean? It means that when something is problematic, we want to make it simpler, less expensive, so rather than hiding our head in the sand and try to procrastinate the pain as much as possible, we prefer to tackle it right away and make it better before it&#8217;s too late.</p>
<p>So, we want to do <strong>continuous integration</strong> many times a day, which is exactly what happens at my main gig (my beautiful day job) and in many other companies. I&#8217;d say that continuous integration has become more or less mainstream these days, which is good. For example, yesterday we have integrated our code something like 30 times. Integrating means compiling, building all the artifacts, running various kind of checks and thousands of tests. All this is entirely automated.</p>
<p>A bad consequence of feature branching, by the way, is that it encourages avoiding code/design improvement (because it&#8217;s painful). So the code quietly rots, day after day, to the point where it becomes a big steaming pile of <em>PUT HERE YOUR FAVOURITE EXPRESSION</em>. Been there, done that, never want to do it anymore in my life.</p>
<p>En passant, Fowler recommended <a rel="nofollow" href="http://www.amazon.com/Continuous-Integration-Improving-Software-Reducing/dp/0321336380/ref=sr_1_5?ie=UTF8&amp;qid=1288298965&amp;sr=8-5">Paul Duvall book on continuous integration</a>.</p>
<p>Towards the end of this part Fowler spoke about <a rel="nofollow" href="https://espressocode.onconfluence.com/display/EspressoCode/2009/02/26/Continuous+deployment">continuous delivery</a>, which is a big topic. For the non technical people out there the basic idea is to stretch continuous integration into the actual deployment. How can you do that? By building a pipeline of machines where:</p>
<ul>
<li>The code is automatically compiled and unit tested =&gt; this should take less than 10&#8242;</li>
<li>Artifacts are generated into a repository</li>
<li>Artifacts are taken and deployed in a different environment where all functional/acceptance tests are executed in a timeframe that can be measured in hours for complicated systems</li>
<li>The next stage is typically the one where performance tests are executed to ensure that the system is still executing in an acceptable way and again it can take hours, even more than the previous stage</li>
<li>If everything is fine the code can be automatically deployed in production in a controlled way, where you do smoke tests to see that nothing is horribly broken</li>
</ul>
<p>Fowler emphasized that while the last step can be typically controlled manually, and it may vary a lot from org to org (eg: you can&#8217;t do it automatically if you have to ask for permission to a committee in a bureaucratic organization), the infrastructure should be in place to do it automatically, with a simple click of a button. As Fowler said: &#8220;There should be no technical reasons impeding an automated deployment, while it&#8217;s perfectly reasonable that there are business reasons to batch many commits in a single deployment controlled manually&#8221;.</p>
<p>Of course Fowler recommended <a rel="nofollow" href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912/ref=ntt_at_ep_dpi_1">Jez Humble book</a>.</p>
<div id="attachment_174" class="wp-caption aligncenter" style="width: 460px"><a href="http://thinkingbox.files.wordpress.com/2010/11/fowler2.jpg"><img class="size-full wp-image-174" title="Mind map of second Fowler's keynote" src="http://thinkingbox.files.wordpress.com/2010/11/fowler2.jpg?w=450&#038;h=300" alt="Mind map of second Fowler's keynote" width="450" height="300" /></a><p class="wp-caption-text">This is the mind map that I have taken live during second Fowler&#039;s keynote</p></div>
<div id="attachment_175" class="wp-caption aligncenter" style="width: 460px"><a href="http://thinkingbox.files.wordpress.com/2010/11/fowler2a.jpg"><img class="size-full wp-image-175" title="Continuous delivery pipeline" src="http://thinkingbox.files.wordpress.com/2010/11/fowler2a.jpg?w=450&#038;h=300" alt="Continuous delivery pipeline" width="450" height="300" /></a><p class="wp-caption-text">A sketch of continuous delivery pipeline depicted by Fowler</p></div>
<h2>Effort, quality and feature development</h2>
<p>This third part can be summarized with the following quote: <em>We need to put less effort on quality to put more effort on feature development</em></p>
<p>At a first glance, this seems sacrilegious, but if you think about it, it doesn&#8217;t talk about results, it talks about effort. Hence, it&#8217;s actually good to achieve high quality without putting into it much effort, so that we can concentrate on devoting this effort to more labour intensive feature development. Or anyway let&#8217;s put effort where our labour is more likely to pay us back directly.</p>
<p>Fowler started by mocking Uncle Bob and his preaching attitude towards quality. It was actually very funny and I think that Fowler is right. Nevertheless, in all fairness Uncle Bob makes the point that all effort devoted to quality pays you back in terms of sustainability and efficiency over time. But certainly he deserved to be mocked, even though with a great deal of sympathy.</p>
<p>Fowler wondered whether quality is tradable. He makes the distinction between <strong>internal</strong> and <strong>external quality</strong>:</p>
<ul>
<li>Internal =&gt; It&#8217;s not visible, it&#8217;s about software design, cohesion and coupling, code, architecture, etc. It&#8217;s like the engine of the car, it&#8217;s a kind of magic, hidden under the hood, if it&#8217;s not in order all of a sudden the car will break and you&#8217;ll be left counting on your feet only</li>
<li>External =&gt; It&#8217;s the classic concept of quality in terms of visible behaviour or features of a system, what customers and end users experience out of it</li>
</ul>
<p>Fowler&#8217;s point, and I can&#8217;t agree more, is that while external quality is tradable, internal quality is not. Now, we should open a big parenthesis here, related to the differences between startups and sustainable development, the cost of missing opportunities, but for now bear with me. Let&#8217;s just say that in the long run, internal quality is <em>overall</em> not tradable. I think that we would all agree on that.</p>
<p>Fowler goes on with his <a rel="nofollow" href="http://martinfowler.com/bliki/DesignStaminaHypothesis.html">Design Stamina Hypothesis</a>, in order to explain what I just briefly synthesized. The <a title="Design Stamina Hypothesis graph" href="http://martinfowler.com/bliki/designStaminaGraph.gif" target="_blank">graph from Fowler&#8217;s article</a> says it all I suppose.</p>
<p>The idea is that beyond a certain critical mass, the only way to have your system growing linearly with your effort is to keep things in order in the house. Otherwise, development slows gradually.</p>
<p>Then Fowler talks a little bit about the <a rel="nofollow" href="http://martinfowler.com/bliki/TechnicalDebt.html">Technical Debt</a> metaphor, that I will explain more in details when talking about another session. Just think that every bit of <em>cruft</em> that cripples into the system is going to sediment and accumulate and you&#8217;ll have to pay it back like accrued interest on the principal. It&#8217;s a very powerful metaphor that explains well certain phenomenons happening on aging code bases.</p>
<p>Lastly Fowler put up a nice table that tries to classify the different ways in which a team can get in Technical Debt.</p>
<div>
<table border="1">
<tbody>
<tr>
<th></th>
<th>Reckless</th>
<th>Prudent</th>
</tr>
<tr>
<th>Deliberate</th>
<td>no time for design</td>
<td>ship now and deal with consequences</td>
</tr>
<tr>
<th>Inadvertent</th>
<td>what is layering?</td>
<td>now we know how we should have done it</td>
</tr>
</tbody>
</table>
</div>
<p>I think that he was being nice, because I would have used <strong>Incompetent</strong> instead of <strong>Inadvertent</strong>. Anyway, the only quadrant where eventually can be temporarily acceptable to be is <strong>Deliberate/Prudent</strong>, but you don&#8217;t wanna stay there for very long. Certainly never <strong>Reckless</strong>.</p>
<p>So, in the end, the conclusion is that to put more effort into feature development you have to put more <strong>continuous effort</strong> into internal quality, without compromising in the long run, or this will slow you down more and more and more. I don&#8217;t remember if Fowler explicitly said that but that was clearly the whole point.</p>
<div id="attachment_178" class="wp-caption aligncenter" style="width: 460px"><a href="http://thinkingbox.files.wordpress.com/2010/11/fowler3.jpg"><img class="size-full wp-image-178" title="Mind map of third Fowler's keynote" src="http://thinkingbox.files.wordpress.com/2010/11/fowler3.jpg?w=450&#038;h=295" alt="Mind map of third Fowler's keynote" width="450" height="295" /></a><p class="wp-caption-text">This is the mind map that I have taken live during third Fowler&#039;s keynote</p></div>
<p>To recap, an enjoyable keynote, or series of keynotes if you prefer, delivered by Fowler in a very pleasant way. For me, they keynote alone was well worth attending the conference.</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/design/'>design</a>, <a href='http://thinkingbox.wordpress.com/category/events/'>events</a>, <a href='http://thinkingbox.wordpress.com/category/refactoring/'>refactoring</a>, <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/2010/'>2010</a>, <a href='http://thinkingbox.wordpress.com/tag/adaptive-planning/'>adaptive planning</a>, <a href='http://thinkingbox.wordpress.com/tag/agile/'>agile</a>, <a href='http://thinkingbox.wordpress.com/tag/agile-tour/'>agile tour</a>, <a href='http://thinkingbox.wordpress.com/tag/conference/'>conference</a>, <a href='http://thinkingbox.wordpress.com/tag/continuous-delivery/'>continuous delivery</a>, <a href='http://thinkingbox.wordpress.com/tag/continuous-integration/'>continuous integration</a>, <a href='http://thinkingbox.wordpress.com/tag/continuous-planning/'>continuous planning</a>, <a href='http://thinkingbox.wordpress.com/tag/deming/'>deming</a>, <a href='http://thinkingbox.wordpress.com/tag/design/'>design</a>, <a href='http://thinkingbox.wordpress.com/tag/drucker/'>drucker</a>, <a href='http://thinkingbox.wordpress.com/tag/external-quality/'>external quality</a>, <a href='http://thinkingbox.wordpress.com/tag/feature-branching/'>feature branching</a>, <a href='http://thinkingbox.wordpress.com/tag/fowler/'>fowler</a>, <a href='http://thinkingbox.wordpress.com/tag/internal-quality/'>internal quality</a>, <a href='http://thinkingbox.wordpress.com/tag/lean/'>lean</a>, <a href='http://thinkingbox.wordpress.com/tag/people/'>people</a>, <a href='http://thinkingbox.wordpress.com/tag/process/'>process</a>, <a href='http://thinkingbox.wordpress.com/tag/refactoring/'>refactoring</a>, <a href='http://thinkingbox.wordpress.com/tag/release-early-and-often/'>release early and often</a>, <a href='http://thinkingbox.wordpress.com/tag/self-adaptivity/'>self adaptivity</a>, <a href='http://thinkingbox.wordpress.com/tag/semantic-diffusion/'>semantic diffusion</a>, <a href='http://thinkingbox.wordpress.com/tag/taylor/'>taylor</a>, <a href='http://thinkingbox.wordpress.com/tag/technical-debt/'>technical debt</a>, <a href='http://thinkingbox.wordpress.com/tag/toronto/'>toronto</a>, <a href='http://thinkingbox.wordpress.com/tag/xp/'>XP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/166/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=166&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/11/18/fowlers-keynotes-at-agile-tour-toronto-2010-with-mind-maps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/fowler1.jpg" medium="image">
			<media:title type="html">Mind map of first Fowler&#039;s keynote</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/fowler2.jpg" medium="image">
			<media:title type="html">Mind map of second Fowler&#039;s keynote</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/fowler2a.jpg" medium="image">
			<media:title type="html">Continuous delivery pipeline</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/fowler3.jpg" medium="image">
			<media:title type="html">Mind map of third Fowler&#039;s keynote</media:title>
		</media:content>
	</item>
		<item>
		<title>Oh, does your method include poaching eggs blindfold and with one hand tied behind your back?</title>
		<link>http://thinkingbox.wordpress.com/2010/11/08/oh-does-your-method-include-poaching-eggs-blindfold-and-with-one-hand-tied-behind-your-back/</link>
		<comments>http://thinkingbox.wordpress.com/2010/11/08/oh-does-your-method-include-poaching-eggs-blindfold-and-with-one-hand-tied-behind-your-back/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 10:38:37 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[XP]]></category>
		<category><![CDATA[adaptation]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[inclusiveness]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[organization]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=155</guid>
		<description><![CDATA[Recently, Ron Jeffries blogged about Scrum and the Scrum Alliance in Scrum is OK. Let’s get to work! =&#62; while I agree with the spirit of his post I think that Ron is too indulgent with certain Scrummers and the Scrum Alliance in particular. In any case, this post is not about that. This post [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=155&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_156" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.sxc.hu/photo/447422/"><img class="size-full wp-image-156" title="poached" src="http://thinkingbox.files.wordpress.com/2010/11/poached.jpg?w=450&#038;h=337" alt="" width="450" height="337" /></a><p class="wp-caption-text">Photo by Fyffe</p></div>
<p>Recently, Ron Jeffries blogged about Scrum and the Scrum Alliance in <a title="Permanent Link to Scrum is OK. Let’s get to work!" rel="bookmark" href="http://xprogramming.com/articles/scrum-is-ok/">Scrum  is OK. Let’s get to work!</a> =&gt; while I agree with the spirit of his post I think that Ron is too indulgent with certain Scrummers and the Scrum Alliance in particular. In any case, this post is not about that.</p>
<p>This post is about something that Ron&#8217;s post made me remember. Specifically, the idea of inclusiveness. Some years ago, the <em>illuminated</em> CEO of a software company hired me, impressed by the sense of novelty that most of the things about XP were inspiring at that time (and they still do, to some extent). We were green, surely naive, but genuine and we put all ourselves into it.</p>
<p>As usual, people matter more than anything.  Some colleagues were surprisingly positive and cooperative. Some other a huge disappointment. To my surprise. As I&#8217;ve just said, I was green. There was a guy in particular, not so young anymore, who was bullying anybody around and who kept making pointless observations about the fact that XP wasn&#8217;t covering explicitly a specific situation that one can encounter under some not so common circumstances. My replies were always that, no, XP in fact wasn&#8217;t addressing that problem as stated, but by using some logic and referring XP&#8217;s values and principles I was always able to come up with some decent strategy. I tried to talk about adaptation and positive/negative feedback. We could have started from that, if that was a real discussion, a genuine attempt to discover something together. But of course it was not. The guy was just trying to put me down. The irony is that this was a person who couldn&#8217;t describe his work in any sensible way, and for which the most sophisticated admissible software method was just slam some code together and we&#8217;ll figure it out. Yeah, right.</p>
<p>I guess that this story teaches a few things:</p>
<ul>
<li>Don&#8217;t feed the trolls (have I mentioned already that I was green?) =&gt; this seems obvious but especially in an organization where you start sensing hostility, not only you have to pick your fights but also your genuine discussions</li>
<li>There will always be somebody trying to find some holes in your proposals and ideas, some aspects that what you&#8217;re proposing doesn&#8217;t cover =&gt; dig a little bit, to check if you&#8217;re dealing with a troll or if behind some roughness there&#8217;s an inquiring mind, but don&#8217;t waste too much time</li>
</ul>
<p>In the end, colleagues are a bit like customers, and there will always be somebody who&#8217;s not happy with what you do. It&#8217;s the price to pay for innovation, whose alternative is stagnation. Especially when you&#8217;re trying to change an organization, the percentage of unhappy people may be significant, sometimes the majority. That&#8217;s ok, it&#8217;s part of the game. As they say, change the organization, or change organization.</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/adaptation/'>adaptation</a>, <a href='http://thinkingbox.wordpress.com/tag/change/'>change</a>, <a href='http://thinkingbox.wordpress.com/tag/inclusiveness/'>inclusiveness</a>, <a href='http://thinkingbox.wordpress.com/tag/innovation/'>innovation</a>, <a href='http://thinkingbox.wordpress.com/tag/organization/'>organization</a>, <a href='http://thinkingbox.wordpress.com/tag/politics/'>politics</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=155&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/11/08/oh-does-your-method-include-poaching-eggs-blindfold-and-with-one-hand-tied-behind-your-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/11/poached.jpg" medium="image">
			<media:title type="html">poached</media:title>
		</media:content>
	</item>
		<item>
		<title>Don&#8217;t cut time/energy/money invested in hiring</title>
		<link>http://thinkingbox.wordpress.com/2010/09/26/dont-cut-timeenergymoney-invested-in-hiring/</link>
		<comments>http://thinkingbox.wordpress.com/2010/09/26/dont-cut-timeenergymoney-invested-in-hiring/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 03:37:50 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[internship]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=150</guid>
		<description><![CDATA[Let&#8217;s face it, in our industry the single biggest asset is people. And yet, there is a whole subculture who tends to undermine the importance of hiring and retaining the best developers, while promoting the idea that programmers are interchangeable, like commodities for a manufacturing plant. Even the simple concept of Human Resources is per se despicable. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=150&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s face it, in our industry the single biggest asset is people. And yet, there is a whole subculture who tends to undermine the importance of hiring and retaining the best developers, while promoting the idea that programmers are interchangeable, like commodities for a manufacturing plant. Even the simple concept of Human <em>Resources</em> is per se despicable. <a title="It's the economy, stupid! @ wikipedia" href="http://en.wikipedia.org/wiki/It's_the_economy,_stupid" target="_blank">It&#8217;s the people, stupid!</a></p>
<p>I don&#8217;t want to make it necessarily such a big moral fuss, even though it&#8217;s quite important. Today I just want to focus on your investment, as a company, in hiring the right people regardless of their experience or job title. My friend <a title="Antonio Cangiano's programming blog" href="http://programmingzen.com/" target="_blank">Antonio Cangiano</a> has brought to me an ideal occasion when he <a title="Things I’ve learned from hiring interns for IBM, by Antonio Cangiano" href="http://programmingzen.com/2010/09/20/things-ive-learned-from-hiring-interns-for-ibm" target="_blank">reported about his experience hiring two interns</a> for the DB2 Team at <a title="IBM Toronto Lab" href="http://www-03.ibm.com/software/ca/en/canadalabs/toronto_lab.html" target="_blank">IBM Toronto Lab</a>. Specifically, I found some of the reactions in the comments very surprising, especially those commenting negatively about the effort that Antonio and his colleagues have put together to hire two interns, starting from about 100 resumes. What is even more depressing is that it seems that some of the comments come from developers themselves and they go along these lines: How can you possibly devote so much time/energy and ultimately money to hire two <em>shoddy</em> interns?</p>
<p>I wanna reply by telling a story. Between the last 5 years in Canada and 7 years before in Italy I have been ultimately responsible for hiring probably a total of 60 or 70 developers, with experience between 0 and 10 years of software development. While not every developer that I have hired was exceptional, most of them were great and I have to say that I have refined the process over the years. In the end, I have regrets only for one case: one of the very few cases where my gut was telling me &#8220;no&#8221;, I had some doubts (which is already a <em>no-go</em> in my books), but despite that I wanted to give a chance to the guy in front of me, full of energy and unfulfilled promises. Well, I should have listened to my guts. Nevertheless, one bad mistake in 12 years is not too bad, I think.</p>
<p>Three years ago my company wanted to hire one intern. We had a great respect for developers coming from CS at the <a title="University of Waterloo" href="http://uwaterloo.ca/" target="_blank">University of Waterloo</a>, Ontario. In fact, almost all the developers of the team were coming from there. So we thought that we wanted to give a try to their internship program. The only caveat: the internship lasts for 4 months only, so you have to carve the right amount of work, with the right degree of complexity, or the risk is to have an inexperienced developer to babysit all day without getting much out of her/him.</p>
<p>I&#8217;ve made very clear with my boss that I wanted to follow the same rigorous process that I used to follow with every other developer. Time after time, that process constantly showed us that in order to hire 3 developers we had to examine at least 100 resumes. That matched my experience in Italy too.</p>
<p>So, after the usual sing and dance we hired D. and we were quite confident that he would have done a good job for us, even under the very limited conditions imposed by such a short term. Nevertheless, D. exceeded our best expectations and he delivered much more. I guess that the feeling had been mutual, because he came back for more terms not only the year after but even two years later, long after I left the company.</p>
<p>A few months ago we had an opening at my company and I thought about D. almost right away. I have been lucky, in terms of timing, because he was about to graduate and finally he could take a fulltime job. D. has worked with us since then and he has demonstrated to be such a great player for the team. Paraphrasing <a title="Billionaire Hadden character @ imdb.com" href="http://www.imdb.com/character/ch0005789/" target="_blank">S.R. Hadden character</a> in <a title="Contact @ imdb.com" href="http://www.imdb.com/title/tt0118884/" target="_blank">Contact</a>, I consider D. one of my best long term investments, entirely worth the time/energy and money spent four years ago to hire him.</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/job/'>job</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/hiring/'>hiring</a>, <a href='http://thinkingbox.wordpress.com/tag/internship/'>internship</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=150&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/09/26/dont-cut-timeenergymoney-invested-in-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>
	</item>
		<item>
		<title>Guide to Test-Driven Development on ThinkCode.TV</title>
		<link>http://thinkingbox.wordpress.com/2010/04/21/guide-to-test-driven-development-on-thinkcode-tv/</link>
		<comments>http://thinkingbox.wordpress.com/2010/04/21/guide-to-test-driven-development-on-thinkcode-tv/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 17:29:42 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[thinkcode.tv]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[document management]]></category>
		<category><![CDATA[hotcocoa]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[knowledgetree]]></category>
		<category><![CDATA[macruby]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=139</guid>
		<description><![CDATA[It is done: a few minutes ago the English catalog of ThinkCode.TV has gone live! We are 2 days later on our original plan (oh boy, you have no idea of the amount of glitches, 3rd party service disruptions, personal tragedies, Murphy&#8217;s law manifestations&#8230; that we have incurred into in the last few weeks), but [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=139&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://thinkcode.tv/catalog/guide-to-tdd/"><img class="size-full wp-image-143 aligncenter" title="tdd_screenshot" src="http://thinkingbox.files.wordpress.com/2010/04/tdd_screenshot.png?w=450" alt="Guide to Test-Driven Development"   /></a></p>
<p>It is done: <a title="ThinkcCode.TV goes live" href="http://blog.thinkcode.tv/2010/04/thinkcodetv-goes-live.html" target="_blank">a few minutes ago</a> the English catalog of <a title="ThinkCode.TV" href="thinkcode.tv" target="_blank">ThinkCode.TV</a> has gone live! We are 2 days later on our original plan (oh boy, you have no idea of the amount of glitches, 3rd party service disruptions, personal tragedies, Murphy&#8217;s law manifestations&#8230; that we have incurred into in the last few weeks), but at this point it doesn&#8217;t matter anymore. What matters is that the catalog is out and we can finally get feedback outside of the Italian technical community.</p>
<p>While some videos are derived from our <a title="ThinkCode.TV Italian Catalog" href="http://it.thinkcode.tv/catalogo" target="_blank">Italian catalog</a>, translated and narrated by an English mother-tongue speaker (<a title="Debian GNU/Linux 3.1 Bible, by Benjamin Mako Hill, David B. Harris, Jaldhar Vyas" href="http://www.amazon.com/Debian-GNU-Linux-3-1-Bible/dp/0764576445/ref=sr_1_5?ie=UTF8&amp;s=books&amp;qid=1271866687&amp;sr=8-5" target="_blank">David B. Harris</a>, who happens to be a colleague, a good friend and an <a title="FOSS Document Management" href="http://thinkcode.tv/catalog/foss-document-management/" target="_blank">outstanding author</a> as well), there is some original content that is not available in the Italian catalog too. For example, Renzo Borgatti has updated his screencast about <a title="Introduction to MacRuby and HotCocoa" href="http://thinkcode.tv/catalog/introduction-macruby/" target="_blank">MacRuby and HotCocoa</a> to the latest version and David, as hinted above, has started his course about <a title="FOSS Document Management" href="http://thinkcode.tv/catalog/foss-document-management/" target="_blank">FOSS Document Management tools</a>.</p>
<p>We are proud to offer subtitles for every video. I personally know English-speaking geeks who like subtitles in any case, at the very least because they can be searched and they can provide an alternative way to browse a video. On the other hand, we are convinced that a lot of people who are not too comfortable with Enligh-only content will benefit from the possibility to read the subtitles to catch even the tiniest detail.</p>
<p>With regards to my stuff, the first lesson of the <a title="Guide to Test-Driven Development" href="http://thinkcode.tv/catalog/guide-to-tdd/" target="_blank">Guide to Test-Driven Development</a> is available. I&#8217;m very excited to see what the reaction of the community will be. Only in the last few days we are starting to see some excellent screencasts popping <a title="Kent Beck's videos on Vimeo" href="http://vimeo.com/user3553347/videos" target="_blank">here</a> and <a title="Brett Schuchert's videos on Vimeo" href="http://vimeo.com/user3159463/videos" target="_blank">there</a>, but nothing yet to my knowledge that resembles a complete approach to TDD like this course. The Italian version of the guide is one of the bestsellers of the Italian catalog and I hope that it will go well in English too. There are currently 3 lessons available in Italian (with the 4th one coming very soon), so you can expect a steady flow of lessons.</p>
<p>There are a lot of other screencasts that I&#8217;d like to produce, touching mainly on topics like OOP, design, refactoring and testing. So many things to do, so little time. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Coming soon, apart from continuing on the courses that we have started, we will have a great introduction to HTTP, an excellent course on Smalltalk and an interesting screencast covering how to upgrade a webapp to upcoming Rails 3.0 release. So, enjoy, give us feedback, and stay tuned!</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/design/'>design</a>, <a href='http://thinkingbox.wordpress.com/category/events/'>events</a>, <a href='http://thinkingbox.wordpress.com/category/thinkcode-tv/'>thinkcode.tv</a>, <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/agile/'>agile</a>, <a href='http://thinkingbox.wordpress.com/tag/document-management/'>document management</a>, <a href='http://thinkingbox.wordpress.com/tag/hotcocoa/'>hotcocoa</a>, <a href='http://thinkingbox.wordpress.com/tag/jquery/'>jquery</a>, <a href='http://thinkingbox.wordpress.com/tag/knowledgetree/'>knowledgetree</a>, <a href='http://thinkingbox.wordpress.com/tag/macruby/'>macruby</a>, <a href='http://thinkingbox.wordpress.com/tag/screencast/'>screencast</a>, <a href='http://thinkingbox.wordpress.com/tag/smalltalk/'>smalltalk</a>, <a href='http://thinkingbox.wordpress.com/tag/tdd/'>TDD</a>, <a href='http://thinkingbox.wordpress.com/tag/thinkcode-tv/'>thinkcode.tv</a>, <a href='http://thinkingbox.wordpress.com/tag/video/'>video</a>, <a href='http://thinkingbox.wordpress.com/tag/xp/'>XP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=139&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/04/21/guide-to-test-driven-development-on-thinkcode-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://thinkingbox.files.wordpress.com/2010/04/tdd_screenshot.png" medium="image">
			<media:title type="html">tdd_screenshot</media:title>
		</media:content>
	</item>
		<item>
		<title>If you like Python or interested into it, please grab a &#8220;bite&#8221;</title>
		<link>http://thinkingbox.wordpress.com/2010/03/29/if-you-like-python-or-interested-into-it-please-grab-a-bite/</link>
		<comments>http://thinkingbox.wordpress.com/2010/03/29/if-you-like-python-or-interested-into-it-please-grab-a-bite/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 13:44:40 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[events]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[thinkcode.tv]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=130</guid>
		<description><![CDATA[I&#8217;ve been extremely quiet in the last months, but for a good reason: together with some friends we have founded ThinkCode Labs Inc., a Canadian startup whose first project is ThinkCode.TV. Our mission is to deliver high quality technical screencasts, mostly about programming themes. We have launched on the Italian market in November 2009 and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=130&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinkcode.tv/free"><img class="alignnone" title="A-mazing Python: a guiding light in a labyrinth of languages" src="http://thinkcode.tv/images/pybite.png" alt="A-mazing Python: a guiding light in a labyrinth of languages" width="500" height="294" /></a></p>
<p>I&#8217;ve been extremely quiet in the last months, but for a good reason:  together with some friends we have founded ThinkCode Labs Inc., a  Canadian startup whose first project is <a title="ThinkCode.TV" href="http://blog.thinkcode.tv/" target="_blank">ThinkCode.TV</a>. Our mission is to  deliver high quality technical screencasts, mostly about programming  themes.</p>
<p>We have launched on the Italian market in <a title="A few lessons from the first week of  ThinkCode.TV" href="http://blog.thinkcode.tv/2009/11/few-lessons-from-first-week-of.html" target="_blank">November  2009</a> and it has been quite a success and a hell of a ride! Now we  are on the verge to launch in the English speaking market as well. We will  launch on April 19th.</p>
<p>I&#8217;m producing an 11 lessons course on TDD which is doing great with the Italian public. I&#8217;m touching on subjects like characterizing TDD&#8217;s microcycle, finding the next test, dependency injection &amp; mock objects, responsive design, BDD and dealing with aspects like legacy code, handling time &amp; databases. I can&#8217;t wait to see which reaction we will get with English speakers.</p>
<p>In the meantime, we are offering a free appetizer for anybody interested: a fantastic 19&#8242; video about implementing a maze solver in Python. You can grab it <a title="A-mazing Python: a guiding light in a labyrinth of languages" href="http://thinkcode.tv/free" target="_blank">here</a>: please, let us know what you think about it and if you like it, by all means, spread the news.</p>
<br />Filed under: <a href='http://thinkingbox.wordpress.com/category/events/'>events</a>, <a href='http://thinkingbox.wordpress.com/category/python/'>python</a>, <a href='http://thinkingbox.wordpress.com/category/xp/'>XP</a> Tagged: <a href='http://thinkingbox.wordpress.com/tag/free/'>free</a>, <a href='http://thinkingbox.wordpress.com/tag/python/'>python</a>, <a href='http://thinkingbox.wordpress.com/tag/screencast/'>screencast</a>, <a href='http://thinkingbox.wordpress.com/tag/tdd/'>TDD</a>, <a href='http://thinkingbox.wordpress.com/tag/thinkcode-tv/'>thinkcode.tv</a>, <a href='http://thinkingbox.wordpress.com/tag/video/'>video</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=130&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2010/03/29/if-you-like-python-or-interested-into-it-please-grab-a-bite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>

		<media:content url="http://thinkcode.tv/images/pybite.png" medium="image">
			<media:title type="html">A-mazing Python: a guiding light in a labyrinth of languages</media:title>
		</media:content>
	</item>
		<item>
		<title>Are all hardcore developers in Canada disappeared?</title>
		<link>http://thinkingbox.wordpress.com/2009/12/02/are-all-hardcore-developers-in-canada-disappeared/</link>
		<comments>http://thinkingbox.wordpress.com/2009/12/02/are-all-hardcore-developers-in-canada-disappeared/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 03:28:23 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[canada]]></category>
		<category><![CDATA[marketplace]]></category>
		<category><![CDATA[toronto]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=126</guid>
		<description><![CDATA[A couple of days ago I was talking with my boss and he told me that none of the persons replying to the job post in Spring 2008 that brought to my employment was actually a native English speaker. I was in shock. Natively English-speaking software architects, development managers, XP coaches around Toronto... where are you?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=126&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I was talking with my boss, who is the VP of development at my day job (which I will not disclose, while my night job is <a title="ThinkCode.TV" href="http://thinkcode.tv" target="_blank">thinkcode.tv</a>).<br />
We were talking about accents. I&#8217;m the first non-native English speaker of the company and despite being fluent in English, of course my accent can still be recognized (even though people typically don&#8217;t think I&#8217;m Italian, which is kind of funny).</p>
<p>Anyway, he told me that none of the persons replying to the job post in Spring 2008 that brought to my employment was actually a native English speaker. I was in shock. The posting was kind of hardcore and a bit silly at the same time, so I understand that not everybody could have been attracted by it, especially if you want to work in a typical big enterprise setup. But the idea that there were no Canadian-born technologists in Toronto willing to even reply to it and being able to survive a simple resume screening is kind of disarming.</p>
<p>Where have all the technologists in the GTA gone? Where are the hardcore developers? Have they maybe transitioned to a managerial path and they have totally lost the technical side of the job? Natively English-speaking software architects, development managers, XP coaches&#8230; where are you? Are you all doing consulting?</p>
<p>Hard to say. Certainly one of the things which motivated my decision to leave Italy was the increasing difficulty to find interesting technical jobs that could afford to pay my admittedly good salary (for Italian standard). But here the situation is different: there are still a lot of attractive jobs from a technical perspective, paying good money and yet, no <em>old</em> Canadians interested in doing them?!?</p>
<p>I find it fascinating. Good for immigrants and new Canadians I suppose, but nevertheless wrong. And this happens despite the presence of great Engineering faculties like Waterloo and UofT, just to name the first two that I can think about.</p>
<p>So, once again, where are you?</p>
<br />Posted in job Tagged: canada, job, marketplace, toronto <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=126&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2009/12/02/are-all-hardcore-developers-in-canada-disappeared/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>
	</item>
		<item>
		<title>replacer.rb and deleter.rb</title>
		<link>http://thinkingbox.wordpress.com/2009/10/30/replacer-rb-deleter-rb/</link>
		<comments>http://thinkingbox.wordpress.com/2009/10/30/replacer-rb-deleter-rb/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 18:45:23 +0000</pubDate>
		<dc:creator>thinkingbox</dc:creator>
				<category><![CDATA[refactoring]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[one-liner]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://thinkingbox.wordpress.com/?p=118</guid>
		<description><![CDATA[From time to time I find myself needing to replace certain strings globally (eg: in a directory tree), or deleting lines based on a match. I find sed extremely annoying and I don't manage to get around its syntax. So ruby comes in handy!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=118&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From time to time I find myself needing to replace certain strings globally (eg: in a directory tree), or deleting lines based on a match. I find sed extremely annoying and I don&#8217;t manage to get around its syntax. So ruby comes in handy!</p>
<p><strong>replacer.rb</strong></p>
<pre style="padding-left:30px;">exp_search = '&lt;%=launchBean\.getCustomVersion\(\)%&gt;'
exp_replace = '${xsession.info.launchBean.customVersion}'
directory = '**/'
file_mask = '*.jsp'

Dir.glob(directory+file_mask).each do |file|
  File.open(file, 'r+') do |f|
    content = f.read
    if /#{exp_search}/ =~ content
      s = content.gsub(/#{exp_search}/, exp_replace)
      f.rewind
      f.write s
      puts "#{file}: #{content.split(/#{exp_search}/).size-1} matches"
    end
  end
end
</pre>
<p><strong>deleter.rb</strong></p>
<pre style="padding-left:30px;">exp_search = 'useBean.*launchBean'
directory = '**/'
file_mask = '*.jsp'

Dir.glob(directory+file_mask).each do |file|
  count = 0
  content = ""
  File.open(file, 'r+') do |f|
    while line = f.gets
      if /#{exp_search}/ =~ line
        count += 1
      else
        content = content &lt;&lt; line
      end
    end
  end
  if count &gt; 0
    File.open(file, 'w') do |f|
      f.write content
      puts "#{file}: #{count} lines deleted"
    end
  end
end
</pre>
<p>These commands are especially useful if you have to refactor a codebase that doesn&#8217;t provide direct support with refactoring tools. In this case, I was refactoring a few hundred JSPs of a legacy system.</p>
<p>Credits to <a title="Use Ruby Scripting File (RSF) to manage your files" href="http://snippets.dzone.com/posts/show/7533" target="_blank">RSF</a> &amp; <a title="Ruby One-Liners @ reference.jumpingmonkey.org" href="http://reference.jumpingmonkey.org/programming_languages/ruby/ruby-one-liners.html" target="_blank">Ruby One-Liners</a> for most of the code &amp; ideas. rcscript seems to be a bit too much for me at this time, I&#8217;m perfectly happy modifying replacer.rb and deleter.rb when I need it.</p>
<br />Posted in refactoring, ruby Tagged: filesystem, one-liner, refactoring, ruby, sed <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkingbox.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkingbox.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkingbox.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkingbox.wordpress.com&amp;blog=2892920&amp;post=118&amp;subd=thinkingbox&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkingbox.wordpress.com/2009/10/30/replacer-rb-deleter-rb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f94b8be3e2d2b4975223a50da930accb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">thinkingbox</media:title>
		</media:content>
	</item>
	</channel>
</rss>
