<?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>Project Entropy</title>
	<atom:link href="http://darynholmes.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://darynholmes.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 26 Jan 2012 21:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='darynholmes.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Project Entropy</title>
		<link>http://darynholmes.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://darynholmes.wordpress.com/osd.xml" title="Project Entropy" />
	<atom:link rel='hub' href='http://darynholmes.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Agile20x20</title>
		<link>http://darynholmes.wordpress.com/2011/09/29/agile20x20/</link>
		<comments>http://darynholmes.wordpress.com/2011/09/29/agile20x20/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 14:26:33 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Agile20x20]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[Pecha Kucha]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=320</guid>
		<description><![CDATA[The Agile Practitioners group recently held a pecha-kucha event at Zuhlke Engineering. The talks were great! The content was intriguing and the Pecha Kucha format added an extra edge to the presentations. We learned a few lessons that will help improve the next Agile20x20 &#8230; <a href="http://darynholmes.wordpress.com/2011/09/29/agile20x20/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=320&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span class="Apple-style-span" style="color:inherit;font:normal normal normal 15px/normal 'Helvetica Neue', Helvetica, Arial, sans-serif;font-style:inherit;font-weight:inherit;line-height:1.625;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;"><a style="text-decoration:underline;" href="http://darynholmes.files.wordpress.com/2011/09/pecha-kucha.png"><img class="size-full wp-image-342 alignright" style="background-image:initial;background-attachment:initial;background-color:#eeeeee;border-color:initial;border-style:initial;" title="pecha-kucha" src="http://darynholmes.files.wordpress.com/2011/09/pecha-kucha.png?w=584" alt=""   /></a></span></p>
<p style="text-align:left;">The<a href="http://www.meetup.com/AgilePractitioners/"> Agile Practitioners</a> group recently held a <a href="http://www.pecha-kucha.org/">pecha-kucha</a> event at <a href="http://www.zuehlke.com/en/">Zuhlke</a><a href="http://www.zuehlke.com/en/"> Engineering</a>. The talks were great! The content was intriguing and the Pecha Kucha format added an extra edge to the presentations.</p>
<p style="text-align:left;">We learned a few lessons that will help improve the next Agile20x20 event.</p>
<p style="text-align:left;">Here are the talks</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='584' height='359' src='http://www.youtube.com/embed/xZMG_6yZHok?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p>Christian Heldstab does a great job of presenting Getting Things Done</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='584' height='359' src='http://www.youtube.com/embed/_WoSl94aLZc?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p><a href="http://www.linkedin.com/pub/abid-quereshi/6/51a/402">Abid Quereshi</a> exlapins the core values of Scrum</p>
<p><span id="more-320"></span></p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='584' height='359' src='http://www.youtube.com/embed/iPynQbXK6WM?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p><a href="http://twitter.com/#!/DarynHolmes">Daryn Holmes</a> gives a talked inspired by the phrase &#8220;we want to be more agile&#8221;</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='584' height='359' src='http://www.youtube.com/embed/HHOvAqqGEh4?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p><a href="http://www.1011ltd.com/">Benjamin Nortier</a> discusses efficiency at the cost of robustness</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='584' height='359' src='http://www.youtube.com/embed/Bu05h0IvL1c?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p><a href="http://twitter.com/#!/sleepyfox">Sleepyfox</a> warns about the dark side of metrics</p>
<p>Thanks to all the people who attended and thanks to the presenters for all the time and effort they put in to make it an interesting evening.</p>
<p>If you would like to be involved with these events in the future, please leave a comment below.</p>
<br />Filed under: <a href='http://darynholmes.wordpress.com/category/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/category/general/'>General</a>, <a href='http://darynholmes.wordpress.com/category/lean/'>Lean</a>, <a href='http://darynholmes.wordpress.com/category/presentations/'>Presentations</a> Tagged: <a href='http://darynholmes.wordpress.com/tag/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/tag/agile20x20/'>Agile20x20</a>, <a href='http://darynholmes.wordpress.com/tag/lean-software-development/'>lean software development</a>, <a href='http://darynholmes.wordpress.com/tag/pecha-kucha/'>Pecha Kucha</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=320&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2011/09/29/agile20x20/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/09/pecha-kucha.png" medium="image">
			<media:title type="html">pecha-kucha</media:title>
		</media:content>
	</item>
		<item>
		<title>The Buffering Law observed in Software Engineering</title>
		<link>http://darynholmes.wordpress.com/2011/08/18/the-buffering-law-observed-in-software-engineering/</link>
		<comments>http://darynholmes.wordpress.com/2011/08/18/the-buffering-law-observed-in-software-engineering/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 17:20:34 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[buffering law]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=260</guid>
		<description><![CDATA[There is an informative slide deck on the FactoryPhysics website entitled A Fast Cycle Time Story. This slide deck was created by two Intel Products employees namely Tim Skowronski and Joan Tafoya. The slides cover many aspects of lean manufacturing, one of the topics covered is &#8230; <a href="http://darynholmes.wordpress.com/2011/08/18/the-buffering-law-observed-in-software-engineering/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=260&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_301" class="wp-caption alignright" style="width: 231px"><a href="http://www.flickr.com/photos/timpearcelosgatos/3498322771/"><img class="size-full wp-image-301   " title="train_buffer" src="http://darynholmes.files.wordpress.com/2011/08/train_buffer.jpg?w=584" alt=""   /></a><p class="wp-caption-text">Railway buffer at the top of Pikes Peak, Colorado Springs CO </p></div>
<p>There is an informative slide deck on the <a href="http://www.factoryphysics.com/index.cfm">FactoryPhysics</a> website entitled <a title="A Fast Cycle Time Story" href="http://www.factoryphysics.com/documents/Factory%20Physics%20Application%20at%20Intel.pdf">A Fast Cycle Time</a> <a title="A Fast Cycle Time Story" href="http://www.factoryphysics.com/documents/Factory%20Physics%20Application%20at%20Intel.pdf">Story</a>. This slide deck was created by two Intel Products employees namely Tim Skowronski and Joan Tafoya.</p>
<p>The slides cover many aspects of lean manufacturing, one of the topics covered is The Buffering Law</p>
<blockquote><p>Systems with variability must be buffered by some combination of:</p>
<ul>
<li><span class="Apple-style-span" style="font-family:Georgia, 'Bitstream Charter', serif;font-weight:normal;">Inventory</span></li>
<li><span class="Apple-style-span" style="font-family:Georgia, 'Bitstream Charter', serif;font-weight:normal;">Capacity</span></li>
<li><span class="Apple-style-span" style="font-family:Georgia, 'Bitstream Charter', serif;font-weight:normal;">Time</span></li>
</ul>
</blockquote>
<p>Tafoya and Skowronski explain the implication of this law</p>
<blockquote><p>If you cannot pay to reduce variability, you will pay in terms of high WIP, under-underutilized capacity, or reduced customer service i.e. lost sales, long lead times, and/or late deliveries.</p></blockquote>
<p>The following variability buffering examples are provided:</p>
<ul>
<li>Ballpoint Pens:</li>
<ul>
<li>can’t buffer with time (who will backorder a cheap pen?)</li>
<li>can’t buffer with capacity (too expensive, and slow)</li>
<li>must buffer with inventory</li>
</ul>
<li>Ambulance Service:</li>
<ul>
<li>can’t buffer with inventory (an inventory of trips to hospitals?)</li>
<li>can’t buffer with time (response time is the key measure)</li>
<li>must buffer with capacity</li>
</ul>
<li>Organ Transplants:</li>
<ul>
<li>can’t buffer with WIP (perishable &#8211; very short usable life)</li>
<li>can’t buffer with capacity (we cannot ethically increase capacity)</li>
<li>must buffer with time</li>
</ul>
</ul>
<p><span id="more-260"></span>In software engineering we experience variability due to a number of reasons, including policies and practices we put in place.  The prominent cause of variability considered here is changing requirements and the varying levels of demand for features.</p>
<p>This variably is due to a number of reasons e.g. a customer gaining insights after using the software, a new opportunity in the market, a change in regulation etc. This variability is largely due to external events. Iterative and incremental development practices help reduce the impact of this variability but this does not illuminate variablility. Therefore, according to the Buffering Law, we need to buffer with some combination of inventory, capacity or time.</p>
<p>We cannot buffer with inventory because we don&#8217;t know what the future requirements will be. If we did we would not have variability in the first place.</p>
<p>A teams capacity is their ability to produce features as and when the business needs them. There are a number of options teams can use to improve their capacity e.g. process improvements (Scrum\Kanban), technological improvements (automated acceptance tests), increasing or decreasing team size (<a title="Two Pizza Rule" href="http://www.learningapi.com/blog/archives/000079.html" target="_blank">two pizza rule</a>).</p>
<p>Due to the nature of software development most teams are continuously trying to catch up with a backlog of requirements. Many of these teams are continuously improving their velocity. With this in mind, it is naive to think that we can cause a huge increase capacity simply because we need to. That is like saying we only take the short cut when we are in a rush. The teams capacity is not like a tap that we can turn on and off. While all teams can (and should) incrementally improve, drastically increasing capacity in times of need it is not always feasible and it is not a trivial task.</p>
<p>In software development we need to buffer with time. Teams aim to deliver the requested features over a period of time. As Tafoya and Skowronski point out, when you buffer with time you pay with &#8220;reduced customer service i.e. lost sales, long lead times, and/or late deliveries&#8221;. Which reads like a <a href="http://www.urbandictionary.com/define.php?term=Readers%20Digest%20Version" target="_blank">readers digest version</a> of the history of software development.</p>
<p>Photo attributed to: <a href="http://www.flickr.com/photos/timpearcelosgatos/3498322771/" target="_blank">Tim Pearce</a></p>
<br />Filed under: <a href='http://darynholmes.wordpress.com/category/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/category/lean/kanban-lean/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/category/lean/'>Lean</a> Tagged: <a href='http://darynholmes.wordpress.com/tag/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/tag/buffering-law/'>buffering law</a>, <a href='http://darynholmes.wordpress.com/tag/kanban/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/tag/lean-software-development/'>lean software development</a>, <a href='http://darynholmes.wordpress.com/tag/scrum/'>Scrum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/260/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/260/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/260/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=260&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2011/08/18/the-buffering-law-observed-in-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/train_buffer.jpg" medium="image">
			<media:title type="html">train_buffer</media:title>
		</media:content>
	</item>
		<item>
		<title>The X Penny Game</title>
		<link>http://darynholmes.wordpress.com/2011/08/02/the-x-penny-game/</link>
		<comments>http://darynholmes.wordpress.com/2011/08/02/the-x-penny-game/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 15:00:22 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[batching]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Teams]]></category>
		<category><![CDATA[WIP]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=160</guid>
		<description><![CDATA[The X Penny Game is a simulation game exploring the effects of WIP limits. It is a combination of Karen Greaves modified Scrum Penny game with Karl Scotland’s version of the Ball Flow Game. This game is geared to show the importance &#8230; <a href="http://darynholmes.wordpress.com/2011/08/02/the-x-penny-game/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=160&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The X Penny Game is a simulation game exploring the effects of WIP limits. It is a combination of Karen Greaves <a href="http://scrumcoaching.wordpress.com/2010/04/19/the-scrum-penny-game-a-modification/">modified Scrum Penny game</a> with Karl Scotland’s version of the <a href="http://availagility.co.uk/2011/07/19/running-the-ball-flow-game/">Ball Flow Game</a>.</p>
<p>This game is geared to show the importance of limiting the work in progress and to explore the following formula (implied by <a href="http://www.factoryphysics.com/Principle/LittlesLaw.htm">Little&#8217;s Law</a>)</p>
<blockquote><p>Flow Time = WIP/Throughput</p></blockquote>
<ul>
<li>Flow Time (Cycle Time, Lead Time) – average amount of time it takes to fully complete a unit of work</li>
<li>WIP (Work In Process) – is the average amount of units in the system</li>
<li>Throughput – average number of units being completed within a given time frame</li>
</ul>
<p>The game is designed to work with 6 to 12 people – we had 8 players and 1 facilitator</p>
<p>The team divides into the following roles:</p>
<ul>
<li>1 – Customer</li>
<li>5 – Workers</li>
<li>The rest are efficiency experts</li>
</ul>
<p>We had a total of 8 players (6 workers, 2 efficiency experts).</p>
<p>The team organises themselves around a table. The image below shows how our team arranged themselves. Each worker has an empty area on the table directly in from of them referred to as a workspace.</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/layout.png"><img class="size-medium wp-image-164 aligncenter" title="Layout" src="http://darynholmes.files.wordpress.com/2011/08/layout.png?w=300&#038;h=290" alt="" width="300" height="290" /></a><span id="more-160"></span><br />
<strong>The props</strong><br />
100 coins – I used 10 pence coins (GBP), all coins should be the same size<br />
1 table – large enough to have 3 people stand side-by-side on each side of the table<br />
A stopwatch for each efficiency expert – ones that can pause and resume<br />
A <a href="https://www.box.net/shared/opzx5pxyefrcdzsyipxf">spreadsheet</a> to record stats – discussed later</p>
<p><strong>The game</strong><br />
The customer takes a batch of coins (from 1 to 100) and passes them to a workspace. A worker turns over each coin one-by-one and then passes the batch to the next workspace where the process is repeated. A batch of coins are returned to the customer once they have been turned over once in each workspace. The facilitator records the time it took to process the coins. The team then decides how to improve the performance and tries again. It is recommended that you limit the game to 5 rounds to avoid fatigue.</p>
<p>The objective of the game: The team aims to turn over each coin once, in each workspace as fast as possible.</p>
<p>The objective should not be misinterpreted as “<em>each worker</em> turns over each coin once as fast as possible” . There is no 1 to 1 mapping between a worker and a workspace. This gives teams the opportunity to come up with a pairing or <a href="http://blog.brodzinski.com/2010/05/kanban-swarming.html">swarming</a> strategy that may improve performance e.g. near the end of the round all workers who have nothing to do can join a work station where there is still work to be done.</p>
<p><strong>The constraints</strong><br />
The game has soft constraints and hard constraints. The soft constraints are there for the team to change and to see the effect on performance. The hard constraints are there to make the game more challenging and to force certain behaviours. If you do change the hard constraints, change them after 4 or 5 rounds. The team can only make one change per round.</p>
<p><em>Soft Constraints</em><br />
These constraints are enforced on the first round, after that the team can start changing or removing them.</p>
<ul>
<li>The customer and product owner may only use their left hands</li>
<li>Batch sizes of 20 must be used</li>
</ul>
<p><em>Hard Constraints</em></p>
<ul>
<li>Only the customer can add coins to the system and removed them from the system</li>
<li>The complete batch must be processed before passing the batch on</li>
<li>Each batch must be the same size</li>
<li>The customer and workers may not pass batches to their neighbours sitting directly on the left or right, passing to the opposite neighbour is allowed. If you want to be cruel, don’t allow passing to opposite neighbours.</li>
<li>A worker can only turn one coin over at a time</li>
</ul>
<p><strong>Defects</strong><br />
A dropped coin is a defect, you can choose to collect the defects in a round or enforce a different penalty. If you would like to focus on the impact of defects you may want to use a higher penalty for defects  e.g. the worker needs to redo that batch. Obviously this introduces a new dimension to the game.</p>
<p><strong>Stats</strong><br />
The more stats you can collect the better. In our exercise each of the 2 efficiency experts chose a worker to monitor. They kept track of how much time the worker spent turning coins i.e. waiting time was not counted.</p>
<p>Karl Scotland was kind enough to provide a spreadsheet with the <a href="http://availagility.co.uk/2011/07/19/running-the-ball-flow-game/" target="_blank">Ball Flow Game</a>. I used a modified version of this spreadsheet in this X Penny Game. I needed to alter it as the ‘batches’ are different in this game. In the ball flow game the batch is the amount of balls in the system, in this game batches of coins are passed around. Thus 3 batches of 10 coins each could be in the system at once. This difference is reflected in the how the stats are collected. You can download the spreadsheet from the home page of this <a href="http://darynholmes.wordpress.com/">blog</a>, near the top right.</p>
<p>Whenever the customer added a batch to the system she yelled &#8220;in!&#8221;, when she received a processed batch she shouted &#8220;out!&#8221;. This helped me, the facilitator, to record when a batch went into or out of the system. The spreadsheet displays some interesting data and graphs.</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/spreadsheet.png"><img class="aligncenter size-full wp-image-222" title="SpreadSheet" src="http://darynholmes.files.wordpress.com/2011/08/spreadsheet.png?w=584&#038;h=234" alt="" width="584" height="234" /></a></p>
<p><strong>The game in progress…</strong></p>
<p>The team gathered around the table, as per the image above. I explained the rules and gave them a few minutes to plan the routes for the batches of coins.</p>
<p>I had previously sketched out paths I thought the team would use to pass the coins and it looked similar to this:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/routes1.png"><img class="size-medium wp-image-165 aligncenter" title="Routes1" src="http://darynholmes.files.wordpress.com/2011/08/routes1.png?w=204&#038;h=300" alt="" width="204" height="300" /></a></p>
<p>I introduced the ‘neighbour constraint’ to create two troublesome intersections. The plan is for those intersections to cause delays and mishaps. The ‘X’ shape is the reason I called this the ‘X Penny Game’.</p>
<p>Interestingly the team did not come up with those paths, they opted for this strategy:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/routes2.png"><img class="size-medium wp-image-166 aligncenter" title="Routes2" src="http://darynholmes.files.wordpress.com/2011/08/routes2.png?w=206&#038;h=300" alt="" width="206" height="300" /></a><br />
Later I found out that I did not explain the rules clearly, the team thought they could not pass to opposite neighbours. This misunderstanding did not do any damage, it made things more challenging. You can choose which versions of the game you would like to try.</p>
<p><strong>Round 1</strong><br />
Batches of 20<br />
Left hand only<br />
All the hard rules in place</p>
<p><em>These are the initial set of constraints enforced in round 1.</em></p>
<p>The results:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round1.png"><img class="aligncenter size-full wp-image-169" title="Round1" src="http://darynholmes.files.wordpress.com/2011/08/round1.png?w=584&#038;h=689" alt="" width="584" height="689" /></a></p>
<p>The first batch came back to the customer at 2:00 minutes. The total time was 3:45min. The first two batches went through the system the fastest. The batches were delivered at an average rate of every 30 seconds.</p>
<p>1 coin had dropped off the table and we noted this as a defect.</p>
<p>The efficiency experts said that worker X worked for 1:33min and worker Y was active for 1:35min.</p>
<p>The team said that they experienced major delays waiting for the first batch to arrive.</p>
<p><strong>Round 2</strong><br />
Left hand only<br />
All the hard rules in place<br />
Change: Batch size of 10</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round2.png"><img class="aligncenter size-full wp-image-170" title="Round2" src="http://darynholmes.files.wordpress.com/2011/08/round2.png?w=584&#038;h=686" alt="" width="584" height="686" /></a></p>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;">The first batch was delivered at 1:04min, with a total time of 2:54. The average cycle time was about half of round 1. There were regular deliveries only 10 seconds apart. </span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;"><br />
</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;">3 defects (dropped coins) occurred in this round.</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;"><br />
</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;">The efficiency experts recorded worker X had worked for 2:00min and worker Y was active for 1:25min. </span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;"><br />
</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;">The team noted that the total time was half that of round 1, even though worker X worked for 30 seconds longer. </span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;"><br />
</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;">While looking at the stats, one of the team members pointed out a WIP of 60 coins. We were doing batches of 10 with 5 workers. We came to the conclusion that a queue must have formed. The stats recorded a 60 WIP on 4 occasions.</span></div>
<div><span style="font-family:'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif;"><br />
</span></div>
<p><strong>Round 3</strong><br />
Keep: Batch of 10<br />
Left hand only<br />
All the hard rules in place<br />
Change: Don’t give coins to the next worker, unless they have an empty workspace</p>
<div>We discussed the new constraint “Don’t give coins to the next worker, unless they have an empty workspace”.  Some of us felt that this was now a pull system while others disagreed and felt more changes needed to be made before it was a true pull system. Personally I felt that it was a pull system as it looked like a Kanban system to me. We had WIP limits and the empty workspaces were visual indications that the worker required more coins.</div>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round3.png"><img class="aligncenter size-full wp-image-171" title="Round3" src="http://darynholmes.files.wordpress.com/2011/08/round3.png?w=584&#038;h=681" alt="" width="584" height="681" /></a></p>
<p>The first batch arrived at 0:56min, the total time was 2:45. This was 9 seconds faster than the previous round, interesting given the small change made in this round.</p>
<p>There were 2 defects in this round.</p>
<p>Worker X was busy for 1:45 minutes with worker Y working for 1:36 minutes.</p>
<p>The team felt that this round was more organised and that there was less waiting.</p>
<p>The following graph shows the WIP and the total time of the first 3 rounds:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/wipoffirst3rounds.png"><img class="aligncenter size-full wp-image-181" title="WIPOfFirst3Rounds" src="http://darynholmes.files.wordpress.com/2011/08/wipoffirst3rounds.png?w=584" alt=""   /></a></p>
<p>The throughput between round 2 and round 3 are intriguingly similar:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/throughput2and3.png"><img class="aligncenter size-full wp-image-179" title="Throughput2and3" src="http://darynholmes.files.wordpress.com/2011/08/throughput2and3.png?w=584" alt=""   /></a></p>
<p><strong>Round 4</strong><br />
Left hand only<br />
All the hard rules in place<br />
Keep: Don’t give coins to the next worker, unless they have an empty workspace<br />
Change: Batch of 5</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round4.png"><img class="aligncenter size-full wp-image-176" title="Round4" src="http://darynholmes.files.wordpress.com/2011/08/round4.png?w=584&#038;h=696" alt="" width="584" height="696" /></a></p>
<p>In this round, the first batch was delivered at 00:32min. The total time took ~2:50min. I don’t have the exact time, for some reason we only did 19 batches. None of us noticed this. The 19<sup>th</sup> batch was delivered at 2:43min. The throughput was impressive. On five occasions we had 2 batches coming through within the 10 second time span.</p>
<p>We encountered 4 defects.</p>
<p>The efficiency experts said worker X worked for 1:55, worker Y for 1:51.</p>
<p>The following graph overlays the WIP from round 3 with round 4:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/wip3and4.png"><img class="aligncenter size-full wp-image-180" title="WIP3and4" src="http://darynholmes.files.wordpress.com/2011/08/wip3and4.png?w=584" alt=""   /></a></p>
<p>In this case, moving from a batch of 10 to 5 seems counterproductive. Had we done all 100 coins, it may have taken longer than using batches of 10. This may have been due to the cost of moving coins from one workstation to the next. The team said this round felt more exhausting. This shows us that we don’t always benefit from reducing the batch size.</p>
<p><strong>Round 5</strong><br />
Left hand only<br />
All the hard rules in place<br />
Keep: Don’t give coins to the next worker, unless they have an empty workspace<br />
Change: Batch of 1</p>
<p>In this round the system ‘burst’. The first batch (coin) came in at 14 seconds. The throughput was about 4. By the time 8 coins had entered the system, we had recorded 7 defects. I could not keep up with the stats and called an end to this round.</p>
<p>The team noticed that while there was a high throughput, we also had a high defect rate and the pace was not sustainable. We could have made changes to make a batch of 1 more manageable e.g. limiting the number of batches\coins entering the system. Unfortunately we were not brave enough to try this batch size again.</p>
<p><strong>Round 6</strong><br />
Batch of 5<br />
Left hand only<br />
Keep: Don’t give coins to the next worker, unless they have an empty workspace<br />
Change: You can now pass to your direct left or right neighbour</p>
<p>This change allowed the team to simplify the routes the coins were passed along:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/routes3.png"><img class="aligncenter size-medium wp-image-167" title="Routes3" src="http://darynholmes.files.wordpress.com/2011/08/routes3.png?w=208&#038;h=300" alt="" width="208" height="300" /></a></p>
<p>This simplification reduced the time and disruption of passing a batch on. We remarked that this was similar to reducing the cost of moving work between stages. For example, when a development team passes work on to a separate testing team, the testing team would also need to learn about the requirements of these new features. If one team developed and tested the work we could avoid this duplication of effort.</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round6.png"><img class="aligncenter size-full wp-image-177" title="Round6" src="http://darynholmes.files.wordpress.com/2011/08/round6.png?w=584&#038;h=688" alt="" width="584" height="688" /></a></p>
<p>The first batch was delivered at 27 seconds and the total time was 2:18 minutes. No defects were recorded.</p>
<p>Worker X worked for 1.40 minutes and worker Y worked for 1.35 minutes. The team mentioned that worker Y was extremely consistent, almost always having a time of 1.35 minutes.  While we had a ‘new and faster’ system in place, there was no significant change in the average time spent working.</p>
<p>In this round the team felt that there was less waste in the system. They noted that they did better, even though people worked for the same period of time. One of the team members felt that they worked better in the first half of the round, the stats confirmed this.</p>
<p>A comment was made about the synchronicity that was achieved in this round. The team seemed to be working like clockwork. The team developed a natural rhythm or <a href="http://agile.dzone.com/news/introducing-kanban-flow-and">cadence</a>. This is reflected in the consistent cycle time:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/cycletime34and6.png"><img class="aligncenter size-full wp-image-183" title="CycleTime34and6" src="http://darynholmes.files.wordpress.com/2011/08/cycletime34and6.png?w=584" alt=""   /></a></p>
<p><strong>Round 7</strong><br />
Batch of 5<br />
Keep: Don’t give coins to the next worker, unless they have an empty workspace<br />
Keep: You can now pass to your direct left or right neighbour<br />
Change: Right hand only</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/round7.png"><img class="aligncenter size-full wp-image-178" title="Round7" src="http://darynholmes.files.wordpress.com/2011/08/round7.png?w=584&#038;h=692" alt="" width="584" height="692" /></a></p>
<p>The first batch came in at 28 seconds, the total time was 2:19 min.</p>
<p>1 defect was recorded.</p>
<p>Worker X worked for 1.36 and worker Y worked for 1.35 minutes (again!).</p>
<p>We discussed why the team had done better with their left hands. The team said this was because they had now trained their left hands.</p>
<p><strong>Additional Discussions and Observations</strong></p>
<p>We have noticed that when we try to think of ways to improve performance, our ideas tend to involve increasing WIP e.g. introducing queues. Returning to this formula:</p>
<blockquote><p>Flow Time = WIP/Throughput</p></blockquote>
<p>Increasing the WIP may be counterproductive. We noticed this in round 2 and round 3. The only difference between the two round was that we waited for the next worker to have an empty workspace before passing on the batch. In round 2 there were times when we had a WIP of 60 while in round 3 the WIP did not exceed 50. Round 3 was completed 10 seconds faster than round 2.</p>
<p>The following graph shows the amount of time worked by worker X and worker Y mapped against the time it took to process all 100 coins in the different rounds:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/08/workertimes.png"><img class="aligncenter size-full wp-image-184" title="WorkerTimes" src="http://darynholmes.files.wordpress.com/2011/08/workertimes.png?w=584" alt=""   /></a></p>
<p>I have included this to show that performance was improved due to changes in the WIP and process. The individual workers did not perform their work any faster.</p>
<p><strong>What we didn’t try</strong></p>
<p>Some team members suggested a pairing strategy, another suggested converting the efficiency experts into workers to increase the size of the team.</p>
<p>We did not try a batch of 1, with fewer batches in the system.</p>
<p>There was a discussion about using queues, this would be interesting to try.</p>
<p>It may be possible to send batches around in opposite directions, it would take some organisation but it is possible.</p>
<p><em>Again. these ideas suggest increasing WIP therefore they may be counterproductive. </em></p>
<p><strong>Improvements</strong></p>
<p>We had a number of misunderstandings as I did not have the rules written down. Sometimes fuzzy rules lead to interesting results, sometimes they frustrate participants.</p>
<p>I would have liked to have spent more time gathering feedback from the participants. Next time I may hold less rounds to give more time for discussions.</p>
<p><strong>Your Turn</strong></p>
<p>You are welcome to try this with your team, I am keen to hear what results you observed&#8230;</p>
<br />Filed under: <a href='http://darynholmes.wordpress.com/category/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/category/lean/kanban-lean/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/category/lean/'>Lean</a> Tagged: <a href='http://darynholmes.wordpress.com/tag/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/tag/batching/'>batching</a>, <a href='http://darynholmes.wordpress.com/tag/kanban/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/tag/lean-software-development/'>lean software development</a>, <a href='http://darynholmes.wordpress.com/tag/performance/'>Performance</a>, <a href='http://darynholmes.wordpress.com/tag/scrum/'>Scrum</a>, <a href='http://darynholmes.wordpress.com/tag/teams/'>Teams</a>, <a href='http://darynholmes.wordpress.com/tag/wip/'>WIP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=160&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2011/08/02/the-x-penny-game/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/layout.png?w=300" medium="image">
			<media:title type="html">Layout</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/spreadsheet.png" medium="image">
			<media:title type="html">SpreadSheet</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/routes1.png?w=204" medium="image">
			<media:title type="html">Routes1</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/routes2.png?w=206" medium="image">
			<media:title type="html">Routes2</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round1.png" medium="image">
			<media:title type="html">Round1</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round2.png" medium="image">
			<media:title type="html">Round2</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round3.png" medium="image">
			<media:title type="html">Round3</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/wipoffirst3rounds.png" medium="image">
			<media:title type="html">WIPOfFirst3Rounds</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/throughput2and3.png" medium="image">
			<media:title type="html">Throughput2and3</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round4.png" medium="image">
			<media:title type="html">Round4</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/wip3and4.png" medium="image">
			<media:title type="html">WIP3and4</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/routes3.png?w=208" medium="image">
			<media:title type="html">Routes3</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round6.png" medium="image">
			<media:title type="html">Round6</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/cycletime34and6.png" medium="image">
			<media:title type="html">CycleTime34and6</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/round7.png" medium="image">
			<media:title type="html">Round7</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/08/workertimes.png" medium="image">
			<media:title type="html">WorkerTimes</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile Practitioners</title>
		<link>http://darynholmes.wordpress.com/2011/07/27/agile-practitioners/</link>
		<comments>http://darynholmes.wordpress.com/2011/07/27/agile-practitioners/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 10:52:58 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[ScrumMaster]]></category>
		<category><![CDATA[socialise]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=153</guid>
		<description><![CDATA[It is important to mingle with other members from our industry. This keeps us up to date and stops us getting too caught up in a closed off world. If you would like to have face to face discussions with other professionals &#8230; <a href="http://darynholmes.wordpress.com/2011/07/27/agile-practitioners/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=153&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.meetup.com/AgilePractitioners/"><img class="alignright size-medium wp-image-154" title="AgilePractitioners" src="http://darynholmes.files.wordpress.com/2011/07/agilepractitioners.png?w=245&#038;h=300" alt="" width="245" height="300" /></a>It is important to mingle with other members from our industry. This keeps us up to date and stops us getting too caught up in a closed off world. If you would like to have face to face discussions with other professionals you may wish to join us at one of the  <a href="http://www.meetup.com/AgilePractitioners/">Agile Practitioners</a> events. This London based group will be meeting at least once a month. We will be discussing a variety of topics. While we don&#8217;t plan to replace any of the existing Agile groups, we do intend to be intriguingly different.</p>
<br />Filed under: <a href='http://darynholmes.wordpress.com/category/agile/'>Agile</a> Tagged: <a href='http://darynholmes.wordpress.com/tag/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/tag/kanban/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/tag/lean-software-development/'>lean software development</a>, <a href='http://darynholmes.wordpress.com/tag/scrum/'>Scrum</a>, <a href='http://darynholmes.wordpress.com/tag/scrummaster/'>ScrumMaster</a>, <a href='http://darynholmes.wordpress.com/tag/socialise/'>socialise</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/153/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=153&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2011/07/27/agile-practitioners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/07/agilepractitioners.png?w=245" medium="image">
			<media:title type="html">AgilePractitioners</media:title>
		</media:content>
	</item>
		<item>
		<title>Avatars and not acting like a manager</title>
		<link>http://darynholmes.wordpress.com/2011/07/26/avatars-and-not-acting-like-a-manager/</link>
		<comments>http://darynholmes.wordpress.com/2011/07/26/avatars-and-not-acting-like-a-manager/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 15:10:01 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[lean software development]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[ScrumMaster]]></category>
		<category><![CDATA[South Park]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=147</guid>
		<description><![CDATA[Recently we started using avatars on our Kanban board. We are certainly not the first to do this, however I was surprised by how excited and rejuvenated the team became. If you have never tried this I recommend you suggest it to your team &#8230; <a href="http://darynholmes.wordpress.com/2011/07/26/avatars-and-not-acting-like-a-manager/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=147&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently we started using avatars on our Kanban board. We are certainly not the first to do this, however I was surprised by how excited and rejuvenated the team became. If you have never tried this I recommend you suggest it to your team and see if they go for it.</p>
<p>Not only is it fun, but it is also practical. With one look at our board we can see exactly who is working on what and who they are working with. Each person has one avatar on the board, therefore they can only work on one task at a time. Occasionally someone will start work without updating the board, but this is very seldom.</p>
<p>We went for the classic <a title="South Park" href="http://www.sp-studio.de/">South Park characters</a>, each team member got to draw themselves, here is the result:</p>
<p><a href="http://darynholmes.files.wordpress.com/2011/07/stuffplanners.png"><img class="size-full wp-image-150 aligncenter" title="StuffPlanners" src="http://darynholmes.files.wordpress.com/2011/07/stuffplanners.png?w=584&#038;h=495" alt="" width="584" height="495" /></a></p>
<p>You may have noticed that my character (Daryn) is a bit stressed out. This is a reminder to myself, that as the ScrumMaster I should not get overly concerned about everything. I need to trust in the team and leave them alone to get the job done. I need to remember that a ScrumMaster is a facilitator and not a manager. For me, not acting like a manager is the most difficult part about being a ScrumMaster.</p>
<br />Filed under: <a href='http://darynholmes.wordpress.com/category/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/category/lean/kanban-lean/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/category/lean/'>Lean</a> Tagged: <a href='http://darynholmes.wordpress.com/tag/agile/'>Agile</a>, <a href='http://darynholmes.wordpress.com/tag/kanban/'>Kanban</a>, <a href='http://darynholmes.wordpress.com/tag/lean-software-development/'>lean software development</a>, <a href='http://darynholmes.wordpress.com/tag/scrum/'>Scrum</a>, <a href='http://darynholmes.wordpress.com/tag/scrummaster/'>ScrumMaster</a>, <a href='http://darynholmes.wordpress.com/tag/south-park/'>South Park</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=147&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2011/07/26/avatars-and-not-acting-like-a-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>

		<media:content url="http://darynholmes.files.wordpress.com/2011/07/stuffplanners.png" medium="image">
			<media:title type="html">StuffPlanners</media:title>
		</media:content>
	</item>
		<item>
		<title>Ajax Fundamentals &#8211; Part 4</title>
		<link>http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/</link>
		<comments>http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 17:14:27 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=99</guid>
		<description><![CDATA[Index &#124; Part 1 &#124; Part 2 &#124; Part 3 &#124; Part 4 &#124; Part 5 5. Development and Debugging Tools 5.1. Documenting JavaScript JSDoc is an open source tool used to add inline documentation to JavaScript source files.   JSDoc &#8230; <a href="http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=99&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p align="right"><a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-about-index/">Index</a> | <a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-part-1/">Part 1</a> | <a href="http://darynholmes.wordpress.com/2008/04/03/ajax-fundamentals-part-2/" target="_self">Part 2</a> | <a href="http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/">Part 3</a><span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> </span>Part 4<span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> Part 5</span></p>
<h2>5. Development and Debugging Tools</h2>
<h3>5.1. Documenting JavaScript</h3>
<p><a href="http://jsdoc.sourceforge.net/" target="_blank">JSDoc</a> is an open source tool used to add inline documentation to JavaScript source files.   JSDoc is based on the javadoc tool.   Many of the javadoc characteristics have been included in JSDoc.   An example of using JSDoc can be found <a href="http://jsdoc.sourceforge.net/#usage" target="_blank">here</a>.</p>
<h3>5.2. Firefox Tools &amp; Extensions</h3>
<p><a href="http://www.mozilla.org/projects/inspector/" target="_blank">DOM Inspector</a> is included in the Mozilla Suite and Firefox browser.   This tool provides a graphical user interface that enables a user to brows the document object model of any site.   One can view, update and insert DOM attributes dynamically.   In order to assist JavaScript developers, DOM Inspector can be switched to JavaScript Object mode.   This shows all the properties and methods available to a JavaScript for a particular mode.   DOM Inspector provides a JavaScript evaluation window that allows the user to execute JavaScript against selected nodes.   There is the option to use CSS Style Rules and Computed Style information.   This allows a user to examine the CSS attributes associated with different page elements.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1815" target="_blank">Firefox JavaScript Console</a> is a tool that logs JavaScript errors found on a page when the page is rendered.   The Firefox JavaScript Console gives ‘compiler-type’ messages.   It describes the error that occurred and the gives the line number.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a> integrates with Firefox and provides many development tools.   Firebug has a version of a DOM inspector that enables a developer to find elements.   CSS support allows settings to be altered and viewed.   Firebug allows one to monitor the network activity in order to determine how long it takes for different sections of a page to download.      A JavaScript Debugger allows one to debug and step through the JavaScript at runtime.</p>
<p><span id="more-99"></span></p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/249/" target="_blank">HTML Validator</a> is a Mozilla extension that performs HTML validation within Firefox and Mozilla.   HTML Validator validates the HTML locally and does not use a remote third party.   The number of errors of a HTML page is seen on the form of an icon in the status bar when browsing.   HTML Validator offers a set of tools to assist in validating and correcting HTML tags.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/165" target="_blank">Checky</a> is Firefox extension tool for validating HTML.   In addition to HTML, Checky can validate XHTML, CSS, RDF, RSS, XML and many more formats.   Checky sends the source to third-party cites to be validated.   The third-party cites may be free or commercial services.</p>
<p><a href="http://chrispederick.com/work/web-developer/">Pederick’s Firefox Web Developer</a> extension offers a large set of tools for a website developer.      Web Developer provides an extensive set of tools, from highlighting table cells to converting ‘GET’ requests to ‘POST’ requests.   This toolbar contains more than 80 tools and is an essential commodity.</p>
<h3>5.3. JavaScript Syntax Checking</h3>
<p><a href="http://www.jslint.com/" target="_blank">JSLint</a> is an online tool that evaluates JavaScript code.   JSLint scans the JavaScript code and identifies syntax errors, structural problems and questionable coding-style conventions.</p>
<h3>5.4. Compression and Obfuscation</h3>
<p><a href="http://hometown.aol.de/_ht_a/memtronic/" target="_blank">MemTronic&#8217;s</a> FREEWARE HTML/JavaScript Cruncher-Compressor  is a freeware tool that can perform both compression and obfuscation.   The MemTronic&#8217;s website provides the following information.   The tool can Crunch, Compress and Obfuscate.   Crunching removes all comments and whitespace.   Crunching has a bandwidth saving between 20%-50%.   Compressing will compress the script with a real compression-scheme, with auto decompression added to the file.   This results in bandwidth savings between 40% &#8211; 90%.   The obfuscator has not been released at this stage.   Once complete this tool will encode the script into a format that humans can not easily read.   When using Compress, the file will undergo a level of obfuscation.</p>
<p align="right"><a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-about-index/">Index</a> | <a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-part-1/">Part 1</a> | <a href="http://darynholmes.wordpress.com/2008/04/03/ajax-fundamentals-part-2/" target="_self">Part 2</a> | <a href="http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/">Part 3</a><span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> </span>Part 4<span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> Part 5</span></p>
<br />Posted in AJAX, Technologies Tagged: AJAX, JavaScript <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=99&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>
	</item>
		<item>
		<title>Ajax Fundamentals &#8211; Part 3</title>
		<link>http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/</link>
		<comments>http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 08:39:01 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Search Engine Indexing]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=86</guid>
		<description><![CDATA[Index &#124; Part 1 &#124; Part 2 &#124; Part 3 &#124; Part 4 &#124; Part 5 3. Security Issues The XMLHttpRequest object is restricted to run within the browser’s security sandbox. Any resources requested by the XMLHttpRequest object must reside &#8230; <a href="http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=86&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p align="right"><a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-about-index/">Index</a> | <a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-part-1/">Part 1</a> | <a href="http://darynholmes.wordpress.com/2008/04/03/ajax-fundamentals-part-2/" target="_self">Part 2</a> | Part 3<span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> </span><a href="http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/" target="_self">Part 4</a><span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> Part 5</span></p>
<h2>3. Security Issues</h2>
<p>The XMLHttpRequest object is restricted to run within the browser’s security sandbox. Any resources requested by the XMLHttpRequest object must reside within the same domain from which the calling script originated. Therefore the XMLHttpRequest object is constrained to requesting resources that reside within the same domain from which the script was originally served. The W3C <a href="http://www.w3.org/TR/XMLHttpRequest/" target="_blank">states</a>, that in the future The XMLHttpRequest Object specification will define a way of doing cross-site requests.</p>
<p>There is an overabundance of online documentation stating that Ajax introduces multiple security threats. These threats include fake requests, denial of service, cross-site scripting (XSS), reliance on client-side security, and more. Jeremiah Grossman’s article, <a href="http://jeremiahgrossman.blogspot.com/2006/11/myth-busting-ajax-in-security.html" target="_blank">Myth-Busting AJAX (In)security</a>, maintains that these security issues existed before Ajax and the recommended security best practices remain unchanged. Part of internet security basics is to distrust the client. Ajax is a client side technology and requests need to be treaded with the same caution as all other calls.</p>
<h2>4. Disadvantages</h2>
<h3>4.1. Usability Problems</h3>
<p>Web users have become familiar with using classic web pages. Users have become accustomed to using browser features such as the back and next buttons. Ajax calls are not loaded onto the browsers navigation stack. Therefore the back button will not undo the last ‘Ajax operation’. Developers need to explicitly cater for undo operations.</p>
<p>Ajax enabled pages have a notion of state; this state is altered as the user navigates through the site. The browser is unaware of this state, and it is not reflected in the address bar. Therefore users are not always able to book mark a certain page state. Developers need to consider this when deciding on when to use Ajax.</p>
<p>The asynchronous nature may make page updates difficult for the user to notice. The developer needs a way of drawing the user’s attention to the modified section of the page. The ‘yellow-fade technique’ has become common practice. In this technique the changes are highlighted with a yellow background, and the yellow fades gradually. These and other techniques are becoming familiar to web users.</p>
<p><span id="more-86"></span></p>
<h3>4.2. JavaScript Disabled</h3>
<p>If a user has disabled JavaScript no JavaScript will be executed and certainly no Ajax requests will be sent. A site that relies too heavily on JavaScript will be crippled if the user disables JavaScript, <a href="http://www.gucci.com/">Gucci</a> is an example of this. This site used to show a blank white page if a user browsed to it after disabling JavaScript. Now it explains that you need to have JavaScript enabled to use the site.</p>
<p>A site that relies on JavaScript for core functionality restricts its users to those who have JavaScript enabled. Having said that we should look at how many users are allowing JavaScript to run in there browsers. The following statistics from <a href="http://www.thecounter.com/">The Counter</a> show JavaScript statistics.</p>
<p><!--more--></p>
<p><span style="text-decoration:underline;">Wed Mar 1 00:01:01 2000 &#8211; Fri Mar 17 23:59:01 2000</span><br />
Javascript 1.2+: 260153365 (79%)<br />
Javascript &lt;1.2: 7790575 (2%)<br />
Javascript false: 59884983 (18%)</p>
<p><span style="text-decoration:underline;">Thu Mar 1 00:01:01 2007 &#8211; Thu Mar 22 13:58:01 2007</span><br />
Javascript 1.2+: 56607094 (95%)<br />
Javascript &lt;1.2: 193622 (0%)<br />
Javascript false: 2524217 (4%)</p>
<p>These stats show that most users are using JavaScript, therefore many stake holders would approve of the use of Ajax on their sites. Although there are cases where limiting access is unacceptable.</p>
<h3>4.3. Search Engine Indexing</h3>
<p>Web crawlers automatically navigate through the web by following link tags e.g. href, src etc. Current web crawlers do not examine client side scripts. Search engines skip the JavaScript code that executes the Ajax calls. Content loaded by Ajax calls will not be indexed by search engines.</p>
<p>Multiple solutions have been proposed to solve this problem. Most of these are workarounds and do not solve the underlying problem. In fact some approaches are considered as <a href="http://www.softwaredeveloper.com/features/google-ajax-play-nice-061907/" target="_blank">cloaking</a> and can get the site black listed by Google. Google have stated that they will improve there searches, at present they do not follow Ajax calls. In order to make sure that specific content will be found by search engines, the site should have standard HTML links that web crawlers can follow.</p>
<p align="right"><a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-about-index/">Index</a> | <a href="http://darynholmes.wordpress.com/2008/04/02/ajax-fundamentals-part-1/">Part 1</a> | <a href="http://darynholmes.wordpress.com/2008/04/03/ajax-fundamentals-part-2/" target="_self">Part 2</a> | Part 3<span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> </span><a href="http://darynholmes.wordpress.com/2008/09/23/ajax-fundamentals-part-4/" target="_self">Part 4</a><span style="color:#c0c0c0;"> <span style="color:#000000;">|</span> Part 5</span></p>
<p align="right">
<p align="right">
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darynholmes.wordpress.com/86/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darynholmes.wordpress.com/86/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=86&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2008/07/12/ajax-fundamentals-part-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>
	</item>
		<item>
		<title>Short-listed!?!</title>
		<link>http://darynholmes.wordpress.com/2008/07/08/short-listed/</link>
		<comments>http://darynholmes.wordpress.com/2008/07/08/short-listed/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 21:17:25 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[blog awards]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=75</guid>
		<description><![CDATA[About a week ago I noticed some incoming links from Computer Weekly.com. I assumed that someone had commented on one of my posts, so I browsed there wondering if it was a positive or negative comment. Once the page loaded, &#8230; <a href="http://darynholmes.wordpress.com/2008/07/08/short-listed/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=75&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>About a week ago I noticed some incoming links from Computer Weekly.com. I assumed that someone had commented on one of my posts, so I browsed there wondering if it was a positive or negative comment. Once the page loaded, I was completely surprised. It turns out that this blog has been short-listed for the <a href="http://www.computerweekly.com/Articles/2008/06/30/230439/programming-and-development-blogs-computerweekly.com-it-blog-awards.htm" target="_blank">Computer Weekly.com IT Blog Awards</a>! This came as a complete surprise to me.</p>
<p>This blog had really humble beginnings. In fact it was not even my idea to start a blog, it was my <a href="http://www.zuehlke.com/en/know-how/nach-technologien/agile-software-entwicklung/" target="_blank">work</a> that encouraged me to start one. Initially I felt that I did not have that much to contribute to the world at large. In fact I still don&#8217;t feel that my blog is as innovative as some others, although judging by the response to my &#8216;<a href="http://darynholmes.wordpress.com/2008/03/15/beginners-tutorial-routing-in-rails-20-with-rest-part-1-of-n/" target="_blank">Routing In Rails Tutorial</a>&#8216; it appears as if I do have a nice way of explaining things. I guess this is one of the main reasons I have been voted onto the shortlist.</p>
<p>The competition ends on the 31st of July 2008. If you would like to vote please go to this <a href="http://www.computerweekly.com/blogawards.htm" target="_blank">on-line voting page</a>. This blog can be found under the &#8216;Programming and technical blogs&#8217;<strong> </strong>drop-down list. It is a surprisingly painless exercise, it takes less then a minute and no registration is required.</p>
<p>Thank you to all of you who have voted for this blog.</p>
<p>Daryn</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darynholmes.wordpress.com/75/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darynholmes.wordpress.com/75/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=75&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2008/07/08/short-listed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>
	</item>
		<item>
		<title>Beginners Tutorial: Routing in Rails 2.0 (with REST) &#8211; Part 6 of n</title>
		<link>http://darynholmes.wordpress.com/2008/07/06/beginners-tutorial-routing-in-rails-20-with-rest-part-6-of-n/</link>
		<comments>http://darynholmes.wordpress.com/2008/07/06/beginners-tutorial-routing-in-rails-20-with-rest-part-6-of-n/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 20:33:00 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Routing]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=73</guid>
		<description><![CDATA[In part 5 we looked at RESTful routing. In this part we continue to explore RESTful routing, by examining nested resources. I originally planned to cover nested routes and to cover two questions posted to me in previous comments and &#8230; <a href="http://darynholmes.wordpress.com/2008/07/06/beginners-tutorial-routing-in-rails-20-with-rest-part-6-of-n/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=73&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://darynholmes.wordpress.com/2008/05/26/beginners-tutorial-routing-in-rails-20-with-rest-part-5-of-n/">part 5</a> we looked at RESTful routing. In this part we continue to explore RESTful routing, by examining nested resources.</p>
<p>I originally planned to cover nested routes and to cover two questions posted to me in previous comments and emails. One question was with regards to &#8216;one to many relationships&#8217; e.g. an album has many songs. The second question was from Tom in part 3; this was about adding save as functionality.</p>
<p>In trying to answer these questions I created a new application – a text editor with a version history. This has turned out to be a fairly interesting piece of work. I then changed my mind and decided to include it in a follow up post. I am hoping to have that out later this week (before Friday the 11th of July).  As the ‘follow up’ post will have a practical example of nested resources, this post will not have the usual practical section with the experiments.</p>
<h2>Part 6</h2>
<h3>Introduction to Nested Resources</h3>
<h4>The Nested URI</h4>
<p>Returning to the familiar Music Store application, imagine we added songs to the application. Like Albums, Songs are resources and we could expect to access a song with this URI:</p>
<p>/songs/124</p>
<p>We could then perform the required CRUD operations on that URI based on the REST API as discussed in part 5.</p>
<p>An album has many songs. We can express this within the URI e.g.</p>
<p>/albums/10/songs/124</p>
<p>Once again we could make use of the HTTP verbs to perform CRUD in a RESTful way.</p>
<p><strong>In this particular implementation</strong>, this URI does not mean that this is the <!--[if gte mso 9]&gt; Normal   0   21         false   false   false                             MicrosoftInternetExplorer4 &lt;![endif]--><!--[if gte mso 9]&gt; &lt;![endif]--><!--  --><!--[if gte mso 10]&gt; &lt;!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} --> <!--[endif]-->124<sup>th</sup> song of album 10 -<em> it is possible for it to be the fist song of album 10</em>.  The URI is pointing to the 124<sup>th</sup> song in the system.</p>
<p>If we wanted the URI to state the song\track number of the specified album then we could alter the above implementation. Then we could expect to see URIs of:</p>
<p>/albums/10/songs/5<br />
and<br />
/albums/11/songs/5</p>
<p>This would not result in a URI conflict.</p>
<p><span id="more-73"></span></p>
<h3>Implementing Nested resources in Rails</h3>
<p>If we decided to add songs to the Music Store application, we could start off by aiming for a URI of:</p>
<p>/songs/124</p>
<p>As you may recall, we can achieve this by declaring this resource in the routes.rb file:</p>
<p><pre class="brush: ruby;">
map.resources :songs
</pre></p>
<p>This will give us access to helper methods such as songs_url, song_url (@song) etc. This was discussed in part 5 under ‘Experiment 5.2 Showing the Index Page’.</p>
<p>Next we could aim for a nested URI:</p>
<p>/albums/10/songs/124</p>
<p>To achieve this we use the following construct:</p>
<p><pre class="brush: ruby;">
  map.resources :albums do |albums|
    albums.resources :songs
  end
</pre></p>
<p>Note that it is <span style="text-decoration:underline;">albums</span>.resources :songs and not <span style="text-decoration:underline;">map</span>.resources.</p>
<p>With this routing rule, Rails will generate slightly different helper methods. To view these routes we could use the method described in part one. There is also a more convenient rake task: <strong>rake routes</strong>.<br />
<em>This is one of the ‘things’ I have been meaning to mention. You may have read it in a previous comment.</em></p>
<p>If you use ‘rake routes’ you will notice that there are a quite a lot helper methods being generated, more than the 7 I pointed out in part 5. The ‘extra’ methods are there to create URIs for different formats.<em><br />
</em><br />
Below is filtered output from ‘rake routes’</p>
<pre style="border:1px solid black;overflow:auto;width:98%;height:160px;"> album_songs 		GET    	/albums/:album_id/songs	            {:action=&gt;"index", :controller=&gt;"songs"}
 			POST 	/albums/:album_id/songs             {:action=&gt;"create", :controller=&gt;"songs"}
 new_album_song	 	GET   	/albums/:album_id/songs/new         {:action=&gt;"new", :controller=&gt;"songs"}
 edit_album_song	GET    	/albums/:album_id/songs/:id/edit    {:action=&gt;"edit", :controller=&gt;"songs"}
 album_song 		GET    	/albums/:album_id/songs/:id         {:action=&gt;"show", :controller=&gt;"songs"}
 			PUT    	/albums/:album_id/songs/:id         {:action=&gt;"update", :controller=&gt;"songs"}
 			DELETE 	/albums/:album_id/songs/:id         {:action=&gt;"destroy", :controller=&gt;"songs"}</pre>
<p>As you can see, we now have helper methods which look like album_songs_url and album_song_url(@song). The path versions are also available.</p>
<p>Inside the view we could have:<br />
link_to &#8216;Edit&#8217;, edit_album_song(@album, @song)</p>
<p>Looking at the rake routes output above, we can see that the songs controller can get access to the album ID via params[:album_id]. The song ID can be obtained using params[:id].</p>
<p>Now we have helper methods that generate URIs of the form:</p>
<p>/albums/10/songs/124</p>
<p>Our routing system also knows how to deal with incoming URIs of that form.<br />
Now we would like an implementation that allows us to use URIs like:</p>
<p>/albums/10/songs/5</p>
<p>Where song 5 really is the 5th song in album 10. Therefore we could have:</p>
<p>/albums/10/songs/5<br />
and<br />
/albums/20/songs/5</p>
<p>As with most things, it is easy once you know how. To achieve this we simply need to override the ‘to_param’ method in the song model. I imagine that would look something like this:<br />
<pre class="brush: ruby;">
def to_param
number # number is the track number of this song on the album
end</pre><br />
After this change we would need to modify the controller as params[:id] would return the song number and not the song id. The controllers would need to use</p>
<p>@song = Song.find_by_number(params[:id])<br />
and not<br />
@song = Song.find(params[:id])</p>
<p>There will be more on this in the follow up text editor post.</p>
<h3>Deep Nesting</h3>
<p>Jamis Buck recommends that resources should never be nested more than one level deep. You can find his original post about that <a href="http://weblog.jamisbuck.org/2007/2/5/nesting-resources" target="_blank">here</a>. The Rails community seems to be divided about this ‘rule of thumb’. I recommend that you follow this guideline – although remember it is just a guideline, you can use deeper nesting if the need arises.</p>
<h2>End of Part 6</h2>
<p>This was a quick and short introduction to nested resources. There is a bit more to them, but this enough to start writting Rails applications.</p>
<p>In the follow up, &#8216;plain text editor&#8217;, post we will see a nested route being used a slightly larger application. In that post we will look far more than just routing, that is why I took it out of this part. I will finish that up ASAP.  I hope you have enjoyed this post&#8230;</p>
<p>- Thank you, Daryn</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darynholmes.wordpress.com/73/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darynholmes.wordpress.com/73/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=73&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2008/07/06/beginners-tutorial-routing-in-rails-20-with-rest-part-6-of-n/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming While Stupid</title>
		<link>http://darynholmes.wordpress.com/2008/06/21/programming-while-stupid/</link>
		<comments>http://darynholmes.wordpress.com/2008/06/21/programming-while-stupid/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 14:37:23 +0000</pubDate>
		<dc:creator>darynholmes</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[lean software development]]></category>

		<guid isPermaLink="false">http://darynholmes.wordpress.com/?p=69</guid>
		<description><![CDATA[Over engineering is a major problem within the software industry. This problem has led to the adoption of ‘lean software development’ &#8211; at least amongst the agile folk. Lean software development is writing code to support the current set of &#8230; <a href="http://darynholmes.wordpress.com/2008/06/21/programming-while-stupid/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=69&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over engineering is a major problem within the software industry. This problem has led to the adoption of ‘lean software development’ &#8211; <em>at least amongst the agile folk</em>. Lean software development is writing code to support the current set of requirements and nothing more. This is not as easy to do as one might think.</p>
<p>As developers we naturally tend to make assumptions as to what the user, or system, will need. In truth, it is very difficult to accurately predict the future requirements of a system. Coding to meet our assumptions will inevitably lead to over engineering.</p>
<p>We should not let our intuition guide us into false requirements. As strange as it may sound, it takes a concious effort to stop ourselves from doing extra work. We need to adopt a &#8216;lean coding culture&#8217;. We need to constantly remind our selves to stick to lean software development. In agile teams it is common to hear developers reminding each other with certain acronyms and expressions e.g. &#8216;do the simplest thing that works&#8217;.</p>
<p>‘Do the simplest thing that works’ is in-line with lean software development, although it can be misleading. Some people interpret this as &#8216;do the first thing that comes to mind&#8217; e.g. slap on another if statement &#8211; that is a simplistic solution and not a simple solution. If you take a quick and dirty simplistic approach you will end up with a <a href="http://www.laputan.org/mud/mud.html#BigBallOfMud" target="_blank">big ball of mud</a>. You need to do the simplest thing that <em>works</em>. The thing that <em>works</em> is something that can be tested, it is something that does not add unnecessary complexity. Therefore the simplest thing that works is not necessarily the quickest and easiest thing to do.</p>
<p><span id="more-69"></span>When talking about lean software development we often refer to KISS (Keep It Simple Stupid). I agree with keeping things simple but I don’t like to be called stupid, <em>the truth hurts</em>. I prefer to use: Keep It Simple and Sensible. This is more positive and the sensible part indicates that we should give some thought to our code. For example, instead of littering your code with conditional statements you could refactor the code to use an established design pattern. Having said that, design patterns are not always a good idea.</p>
<p>You should not implement a design pattern unless there are real signs indicating that you need a smarter solution. It can be detrimental to implement a design pattern for the sake of having one. You are likely to implement the wrong pattern and that code will be a hindrance. Only do what you really <em>need</em> to do. This is also referred to as YAGNI.</p>
<p>YAGNI (You Ain’t Gonna Need It) – This is a term used by Russ Olsen in <a href="http://www.rubyinside.com/design-patterns-in-ruby-by-russ-olsen-695.html" target="_blank">Design Patterns in Ruby</a>. In this book, Russ Olsen does a fantastic job of explaining design patterns. He also explains when not to use certain patterns and the problems that come with using each pattern &#8211; <em>After all, software is about trade off&#8217;s.</em></p>
<p>Russ Olsen explains that we should not write code or implement patterns in anticipation of a requirement that might emerge. Firstly that requirement may never surface, and if it does it may have a stipulation which makes the pre-emptive solution void. It is safer to code to meet the current and real requirements of the system. To drive this point home, here is a <em>delightful </em>paragraph from Russ Olsens’ Design Patterns in Ruby:</p>
<p>“Look at it this way: Barring a sharp blow to the head, as you stand here today you are as dumb as you ever will be. We are all learning, getting smarter every day. This is especially true in software projects: You can be sure that you will have a better grasp of the requirements, technology, and design of any software that you work on at the end of the project then at the beginning. Whenever you put in a feature before you really need it, you are guilty of programming while stupid; if you wait until you really do need the thing, you are likely to have a better understanding of what you need to do and how you should go about doing it.”</p>
<p>The moral is: Don&#8217;t be guilty of programming while stupid</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/darynholmes.wordpress.com/69/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/darynholmes.wordpress.com/69/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/darynholmes.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/darynholmes.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/darynholmes.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=darynholmes.wordpress.com&amp;blog=2505811&amp;post=69&amp;subd=darynholmes&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://darynholmes.wordpress.com/2008/06/21/programming-while-stupid/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/be1f59e4118912d487c5330586f39b72?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Daryn</media:title>
		</media:content>
	</item>
	</channel>
</rss>
