<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>f3yourmind &#187; TDD</title>
	<atom:link href="http://aslamkhan.net/tag/tdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://aslamkhan.net</link>
	<description>Ubuntu coding ... for your friends</description>
	<lastBuildDate>Mon, 24 Oct 2011 07:07:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>What&#8217;s the point in Scrum?</title>
		<link>http://aslamkhan.net/software-development/whats-the-point-in-scrum/</link>
		<comments>http://aslamkhan.net/software-development/whats-the-point-in-scrum/#comments</comments>
		<pubDate>Tue, 24 May 2011 23:17:52 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[balance]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=519</guid>
		<description><![CDATA[Scrum people like to use points for estimating and measuring velocity.  I won&#8217;t go into detail about how points work and how to play those poker estimation games.  Just search around and you will find a ton of stuff.  So, back to this points stuff.  I have a divided relationship with the humble point.  I [...]]]></description>
			<content:encoded><![CDATA[<p>Scrum people like to use points for estimating and measuring velocity.  I won&#8217;t go into detail about how points work and how to play those poker estimation games.  Just search around and you will find a ton of stuff.  So, back to this points stuff.  I have a divided relationship with the humble point.  I like it when a team switches to using points for the first time, because it gives them a chance to think a little bit deeper about what they want to do.  I don&#8217;t like it when we start inventing rules around points (and you can lump guidelines and best practices into the rules pot too).  When the rules appear, the thinking disappears.</p>
<p>In every team trying Scrum, there is bound to be a rule about points.  I dare you to put up a hand and say you have none.  These rules are things like &#8220;We can&#8217;t take anything over 13 points into a sprint&#8221;, &#8220;Our epics are 100 points&#8221;, &#8220;The login screen is our baseline of 3 points&#8221;, &#8220;Anything over 40 points must be broken down&#8221;.  So, I double dare you <img src='http://aslamkhan.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="attachment_522" class="wp-caption alignright" style="width: 243px"><a href="http://aslamkhan.net/wp-content/uploads/2011/05/less_ignorance.png"><img class="size-medium wp-image-522 " title="Less ignorance" src="http://aslamkhan.net/wp-content/uploads/2011/05/less_ignorance-300x164.png" alt="" width="233" height="127" /></a></dt>
</dl>
</div>
<p><strong>I have different view of the humble point.</strong> A point may seem like a one dimensional thing, but it has a some facets built into it.  One facet is the &#8220;amount of effort to build something&#8221;.  Another facet is &#8220;amount of ignorance&#8221; and this has an inverse &#8211; &#8220;amount of <em>shared</em> knowledge&#8221;.  Sometimes I find it useful to make a judgement based on what I don&#8217;t know as opposed to what I do know.  Regardless of whether I choose to view the cup as half full or half empty, I cannot estimate effort to build something based upon what I don&#8217;t know.  So, effort tends to track the amount of knowledge, not ignorance.  As knowledge increases, my ignorance decreases and each point starts representing more and more of pure effort.</p>
<p><a href="http://aslamkhan.net/wp-content/uploads/2011/05/more_ignorance.png"><img class="alignleft size-medium wp-image-523" title="more_ignorance" src="http://aslamkhan.net/wp-content/uploads/2011/05/more_ignorance-300x164.png" alt="" width="233" height="127" /></a>However, if I am in a state of complete ignorance, then it is completely impossible for me to make any judgement on effort to build.  I&#8217;d be simply speculating.  What I can do, though, is create a time box to explore the unknown so that I can start moving out of my state of ignorance.  This is also an estimate and I am not making an excuse for non-delivery either.  I need to understand some things and also show my understanding in some code.  Yes, the code that I produce may not have a visible user interface or some other convenient demo-friendly stuff, but I need to carefully plan my sprint review to express my understanding.</p>
<p><strong>It&#8217;s all about gaining a SHARED understanding.</strong> This understanding is body of knowledge that I have learned which I need to confirm with others.  This act of confirmation can happen in several ways.  I can have a conversation and explain what I understand, I can draw a blocks and lines picture, or show a spreadsheet, and so on.  Regardless of the method of communication, I still use the opportunity of discovery to express my understanding in code as tests.  Another powerful way of expressing my understanding is to write out a story and a few scenarios.  Using BDD style grammar can be a great way of concisely expressing some things, that can be easily shared.  Yes, you heard me correctly &#8211; as a developer, I write the stories and scenarios.  When I am given a story and scenario by someone and asked to estimate, then I am attempting to estimate based on  another person&#8217;s expression of <em>their</em> <em>understanding</em> and my <em>assumed understanding</em>.</p>
<p>In a recent discussion with Jimmy Nilsson, he said that he prefered to call scenarios &#8220;examples&#8221;.  That really resonated with me.  I also do a lot of discovery by example, and then gradually introduce more a more into the examples, as I get more and more confident of my knowledge.</p>
<p><strong>How do I know how much I don&#8217;t know? </strong> That&#8217;s a tough question.  What I do comes straight out of my TDD habits.  I create a list of questions &#8211; my test list.  For some questions, I will know the answer easily, some not all, and some are debatable.  The more that I can answer, the better I can estimate effort.  I can then turn the questions that I can answer into statements of fact.  The more facts I have, the less ignorant I am.</p>
<p>Recently, I worked with a team that wanted to get TDD going, and the most significant change that I introduced was in backlog grooming and sprint planning.  During these two ceremonies, we (as a team) threw questions madly at a requirement, regardless of whether we knew the answer or not.  We then worked through the questions (as a team) to establish how much we could answer.  The trend that emerged was that the original estimates where either half of the new estimate or double of the new estimate.  When they where halved, it was generally because we were able to negotiate some of the unknowns (the ignorant areas) to a future sprint with the product owner.  In some cases, the product owner was equally ignorant, and was reacting to the &#8220;business wants the feature&#8221; pressure.  When they were doubled, it was so much more was discovered than originally assumed.  At the end of the session, we always asked the meta-question &#8220;If we answer all these questions sufficiently, will we be done?&#8221;.  I call this style of working &#8220;test first backlog grooming&#8221; or &#8220;test first sprint planning&#8221;.</p>
<p><strong>Often I discover more things I don&#8217;t know. </strong> Annoyingly, this happens in the middle of a sprint, but if it did not happen in that phase of work, then perhaps I was not digging deep enough.  When this happens, I just keep on adding them to my list of questions.  These new questions are raised at any time with others on the team, the customer or with whoever can help me understand a bit more.  Sometimes, it&#8217;s put on the table for negotiation to be dealt with at another time.  Nevertheless, standups still seem to be a good time to put new questions on the table, for discussion later.</p>
<p>There are several ripple effects of thinking about points in this manner &#8211; this notion of ignorance and shared knowledge gauges.</p>
<p><strong>The first is about the possible shape of your sprint backlog.</strong> If you have deep understanding, then it is likely that you will be able to decompose complex problems into simple solutions, that take less effort.  The effect is that low point stories are in greater number in a sprint.</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_526" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://aslamkhan.net/wp-content/uploads/2011/05/sprint-shape-better.png"><img class="size-medium wp-image-526" title="sprint-shape-better" src="http://aslamkhan.net/wp-content/uploads/2011/05/sprint-shape-better-300x159.png" alt="" width="300" height="159" /></a><p class="wp-caption-text">Sprint backlog shape with high shared understanding</p></div>
<p>If you are highly ignorant, then the estimation points reflect that and  there are more medium to high point stories in the sprint.</p>
<div id="attachment_525" class="wp-caption aligncenter" style="width: 310px"><a href="http://aslamkhan.net/wp-content/uploads/2011/05/sprint-shape-bad.png"><img class="size-medium wp-image-525" title="sprint-shape-bad" src="http://aslamkhan.net/wp-content/uploads/2011/05/sprint-shape-bad-300x168.png" alt="" width="300" height="168" /></a><p class="wp-caption-text">Sprint backlog shape with high ignorance</p></div>
<p><strong>The second is about what you value in a story.</strong> You will find less value in the ontology of epics, themes and stories.  It is no longer about size of effort but degree of understanding or ignorance.  Instead, the shape of the product backlog is something that is constantly shifting from high uncertainty (big point numbers) to high certainty (low point numbers).  That&#8217;s what test first backlog grooming gives you.</p>
<div id="attachment_524" class="wp-caption aligncenter" style="width: 310px"><a href="http://aslamkhan.net/wp-content/uploads/2011/05/backlog-shape.png"><img class="size-medium wp-image-524" title="backlog-shape" src="http://aslamkhan.net/wp-content/uploads/2011/05/backlog-shape-300x172.png" alt="" width="300" height="172" /></a><p class="wp-caption-text">Shape of product backlog - higher knowledge items have smaller points.</p></div>
<p style="text-align: left;"><strong>The third is about continuous flow that is the nature of discovery</strong>.  When you work steadily at reducing your degree of ignorance, then you are steadily answering questions through answers expressed in code, and steadily discovering new questions that need answering.  This process of discovery is one of taking an example based on what you know in this moment and modeling it.  Then expanding that example with one or two more additional twists, and modeling that, and so it goes.</p>
<p style="text-align: left;"><strong>It also touches product ownership and software development.</strong> When you work in this way, then explicit estimation of effort becomes  less significant.  Moments that have been earmarked as important  points in the life of the product become more significant.  Call them milestones.   These milestones are strategically and tactically defined, and become a dominant part of product ownership.  Software development becomes the act of having long running conversations with the customer.  Those milestones give context for the content of those conversations.  Ultimately, those conversations are then expressed as a set of organised thoughts in code.  If your code is not organised well, then perhaps you also don&#8217;t understand the problem or solution or both.</p>
<p style="text-align: left;"><strong>This is a long story for a short message. </strong> A high priority is to resolve the tension that exists in an estimation in the form of knowlege/ignorance fighting against effort.  When you release that tension through shared understanding, then you can deal with the tension that exists in the act of creating those significant milestones.  In my opinion, that&#8217;s the real wicked problem.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fwhats-the-point-in-scrum%2F&amp;title=What%26%238217%3Bs%20the%20point%20in%20Scrum%3F" id="wpa2a_2"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/whats-the-point-in-scrum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testing is just a laborious pain in the rear</title>
		<link>http://aslamkhan.net/software-development/testing-is-just-a-laborious-pain-in-the-rear/</link>
		<comments>http://aslamkhan.net/software-development/testing-is-just-a-laborious-pain-in-the-rear/#comments</comments>
		<pubDate>Mon, 10 May 2010 12:33:57 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=334</guid>
		<description><![CDATA[I thoroughly enjoyed Karen Greave&#8217;s talk on Agile Testing.  She had just about 100% coverage (pun intended, groan).  Yet, testing is really a pain in the rear.  Testing is execution, and Karen was dead-on right, that automation is the path to follow.  Computers are very good at testing.  A computer does what it is programmed [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_337" class="wp-caption aligncenter" style="width: 510px"><a href="http://aslamkhan.net/wp-content/uploads/2010/05/testing.jpg"><img class="size-full wp-image-337" title="Testing" src="http://aslamkhan.net/wp-content/uploads/2010/05/testing.jpg" alt="" width="500" height="321" /></a><p class="wp-caption-text">No collaboration, no heroes!</p></div>
<p>I thoroughly enjoyed <a href="http://scrumcoaching.wordpress.com/">Karen Greave&#8217;s</a> talk on Agile Testing.  She had just about 100% coverage (pun intended, groan).  Yet, testing is really a pain in the rear.  Testing is execution, and Karen was dead-on right, that automation is the path to follow.  Computers are very good at testing.  A computer does what it is programmed to do, and it can test the way it was programmed to test.  It&#8217;s simple: if testing is your constraint, move that constraint away from testing by automating.</p>
<p>Now, you have to deal with the constraint that shifted to the next point: test authoring.  While testing (i.e. execution) is just a passive, laborious effort, test authoring is a very creative, active exercise.  It is actually an exercise in confirming a shared, common understanding.  <a href="http://en.wikipedia.org/wiki/Kristen_Nygaard">Kristin Nygard</a> said &#8220;To program is to understand&#8221; and test authoring is a programming exercise.  That&#8217;s why outside-in, behavior driven development style scenarios are actually tests, coded in a human language.  The act of authoring a scenario proves your understanding and the expected working of the software.</p>
<p>This is why I separate test execution (passive) from test authoring (active).  And Karen said that early feedback is good (right again), which is why I author my tests very early.  I&#8217;m extreme about this.  I test first.</p>
<div id="attachment_339" class="wp-caption aligncenter" style="width: 510px"><a href="http://aslamkhan.net/wp-content/uploads/2010/05/testing2.jpg"><img class="size-full wp-image-339" title="testing with automation" src="http://aslamkhan.net/wp-content/uploads/2010/05/testing2.jpg" alt="Automation leaves time for collaboration" width="500" height="379" /></a><p class="wp-caption-text">Automation creates time for collaboration</p></div>
<p style="text-align: center;">
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Ftesting-is-just-a-laborious-pain-in-the-rear%2F&amp;title=Testing%20is%20just%20a%20laborious%20pain%20in%20the%20rear" id="wpa2a_4"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/testing-is-just-a-laborious-pain-in-the-rear/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Two Angles to Sustainable Pace</title>
		<link>http://aslamkhan.net/events/two-angles-to-sustainable-pace/</link>
		<comments>http://aslamkhan.net/events/two-angles-to-sustainable-pace/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 22:28:16 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=331</guid>
		<description><![CDATA[At the Scrum User Group South Africa meeting last night Marius de Beer did a really good talk about Software Development Practices.  It&#8217;s been a long while since I saw anyone attempt to draw so much from such widely spread corners of wisdom.  In one slide Marius mentioned the practice of Sustainable Pace.  Many take [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://www.scrum.org.za/events/agile-mindset">Scrum User Group South Africa</a> meeting last night Marius de Beer did a really good talk about Software Development Practices.  It&#8217;s been a long while since I saw anyone attempt to draw so much from such widely spread corners of wisdom.  In one slide Marius mentioned the practice of Sustainable Pace.  Many take the view that this is about cutting back on working overtime and that it supports the principles of energised work, and work-life balance.  Marius did make the same point, and it is correct.</p>
<p>But there is another angle to Sustainable Pace.  As a developer, you need to build a rhythm, or flow.  It&#8217;s a cadence that you establish as you are writing code.  It&#8217;s a cadence that TDD helps you establish itself.  This cadence is also sustainable pace.  And one thing that kills this cadence and your pace in a flash is a mid-stream meeting.</p>
<p>In the panel discussion afterwards, there was a question at the end regarding ways to reduce the number of meetings which I just glossed over.  If you schedule meetings with developers for only the first hour in the morning, you not only reduce the number of meetings but, also, you don&#8217;t destroy the sustainable pace built up from the morning.</p>
<p>So, don&#8217;t think about pace as just working 7 hours a day, it&#8217;s about what you do in the 7 hours that matters.  Get the rhythm going and be anal about things that can kill your flow mid-stream; especially meetings.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fevents%2Ftwo-angles-to-sustainable-pace%2F&amp;title=Two%20Angles%20to%20Sustainable%20Pace" id="wpa2a_6"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/events/two-angles-to-sustainable-pace/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Delusion: A firm belief despite contradiction in the face of reality</title>
		<link>http://aslamkhan.net/software-development/delusion-a-firm-belief-despite-contradiction-in-the-face-of-reality/</link>
		<comments>http://aslamkhan.net/software-development/delusion-a-firm-belief-despite-contradiction-in-the-face-of-reality/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 07:36:31 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[DevDays]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=322</guid>
		<description><![CDATA[DevDays 2010 in Cape Town yesterday was slick.  Very slick.  It’s always slick.  Those guys really know how to put an a good show. Most of the speakers are good.  Most demos were good.  Most jokes were funny.  The food was mostly good. The mood was mostly good too.   And the MS fan club [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">DevDays 2010 in Cape Town yesterday was slick.  Very slick.  It’s always slick.  Those guys really know how to put an a good show.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Most of the speakers are good.  Most demos were good.  Most jokes were funny.  The food was mostly good. The mood was mostly good too.   And the MS fan club was mostly impressed.  And most noobs were converted for ever.  And the improvements were mostly apologetic of the earlier short comings.  And code that you were promised you would write was mostly minimal.  And most absent was the word design.  Most ignored was TDD.  And most content presumed that we are dumb ass developers that don’t care about good code, good tools, good software.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">If it was not for Bart de Smet’s two sessions on Core .NET 4.0 Enhancements and Language Enhancements in .NET 4.0, the day would have been mostly wasted.  Bart gave me a glimmer of hope, not for MS but for the manner in which he assumed we are not moron developers that can’t think.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">The EF4 code first demo was explained completely as if the classes in the model are no different from entities in a table.  You may be have slides with the words “code first models”, but if you don’t actually do it for real, then you’re just leading dataset happy, marginally object oriented developers further away from the truth.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">I understand that it’s a marketing game but, come on, MS South Africa, at least pretend that we are capable developers that care about being professional.  We care mostly about design. Mostly about clean code. Mostly about quality.  Mostly about getting projects done on time, within budget and mostly maintenance free.  We care mostly about being agile, being able to refactor code continuously, being able to test first, and not tossing code downstream.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Ahmed’s ping-pong of bugs is so irrelevant, when the developer is test-first infected and the tester is actually your continuous integration server.  Mostly we are developers that test our own code.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Glimmers of hope</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">- IE9 has developer support in mind</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">- EF4 has code first, but still so far from being a decent ORM</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">- DLR has a potential sweet spot</div>
<p><a href="http://www.microsoft.com/southafrica/devdays/default.mspx">DevDays 2010</a> in Cape Town was slick.  Very slick.  You guys really know how to put an a good show.</p>
<p>Most of the speakers were good.  Most demos were good.  Most jokes were funny.  The food was mostly good. The mood was mostly good too.   And the fan club was mostly impressed.  And most noobs were converted forever.  And the new features were mostly so good, apparently, you won&#8217;t have to write so much code anymore.  And the most underused word was design.  Most absent words were TDD, refactoring, quality, and clean!!</p>
<p>I understand that DevDays is a product showcase but, come on, MS South Africa, at least cater for the entire spectrum of developers, just a little bit, and in a responsible manner.  How about pitching content that shows that you do care about design, about clean code and quality.  How pitching the new features in a way that shows a trend towards agility, to being able to refactor code continuously,  to test first and other vital aspects of <em>professional</em> software development.</p>
<p>Let me give you just an example to illustrate what I mean.  The EF4 code first demo was explained completely as if the classes in the model are no different from entities in a table.  Even the language used was &#8220;entities&#8221; and &#8220;keys&#8221;.  I don&#8217;t think I heard the word &#8220;class&#8221; or &#8220;object&#8221; once!  You may have slides with the words “Code First Model”, but if you don’t actually do it for real, then you’re just leading dataset-happy developers that are marginally object-oriented further away from good code and good architecture.  You need to explain why it&#8217;s better:  that it promotes better object orientation, that POCO models disconnected from an ORM can be done test-first, and you can evolve your model, instead of designing up-front, blah, blah, blah.</p>
<p>Another time there was a ping-pong table with a developer at one end and tester at another with a bug being batted between them.  That pulled quite a laugh from just about everyone.  While that is reality in many organisations, there are many of us that test our own code and deal with our own bugs.  The tester that we toss our code to is our automated continuous integration server.  Tossing code downstream when it&#8217;s too late for reprise is not very professional.  How about focusing on the testing tool, as opposed to pitching it in a manner that makes everyone believe that dealing with the bug downstream is just the way its meant to be.</p>
<p>Sure, I know that you need to show off the latest cool things and evangelise your products, but there is a sector of developers that you are blatantly ignoring.  It is the sector that is, perhaps, the most influential amongst other developers. We are those developers that value our craft of software development.  We evangelise the craft and the value that it brings to our lives, our teams, our projects, our clients and our organisations.</p>
<p>Perhaps I am just delusional.</p>
<p>Oh well, so long and thanks for the fish.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fdelusion-a-firm-belief-despite-contradiction-in-the-face-of-reality%2F&amp;title=Delusion%3A%20A%20firm%20belief%20despite%20contradiction%20in%20the%20face%20of%20reality" id="wpa2a_8"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/delusion-a-firm-belief-despite-contradiction-in-the-face-of-reality/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Test First TDD</title>
		<link>http://aslamkhan.net/software-development/test-first-tdd/</link>
		<comments>http://aslamkhan.net/software-development/test-first-tdd/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 09:11:02 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[factor10]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=299</guid>
		<description><![CDATA[I think that TDD is getting bastardized.  If you happen to use a Unit testing framework, it does not mean that you are test driven at all.  TDD is about test first to drive the rest &#8211; design, clean code, feedback, quality, and lot more.  Using a testing framework is easy.  Being test first driven [...]]]></description>
			<content:encoded><![CDATA[<p>I think that TDD is getting bastardized.  If you happen to use a Unit testing framework, it does not mean that you are test driven at all.  TDD is about test first to drive the rest &#8211; design, clean code, feedback, quality, and lot more.  Using a testing framework is easy.  Being test first driven is really difficult.  You may start off with the mechanics and focus on the cadence, but you only feel the value a lot later &#8211; when you have woven it as an attitude into your fabric of thinking.</p>
<p>That&#8217;s why I&#8217;m giving the <strong>TEST FIRST TDD</strong> <a href="http://opencourses.factor10.com">course</a> next week.  If you want to go beyond just learning about an xUnit API and step on the path of a personal journey to changing the way you create software, then come along.  I don&#8217;t have miracles but I can do better than just shining a light.  I will step into the darkness with you and help you move towards the light.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Ftest-first-tdd%2F&amp;title=Test%20First%20TDD" id="wpa2a_10"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/test-first-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Driving through a red light can kill you</title>
		<link>http://aslamkhan.net/software-development/driving-through-a-red-light-can-kill-you/</link>
		<comments>http://aslamkhan.net/software-development/driving-through-a-red-light-can-kill-you/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 09:19:52 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=268</guid>
		<description><![CDATA[The other night I was driving home quite late from the airport.  For that hour, the roads are quiet and it&#8217;s a relaxing drive home that gives me a chance to think back on the the day&#8217;s events.  At a red traffic light, I stopped, but some idiot in the lane next to me rushed [...]]]></description>
			<content:encoded><![CDATA[<p>The other night I was driving home quite late from the airport.  For that hour, the roads are quiet and it&#8217;s a relaxing drive home that gives me a chance to think back on the the day&#8217;s events.  At a red traffic light, I stopped, but some idiot in the lane next to me rushed straight through.  You know what happened in the next 5 minutes.  Lots of honking, screeching tires and near crashes.  Fortunately, there were not accidents and nobody got hurt.</p>
<p>Really?</p>
<p>No!  Even though there wasn&#8217;t this big crash, someone did get a fright of their life, even I as an observer got a fright. And someone else did continue their journey quite shaken and certainly not in their same frame of mind.  The only person that seemed to be least affected was the person who jumped the red light.  But I am speculating, maybe he was under pressure and really needed to get to the end on time, and so he rushed ahead and saw in his rear view the potential destruction he left behind.  And maybe he regrets his decision.  But he certainly did not see how his actions affected the other people that were close by, myself included.</p>
<p>Driving through a red light can kill you and you can kill other people too.  The same thing happens when ignore the red light from your tests.  You can hurt yourself and you can hurt other people too.</p>
<p>Just think about that red light at the traffic light and in your code.  It&#8217;s telling you so much.</p>
<ul>
<li>It&#8217;s telling you to slow down a bit.</li>
<li>To look around.</li>
<li>To think about the moment.</li>
<li>Don&#8217;t focus on the end, you will get there in good time.</li>
<li>If you ignore the red light, other things will break and other people will get hurt.</li>
<li>Maybe you don&#8217;t know why you must stop, but you need to stop first, before you can find out why.</li>
<li>It&#8217;s telling you to do the right thing, not the rushed thing.</li>
</ul>
<p>Driving through a red light is another suicide pattern that I will add to my growing list.</p>
<p>And TDD is also part of ubuntu coding.  I am not telling you anything new.  I&#8217;m just telling you the same thing from another perspective.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fdriving-through-a-red-light-can-kill-you%2F&amp;title=Driving%20through%20a%20red%20light%20can%20kill%20you" id="wpa2a_12"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/driving-through-a-red-light-can-kill-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fast Track to Domain Driven Design</title>
		<link>http://aslamkhan.net/events/fast-track-to-domain-driven-design/</link>
		<comments>http://aslamkhan.net/events/fast-track-to-domain-driven-design/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 18:56:40 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Ubiquitous Language]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=217</guid>
		<description><![CDATA[I finally got out of neutral and pulled together the first public offering our Domain Driven Design courses in Cape Town, South Africa.  Normally we give these courses on-site with people on the same development team but I thought it may be fun and inspiring to open it up to everyone for a change.  Now I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got out of neutral and pulled together the first public offering our <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/about_this_course.html">Domain Driven Design courses</a> in Cape Town, South Africa.  Normally we give these courses on-site with people on the same development team but I thought it may be fun and inspiring to open it up to everyone for a change.  Now I&#8217;m all excited again and really looking forward to a diverse mixture of people. Hopefully, I will see some old faces and lots of new people.</p>
<p>The one thing I can tell you is that the course is a very immersive experience.  I really hate lecturing but I enjoy probing conversations and that&#8217;s how I give the course. I don&#8217;t have answers to the practical work and concerns are addressed as we go along.  As a result, the day takes unexpected turns and routes.  But in the end I get you to the right destination.  Come along; you will leave exhausted, but inspired!</p>
<h2><strong>Take the Fast Track to Domain Driven Design</strong></h2>
<p><a href="http://www.factor10.com/courses/DDDfasttrack/capetown/about_this_course.html">about the course</a> /  <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/course_contents.html">course contents</a> / <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/should_you_attend.html">should you attend?</a> / <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/register.html">register for the course</a></p>
<p><a href="http://www.factor10.com">factor10</a> has expanded its services in South Africa to include our advanced and<br />
expert level courses aimed for the software professional.  On September 8-9, 2009,<br />
we will be offering a fast track to DDD for Architects at the BMW Pavilion in<br />
Cape Town.</p>
<p><img class="alignleft size-full wp-image-218" title="zz485d34cf" src="http://aslamkhan.net/wp-content/uploads/2009/08/zz485d34cf.jpg" alt="zz485d34cf" width="450" height="96" /></p>
<h2></h2>
<h2></h2>
<h2>Who should attend?</h2>
<p>This course is for software professionals that want to take the right steps towards<br />
advanced and expert levels in their careers.  <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/register.html">Register</a> for this course if you want to &#8230;</p>
<ul>
<li>learn more than just another syntax and set of tools</li>
<li>write software for large, long living systems</li>
<li>increase the quality and maintainability of your design</li>
<li>design high quality models and use code to represent those models effectively</li>
<li>develop applications with a good APIs</li>
<li>add a design edge to your skill set</li>
</ul>
<p><img class="alignleft size-full wp-image-219" title="zz3caeb696" src="http://aslamkhan.net/wp-content/uploads/2009/08/zz3caeb696.jpg" alt="zz3caeb696" width="455" height="137" /></p>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2>Why should you learn DDD?</h2>
<p>More and more developers and architects realise that learning every detail of a new<br />
API just isn&#8217;t the way to deliver the best business value. It’s such a tough balancing<br />
act; focus on the solving the business problem and focus on building working software<br />
with your frameworks.</p>
<p>One way of taking a big leap in the right direction is to learn and apply domain driven<br />
design. It is definitely not abstract and fluffy; it deals a lot with the code also. DDD<br />
leads us to focus on understanding and to communicate that understanding very well;<br />
in language, in design and in code. You will shift your focus away from designing for a<br />
technology, and you will learn to design for the business domain; to the core of the<br />
problems and solutions. Those are the most interesting parts and what your users<br />
and customers really care about.</p>
<p><a href="http://www.factor10.com/courses/DDDfasttrack/capetown/about_this_course.html">about the course</a> /  <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/course_contents.html">course contents</a> / <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/should_you_attend.html">should you attend?</a> / <a href="http://www.factor10.com/courses/DDDfasttrack/capetown/register.html">register for the course</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fevents%2Ffast-track-to-domain-driven-design%2F&amp;title=Fast%20Track%20to%20Domain%20Driven%20Design" id="wpa2a_14"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/events/fast-track-to-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Specs is Writing Code is Designing</title>
		<link>http://aslamkhan.net/software-development/writing-specs-is-writing-code-is-designing/</link>
		<comments>http://aslamkhan.net/software-development/writing-specs-is-writing-code-is-designing/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 11:45:35 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[adapt]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[balance]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=188</guid>
		<description><![CDATA[A team that I am coaching has settled on using BDD stories and scenarios for describing their requirements and specifications.  They&#8217;ve also chosen cucumber as their acceptance testing tool.  All well and good, but they are making very slow progress and seem to be really struggling with the change in workstyle.  I think I&#8217;ve spotted [...]]]></description>
			<content:encoded><![CDATA[<p>A team that I am coaching has settled on using <a href="http://dannorth.net/whats-in-a-story">BDD</a> stories and scenarios for describing their requirements and specifications.  They&#8217;ve also chosen <a href="http://wiki.github.com/aslakhellesoy/cucumber">cucumber</a> as their acceptance testing tool.  All well and good, but they are making very slow progress and seem to be really struggling with the change in workstyle.  I think I&#8217;ve spotted the reason for this.</p>
<p>The feedback loop is missing.  They view the stories as a spec that has been handed down.  And they have not made the connection that spec writing is design work that is intended to clearly illustrates concepts in a domain.  It is a form of writing code.  But it&#8217;s just that this code is, maybe, non-executable.</p>
<p>Here&#8217;s my workflow and how I close the loop.</p>
<ul>
<li>write story and scenario</li>
<li>Sketch a design if needed &#8211; helps when pairing to be on the same page.</li>
<li>Start writing test for scenario</li>
<li>ooops &#8230; test is getting complicated? stuck?</li>
<li>maybe the domain is not understood enough? Dig deeper, improve scenario, design (as needed) and continue writing test</li>
<li>or maybe the scenario was badly written? Ignore scenario structure, continue writing test.  Refactor scenario later.  We&#8217;re in deep discovery mode here.</li>
<li>get test to pass</li>
<li>refactor code</li>
<li>refactor scenario</li>
<li>&#8230; cycle the red-green-refactor until happy.</li>
</ul>
<p>Acknowledging when you&#8217;re in discovery mode and knowing that you are allowed to refactor requirements is the trick.  Nothing is cast in concrete.  That&#8217;s why I like frequent feedback loops with tight turning circles.</p>
<p>No feedback loop, no progress.</p>
<p>BTW, I really don&#8217;t like explaining such things as flow-charts and sequences.  You got to find your own style.  It&#8217;s not a recipe or rules thing.  The above is something that is about as close to what I do but it changes when the need arises.  That&#8217;s also another key feature of being agile &#8211; adapt or die in the waterfall.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fwriting-specs-is-writing-code-is-designing%2F&amp;title=Writing%20Specs%20is%20Writing%20Code%20is%20Designing" id="wpa2a_16"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/writing-specs-is-writing-code-is-designing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Measuring the Clarity of Requirements</title>
		<link>http://aslamkhan.net/software-development/measuring-the-clarity-of-requirements/</link>
		<comments>http://aslamkhan.net/software-development/measuring-the-clarity-of-requirements/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 12:47:41 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=121</guid>
		<description><![CDATA[The last two geeky conversations I had, stumbled upon the same thing &#8211; how do you measure the effectiveness of requirements in describing the business to the business and describing the specification to the developer? So, I posed the question &#8220;How far away are you from executing your requirements?&#8221;. If you are going to go [...]]]></description>
			<content:encoded><![CDATA[<p>The last two geeky conversations I had, stumbled upon the same thing &#8211; how do you measure the effectiveness of requirements in describing the business to the business and describing the specification to the developer?</p>
<p>So, I posed the question &#8220;How far away are you from executing your requirements?&#8221;.  If you are going to go through various steps and stages to get to compilation and then execution, then every step is an opportunity for valuable information being lost in translation.  If you can compile your requirements immediately then nothing will be lost.</p>
<p>Each additional step between requirements description and compilation and execution is an opportunity to confuse the user and the developer and everyone in between.  That&#8217;s why fully dressed <a href="http://en.wikipedia.org/wiki/Use_case">use cases</a> are not so effective as fully dressed <a href="http://dannorth.net/introducing-bdd">behavior driven stories</a>.  And that&#8217;s why BDD is very agile and a great asset in DDD and use cases just don&#8217;t cut it anymore.</p>
<p>Right now, my favorite tool is <a href="http://wiki.github.com/aslakhellesoy/cucumber">Cucumber</a>.  I can execute the requirements and that raises the clarity ranking of my requirements super high.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fmeasuring-the-clarity-of-requirements%2F&amp;title=Measuring%20the%20Clarity%20of%20Requirements" id="wpa2a_18"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/measuring-the-clarity-of-requirements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Heck! We should have paid attention that day.</title>
		<link>http://aslamkhan.net/software-development/heck-we-should-have-paid-attention-that-day/</link>
		<comments>http://aslamkhan.net/software-development/heck-we-should-have-paid-attention-that-day/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 14:46:11 +0000</pubDate>
		<dc:creator>Aslam</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://aslamkhan.net/?p=90</guid>
		<description><![CDATA[I&#8217;ve been doing some internal DSL coaching recently, and my coaching-partner and I have been working BDD/TDD style.  It turned out to be quite a nice experience overall.  We started with a Cucumber based feature that described the behavior of a typical DSL script and we drove it down into rpsec where we tested each [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing some internal DSL coaching recently, and my coaching-partner and I have been working BDD/TDD style.  It turned out to be quite a nice experience overall.  We started with a <a href="http://wiki.github.com/aslakhellesoy/cucumber">Cucumber</a> based feature that described the behavior of a typical DSL script and we drove it down into <a href="http://rspec.info/">rpsec</a> where we tested each little part of the script.  In the end, I achieved what I set out: the person I was coaching grokked the whole <em>&#8220;code is data&#8221;</em> idea behind DSLs.</p>
<p>Then I started thinking about what it takes to coach external DSLs.  I got really scared &#8211; parsers, generators, abstract syntax trees.  Those were things that most people wanted to forget about the day after they wrote the exam for that horrible semester course in university.  What makes it worse is that I never did that in university &#8211; I did Electronic Engineering and we spent our coding time figuring out how to do Fast Fourier Transforms on digital signals.</p>
<p>But when I look at the progress that is being made in language workbenches to help us create DSLs, then I reckon we should dust off those books and start paying attention again.  Some of these language workbenches still leverage a host language such as Java or C#, but the act of using a structural editor that edits the AST directly is strangely weird.  But, some refactorings are just not a problem anymore.  For example, if you are changing the node on a tree, then all the references to that node are automatically aware of it.  Compare that to a text editor where you need refactoring wizardry in the tools to make sure all references are updated neatly.</p>
<p>I think that language workbenches may be a great tool for coaching DSLs because the things that made your head spin during that lex and yacc week, are made a whole lot simpler.  You can focus on designing the language and walk into ASTs with less fear.  But, be warned &#8212; language design is not easy, and you still need to know about ASTs and parsers and generators.  In fact, just write a parser and a generator and it will be a learning experience that goes beyond DSLs.  Better still, do it BDD/TDD style.</p>
<p>The relevancy of language oriented programming is just going to continually increase.  Those previously <em>&#8220;irrelevant&#8221;</em> courses are important again.  Watch out, the gap just got wider.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Faslamkhan.net%2Fsoftware-development%2Fheck-we-should-have-paid-attention-that-day%2F&amp;title=Heck%21%20We%20should%20have%20paid%20attention%20that%20day." id="wpa2a_20"><img src="http://aslamkhan.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://aslamkhan.net/software-development/heck-we-should-have-paid-attention-that-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

