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

<channel>
	<title>Irie, Inc. &#187; Uncategorized</title>
	<atom:link href="http://www.irie-inc.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.irie-inc.com</link>
	<description>Agile Software Development Consulting</description>
	<lastBuildDate>Mon, 02 May 2011 19:51:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>NLP and User Stories</title>
		<link>http://www.irie-inc.com/2011/03/24/nlp-and-user-stories/</link>
		<comments>http://www.irie-inc.com/2011/03/24/nlp-and-user-stories/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 17:57:38 +0000</pubDate>
		<dc:creator>jarrowwx</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.irie-inc.com/?p=211</guid>
		<description><![CDATA[While walking through a Neuro-Linquistic Programming (NLP) introduction, I couldn&#8217;t help but be struck by some of the similarities between some of what they were saying, and what we do in an Agile team while creating our backlog. The NLP teachings involved a series of questions to ask someone that you were trying to help. [...]]]></description>
			<content:encoded><![CDATA[<p>While walking through a Neuro-Linquistic Programming (NLP) introduction, I couldn&#8217;t help but be struck by some of the similarities between some of what they were saying, and what we do in an Agile team while creating our backlog.</p>
<p>The NLP teachings involved a series of questions to ask someone that you were trying to help.  Look at a couple of examples:</p>
<p><b>What do you want?</b><br />
User Story: As a [role] I want [feature] so that [benefit].</p>
<p><b>How will you know when you have it?</b><br />
Acceptance Criteria: Given [precondition] when [action] then [result].</p>
<p>What else could an Agile product owner learn from these NLP techniques?</p>
<p><b>What are the advantages to the Status Quo?</b><br />
This is a valid question.  One that should not be glossed over.  The current business process must offer SOME benefits, or it would not be in place.  When the user says they want XYZ, asking them in what way the current approach is better than XYZ could be a very useful eye-opener, especially when coupled with the next couple of questions.</p>
<p><b>What are the needs and/or wants behind those advantages?</b><br />
<b>How can we fulfill those needs while still getting you what you want?</b><br />
What a great way of getting buy-in from your users!</p>
<p>The NLP teachings go on, asking for beliefs that the client might have which tell them that what they want, their goal, their aspiration, is unrealistic.  In the event of a customer/user who has already bought in to and is excited about what you propose to give them, these additional techniques may not be necessary.  But when you are dealing with users who have been doing things the same way for years and years, and they are resistant to change, these techniques could mean the difference between acceptance and resistance.  </p>
<p>Sounds to me like there should be a book:  NLP for Agile Product Owners: The pattern of success!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irie-inc.com/2011/03/24/nlp-and-user-stories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Equivalence Classes</title>
		<link>http://www.irie-inc.com/2011/02/25/using-equivalence-classes/</link>
		<comments>http://www.irie-inc.com/2011/02/25/using-equivalence-classes/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 18:57:29 +0000</pubDate>
		<dc:creator>jarrowwx</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.irie-inc.com/?p=209</guid>
		<description><![CDATA[You ever have to deal with a database full of production data, and you have to write code that works with all of it?  Or maybe you need to test to make sure that someone else's code works with all of it?  If you have millions, or hundreds of millions of records, it can be very daunting to figure out "Have I identified all of the use cases that apply?"
]]></description>
			<content:encoded><![CDATA[<p>You ever have to deal with a database full of production data, and you have to write code that works with all of it?  Or maybe you need to test to make sure that someone else&#8217;s code works with all of it?  If you have millions, or hundreds of millions of records, it can be very daunting to figure out &#8220;Have I identified all of the use cases that apply?&#8221;</p>
<p>I first ran into this problem when working for TransUnion.  They had a data set of 375 million records, give or take, that needed to be transformed and loaded into a database with a particular schema.  The objective was to be able to use our search mechanism to find the records after they had been loaded.  Sounds simple enough.</p>
<p>I started with the last name.  What are all of the different last names I needed to worry about?  I wrote a script to parse out the data set and build a histogram of the most common names.  As to be expected, &#8220;Smith&#8221; came out on top! <img src='http://www.irie-inc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   But there were, if memory serves, about 64 million distinct values.  Wow!  Way too many to wrap my brain around.  I had to simplify.  To shorten the list.  But how?</p>
<p>The main thing I was concerned about was punctuation.  How does the punctuation differ between the records?  Some names are simple, single word tokens, like Smith, Jones, Johnson, etc.  Others are hyphenated, like Zeta-Jones or Smith-Barney.  Others have multiple tokens, like De La Joya.  But what else is lurking in that list of 64 million names that I had to worry about?  </p>
<p>My solution was to write code to &#8220;fold&#8221; names that had a lot in common into the same value.  I started by processing the histogram of 64 million names, and transforming the name by converting every upper-case letter to an &#8216;X&#8217;, and every lower-case letter to an &#8216;x&#8217;, and every digit to a &#8217;9&#8242;.  Then, I built a histogram of those.  This was very instructive, but I saw that there were still lots of names that were clearly functionally equivalent.  I decided that a series of the same character, 4 or more in a row, should be considered functionally equivalent, regardless of how many there were past 4.  So I added just a little bit more code to my script, and the number of buckets dropped dramatically.  Looking at the histogram, I could begin to see more and more relevant patterns that I had to take into consideration.</p>
<p>The actual work continued on from there, making the analysis and &#8220;folding&#8221; code more and more complex.  But the essence of it is still the same:  Transform the value into another value such that two functionally equivalent input values have the same output value.  Or in other words, partition the data into Equivalence Classes.  Use the class as the key in a histogram, and see what drops out.  Repeat until comfortable that the proper categories have been identified.  Then, the function that was used to make the transformation is a very concise record of some of the kinds of things to pay attention to in the data.  And the histogram (with original values preserved so I knew which input yielded which bucket key) provides good test/sample data.</p>
<p>This is a principle that I have found opportunity to use time and time again.  I&#8217;ve used it to identify patterns in strings, to strip out uniqueness from highly variable log output so it becomes more standardized and therefore more readily subject to statistical analysis. I&#8217;ve used it to identify unique combinations and/or permutations of record field values (more on that another time, maybe).  Basically, since that day, there has hardly been a job that I&#8217;ve taken on where I didn&#8217;t have an opportunity to use this basic principle to help me do a better job of coding for or testing with real-world data.</p>
<p>Interested in learning more?  I gave a talk to the <a href="www.sao.org">Software Association of Oregon</a> monthly meeting on the subject, for which I prepared some <a href="/docs/equivalenceClasses.pptx">slides</a>.  Or, post a comment, and I&#8217;ll answer you directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irie-inc.com/2011/02/25/using-equivalence-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whole Team Responsibility</title>
		<link>http://www.irie-inc.com/2009/12/16/whole-team-responsibility/</link>
		<comments>http://www.irie-inc.com/2009/12/16/whole-team-responsibility/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 18:16:09 +0000</pubDate>
		<dc:creator>jarrowwx</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.irie-inc.com/?p=204</guid>
		<description><![CDATA[It was interesting reading Mike Cohn&#8217;s blog entry on The Falacy of One Throat to Choke. I remember this very phrase being used during my ScrumMaster training, saying that the Product Owner was the &#8220;one throat to choke&#8221;. Mike is right, of course. It is called a Scrum team for a reason. The team will [...]]]></description>
			<content:encoded><![CDATA[<p>It was interesting reading Mike Cohn&#8217;s blog entry on <a href="http://blog.mountaingoatsoftware.com/the-fallacy-of-one-throat-to-choke">The Falacy of One Throat to Choke</a>.  I remember this very phrase being used during my ScrumMaster training, saying that the Product Owner was the &#8220;one throat to choke&#8221;.  </p>
<p>Mike is right, of course.  It is called a Scrum <i>team</i> for a reason.  The team will work together in order to achieve success.  If the Product Owner has not been able to gather enough information to be confident of the direction to move forward, the team won&#8217;t sit around watching youtube until they do.  The team will ask the product owner what they DO know, and will exert their efforts in ways that will help the Product Owner.  For example, they may build prototypes that the PO can take to the users, to facilitate more constructive conversations.  </p>
<p>One might argue that if the team builds the wrong thing, it is on the head of the product owner.  But the team is full of living, breathing, <i>thinking</i> human beings.  The developers are not mindless automatons serving the whims of the product owner.  Everyone should have the mindset of serving the needs of the customer.  If team members think that perhaps the product is going in the wrong direction, they have a responsibility to communicate that.  If they do not, their neck deserves to get choked as much as the PO.  Now, if you have a product owner who doesn&#8217;t take feedback, then by all means, you have your single throat to choke.</p>
<p>One argument leveled against Agile is that it can be used as an excuse for not delivering, citing the need for &#8216;direction.&#8217;  This, of course, is a Waterfall mentality trying to do iterative development, and not Agile.  The team that takes responsibility for their success will never have that argument used against them.   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.irie-inc.com/2009/12/16/whole-team-responsibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

