<?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>Journeyman Programmer &#187; Agile</title>
	<atom:link href="http://journeyman.ivystreetinc.com/?feed=rss2&#038;cat=4" rel="self" type="application/rss+xml" />
	<link>http://journeyman.ivystreetinc.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 28 Jul 2010 12:53:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>TDD:  Design for the Conditions</title>
		<link>http://journeyman.ivystreetinc.com/?p=71</link>
		<comments>http://journeyman.ivystreetinc.com/?p=71#comments</comments>
		<pubDate>Wed, 16 Dec 2009 13:14:13 +0000</pubDate>
		<dc:creator>JourneyMan</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://journeyman.ivystreetinc.com/?p=71</guid>
		<description><![CDATA[I am not a proponent of TDD, but I will admit it has its place.  And sometimes that place is not to use it, if the ultimate outcome will be of less value to the purpose of your software.
Some reasons not to use TDD if the conditions warrant are:

More code is higher risk for bugs.  [...]]]></description>
			<content:encoded><![CDATA[<p>I am not a proponent of TDD, but I will admit it has its place.  And sometimes that place is not to use it, if the ultimate outcome will be of less value to the purpose of your software.</p>
<p>Some reasons not to use TDD if the conditions warrant are:</p>
<ul>
<li>More code is higher risk for bugs.  Bottom line.</li>
<li>More expensive.  TDD translates into stories/function points/developer time.  I don&#8217;t care what anyone says, I still like TAD a little better to get repeatable regressive costs over time.</li>
</ul>
<p>Use TDD if you are designing things that will benefit from it.  Don&#8217;t if it will not.</p>
<p><strong>Object Design?</strong></p>
<p>TDD is a <span id="lw_1260966867_0">design pattern</span>, nothing more nothing less.  While I have read a few books about TDD . . . I wonder, if true TDD people refuse to do up front object design.  The methodology demands refactoring; and therefore following a Fowler idea that design will emerge, TDD practitioners must let objects emerge via refactoring.  I mean, if they are TRULY doing TDD that&#8217;s what they would do.</p>
<p><strong>Timeboxing is Agile&#8217;s David</strong></p>
<p>Its an interesting experiment to me; I do refactors and look for patterns.  Then I pull them out if needed.  Unless I come up with an estimate, and the project deadline and my manager says &#8220;no way jsut build it quick.&#8221;  If you get on one of those projects using TDD (I was on one) a LOT of spaghetti code, with lots of test cases, gets written.  Its about as bug proof as any other design style, that is, in those conditions TDD brings no value.</p>
<p>I think its a failure of a lot of Agile methods . . . ignores the reality of timeboxed projects.  I have never worked on anything but; even being relatively young as my first computer class was on a Tandy PET and my first Basic program on a Vic 20.</p>
<p><strong>A Use Case Where TDD would Fail &#8211; SUV Analogy<br />
</strong></p>
<p>I am actually using TDD do do some PL/SQL conversion scripts right now.   I have to do it old school; and its taking time.  Sometimes I just write the conditions.  Since the scripts are throw away it we can&#8217;t store the unit tests in any sort of DB repository (but that would be great for stored procs etc.).  I ran into a bit of a problem though . . . <em><strong>that writing code in TDD style sometimes causes more problems, depending on what you are trying to accomplish.</strong></em></p>
<p>Talking with a friend I came up with this real-life analogy of where TDD would fail.</p>
<p>TDD thinks it addresses quality but one thing it introduces is possible defects  due to itself.   You have to make a judgement call based on your input factors of time, money, and risk as to whether its worth it to use this design pattern.  For example, it would absolutely be worth it if designing space shuttle software.  And, you had an unlimited budget.</p>
<p>But here&#8217;s an analogy where it would fail:</p>
<p>Suppose you are designing an SUV for extreme conditions.  In one case, it&#8217;s a highly wet cool condition and in another, is a hot temperature condition.</p>
<p>The designers decide that testing of everything is very important.  So they design in a hole in the engine that let&#8217;s you test sludge buildup in one of the cylinders:  you unscrew something and get a physical look.  Basically, a test has become part of the design.</p>
<p>But now the cylinder head is weakened because of the test.  You have introduced a few failure conditions:  possible weakened gasket that will let in contamination and cause engine failure.</p>
<ul>
<li>In the wet condition this may be worth while.  Sludge buildup and moisture may be something causes buildup and there would be value to check the state of the cylinder periodically to make sure you don&#8217;t need to run a cleaning process, etc.</li>
<li>But in the hot condition, the gasket could keep failing and contaminants could be introduced via the testing port.  The strategy is just follow a maintenance schedule (TAD &#8211; test after), which you would have done anyway, because everyone has to do maintenance.</li>
</ul>
<p>It&#8217;s just a hypothetical but there are a ton of other things in our life just like this.  Vehicles are easy . . . even now they are building all kinds of testing into the vehicles as part of the design (TDD): emissions, mixture, electric etc.  The payoff is that this is very expensive to pay for, and also in increase costs due to specialized maintenance because your every day Joe or Jane auto mechanic can&#8217;t work on their own vehicle.  Do vehicles really last any longer?  I&#8217;d argue that they do not.  TDD just extended the period between maintenance&#8217;s &#8212; i.e. you paid for your time up front instead of over time.</p>
<p>I&#8217;m not motivated enough to throw away a methodology if it may be useful, and TDD can teach us some things, but I guess the mantra is:  &#8220;<em><strong>TDD: do it only if necessary.</strong></em>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://journeyman.ivystreetinc.com/?feed=rss2&amp;p=71</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum Schedule In Practice</title>
		<link>http://journeyman.ivystreetinc.com/?p=29</link>
		<comments>http://journeyman.ivystreetinc.com/?p=29#comments</comments>
		<pubDate>Sat, 29 Aug 2009 18:13:34 +0000</pubDate>
		<dc:creator>JourneyMan</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://journeyman.ivystreetinc.com/?p=29</guid>
		<description><![CDATA[The scrum meeting schedule I set  up for my teams at one place I gigged at was as follows, and based on the basic sprint/release cycle.   Our sprints varied from 2-3 weeks; releases usually after two sprints.  After doing 2 week, 3 week, and one month  sprints I kinda like the 3 [...]]]></description>
			<content:encoded><![CDATA[<p>The scrum meeting schedule I set  up for my teams at one place I gigged at was as follows, and based on the basic sprint/release cycle.   Our sprints varied from 2-3 weeks; releases usually after two sprints.  After doing 2 week, 3 week, and one month  sprints I kinda like the 3 week cycle;  at another place we did two week sprints BUT our  team was cranking out code nonstop; we had none of the issues present in the giant health care corporate  IT system (for instance, just to get a DEV server took almost three months).</p>
<p>Of course there were other meetings  such as reviews of QA test plans, long term infrastructure meetings and pieces  beyond the boundaries of the sprint.</p>
<p>SM = Scrum Master, BA = Business Analyst, the rest should be self explanatory.</p>
<table border="1" cellpadding="0">
<tbody>
<tr>
<td><strong>Meeting  Name</strong></td>
<td>Who</td>
<td><strong>Occurance</strong></td>
<td><strong>Objective</strong></td>
</tr>
<tr>
<td>Release Planning</td>
<td>Required: SM,BA&#8217;s<br />
Optional: Lead Dev,Lead  QA</td>
<td>1-2 weeks before start of  Sprint</td>
<td>Review and update release/project  backlog.</td>
</tr>
<tr>
<td>Business Story  Planning</td>
<td>Required: SM,BA&#8217;s,Lead Dev,Lead  QA</td>
<td>1 week before start of  Sprint</td>
<td>Review all stories for presentation at the Story Review,  update backlog and sprint story list. Initial  estimates.</td>
</tr>
<tr>
<td>Tech Story Planning</td>
<td>Required: SM,Lead Dev<br />
Optional: Dev  Team</td>
<td>&lt; 1 week before start of  Sprint</td>
<td>Identify any refactors/pattern breakouts/upgrades/etc.  that need a tech story, initial estimate.</td>
</tr>
<tr>
<td>Story Review</td>
<td>Required: SM,BA&#8217;s,Dev Team,QA  Team</td>
<td>First Day of Sprint</td>
<td>BA&#8217;s present story documents to team, all details are  discussed. Meeting is at least two hours  long.</td>
</tr>
<tr>
<td>Story Tasking</td>
<td>Required: SM,Dev Team</td>
<td>First Day of Sprint</td>
<td>All stories are initially tasked out, initial task  responsibilities are taken by team members the rest are left on the  queue.</td>
</tr>
<tr>
<td>Daily Scrums</td>
<td>Required: SM,Dev Team,QA Team Optional:  BA&#8217;s</td>
<td>Everyday in Sprint, except major meeting  days</td>
<td>Scrum. The three questions: Yesterday, today,  impediments.</td>
</tr>
<tr>
<td>Code Review</td>
<td>Required: SM,Dev Team</td>
<td>Last day of Sprint.</td>
<td>Dev team members present to each other their code (Note:  these may informally occur as stories emerge during a sprint as  well).</td>
</tr>
<tr>
<td>Release Demo</td>
<td>Required: SM,BA&#8217;s<br />
Optional: Dev Team,QA  Team</td>
<td>End of Release</td>
<td>BA&#8217;s/Team members present application features to  usually high level stakeholders.</td>
</tr>
<tr>
<td>Retrospective</td>
<td>Required: SM,Dev Team,QA Team<br />
Optional:  BA&#8217;s,</td>
<td>End of Release</td>
<td>Review the process, improve if  needed.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://journeyman.ivystreetinc.com/?feed=rss2&amp;p=29</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Code Review</title>
		<link>http://journeyman.ivystreetinc.com/?p=39</link>
		<comments>http://journeyman.ivystreetinc.com/?p=39#comments</comments>
		<pubDate>Sat, 15 Aug 2009 12:26:22 +0000</pubDate>
		<dc:creator>JourneyMan</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://journeyman.ivystreetinc.com/?p=39</guid>
		<description><![CDATA[I like code reviews now days, done right.
Code reviews help to:

Add to the support base of the code.
Normalize the development techniques on the codebase.
Add to team cohesiveness.
Help developers develop presentation and communication skills.
Force that last 5% execution of the writing of the code.
Improve code quality and developer skillsets.

I&#8217;ve been and hosted in several different types [...]]]></description>
			<content:encoded><![CDATA[<p>I like code reviews now days, done right.</p>
<p>Code reviews help to:</p>
<ul>
<li>Add to the support base of the code.</li>
<li>Normalize the development techniques on the codebase.</li>
<li>Add to team cohesiveness.</li>
<li>Help developers develop presentation and communication skills.</li>
<li>Force that last 5% execution of the writing of the code.</li>
<li>Improve code quality and developer skillsets.</li>
</ul>
<p>I&#8217;ve been and hosted in several different types of reviews:</p>
<ul>
<li>Scheduled weekly meeting.</li>
<li>Present-as-it-emerges.</li>
<li>Sprint-end code reviews (in Agile).</li>
</ul>
<p>For these reviews to be successful, I find that these rules of thumb are essential:</p>
<ul>
<li>Developers only.</li>
<li>DEVELOPERS ONLY.</li>
<li>A place to present; such as a meeting room or a quiet bullpen.</li>
<li>Projects rule!</li>
<li>Master of Ceremonies: Let the architect MC, a lead dev MC, or rotate through MC duties.</li>
<li>Everyone should try to present at some time. Many times there are pairs where a stonger personality will always present.  Hogwash.  This doesn&#8217;t help the other developer at all.</li>
<li>Food is a good thing to have there.</li>
<li>This meeting can last a long time, hours, depending on which review style you use.</li>
</ul>
<p>Some may disagree with the developers only rule.   But it is essential; this is not functional review its code review and its all about the developers.  Other points of view will create a conflict of interest, especially management, and the goal of the meeting will fail.</p>
]]></content:encoded>
			<wfw:commentRss>http://journeyman.ivystreetinc.com/?feed=rss2&amp;p=39</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
