<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The Buddha Nature of Software</title>
	<atom:link href="http://maxtempleton.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://maxtempleton.wordpress.com</link>
	<description>Max Templeton on software design and related topics</description>
	<lastBuildDate>Wed, 02 Nov 2011 19:27:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='maxtempleton.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Buddha Nature of Software</title>
		<link>http://maxtempleton.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://maxtempleton.wordpress.com/osd.xml" title="The Buddha Nature of Software" />
	<atom:link rel='hub' href='http://maxtempleton.wordpress.com/?pushpress=hub'/>
		<item>
		<title>On strategy</title>
		<link>http://maxtempleton.wordpress.com/2011/10/28/on-strategy/</link>
		<comments>http://maxtempleton.wordpress.com/2011/10/28/on-strategy/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 17:01:27 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Tactics]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[intelligence]]></category>
		<category><![CDATA[objectives]]></category>
		<category><![CDATA[policies]]></category>
		<category><![CDATA[policy]]></category>
		<category><![CDATA[procedure]]></category>
		<category><![CDATA[procedures]]></category>
		<category><![CDATA[purpose]]></category>
		<category><![CDATA[strategy]]></category>
		<category><![CDATA[tactics]]></category>
		<category><![CDATA[value]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=128</guid>
		<description><![CDATA[I am an enterprise architect in a shop that is actively embracing agile across the board. This has given a new urgency to my previously idle speculations on the role of an architect in an agile process. I have developed some thoughts on that role that I will share in my next rumination. But there [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=128&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I am an enterprise architect in a shop that is actively embracing agile across the board. This has given a new urgency to my previously idle speculations on the role of an architect in an agile process. I have developed some thoughts on that role that I will share in my next rumination. But there is something to get out of the way first &#8211; I want to share a spike I needed to take en route.</p>
<p>I&#8217;ve always believed that architecture is a strategic function for an enterprise. But when I tried to uproot that belief from the big-up-front-design soil it was nurtured in and transplant it to newly-tilled agile soil I realized I believed in something I did not fully understand.</p>
<p>Today&#8217;s rumination is on strategy.</p>
<p>Two perspectives on strategy, both drawn in contrast to tactics, seem to form the basis of our conventional understanding &#8211; one in terms of time, the other magnitude.</p>
<p>&#8216;Tactics are your plans for right now. Strategy is your plan for the future.&#8217;</p>
<p>This makes tactics and strategy seem part of some temporal planning continuum in which at some point in time, a year out, eighteen months out, a tactical plan morphs into a strategic one.</p>
<p>&#8216;Strategy is a plan of action to achieve a major goal. Tactics are plans to achieve minor goals.&#8217;</p>
<p>This on the other hand makes tactics and strategy seem part of some magnitude-of-objective planning continuum where at some point a tactical objective is important enough to become a strategic one.</p>
<p>Neither one sounds all the way right, does it? My intuition is that there must be a qualitative difference between strategy and tactics, not just a quantitative one.</p>
<p>In previously trying to speak to that qualitative difference &#8211; in describing the strategic nature of the architect’s role to both business and IT people to whom it was unfamiliar &#8211; I have made frequent resort to two analogies.</p>
<p>The first is a sailing analogy. Strategy is picking a lighthouse as a desirable destination, and charting a course; tactics is dealing with sail and wind and water to stay the course as best you can and get there.</p>
<p>That&#8217;s better. Charting a course calls on boating knowledge, navigation skills, an understanding of weather, time, and tide, and experience blending them. But it is still not quite right. In the real world there are no fixed lighthouses by which to guide a business. There is very little not in some state of flux.</p>
<p>The second is a chess analogy based on the Silman method. To figure out your next move, first mentally remove all the remaining pieces from the board save the kings and pawns. Now replace your pieces on any squares you&#8217;d like, keeping bishops on their original colors. Can you position your pieces to create a marked advantage? Based on where your pieces actually are right now, can you get them to their desired destinations? How long will it take? Can you get them there while your opponent is both trying to prevent you as well as executing a plan of his own? If you can&#8217;t achieve the desired end state you must go back and choose a different one, perhaps a less ambitious one, and keep iterating in this manner until you find a realizable plan.</p>
<p>Better still, I think. It calls out the need for a strategy to be practical, to be realizable. It acknowledges that there are slow-to-change features of the environment to deal with – in your mind&#8217;s eye you leave the pawns on the board while you are rearranging your pieces. And it recognizes that you are not alone out there on the water &#8211; you have, in business or in war, competitors. But in the real world even the rules of the game can change over time.</p>
<p>The sailing analogy is probably more accessible than the chess one. I am generally unable to leave well enough alone and go on to belabor them, talking about tacking against the wind versus running with it, throwing that your boat needs to be &#8216;yar&#8217; in for good measure, or describing the Stenitzian chess trade-offs of space for time and time for material. I will continue to exercise these analogies in what follows here.</p>
<p>Both simple definitions have something of the truth. And both analogies resonate. Let&#8217;s try to find an underlying structure that supports them all.</p>
<p>To get at the true nature of strategy let us imagine a world without it. Why do we need strategy? What would we lose if it didn&#8217;t exist?</p>
<p>Sun Tzu points the way when he says that &#8216;tactics without strategy is the noise before defeat.&#8217;</p>
<p>While we might make some short term tactical gains, giving us the illusion of progress, without strategy our path would be ultimately aimless and reactive. Dude, even surfers have to plan to catch a wave &#8211; without a strategy surfing is just floating on a board.</p>
<p>We use strategy because it is smart to do so.</p>
<p>Smart.</p>
<p>There is an interesting discussion of intelligence in Steven Pinker&#8217;s &#8216;How the Mind Works&#8217; (mentioned previously in <a title="On the true nature of business intellligence" href="http://maxtempleton.wordpress.com/2008/03/11/on-the-true-nature-of-business-intelligence/" target="_blank">my rumination on BI</a>). He quotes a passage about what makes good science fiction. Believable aliens seem intelligent because of their purposeful behavior.</p>
<p>Paraphrasing Pinker, one useful definition of intelligence is the ability to achieve goals in the face of obstacles. That is, intelligence is the ability to have goals, make a plan to achieve them, and change plans in the face of obstacles.</p>
<p>Sounds exactly like strategy, doesn&#8217;t it?</p>
<p>Let&#8217;s try a working definition of our own: strategy is the systematic application of intelligence by a volitional entity &#8211; person or group &#8211; to improve their lot over time.</p>
<p>Strategy helps us &#8211; individually or collectively – come up with the best answer to the question &#8216;What should you do next?&#8217;</p>
<p>The simple answer is &#8216;something to help you achieve your goal(s).&#8217;</p>
<p>So how do we pick the goals? What is a desirable end-state?</p>
<p>First, which end-state are we talking about? That is to say, end when? Next year? Five years from now? Fifty?</p>
<p>All of them of course. It is clear that at some level the process of creating a strategy must be ongoing, that we must redefine our strategy as we age.</p>
<p>Are there goals that do not change over time? Is there a fundament?</p>
<p>We can start with existence. The most obvious answer to &#8216;what is a desirable end-state&#8217; is &#8216;one where we still exist.&#8217; This must be the fundamental goal of any entity. Some argue this is why intelligence evolved, and so, according to our working definition, why we have strategy.</p>
<p>Beyond survival – even I suppose including it in some supererogatory circumstances &#8211; our values, vision and purpose provide structure for all our stratagems.</p>
<p>Our values are our moral primitives, our moral postulates.</p>
<p>Our visions are our values writ large. They are unrealizable goals projected into ideal resolutions. World Peace. An End to Poverty.</p>
<p>Visions perform the same function as vanishing points in perspective drawings. They are virtual elements that provide real organizing structure and consistency to all that follows.</p>
<p>Our purpose is our highest level potentially realizable goal beyond continued existence. As businesses or organizations it is what we were formed to accomplish. As individuals determining this is called &#8216;finding yourself,&#8217; which illustrates that the font of our purpose flows from within and is ultimately an expression of our values.</p>
<p>Once we have our purpose, how do we get achieve it?</p>
<p>Generally speaking you can&#8217;t do it in one big bite.</p>
<p>You break it down into smaller bites &#8211; you create a series of sub-goals where the sub-goals lead or build up to the overall goal. So the answer to &#8216;what do we do next&#8217; becomes &#8216;something to achieve one or more of our sub-goals.&#8217;</p>
<p>This implies a linear goal structure at its simplest, and a singly rooted lattice structure &#8211; assuming a single purpose &#8211; at its most complex. This also means that to some extent our goal structure is likely self-similar &#8211; that little branches look like big branches. Fancifully we may find it has fractal dimension (remember when fractals and chaos were sexy?).</p>
<p>But what is the structuring model for the lattice?</p>
<p>And how do we find the right sub-goals? How do we find any sub-goals for that matter?</p>
<p>Let&#8217;s look at an extension to get a sense of this.</p>
<p>If your vision is Elvis Forever, and your purpose is To Let The World Never Forget The King, you may make it a goal to visit Graceland to shoot some video for your blog. Natural sub-goals might be to save up enough money to get gas for the hooptie and a buy a big SD card for your sister&#8217;s camcorder. Then, after getting gas and borrowing the camcorder, you plan to get to a series of each-one-closer-to-Memphis rest stops where you can stop and rest. Eventually you will get to Graceland. Which you will find surprisingly small and unimpressive. But you will not let that get in the way of your purpose, so you will choose camera angles that make it look bigger.</p>
<p>It gets a lot harder to find sub-goals when the rules are more complex than the speed limit is 65, drive on the right and pass on the left (this means you left lane campers), and the domain is larger than I-55 or I-69 and their rest stops.</p>
<p>We can infer a number of things from this example.</p>
<p>A prerequisite for goal setting is to understand the comprehensive landscape in which a future state would exist. If Graceland is going to be closed for re-velveting by the time you get there you need to come up with a new desired future state, or at least a different time to achieve it.</p>
<p>You must predict the future at the nexus of the domains which form the arena in which your plans play out. Our arenas exist in a kind of Hilbert space, shaped by many dimensions of different type and different magnitude. While the dimension of time is one of those structuring our goal lattice, it is not the only one. Contracts, law, regulation, supply, demand, technology, infrastructure, public opinion, politics&#8230; And those domains may not be discrete, but may be cross-connected. A given sub-goal may not straddle all of the domains.</p>
<p>What can be easy to miss is that we are also agents of change. This is the lesson of Steve Jobs. We can shape our own future.</p>
<p>Change is neither necessarily continuous, nor as we find from the example of evolution necessarily toward increasing complexity or value. Change in different domains happens at different rates, with different periods and different punctuation.</p>
<p>External changes may impact near-term sub-goals. Some may strike higher in the goal lattice, up to and including survival.</p>
<p>There are external changes to which you must react. There are those things to which you may react. There are those things to which you should not react.</p>
<p>There are domains that evolve slowly or not at all &#8211; the laws of physics. Domains that evolve slowly &#8211; traditions and institutions. Domains that evolve more frequently &#8211; laws and regulations. Other that evolve even more frequently &#8211; the advance of technology, style, fashion. Others that advance moment to moment &#8211; stock prices.</p>
<p>And it is the evolution with respect to us that is important. Physics doesn&#8217;t change, but our understanding of it does. The invention of a new packing algorithm, while unlikely, would potentially revolutionize part of the arena for shippers.</p>
<p>Understanding the relative pace of change is even more important to the selection of lower-level near-term sub-goals.</p>
<p>Like weather forecasts (an analogy borrowed from my &#8216;role of EA in Agile&#8217; research), sub-goals closer to the present are more reliably chosen than those further away. We have a better understanding of the near-term arena which gets rapidly fuzzier as we move out in time. We know where the hurricane will be in ten minutes. We have a good idea where it will be in an hour. We have only some idea of where it will be tomorrow.</p>
<p>So as we&#8217;ve seen the best uber-strategy is to frequently refresh our strategy.</p>
<p>The pace of change of business in this age of technology has tended to shrink the strategic horizon because of a perception of our inability to forecast the arena with any degree of accuracy even a few years out. While some companies still plan five to eight years out, and a few ten or longer, it seems that more have fallen back to a three to five year horizon. We need to remember though that technology, while important, is only one dimension of our arena.</p>
<p>But the most important takeaway for me from the weather analogy is this one: your near-term sub-goals are well-defined only if you understand where you are right now. In our chess analogy it is easy: you just look at the actual board. In business it is much harder. Very few enterprises have an accurate and comprehensive idea of where they are right now. Those that do have a leg up on strategy.</p>
<p>Similarly knowing when you have achieved your sub-goals is necessary to working your way up the lattice efficiently. Near-term goals in particular must have associated success metrics.</p>
<p>Finding sub-goals sounds like a daunting task.</p>
<p>But ultimately the question of how you find sub-goals has a simple answer.</p>
<p>Remember our working definition of strategy: the systematic application of intelligence to improving our lot over time. Finding sub-goals is part and parcel of being intelligent. How do you learn to find sub-goals? The same way you learn to speak. You are built to by evolution. Singly and collectively you are a goal-finding beast. Immerse yourself or your organization into the best information you have &#8211; the best research, the best forecasts &#8211; about the churning reaction in which you swim, and think about it, and you will precipitate out goals.</p>
<p>If you are insecure about trusting to your innate abilities, there are a number of formal methods that can help ensure you are being comprehensive in your strategic considerations, such as the wonderfully acronymed STEER, or its woefully acronymed cousin PEST.</p>
<p>&#8216;What should you do next?&#8217; also sounds like the question answered by tactics. I have been maintaining there is a qualitative difference between strategy and tactics. If they are both answering the same question how can there be a qualitative difference?</p>
<p>Let&#8217;s reuse our tactic of defining something by imagining the impact of its absence.</p>
<p>To get at the true nature of tactics let us imagine a world without them. Why do we need tactics? What would we lose if they didn&#8217;t exist?</p>
<p>We would still do something. And we could still follow our strategy. But we would make a lot more wrong turns. Without tactics we would not be able to recognize and take advantage of recurring patterns in our environment. It would take us longer to achieve our strategic objectives.</p>
<p>Without tactics we could not force things to happen. Tactics are not just single moves, nor are they plans without branches. In chess forced sequences that inevitably result in material gain are called &#8216;combinations.&#8217; I do this, then my competitors may do x or y or z. If they do x I do p, if y q, etc. No matter my opponent’s response to each of my moves, there is an incontrovertible path that wins me material.</p>
<p>Forced sequences don&#8217;t have to end in material gain as combinations do. They can also be a single move or a series of moves that improves our control of space, or gives us an advantage in time, or improves the scope of our pieces.</p>
<p>So tactics are not just random acts. They are single acts or sequences of acts that improve the quality of your position. Recognizing what constitutes an improvement means understanding the nature of advantage. And understanding which advantages may be turned into other kinds of advantage. In chess you can generally turn an advantage in space to one in time, one in time to one in material, and one in material to checkmate.</p>
<p>We see this transformation of advantage in business: the Amazons of the world know that if you establish market dominance, profits will &#8211; likely &#8211; eventually come.</p>
<p>This is a place where strategy and tactics come together. A transmutable advantage as contributed to by a specific tactic is a valid and useful strategic sub-goal.</p>
<p>So a wide and deep knowledge of tactical patterns is a prerequisite to best executing strategy.</p>
<p>There is a skill involved in being able to find instances of those patterns in the real world. Not everyone can see a knight fork or the sting of a discovered check several moves down the road with equal facility. But everyone can learn the patterns, and improve their ability to see them with practice.</p>
<p>Every chess player knows the strength of ‘pigs on the seventh’ &#8211; having your rooks both occupying the opponents second rank. Every chess player has marveled at Fischer’s ‘windmill’, the sweeping scythe that Byrne graciously played out for posterity.</p>
<p>For a chess player the ability to succeed at deep tactics is partly a function of the ability to hold those possible futures in your head with clarity. This is what the non-chess player assumes is the fundament of chess strength as they ask ‘how many moves ahead can you see?’</p>
<p>But computers can do that better than humans &#8211; they can see many more moves into the future accurately. So how are we able to compete with them at the highest level?</p>
<p>A human player&#8217;s strength is in the ability to eliminate whole branches of moves based on a well-developed aesthetic &#8211; a sense of the beauty of a position. If a branch of moves is ugly it is generally safe to prune it.</p>
<p>Articulating an opinion on the relative aesthetics of alternate futures based on insufficient information with which to make a deterministic decision is a function of strategy. We can choose among alternate plans when the forced sequences have not been worked out in detail.</p>
<p>It is also one of the functions of an architect. They (we) are almost always very senior software and systems engineers with a well-developed sense of technical aesthetics. We can and do make or recommend good decisions based on what is ugly versus what is beautiful.</p>
<p>The challenge of playing to this strength in the corporate world is that it is ultimately an argument from authority &#8211; an argumentum ad verecundiam, aka &#8216;ipse dixit&#8217; &#8211; and suffers from that argument’s failings, so well-known that it is on the short list of common logical fallacies. &#8216;Because I said so&#8217; usually doesn’t get it done unless one is the king, or carries the king&#8217;s seal. (I actually said it once in a meeting, only partly in jest. It did not go over well.) So the architect&#8217;s contributions to strategy may be underutilized. (I know. Wahhhhh. /digression.)</p>
<p>Selecting the best tactic is not just a function of that which best advances us to the nearest sub-goal. There is another strategic expression in place, that, like the kiddie bumpers at the bowling alley, helps keep us out of the gutter. Those are our policies.</p>
<p>Policies are our bible. They codify our values into guidance for how we do the things we do. They help preserve our integrity by ensuring we don&#8217;t justify our means solely by our ends.</p>
<p>Policies are a mechanism for our higher-level goals to directly influence our actions without that influence having to trickle down the goal lattice. They help ensure that we don&#8217;t let the temporal dimension of our goal lattice dominate.</p>
<p>Sometimes we find that we need to perform the same actions repeatedly. Like building a pyramid we have to aggregate our achievements over time toward our goals. These repeated actions are our procedures. They take place in the lanes formed by our policies.</p>
<p>Procedures have specific objectives &#8211; measurable states of affair reached at a particular time or range of time. These objectives when accumulated reach a goal in our goal lattice.</p>
<p>Have we gotten anywhere? Let&#8217;s sum up.</p>
<p>Strategy is the systematic application of intelligence by an entity to to improve its circumstances over time. Tactics is the systematic application of learning by an entity to improve its circumstances right now.</p>
<p>Strategy deals with the novel. Tactics deals with the recurring.</p>
<p>Strategy and tactics both require an understanding of the environment as an n-dimensional evolving arena in which an entity&#8217;s actions play out.</p>
<p>Strategy requires the recognition of potential futures and the creative synthesis of desirable end-states in them.</p>
<p>Tactics require the recognition of recurring patterns and the successful execution of learned responses to them.</p>
<p>Strategy when best done evokes aesthetics. Strategy is an art.</p>
<p>Tactics when best done evokes calculation. Tactics is a science.</p>
<p>Policies are actionable rules encoding our values.</p>
<p>Procedures are rule-governed repeating activities, constrained by our policies, to achieve objectives we believe will aggregate into the achievement of higher-level objectives.</p>
<p>To make the most efficient progress toward our higher-level goals we must must be able to measure both where we are now and when we have achieved a goal.</p>
<p>Our near-term strategy is always more accurate and reliable than our long-term strategy. Therefore we must regularly renew our strategy to keep its edge sharp. As our higher-level objectives change we must evolve our procedures to meet them.</p>
<p>Our strategy and tactics must be consistent with our values. Selecting what to do next, and next, and next again is each and every time as much a moral action as is executing to our plan.</p>
<p>Strategy is the intersection of reason and righteousness.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=128&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2011/10/28/on-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On the true nature of agile user story users</title>
		<link>http://maxtempleton.wordpress.com/2011/01/19/on-agile-user-story-users/</link>
		<comments>http://maxtempleton.wordpress.com/2011/01/19/on-agile-user-story-users/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 06:15:14 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile methodology]]></category>
		<category><![CDATA[essential use case]]></category>
		<category><![CDATA[goal-directed design]]></category>
		<category><![CDATA[persona]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[task case]]></category>
		<category><![CDATA[usage-centered design]]></category>
		<category><![CDATA[use case]]></category>
		<category><![CDATA[user]]></category>
		<category><![CDATA[user story]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=106</guid>
		<description><![CDATA[I was recently cc&#8217;d on an email advocating adding a particular user story to an agile project backlog. Let&#8217;s call it the &#8216;Big_New_EDI_System&#8217; project. As a Big_New_EDI_System developer I want to be able to employ a standard router service So that I can determine using the EDI transaction type, customer data, customer id prefix, and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=106&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was recently cc&#8217;d on an email advocating adding a particular user story to an agile project backlog. Let&#8217;s call it the &#8216;Big_New_EDI_System&#8217; project.</p>
<blockquote><p><strong>As a</strong> Big_New_EDI_System developer</p>
<p><strong>I want to</strong> be able to employ a standard router service</p>
<p><strong>So that I can</strong> determine using the EDI transaction type, customer data, customer id prefix, and customer transaction date which back-end system to route the transaction to.</p></blockquote>
<p>This rang really wrong for me. A developer shouldn&#8217;t be the user in an agile user story unless you are making a development tool, right?</p>
<p>So I decided to dig a little deeper.</p>
<p>I did a quick survey of all the user stories on the Big_New_EDI_System project.  In 100 user stories there were 29 different users.  Categorizing them as humans, transactions, developers, or systems, this is what I found:</p>
<blockquote><p>100 total user story users =</p>
<p>81 developer users, such as &#8216;BPEL Orchestration Developer&#8217;</p>
<p>9 transaction users, such as &#8216;Order Status Inquiry&#8217;</p>
<p>4 system users, such as &#8216;Big_New_EDI_System&#8217;</p>
<p>6 human users, such as &#8216;Store Owner who has submitted a customer account validation request via our online tool.&#8217;</p></blockquote>
<p>I would say my comfort level at this point was, oh, about a 6 on a scale of 100.</p>
<p>I could see how a system might be a user.  But a developer?  A transaction?  Could it be that 9 out of 10 user stories on the project had been created with invalid users?</p>
<p>If so, what did that mean for the stories themselves, the team&#8217;s ability to work them, and their ability to finish the project?  And if they did finish, what would be the impact to the nature and quality of the system they delivered?  Time for a little pranayama.</p>
<p>If I was going to raise the hue and cry over the possible validity of the user stories on a hundred-plus resource eight-figure project I needed to laser-align my ducks.</p>
<p>I needed to understand exactly what a user story user was.</p>
<p>Today&#8217;s rumination is on the true nature of agile users.</p>
<p>In &#8216;<a href="http://blog.maxtempleton.com/2009/02/22/on-the-true-nature-of-use-case-actors/">On the true nature of use case actors</a>&#8216;  I described how poorly the use case actor has been defined in use case theory, and attempted a working definition.</p>
<p>The user story email made me suspect that the user story user might be similarly ill-defined.  And given the similarities between use case actors and user story users I thought I might be able to leverage some of the same thinking I had employed in analyzing actors.</p>
<p>When I researched agile user story users I found the same kind of slim pickings I had found researching use case actors.  There is very little original work on the methodology.  The overwhelming majority is simply parroted from elsewhere, usually without attribution.   What passes for expertise seems very shallow.</p>
<p>So my research approach was to start with work from key signatories of the Agile Manifesto and move forward in time.</p>
<p>Here is what I was able to glean.</p>
<p>Kent Beck (inventor of the term &#8216;user story&#8217;) has a number of wiki pages on <a href="http://www.c2.com/cgi/wiki?UserStory">c2.com</a> where he and fellow Manifesters Alistair Cockburn, Ron Jeffries and other posters discuss various aspects of user stories.  There is no single clear description of what a user story user is &#8211; users are generally referred to simply as the authors of user stories.  In fact, there is a lot of discussion but little clarity on what user stories themselves are or are not.</p>
<p>Jeffries is the pithiest: &#8220;[a] UserStory is a story, told by the user, specifying how the system is supposed to work, written on a card, and of a complexity permitting estimation of how long it will take to implement.&#8221;</p>
<p>Jeff Sutherland &#8211; co-inventor of Scrum, and another original signatory of the Agile Manifesto, has published a presentation <a href="http://www.gbcacm.org/sites/www.gbcacm.org/files/slides/4A%20-%20User%20Stories%20Done%20Right.pdf">deck</a> called &#8216;User Stories Done Right.&#8217;  But in it he largely borrows the actual user story stuff from one Mike Cohn.</p>
<p>And it is Cohn, Mr. Mountain Goat Software (cool logo and great <a href="http://www.mountaingoatsoftware.com/">website</a>), who seems to have emerged as the leading acknowledged expert on user stories. He was a founding member of the Agile Alliance.  His 2004 book &#8216;User Stories Applied for Agile Software Development,&#8217; published in Addison Wesley&#8217;s Kent Beck &#8216;Signature Series&#8217;, has become a standard reference. According to the back cover blurb from &#8216;Applied&#8217; &#8220;you&#8217;ll learn what makes a great user story, and what makes a bad one&#8230;&#8221;.  He has since published two other popular books on agile practice.</p>
<p>And we have Cohn to thank for what has become the most widely used template for user stories &#8211; it was used in the story we began with above:  “As a &lt;type of user&gt; I want to &lt;feature&gt; so that &lt;benefit&gt;”.</p>
<p>Cohn, who is not only an author but also an instructor and a popular speaker on the conference circuit, is definitely one of the parent-most nodes in the agile IP parrot tree.</p>
<p>So I got &#8216;Applied.&#8217;</p>
<p>What does Cohn have to say in it about user story users?  Let&#8217;s dive in together and see.  We are looking not only for explicit descriptions of user story users, but also for descriptions of user stories from which we might infer things about their users.</p>
<p>&#8220;What is a user story? A user story describes functionality that will be useful to either a user or a purchaser of a system or software.&#8221;</p>
<p>But then rather than trying to describe the difficult-to-describe, Cohn jumps right away to the &#8216;you&#8217;ll know it when you see it&#8217; extensional device of some quick user story examples from the fictional used-for-illustration BigMoneyJobs website project:</p>
<blockquote><p>&#8220;A user can search for jobs.</p>
<p>A company can post new job opening.</p>
<p>A user can limit who can see her resume.&#8221;</p></blockquote>
<p>And he provides two examples of &#8216;bad&#8217; user stories:</p>
<blockquote><p>&#8220;The software will be written in C++.</p>
<p>The program will connect to the database through a connection pool.&#8221;</p></blockquote>
<p>The users in two of the &#8216;good&#8217; examples are people who will use the system, simply called &#8216;user&#8217;.   We assume that then is the fundamental definition of user.</p>
<p>The user in the other good example is &#8216;company&#8217;.  Since the company has no fingers, we assume that the actual user is a company employee, but that the objective is the company&#8217;s &#8211; the person is the company&#8217;s amanuensis, or, prefiguring our later explanation, the instrument of the company&#8217;s collective will. We will call the person-or-company entity &#8216;Party&#8217; hereafter after Fowler.</p>
<p>Cohn says the first example is not a good user story because BigMoneyJobs users would not care which programming language was used.  I can&#8217;t see how to squeeze a reasonable user at all into the passive &#8216;the software will be written in C++,&#8217; no matter how acrobatic my grammar skills.</p>
<p>Cohn then tries to clarify. &#8220;If this were an application programming interface, then the user of that system (herself a programmer) could very well have written that &#8216;the software will be written in C++&#8217;.&#8221;</p>
<p>Ok.  If you are making an API, then the developers who are going to be writing against it are the users.  That _might_ make sense.  (Shouldn&#8217;t the user be the system that will be calling the API?)  But specifying it be written in C++ just seems out-of-bounds for a user requirement.  The interface &#8211; CORBA IDL comes to mind as an interface frequently implemented in C++  &#8211; yes.</p>
<p>He says the second example is no good because the _real_ users, i.e. we can infer that he means the &#8216;program&#8217; is not _really_ a user, &#8220;do not care about the technical details of how the program connects to the database.&#8221;</p>
<p>So he says on the one hand that it is ok to have technical details (&#8216;C++&#8217;) in a user story, but on the other hand it&#8217;s not (&#8216;database connection pool&#8217;).</p>
<p>Why is it ok for one and not the other? He gives us a clue: &#8220;Stories should be written so that customers can value them.&#8221;</p>
<p>So we assume the programmer user of an API values that it is in C++, but the business user of BigMoneyJobs does not value that its back-end data is accessed via a connection pool.  He says that it if that actually _is_ a requirement (thought that is what the user stories were elucidating) that there are ways to express the requirement that are valuable to the business user.  Which he leaves us with as the &#8216;What&#8217;s a User Story&#8217; cliffhanger &#8211; tune in to Chapter 2 for the exciting conclusion!</p>
<p>Before we get there, though, Cohn goes on to advocate that the customers and users be the primary authors of the user stories.  Which means projecting themselves into the &#8216;user&#8217; slot.  (So _their_ answer to the question &#8216;What is an agile user&#8217; is easy &#8211; &#8216;I am!&#8221;) But that where the users are not available, something called &#8216;User Role Modeling&#8217; can help.</p>
<p>Cohn then reinforces the tacit fundamental definition: &#8220;A user story represents&#8230;something a user would be likely to do in a single sitting.&#8221;</p>
<p>In expanding on the &#8216;value to the users&#8217; idea, closing the cliffhanger, Cohn says that stories that are valuable to the actual intended users are ok, and that stories that are valuable to the purchaser are ok (&#8220;The dev team will product documentation suitable to an ISO 9001 audit.&#8221;), but that stories that are valued only by developers (&#8220;all connections to the database are through a connection pool&#8221;) are not.   He suggests that developer-valued stories can be written to be customer-valued, i.e. instead of speaking of database pooling, we should say something like &#8220;Up to 50 users should be able to use the application with a 5-user database license.&#8221;</p>
<p>Cohn goes on to talk about how to divide up stories that are too large to do in an iteration.   There are two kinds of too-big stories, he says, compound and complex.  Compound is a just a bunch o&#8217; separate user stories, which split naturally.</p>
<p>In talking about dealing with complex stories Cohn give an example, splitting &#8216;A company can pay for a job posting with a credit card&#8217; into &#8216;investigate credit card processing over the web&#8217; and &#8216;a user can pay with a credit card.&#8217;</p>
<p>Here he has introduced a new kind of story &#8211; not one that speaks directly to a user goal at all, but one that describes a &#8216;spike&#8217; that will prepare the project team for handling a subsequent story.   Who is the &#8216;user&#8217; of the &#8220;investigate credit card processing over the web&#8221;? It simply doesn&#8217;t fit our working definition of user story without stretching it beyond reason.</p>
<p>Surely a user story can&#8217;t simply be whatever you&#8217;d like.</p>
<p>In Chapter 3, Cohn suggests that it is a fallacy to write stories from the perspective of a single uber-user, that that approach can lead to undiscovered stories, and suggests user roles as the solution.</p>
<p>Using his example project, BigMoneyJobs, he asks &#8211; his italics &#8211; &#8220;when we talk about <em>user</em> stories, who is the user we&#8217;re talking about?&#8221;</p>
<p>Finally!</p>
<p>But rather than providing intensional rigor, he simply identifies a few possible users of the system, both job seekers and job posters, by name and brief description &#8211; sketchy (in the non-teenage-sense) Alan Cooperian personae.</p>
<p>He suggest that &#8220;[w]hile each user comes to the software with a different background and <em>different goals</em> [my italics] it is still possible to aggregate individual users and think of them in terms of user roles&#8221; &#8211; &#8220;collections of defining attributes that characterize a population of users and their intended interactions with the system.&#8221;</p>
<p>So we are still working in terms of the fundamental definition &#8211; humans who will interact with the software/system.</p>
<p>While our system will satisfy its set of high level goals &#8211; in his example the primary user goals are Find a Job and Find an Employee &#8211; they can be satisfied by a series of sub-goals which may be more or less important to particular segments of the highest level user demographic.  And those segments may have other secondary goals in common, after Cooper, &#8220;some users favor convenience, others favor a rich experience, and so on.&#8221;</p>
<p>Cohn does call out system users in a boxed sidebar:</p>
<blockquote><p>&#8220;As much as you can, stick with user roles that define people, as opposed to other systems.  If you think it will help, then identify an occasional non-human user role.&#8221;</p></blockquote>
<p>&#8216;Occasional&#8217; makes it sound as if there is a choice you are making willy-nilly among alternatives.  Surely there is some set of ideal user roles for a given system.  There must be a way of determining in a given instance what the appropriate users are.</p>
<p>Cohn does draw a perimeter of a kind:</p>
<blockquote><p>&#8220;[w]e don&#8217;t need user roles for every conceivable user of the system, but we need roles for the ones who can make or break the success of our project.  Since other systems are rarely purchasers of our system, they can rarely make or break the success of our system. Naturally, there will be exceptions to this, and if you feel that adding a non-human user role helps you think about your system, then add it.&#8221;</p></blockquote>
<p>Really?  Write stories for the people writing the checks, and add a system user if it helps you think?</p>
<p>Cohn suggests capturing these user roles on user role cards.  He then goes on to suggest that some teams may find value in fleshing out Cooperian personae &#8211; detailed vignettes describing individual users based on role characteristics to help bring them to life, and/or Djajadiningrat (great name!) et al&#8217;s &#8216;extreme characters&#8217;, a technique where you use fringe user characters, almost caricatures, such as hookers and Popes, to effectively explore the skinny ends of your user demographic space&#8217;s bell-shaped curve.  But in neither approach are the users usefully compared to Cohn&#8217;s base user story users.</p>
<p>We are provided one last chance to find out what bad users might be&#8230;Cohn catalogs &#8216;story smells&#8217; in Chapter 14.</p>
<p>Unfortunately none of them captures the peculiar pong of a &#8216;bad user.&#8217;</p>
<p>He does advocate that we capture non-functional requirements as system user stories (with no user): &#8220;[t]he system must support peak usage of up to 50 concurrent users&#8221;</p>
<p>Let&#8217;s try to synthesize Cohn&#8217;s definition of user:</p>
<blockquote><p>&#8220;An agile user story user is a human or company who is paying for a System or a human or company working in a given role who will interact with the System, and who can make or break the System&#8217;s success, and occasionally is a System user if it will help the developers think or capture a non-functional requirement.&#8221;</p></blockquote>
<p>So I think we can see that there is a fundamental lack of rigor in the agile methods around the definitions of users and consequently a lack of rigor around what are valid and appropriate user stories.</p>
<p>In his chapter on User Role Modeling Cohn acknowledges a debt not to any of the Agile Manifesters but instead to the usage-driven design theory of Larry Constantine and Lucy Lockwood and the goal-directed design theory of Alan Cooper.</p>
<p>Let&#8217;s look at Cohn&#8217;s sources and see if we can find more clarity on users there.</p>
<p>Larry Constantine&#8217;s most recent concise description of users is in his 2005 article &#8220;Users, Roles and Personas.&#8221;</p>
<p>Constantine and Lockwood&#8217;s highest level methodology structure looks like this:</p>
<blockquote><p>Role Model -&gt; Task Model -&gt; Content Model -&gt; Visual and Interaction Design</p></blockquote>
<p>C&amp;L&#8217;s original articulation of what are now called &#8216;task cases&#8217; came about because use cases were seen to have &#8220;too many assumptions and premature decisions about the user interface being designed.&#8221;    He says that task cases have had widespread adoption, and actually cites the Cohn book we have been discussing as an example.</p>
<p>Forgive the extended quote, but after reading dozens of agile parrots&#8217; prose I find Constantine downright lyrical:</p>
<blockquote><p>&#8220;A task case represents a single, discrete intention carried out by a user <em>in some role</em> (my italics.)</p>
<p>&#8220;Task cases are also called essential use cases because they are stripped down to the barest essentials of the task. Each task case is expressed as a dialog in which user intentions and system responsibilities are abstract, simplified, and stripped of all assumptions about technology or implementation. This form of description is intended to get closer to the essence of what the task is really about from the perspective of the user in a role and to avoid making unintended or premature assumptions about the form of the user interface to be designed.</p>
<p>&#8220;The need to anchor the task model in an appropriate understanding of users quickly became apparent to those working with essential use cases. User roles emerged as an elaboration of the software engineering construct of Actors (Jacobson et al., 1992), which, like use cases, required adaptation to better suit the needs of user interface designers.&#8221;</p>
<p>&#8220;User roles capture and carry the essential understanding about users.&#8221;</p>
<p>&#8220;In the broadest sense, a user role has been defined as a collection of characteristic needs, interests, expectations, and behaviors in relation to a particular system (Wirfs-Brock, 1993).</p>
<p>&#8220;In its most compact form, the form now most commonly used, a user role is represented by its Context, Characteristics, and Criteria, that is, the context in which it is played, the characteristics of its performance, and the criteria that must be met by the design to support successful performance of the role. Context includes the overall responsibilities of the role and the larger work and environmental context within which it is played. Characteristics refer to typical patterns of interaction, behaviors, and attitudes within the role. Criteria include any special functional facilities needed for effective support of the role along with design objectives of particular importance to that role. Such criteria for effective support of a role are sometimes referred to as usability or user experience attributes.&#8221;</p></blockquote>
<p>Ahhhh&#8230;.sweet like pure oxygen, isn&#8217; t it?</p>
<p>Larry Constantine is also a lot clearer than Cohn about the prioritization/ranking of user roles.</p>
<blockquote><p>“In usage-centered design, user roles are usually ranked by anticipated frequency and by business importance. The agile modeling technique for making these rankings is to sort index cards representing the roles into order (Constantine and Lockwood, 2002). On the basis of the combination of these two potentially different views of priority, a small subset of roles is distinguished as “focal” roles. Focal roles serve as a central focus for the rest of the design process, but <em>not to the exclusion of other user roles.”</em></p></blockquote>
<p>Unfortunately in Cohn&#8217;s popularization this vital closure has been lost &#8211; focal roles become the vital ones &#8220;who can make or break the success of our project&#8221;.</p>
<p>The overall rigor we have been starving for in Cohn is supplied by Constantine:</p>
<blockquote><p>&#8220;The complete task model is expressed by the narrative bodies of all the individual task cases along with a task case map similar to a user role map but showing the interrelationships among task cases. The task case model can be checked against the user role model to verify that all user roles can be fully performed with the identified task cases and that every task case is genuinely needed for the performance of some one or more roles. The objective is to be truly comprehensive, to cover all tasks needed to fully perform all identified roles. In principle it might seem that a complete task model is an unobtainable ideal, but in practice we have found that, with well-timed and thoughtful reviews along the way, it is rare to discover missing task needs late in the game.&#8221;</p></blockquote>
<p>So our fundamental conclusion is this. There was a lack of clarity in the original exposition of agile methodologies around users and user stories.  Early practitioners such as Cohn who popularized the user story approach based their work in part on the &#8216;essential use cases&#8217; or &#8216;task cases&#8217; in the usage-directed design tenets of Larry Constantine et al.  But the potential rigor present in Constantine&#8217;s full method was lost in their adaptations. While there is clear value in Cohn and other popularizers&#8217; approaches for greenfield projects, there is insufficient guidance and rigor around the definitions of users and user stories to help agile methodology adopters for non-greenfield projects make good decisions.</p>
<p>Here I would like to draw on the work I&#8217;ve done on use case actors.   To do that, I need to distinguish use cases from user stories.</p>
<p>But I find this is a very difficult task.  And I am not alone.</p>
<p>Alistair Cockburn, the Eldest Son of Use Cases (if Jacobson the <em>pater familias</em>)  has practically thrown up his hands trying.</p>
<blockquote><p>&#8220;I’ve tried answering this question so many times and in so many ways: “What’s the difference between a use case and a user story?</p>
<p>I know what each is, I know how to describe each; I’ve described each and even how to relate the two. I’ve finally concluded that a user story is to a use case as a gazelle is to a gazebo.</p>
<p>See if you can describe the difference without just enumerating what each is.</p>
<p>As the Mad Hatter asked: “Why is a raven like a writing desk?”</p>
<p>And a few dozen subsequent comments on his webpage do nothing to illuminate.</p></blockquote>
<p>Fellow Manifester Martin Fowler says that</p>
<blockquote><p>&#8220;[Use cases and user stories ] have a complex correlation. Stories are usually more fine-grained because they have to be entirely buildable within an iteration (one or two weeks for XP). A small use case may correspond entirely to a story; however a story might be one or more scenarios in a use case, or one or more steps in a use case. A story may not even show up in a use case narrative, such as adding a new asset depreciation method to a pop up list&#8221;</p></blockquote>
<p>But the most clarity comes, as we might expect, from Larry Constantine:</p>
<blockquote><p>&#8220;A task case represents a single, discrete intention carried out by a user in some role.&#8221;</p></blockquote>
<p>Based on the relationship of task cases to use case, we can infer this:</p>
<ul>
<li>A use case represents the collective scenarios to achieving a high-level goal for a system user.</li>
<li>A user story is one or more task cases that can be solved in a given time box, where each task case represents a single, discrete intention carried out by a use case user in a particular role consistent through the story.</li>
<li>An intention is an attempt to satisfy a sub-goal, where a series of sub-goals adds up inexorably to an overall user goal as described in a use case.</li>
</ul>
<p>So a user story user is one of the facets of a use case user&#8230;the multiple personalities of all the user story users sum up to the use case users.</p>
<h3>So a user story user IS A a use case user &#8211; IS A in a generalization-specialization sense.  It is a complex sub-type derived from many partitions on use case user.  The partitions themselves may be categorized as Constantine&#8217;s context, characteristics and criteria.</h3>
<p>Progress.</p>
<p>As we have demonstrated, a use case actor is a direct or indirect volitional entity.</p>
<h3>So a user story user is a role played by a direct or indirect volitional entity with respect to a system.</h3>
<p>A user story is an attempt by such an entity in a given role to satisfy an intention, where said intention represents the achievement of a sub-goal participating in the aggregate accomplishment of the goal of the volitional entity.</p>
<p>So whither our Big_New_EDI_System Project?</p>
<p>Cohn&#8217;s sample project in &#8216;Applied&#8217; is a modest web-based  job board.</p>
<p>He ends up with 31 use cases.  Only three of them are neither &#8216;a user&#8217;, &#8216;a repeat user&#8217;, &#8216;an administrator&#8217; or &#8216;a report viewer.&#8217;</p>
<blockquote><p>&#8220;The system must support peak usage of up to 50 concurrent users.&#8221;</p>
<p>&#8220;Orders made from the website have to end up in the same database as orders made by phone&#8221;</p>
<p>&#8220;The site always tells shoppers what the last 3? items she viewed are and provides links back to them</p></blockquote>
<p>In Big_New (sounds political like Zbiegniew or Agnew : ) there are 100 user stories. Ninety percent of the users are &#8216;developers&#8217; or &#8216;transactions&#8217;.</p>
<p>An EDI project will obviously have many fewer direct volitional entity users than a web-based job board.  And it will be much more challenging to define the user roles well.  There will be a lot of system users. That is why we need the definition rigor &#8211; it is not a happy-path vanilla-case project for agile.</p>
<p>There might be an objection raised from the touchy-feely user story school that says a user story is just a promise for a conversation to be held later.  So that not much rigor is required, and I should untwist my panties.</p>
<p>My first response is that they should go build a doghouse to hang their crystals in and stay away from my skyscraper project.</p>
<p>Biting that back let me just ask this.  For those 81 user stories with developer users, who are the conversations going to be with?</p>
<p>If you are building a compiler or an IDE you will have developer users to talk to.  Otherwise developer users are just plain wrong.  And the user stories made from them are immediately suspect.</p>
<p>Time to raise the hue and cry.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=106&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2011/01/19/on-agile-user-story-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On technology roadmaps</title>
		<link>http://maxtempleton.wordpress.com/2009/07/01/on-technology-roadmaps/</link>
		<comments>http://maxtempleton.wordpress.com/2009/07/01/on-technology-roadmaps/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 05:05:52 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[business alignment]]></category>
		<category><![CDATA[business intelligence]]></category>
		<category><![CDATA[enterprise architecture]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[technology roadmap]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=89</guid>
		<description><![CDATA[A carpenter is not usually aware of the hammer in their hand.   They are immersed in their environment.  They are engaged in the task at hand.   They only notice the hammer if it is too heavy, or if the head flies off, or if the handle is awkward in their hand. When a tool is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=89&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A carpenter is not usually aware of the hammer in their hand.   They are immersed in their environment.  They are engaged in the task at hand.   They only notice the hammer if it is too heavy, or if the head flies off, or if the handle is awkward in their hand.</p>
<p>When a tool is right for a job, the tool disappears from the user&#8217;s active experience.</p>
<p>Our goal in IT is to equip our business users with disappearing tools.</p>
<p>Our goal as IT architects is to anticipate the needs of the business accurately, and with enough lead time, so that we can buy &#8211; or build &#8211; and integrate tools into the business work experience&#8230;so those tools, too, can disappear.</p>
<p>This is the very definition of &#8216;aligned.&#8217;</p>
<p>A technology roadmap is the enterprise architect&#8217;s forecast of the information tools needed at certain times in order to support the business&#8217;s anticipated tasks.</p>
<p>Today&#8217;s rumination is about how to make such a roadmap.</p>
<p>I am a chess player.  Somewhere in the family store of dusty stuff there may still be the trophy I won for finishing second in the Indiana Junior (under 18) Chess Championship in 1977 (I think it was &#8217;77.)  Which I mostly only say to give some weight to what follows.  (And for what it&#8217;s worth I should have finished worse&#8230;in the five round Swiss system tournament I drew my fourth round game from a won position &#8211; connected passed pawns &#8211; and so did not have to play The Prodigy in the final round.   So I won my last round game, and instead of finishing 4-1 &#8211; The Prodigy would have eaten my lunch &#8211; I finished 4 1/2 &#8211; 1/2, good for second.  If I had known the outcome in advance I might have thrown the fourth round win to get the draw I ended up with.  I was saved from the moral quandry by ignorance of the overall picture.  And fwiw the memory of drawing with connected passers grates more than not winning.)</p>
<p>Aaaaanyway, one of the best chess instruction books ever is Jeremy Silman&#8217;s &#8216;How to Reassess Your Chess.&#8217;  In it, the International Master (the best teachers are not the best players &#8211; Silman is not a Grandmaster) outlines the Silman Thinking Technique.</p>
<p>Paraphrasing broadly, here &#8217;tis. In your mind&#8217;s eye, take all of the remaining pieces off the board, leaving only the pawns.  Now arbitrarily place your pieces anywhere you want.  Can you find a way of placing your pieces that gives you a marked advantage?  Can you create a checkmate?  Can you create a preponderance of force against a key point?  Understanding the optimal placement requires not only an understanding of the rules of the game, it also requires an understanding of tactical patterns.   Is there a last rank mate by a rook?  A windmill?  A discovered check?</p>
<p>Having placed your pieces in an optimal configuration, you then need to figure out if you can achieve it&#8230;how long will it take to you get there from where you are at now?  And remember, your opponent will be working against you all the while.</p>
<p>Finally, given the constraints in your position &#8211; the slow to change pawn structure &#8211; and given your opponent&#8217;s best efforts to foil your plan, can you achieve your objective?  If so, rock on.  If not, go back to the beginning and make a less ambitious objective.</p>
<p>So what is your best plan?  And given that, what is the best first move to effect that plan?</p>
<p>Roadmapping is like that.</p>
<p>Keeping our chess analogy in mind, let&#8217;s look at roadmaps.</p>
<p>Remember we have said that a technology roadmap is the enterprise architect&#8217;s forecast of the information tools needed at certain times in order to support the business&#8217;s (an awkward possessive)&#8217;s anticipated tasks.</p>
<p>The business&#8217;s anticipated tasks obviously must be inferred from their goals and objectives.  Not so obvious, perhaps, is that they must also be inferred from the career expertise of the business users and from their training plans.  The tool an expert finds ready-to-hand and that of a beginner are not the same tool.  Tiger Woods plays with forged irons which permit precise control, but are not forgiving of error.  The amateur on the other hand plays with cavity back irons which assume off center hits, and minimize their impact.</p>
<p>So this is where our roadmap starts. We must work with the business to capture their goals and objectives.  There may be more or less work to do in this regard depending on the maturity of the business&#8217;s planning approach.  And we must work with the business to understand the nature of their expertise, their professional development plans, and their future expectations with respect to their tools.</p>
<p>From their goals and objectives we synthesize a picture of the business enterprise at some future date.  Providing the tools to support the business processes in that picture is our objective.  The full picture, including the tools, is where our roadmap leads.</p>
<p>We must pick a waypoint far enough in the future to make it possible for us to steer our ship toward that star.   Turning a supertanker involves holding the tiller hard over..and waiting, and waiting, and waiting for the ship to turn.  Turning an enterprise is even harder.  Project plans, with rare exception, will only take us out a year or eighteen months.   To make informed decisions about which projects to approve as aligned we need to go further out on the timeline.</p>
<p>If we get too far out, on the other hand, we obviously lose the ability to describe the expected future environment with any degree of accuracy.  In 1999 there was no MySpace, no Facebook, no Twitter.   But in 2004 all existed in some nascent form and a wise and careful observer might have projected their success with some confidence.</p>
<p>For the same reasons, existing corporate strategic plans are likely articulated over five years, or sometimes three years in rapidly changing industries.</p>
<p>So our first task is to take the business&#8217;s strategic plan (or if needed to help the business to create that plan), turn it into a to-be process picture, and figure out what the technology picture needs to be at that time to support those processes.</p>
<p>High level business use cases suggest themselves for the to-be process picture, following the familiar goal-driven approach espoused by Alastair Cook.  Which naturally leads us to describing our tools in the form of the &#8217;4&#8242; in Phillipe Krutchen&#8217;s 4+1 architecture approach, where the &#8217;1&#8242; is the use cases.</p>
<p>Having done so (ok, some handwaving here), we are ready to turn out attention to the roadmap.</p>
<p>We are not starting with a blank slate.  Not only do we have an existing IT infrastructure that represents our starting point, there are a number of constraints of which we must be cognizant and to which our roadmap, and our destination, must conform.</p>
<p>Nothing in the corporate existing or &#8216;as-is&#8217; environment is fixed.  All is malleable.</p>
<p>But the cost and impact of changing a given feature varies.</p>
<p>Those things that are slower to change, and less likely to be changed, act as constraints on our changing other, more malleable features which are dependent on them.</p>
<p>Many of these are features that are managed in lifecycles, where there are changes punctuated with some rhythm or frequency:</p>
<ul>
<li> Hardware-&gt;Depreciation.  Lease terms.  End of life of support.</li>
<li> Software-&gt;Licensing. Compatibility. End of life of support.</li>
<li> Contracts-&gt;Terms and conditions</li>
<li> Laws-&gt;Elections.</li>
</ul>
<p>And of course Trends, Buzz, Fashions&#8230;those things with mind share in our decision makers.</p>
<p>We should model our constraints in terms of their speed of change, and the punctuation of their change, in order to determine&#8230;their contribution to the viscosity of our environment, and their projected influence at a given waypoint.  This approach to constraints should be part of <a href="http://maxtempleton.wordpress.com/2008/04/09/on-structuring-requirements/">the requirements assessment </a>on every project.</p>
<p>In reality, of course, there is a continuous capability technology provides the business.</p>
<p>That technology evolves as new capabilities are brought on line, old ones are retired, problems are fixed, functions refined.</p>
<p>But as we have described, we know that our budget cycles are generally yearly.</p>
<p>So rather than an continuous roadmap, we should consider a series of one year roadmaps, each simply articulating the sub-goals, the sub-objectives, that add up to our overall goal.  We can then speak to the alignment of the slate of potential projects fielded for the next year.</p>
<p>This is arguably the path to an intelligent enterprise.  As we have seen in <a href="http://maxtempleton.wordpress.com/2008/03/11/on-the-true-nature-of-business-intelligence/">our earlier rumination on BI</a>, the ability to create and work toward new sub-goals when faced with obstacles &#8211; including our evolving constraints -  is the very definition of business intelligence.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=89&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2009/07/01/on-technology-roadmaps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On Women, Fire, and Dangerous Things</title>
		<link>http://maxtempleton.wordpress.com/2009/03/22/on-women-fire-and-dangerous-things/</link>
		<comments>http://maxtempleton.wordpress.com/2009/03/22/on-women-fire-and-dangerous-things/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 22:44:53 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=79</guid>
		<description><![CDATA[My wife and daughter and I like to play word games that we can do when we are out to dinner, or in the car on vacation. Howard Stern&#8217;s F.M.K. is a favorite, where one player names three people, and the active player has to say which one they would&#8230;make love to, which one they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=79&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My wife and daughter and I like to play word games that we can do when we are out to dinner, or in the car on vacation.  Howard Stern&#8217;s F.M.K. is a favorite, where one player names three people, and the active player has to say which one they would&#8230;make love to, which one they would Marry, and which one they would Kill.  Fun game &#8211; I can&#8217;t think of another context in which I could not only get away with saying (about Cloris Leachman, as a member of some nightmare troika posited by my wife,) &#8216;well, I guess I&#8217;ll have to tap that granny ass,&#8217; but have it be met with rolling laughter.</p>
<p>My daughter Zoe also likes to make up games &#8211; ever since she learned as a little girl that she who controls the rules controls the game.</p>
<p>In that spirit I contributed a new game to the family library last year.   One person names three to five things, and the other players compete to see who can first name a category to which all the things named belong.  For example, someone might say &#8216;vichyssoise, revenge, and beer&#8217; and the category would be &#8216;things that are best served cold.&#8217;  A lame example, but then again, I usually lose.  Trust me when I tell you there are wonderfully subtle and challenging lists.</p>
<p>Zoe asked me what we should call the game&#8230;and I thought of the seminal work on categorization by Berkley prof George Lakoff, with one of the best titles ever:  &#8216;Women, Fire and Dangerous Things.&#8217;</p>
<p>And that&#8217;s what we call the game now&#8230;.&#8217;Women, Fire and Dangerous Things.&#8217;</p>
<p>So I was at a Barnes and Nobel in San Antonio, Texas a few weeks ago killing time on my way to the airport.  I had to check out of my hotel at noon, but my flight back to Medford via Denver wasn&#8217;t until 3, so I had some time to kill.  I still had a B&amp;N gift certificate in my wallet from Christmas, so I decided to stop there on the way and find a book for the trip back home.</p>
<p>Maybe because I was away from home and missing my family I thought of Lakoff.   So I asked the bookseller if they had a copy of &#8216;Women, Fire and Dangerous Things&#8217;&#8230;not really expecting them to have a twenty-year-old cognitive science book.  But there it was.  Not only that, they also had Lakoff&#8217;s book on metaphor he did with Mark Johnson &#8211; subject of a future rumination related to Folk IT.  And both are now in my current &#8216;inner library&#8217; &#8211; that floating set of a dozen or so books that never quite get shelved.</p>
<p>And today I was thinking about my previous posting, &#8216;<a href="http://maxtempleton.wordpress.com/2008/10/30/on-intension-extension-wittgenstein-and-exceptional-software/">On Intension, Extension, Wittgenstein and Exceptional Software</a>&#8216;, in which I argued that we should always make our type partitions incomplete so that we could accommodate Wittgenstein&#8217;s family resemblance categories, and I realized that Lakoff provides even more direction as to the nature of non-classical categorization that would be very useful to incorporate into our approach to modeling:</p>
<blockquote><p>&#8220;The idea that categories are defined by common properties is not only our everyday folk theory of what a category is, it is also the principle technical theory  &#8211; one that has been with us for more that two thousand years. The classical view that categories are based on shared properties is not entirely wrong.  We do often categorize things on that basis.  But that is only a small part of the story. In recent years it has become clear that categorization is more complex than that.&#8221;</p></blockquote>
<blockquote><p>&#8220;From the time of Aristotle to the later work of Wittgenstein, categories were thought to be well understood and unproblematic.  They were assumed to be abstract containers, with things either inside or outside the category. Things were assumed to be in the same category if and only if they had certain properties in common.  And the properties they had in common were seen as defining the category.&#8221;</p></blockquote>
<p>But as a result of the seed planted by the later Wittgenstein about family resemblance categories, as well as later work by <a href="http://en.wikipedia.org/wiki/Eleanor_Rosch">Eleanor Rosch</a>,</p>
<p><img class="aligncenter" title="Elenor Rosch" src="http://www.sis.pitt.edu/%7Embsclass/hall_of_fame/images/rosch.gif" alt="" width="191" height="283" /></p>
<p>our understanding of categorization has changed.</p>
<p>Rosch looked at two fundamental problems with classical theory:</p>
<ul>
<li>If categories are only defined by properties, then no members should be better examples of the category than any other.</li>
<li>If categories are only defined by properties of their members, then the categorizers&#8217; capabilities or attributes should have no bearing on the resulting category</li>
</ul>
<p>Of course, as soon as one starts looking into it, Ms Elenor is obviously onto something profound.</p>
<p>What has emerged is something called &#8216;prototype theory.&#8217;    Thanks in large part to Lakoff, it has gotten all bollixed up in the Anglo vs. European philosophy,  objectivism vs. subjectivism debate spaces.    Which has unfortunately tended to marginalize it.</p>
<p>But for our purposes here, we should simply note this:</p>
<p>Our classical understanding of what a &#8216;Class&#8217; is is simply wrong in many cases.   There are classes which are constellations of other classes, not all the attributes of which which overlap.  And there are members of of a class that are best examples &#8211; not all members of a class are created equal.  As Rosch points out, a robin is a much better example of &#8216;Bird&#8217; than an ostrich&#8230;or a chicken. And an expert in a field can classify a set not classifiable by a rule. Which may be related to Godel&#8217;s Theorem if set membership is  a truth-valued relation.  There is an interesting example in Dreyfus&#8217;s &#8216;Why Computers (Still) Can&#8217;t Think&#8217;: an expert gift-giver who can give something everyone agrees is perfect..even though no one has ever given it before or included it in a list of potentially desirable gifts or projected it from a model of gift-giving.</p>
<p>Because our classical object-oriented approach to classes starts to fail as the users&#8217; perspective is brought in.   One of the practical challenges of use case realization is in the data mapping&#8230;and we are starting to realize why.</p>
<p>A revision of object-oriented design tenets that accomodates prototype theory will help software more closely meet users&#8217; needs in the real world.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=79&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2009/03/22/on-women-fire-and-dangerous-things/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>

		<media:content url="http://www.sis.pitt.edu/%7Embsclass/hall_of_fame/images/rosch.gif" medium="image">
			<media:title type="html">Elenor Rosch</media:title>
		</media:content>
	</item>
		<item>
		<title>On Folk I.T.</title>
		<link>http://maxtempleton.wordpress.com/2009/03/21/on-folk-it/</link>
		<comments>http://maxtempleton.wordpress.com/2009/03/21/on-folk-it/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 19:11:43 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[folk physics]]></category>
		<category><![CDATA[folk psychology]]></category>
		<category><![CDATA[intuitive physics]]></category>
		<category><![CDATA[intuitive psychology]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=65</guid>
		<description><![CDATA[&#8216;Folk psychology&#8217; and &#8216;folk physics&#8217; are two conceptual frameworks in common use in psychology and physics and related fields.  They refer to the &#8216;unscientific&#8217; sets of everyday concepts that people use to explain and understand their interactions with other people and with the world. There must also be a &#8216;folk computer science&#8217; &#8211; a &#8216;folk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=65&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8216;Folk psychology&#8217; and &#8216;folk physics&#8217; are two conceptual frameworks in common use in psychology and physics and related fields.  They refer to the &#8216;unscientific&#8217; sets of everyday concepts that people use to explain and understand their interactions with other people and with the world.</p>
<p>There <em>must</em> also be a &#8216;folk computer science&#8217; &#8211; a &#8216;folk I.T.&#8217; &#8211; the conceptual framework that end users use to explain and understand their interactions with computers.  Understanding the nature of Folk I.T. might revolutionize the ability of IT shops to effectively capture and understand requirements, to promote new technology solutions, and to succeed in creating true business alignment.</p>
<p>Snapshots from Wikipedia (the links will take you to the cited passage):</p>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Folk_psychology">Folk psychology</a> (also known as common sense psychology, naïve psychology or vernacular psychology) is the set of assumptions, constructs, and convictions that makes up the everyday language in which people discuss human psychology. Folk psychology embraces everyday concepts like “beliefs”, &#8220;desires”, “fear”, and “hope&#8221;.</p></blockquote>
<blockquote><p>Naïve physics or <a href="http://en.wikipedia.org/wiki/Folk_physics">folk physics</a> is the untrained human perception of basic physical phenomena. In the field of artificial intelligence the study of naïve physics is a part of the effort to formalize the common knowledge of human beings.</p>
<p>Many ideas of folk physics are simplifications, misunderstandings, or misperceptions of well understood phenomena, incapable of giving useful predictions of detailed experiments, or simply are contradicted by more thorough observations. They may sometimes be true, be true in certain limited cases, be true as a good first approximation to a more complex effect, or predict the same effect but misunderstand the underlying mechanism.</p></blockquote>
<p>Even people who start to become educated in the underlying sciences persist in keeping their folk systems of understanding.</p>
<p>In Steven Pinker&#8217;s &#8216;The Stuff of Thought&#8217; he relates that &#8220;[m]any psychological experiments have shown that when people have a pet theory of how things work (such as that damp weather causes arthritis pain) they will swear that they can see those correlations in the world, even when the numbers show that the correlations don&#8217;t exist and never did&#8230;&#8221;</p>
<p>In &#8216;The New Cognitive Neurosciences&#8217; Michael S. Gazzaniga and Emilio Bizzi summarize the folk sciences:</p>
<blockquote><p>Folk psychology is our everyday ability to understand and predict an agent&#8217;s behavior in terms of irrational states such as goals, beliefs and desires. &#8230; Folk physics is our everyday ability to understand and predict the behavior of inanimate objects in terms of principles related to physical causality.</p></blockquote>
<p>Folk IT is our everyday ability to understand and predict the behavior of software applications in terms of &#8230;. ?</p>
<p>I don&#8217;t have the answer.</p>
<p>But it is clear that rather than trying, point by point, to correct and educate end users about the true nature of software and computer systems, we should consider instead systematically capturing the world of their existing understanding&#8230;to capture the Folk I.T. framework by which, in which, they understand how software and computer systems behave.</p>
<p>Then and only then would we be in a position to successfully add to, to augment, to extend, their framework by integrating a new or changed component on their terms.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=65&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2009/03/21/on-folk-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On the true nature of use case actors</title>
		<link>http://maxtempleton.wordpress.com/2009/02/22/on-the-true-nature-of-use-case-actors/</link>
		<comments>http://maxtempleton.wordpress.com/2009/02/22/on-the-true-nature-of-use-case-actors/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 22:23:46 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[actors]]></category>
		<category><![CDATA[Alistair Cockburn]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[Ivar Jacobson]]></category>
		<category><![CDATA[object modeling]]></category>
		<category><![CDATA[primum movens]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[responsibility]]></category>
		<category><![CDATA[system actors]]></category>
		<category><![CDATA[system clock]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[use cases]]></category>
		<category><![CDATA[volition]]></category>
		<category><![CDATA[volitional entity]]></category>
		<category><![CDATA[will]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=55</guid>
		<description><![CDATA[The use case actor remains either undefined or ill-defined. As is well known, Jacobson&#8217;s use cases went mainstream in &#8217;92 without benefit of a rigorous definition.  While that choice was arguably key to their successful initial adoption, as their use has matured a consensus formalism (well, formal enough &#8211; call it a &#8216;soft&#8217; formalism) has [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=55&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The use case actor remains either undefined or ill-defined.</p>
<p>As is well known, Jacobson&#8217;s use cases went mainstream in &#8217;92 without benefit of a rigorous definition.  While that choice was arguably key to their successful initial adoption, as their use has matured a consensus formalism (well, formal enough &#8211; call it a &#8216;soft&#8217; formalism) has emerged, driven first by Alistair Cockburn&#8217;s &#8216;Structuring Use Cases with Goals&#8217; and later by the adoption of use cases in UML.</p>
<p>But that consensus has a significant gap that is still in my experience the source of endless debate and the cause of practical problems: the actor.</p>
<p>Closing that gap &#8211; getting at the true nature of use case actors &#8211; is the goal of today&#8217;s rumination.</p>
<p>There is simply not a common working understanding of what an actor is.  I have had very senior systems analysts tell me they really only did use cases for human actors &#8211; anything else was an integration problem.  As a partial result, that shop&#8217;s requirements docs confusingly include both SSA-style context diagrams as well as use case diagrams.  (Of course SSA&#8217;s &#8216;is it an internal or external system&#8217; is simply the same issue in a different guise.)</p>
<p>It&#8217;s so bad that in a recent (2006) book on UML 2.0 (&#8216;Learning UML 2.0&#8242; by Russ Miles and Kim Hamilton) the authors start to throw in the towel and say you&#8217;ll know an actor when you see one:</p>
<blockquote><p>&#8220;Deciding what is and what isn&#8217;t an actor is tricky and is something best learned by experience.&#8221;</p></blockquote>
<p>Then in some sort of pole shift they throw the reader a bone in the form of an actor-identification algorithm:</p>
<blockquote><p>&#8220;Identify a Thing from your requirements.  Is it an actual person?  If yes, it is _probably_ an actor &#8211; but be careful, some people are a actually part of the system.  If the thing is not an actual person, then it is something you can change in the system&#8217;s design?  If yes, then it is probably _not_ an actor.  If no, then is probably is an actor.&#8221;</p></blockquote>
<p>Sorta maybe kinda.</p>
<p>And a little further on&#8230;in a section called &#8216;Tricky Actors&#8217; (you can&#8217;t make this stuff up):</p>
<blockquote><p>&#8220;Not all actors are obvious external systems or people that interact with your system.  An example of a common tricky actor is the system clock.  The name alone implies the clock is part of the system.  But is it really?  The system clock comes into play when it invokes some behavior within your system.  It is hard to determine if the system clock is an actor because the clock is not clearly outside of your system. As it turns out, the system clock _is_ often best described as as actor because it is something you can&#8217;t influence.&#8221;</p></blockquote>
<p>Come again? (It&#8217;s a red flag for me when what I&#8217;m reading starts to sound like an Abbott and Costello routine.)</p>
<p>And from Doug Rosenberg and Matt Stephens&#8217;s 2007 &#8216;<a href="http://books.google.com/books?id=fPwlCD5JtaMC&amp;pg=PA1&amp;dq=use+case#PPA54,M1">Use Case Driven Object Modeling with UML</a>&#8216;:</p>
<blockquote><p>&#8220;An actor is represented on the diagram by a stick figure and is analagous to a &#8216;role&#8217; that users can play.&#8221;</p>
<p>&#8220;Actors can represent nonhuman external systems as well as people. Sometimes people are confused by this notion; we&#8217;ve found that drawing a &#8216;robot stick figure icon&#8217; seems to clear this up.&#8221;</p></blockquote>
<p>Evil Robots!  Cool.</p>
<p>In fairness to the authors &#8211; who I don&#8217;t mean to impugn, I&#8217;m just having a little fun at their expense &#8211; the Schadenfreude is yours, gentle reader &#8211; earlier, more authoritative, less florid works did not much improve on Jacobson.</p>
<p>From the OMG&#8217;s <a href="http://www.omg.org/spec/UML/2.1.2/Superstructure/PDF">UML standard</a> we take the following:</p>
<blockquote><p>&#8220;An actor in the Unified Modeling Language (UML) &#8220;specifies a role played by a user or any other system that interacts with the subject.&#8221;</p>
<p>&#8220;An Actor models a type of role played by an entity that interacts with the subject (e.g., by exchanging signals and data), but which is external to the subject.&#8221;</p>
<p>&#8220;Actors may represent roles played by human users, external hardware, or other subjects. Note that an actor does not necessarily represent a specific physical entity but merely a particular facet (i.e., “role”) of some entity that is relevant to the specification of its associated use cases. Thus, a single physical instance may play the role of several different actors and, conversely, a given actor may be played by multiple different instances.&#8221;</p></blockquote>
<p>That last one was pretty circular, wasn&#8217;t it.  Craig Larman, hedging his bet carefully, gives us an &#8216;informal definition&#8217; in his <a href="http://books.google.com/books?id=r8i-4En_aa4C">Applying UML and Patterns</a> from 2002:</p>
<blockquote><p>&#8220;First for some informal definitions.  An actor is something with behavior, such as a person (identified by role), computer system, or organization ; for example, a cashier.&#8221;</p></blockquote>
<p>And in a work citing Jacobson himself as an author,  &#8216;<a href="http://books.google.com/books?id=zvxfXvEcQjUC&amp;printsec=frontcover">Use Case Modeling</a>,&#8217; the 2003 book by Kurt Bittner and Ian Spence and Ivar Jacobson , we find the prosaic &#8216;[a]ctors represent the people or things that interact with the system; by definition, they are outside the system. We focus on the actors to ensure the system does something useful.&#8221;</p>
<p>Cockburn &#8211; if Jacobson is the father of use cases Cockburn is the oldest son &#8211; says in his seminal &#8216;<a href="http://alistair.cockburn.us/Structuring+use+cases+with+goals">Structuring Use Cases with Goals</a>&#8216; that</p>
<blockquote><p>&#8220;[a] ‘’primary’’ actor is one having a goal requiring the assistance of the system. A ‘’secondary’’ actor is one from which the system needs assistance to satisfy its goal. One of the actors is designated as the system under discussion.</p>
<p>Each actor has a set of ‘’responsibilities’’. To carry out that responsibility, it sets some goals. To reach a goal, it performs some actions. An ‘’action’’ is the triggering of an interaction with another actor, calling upon one of the responsibilities of the other actor (see also Figure 3)[not shown here - Ed.]. If the other actor delivers, then the primary actor is closer to reaching its goal. The entity-relationship diagram corresponding to this is shown in Figure 2.</p>
<p><img class="alignnone size-full wp-image-58" title="2316" src="http://maxtempleton.files.wordpress.com/2009/02/2316.gif?w=379&#038;h=370" alt="2316" width="379" height="370" /></p>
<p>Figure 2 says that there are internal and external actors. An external actor can be a person, a group of people or a system of any kind. The internal actor may be the system in design, a subsystem or an object. The system in design consists of subsystems, which consist of objects. Actors have behavior(s). The top-level behavior is a responsibility. It contains goals, which contain actions. An action triggers an interaction. The interaction is one actor’s goal calling upon another actors (or its own) responsibility.&#8221;</p></blockquote>
<p>This is much better&#8230;although a goal calling on a responsibility doesn&#8217;t really work, does it?  The previous authors have attempted to identify an actor by listing its attributes &#8211; a dog is furry, has four legs, and barks.  But we need to understand something like an actor by placing it in a context, such as Cockburn has done.  But is has to be a logical context, one that makes sense.   And as we&#8217;ll see, Cockburn&#8217;s is both incomplete and inaccurate.   And we are completely missing an understanding of an actor&#8217;s essense.  For better or worse, our Folk IT understanding (the subject of <a href="http://maxtempleton.wordpress.com/2009/03/21/on-folk-it/">the next rumination</a>!) is based on essences.</p>
<p>So what do we have so far?   A collective definition synthesized from the aforementioned sources would be something like this:</p>
<blockquote><p>&#8220;An actor is an person, system, or clock external to the in-scope system with goals which require them to engage in behaviors interacting with the in-scope sytem to achieve.&#8221;</p></blockquote>
<p>Let&#8217;s analyze this.</p>
<p>First, can a system really have a goal?  Of course not.  Systems are tools&#8230;no matter how sophisticated (and leaving the Strong AI debate for a different day), they have purposes, not goals.  A cup is designed and built to achieve the user&#8217;s goal of having a drink.</p>
<p>So if a system can&#8217;t have a goal, how can a system be an actor?  It can&#8217;t, at least as described by Cockburn&#8217;s framework.  So the framework fails.</p>
<p>Who or what has goals, and what is their relationship to the system in question?</p>
<p>Simply put, humans, both singly and in groups, have goals.   The pursuit of a goal is an act of will.   The ability to achieve goals in the face of obstacles is intelligence.  The pursuit is a moral act &#8211; the agent is responsible for the outcome.</p>
<p>This is so fundamental it is reflected in language itself.  In Pinker&#8217;s &#8216;The Stuff of Thought&#8217; we find this:</p>
<p>&#8220;Linguists sort verbs into classes, each called an &#8216;Aktionsart&#8217;, German for &#8220;action type,&#8221; based on their temporal conture&#8230;.Each of the four major action classes, state, activity, culmination, and accomplishment, smuggles in a concept of will&#8230;.Activities and accomplishments are voluntary,  state and culmination involuntary&#8230;.Indeed, with an accomplishment it is the actor&#8217;s goal that determines the exact event that consummates it.  Once again, this is not just a fine point of grammar but a key to our moral sense.&#8221;</p>
<p>So the fundamental actors are those humans and groups of humans who can exercise will.  We shall call them &#8216;volitional entities.&#8217;  And the fundamental relationship of volitional entities to our systems is a moral one &#8211; they are responsible for the actions they take with the system to achieve their ends.</p>
<p>The practical relationship of an actor to an in-scope system is one of communication.  There must be some direct chain of events from a physical action &#8211; clicking a mouse, pushing a button, inserting a card, speaking a word &#8211; that triggers a state change in the in scope system.</p>
<p>When a volitional entity is a person, they may interact directly with the in scope system.  But when a volitional entity is a group, they have no direct ability to interact&#8230;a company doesn&#8217;t have a voice, or fingers.  So they have to communicate indirectly.</p>
<p>So what are system actors?   When a system is an actor, it is only so because it in turn has been driven by a volitional entity who has triggered its actions &#8211; or by another system which in turn was put in motion by a volitional entity, etc.    So the volitional entity is interacting indirectly with the in scope system &#8211; so in a sense the in-scope system is simply acting as a component of a larger system &#8211; and the volitional entity, the <em>primum movens</em>, is still responsible for the actions of the in-scope system.</p>
<p>A clock actor simply refers to a system actor whose purpose is narrowly to express the deferred will of the volitional entity as to when something occurs.  For actions whose period is arbitary, such as daily batch jobs, the will may not be just the timing, but that is happens at all, that is, the clock is a way to express the will of the group.</p>
<p>A rule actor would be the more general case, where the volitional entity has codified their will to have particular things happen in particular circumstances.  Unlike the clock actor, whose triggering domain is just the clock, the rule actor&#8217;s domain includes a larger set of states, usually including some business subdomain.</p>
<p>Ok.  We seem to have made some progress.  Let&#8217;s recap.</p>
<p>A volitional entity is human or group of humans &#8211; Fowler&#8217;s &#8216;Party&#8217; &#8211; which can attempt to achieve goals by interacting with systems.  They are morally responsible for the outcomes.</p>
<p>A volitional entity&#8217;s will can be exercised in pursuit of a goal with respect to a given system either directly or indirectly.</p>
<p>When it is expressed directly, the volitional entity is a human engaged in physical communication with the system.</p>
<p>When it is expressed indirectly, some other system is engaged in physical communication with the in scope system.  That system in turn has either been directly or indirectly engaged by a volitional entity.  The <em>primum movens</em>, the &#8216;first mover,&#8217; will always be either a human or an event-triggering system that has been programmed by a human or group to initiation an action according to a set of environmental rules &#8211; at a given time, or at a give barometric pressure, etc.</p>
<p>So a use case actor is an object which represents a direct or indirect volitional entity&#8217;s communication with an in-scope system.  A complete use case picture would have at its periphery only volitional entities, which are both the <em>primum movens</em> and moral owners of any system behaviors.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=55&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2009/02/22/on-the-true-nature-of-use-case-actors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>

		<media:content url="http://maxtempleton.files.wordpress.com/2009/02/2316.gif" medium="image">
			<media:title type="html">2316</media:title>
		</media:content>
	</item>
		<item>
		<title>On intension, extension, Wittgenstein and exceptional software</title>
		<link>http://maxtempleton.wordpress.com/2008/10/30/on-intension-extension-wittgenstein-and-exceptional-software/</link>
		<comments>http://maxtempleton.wordpress.com/2008/10/30/on-intension-extension-wittgenstein-and-exceptional-software/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 04:00:18 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[family resemblances]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[Magritte]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[set theory]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Wittgenstein]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=49</guid>
		<description><![CDATA[Models are useful abstractions, but the regularity and perfection of these idealizations doesn&#8217;t exist in nature. But there are laws of nature that things obey, and models are our entre to understanding and using those rules. At least at some coarse-grained level we can predict the future of real world events based on rules we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=49&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Models are useful abstractions, but the regularity and perfection of these idealizations doesn&#8217;t exist in nature.  But there are laws of nature that things obey, and models are our entre to understanding and using those rules.  At least at some coarse-grained level we can predict the future of real world events based on rules we have derived from a model-based understanding of real world things.  There are no perfect circles in nature, but we can still calculate the circumference of a circle-like-thing with useful accuracy.</p>
<p>Software architecture is building and using models of software to help us understand the reality of software.</p>
<p>Software itself is based on models.  But insofar as one of the primary types of data we deal with is indicative, data that indexes and describes something in the world, it is important for us to remember, as Rene Magritte  famously reminds us, a picture of a pipe is not a pipe.  And a record of a person is not a person.</p>
<p>What I&#8217;d like to explore in this rumination is the gap.</p>
<p>Underneath both the relational model and the object-oriented model, the two dominant models in software today, we find Zermelo-Fraenkel, or ZF, set theory.</p>
<p>There are two deterministic ways of describing the members of a set, intension and extension.  Intension applies rules to a population to carve out set membership.  Red-headed step children is an intensional set.  Extension simply lists the members: the world&#8217;s greatest guitar players are Paco de Lucia, Pat Metheny, John McLaughlin, and Eric Clapton.  (Ok, maybe not the same as your list.)</p>
<p>But, as Wittgenstein pointed out, humans have the ability to categorize, to make sets, based not on explicit rules but on family resemblances.   We can include or exclude things in sets without applying exact rules.  These conceptual categories are how we interact with the world.</p>
<p>So when we design and build our model-based, rule-based, logic-based software,  we leave out stuff our users _know should be there_, things they _know should be included_.</p>
<p>How do we deal with the gap?</p>
<p>I don&#8217;t have a fully formed idea.  But I think it may be  to always build extension into our model of set descriptions to complement intension&#8230;to always have a way that users can say, &#8216;I know your software says birds fly, but a penguin is a bird, so just deal with it.&#8217;</p>
<p>This means no complete partitions.   If you partition people on gender, and your subtypes are &#8216;male&#8217; and &#8216;female&#8217;, build your software to enable users to extend it so it will accommodate the real world where we have hermaphrodites.</p>
<p>These aren&#8217;t exceptions.  We should not have to deal with them as such.  It is our software that is imperfect, not the world.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=49&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2008/10/30/on-intension-extension-wittgenstein-and-exceptional-software/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On The First Great Blunder (Not!)</title>
		<link>http://maxtempleton.wordpress.com/2008/09/13/on-the-first-great-blunder-not/</link>
		<comments>http://maxtempleton.wordpress.com/2008/09/13/on-the-first-great-blunder-not/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 18:15:18 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[C.J. Date]]></category>
		<category><![CDATA[Chris Date]]></category>
		<category><![CDATA[data modeling]]></category>
		<category><![CDATA[database design]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[object graphs]]></category>
		<category><![CDATA[OR Mapping]]></category>
		<category><![CDATA[relational theory]]></category>
		<category><![CDATA[SDO]]></category>
		<category><![CDATA[Service Data Object]]></category>
		<category><![CDATA[set theory]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[The First Great Blunder]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=18</guid>
		<description><![CDATA[Chris Date is one of the most prolific and influential writers on database topics. His &#8216;Introduction to Database Systems,&#8217; now in its eighth printing, is the gold standard. Having a dog-eared copy of an early printing is a badge of honor among db types. Chris Date is also an opinionated cuss. His introduction of new [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=18&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Chris Date is one of the most prolific and influential writers on database topics. His &#8216;Introduction to Database Systems,&#8217; now in its eighth printing, is the gold standard. Having a dog-eared copy of an early printing is a badge of honor among db types.</p>
<p>Chris Date is also an opinionated cuss. His introduction of new terminology (quick, what&#8217;s a RELVAR?), and his sharp opinions presented in his instantly recognizable, slightly supercilious style tend to polarize his audience. So taking pot shots at Date&#8217;s opinions is a common sport in the industry. But Date is smart as a whip, and his acolytes are legion, so if you are going at him you&#8217;d better bring your A game.</p>
<p>My turn.</p>
<p>Date first described something he called &#8216;The First Great Blunder&#8217; in a paper titled &#8216;Introducing&#8230;The Third Manifesto&#8217; he and his frequent co-author Hugh Darwen wrote back in &#8217;95. The &#8216;Blunder&#8217; struck me as wrong at first reading. But it was wrong in some low level conceptual way that was, that has been, difficult to articulate. And Date, who seems to be the most fond of his opinions when they skewer some conventional praxis, has put references to said Blunder in many of writings since then &#8211; not only the full book version of &#8216;Third Manifesto,&#8217; but into updates of &#8216;Intro to Database Systems&#8217; as well &#8211; so that it is In My Face All The Damn Time.</p>
<p>So the time has finally come to drive a stake through Date&#8217;s Blunder, and show that it is really a case of the First Great Blinder. And the refutation will take us through the pretty interesting territory that lies under databases and data models &#8211; the land of set theory, logic and identity &#8211; and I think we&#8217;ll end up not only with a refutation of Date, but also an interesting conceptual perspective on the world of object-relational mapping.</p>
<p>Ok, so what is The Blunder? The Blunder comes at the intersection of The Relational World and The Object World. Date suggests the key question in object-relational mapping is this: &#8216;What concept is it in the relational world that is the counterpart to the concept object class in the object world&#8217;? And he characterizes the most common answer, mapping a table (in Date-Speak a relational variable or &#8216;RELVAR&#8217;) to a class, as The First Great Blunder.</p>
<p>Date understands that that mapping is a very natural one to make. If we look at the DDL for a Person table</p>
<p style="padding-left:60px;">CREATE TABLE PERSON {<br />
FirstName VARCHAR2(20),<br />
LastName VARCHAR2(20),<br />
Gender CHAR(1),<br />
Birthdate DATE<br />
}</p>
<p>and the (Java) code for a class definition</p>
<p style="padding-left:60px;">class Person {<br />
String FirstName;<br />
String LastName;<br />
char Gender;<br />
Date Birthdate<br />
}</p>
<p>it looks like a no-brainer. What could be more obvious? So what problem could Date have with this?</p>
<p>The answer requires a longer explanation of the relational world. Date&#8217;s vocabulary is full of &#8216;domains&#8217; and &#8216;attributes&#8217; and &#8216;tuples&#8217; and &#8216;relations&#8217; and &#8216;relvars&#8217; instead of &#8216;data types&#8217; and &#8216;columns&#8217; and &#8216;rows&#8217; and &#8216;resultsets&#8217; and &#8216;tables.&#8217; I&#8217;ll try to use the latter vocabulary so that those who haven&#8217;t had the KoolAid can follow without a dictionary, and those of us who found the KoolAid too bitter to swallow can follow without doing the internal simultaneous translation of the non-native speaker.</p>
<p>Date believes the correct mapping is not from class to table, but from class to data type.</p>
<p>Sounds like another no-brainer. A class is a data type.</p>
<p>The natural answer given our two no-brainers is that a class can map to a data type or a table. So the key question to understand Date is why does he think a class can&#8217;t map to a table?</p>
<p>Because he believes a table is a variable, and a class is a type. And that a class has methods and no public instance variables, whereas a table has public instance variables and only optionally methods.</p>
<p>Because he believes the fundamental value of an instance of a table is the set of all rows &#8211; a resultset or Date&#8217;s &#8216;relation&#8217;  &#8211; and the fundamental value of an instance of a class is a single object.</p>
<p>A couple of threads are entertwined here that we need to tease apart. The first is the database side distinction between data types and tables &#8211; between &#8216;domains&#8217; and &#8216;relvars.&#8217; The second is the single instance to set question.</p>
<p>What Date has missed on the database side is that the distinction he is drawing between data types and tables is an implementation distinction, not a conceptual one.  And the important conceptual distinction he needs to visit and does not is that between entities &#8211; those instances that have identity &#8211; and non-entities. His mistake &#8211; the First Great Blinder &#8211; comes from not opening up his mind wide enough.  No no no no he&#8217;s ou-out side, looking in&#8230;</p>
<p>Taking our inspiration from Jorge Luis Borges&#8217; short story &#8216;<a href="http://jubal.westnet.com/hyperdiscordia/library_of_babel.html">The Library of Babel</a>&#8216;, let&#8217;s imagine in place of each of the data types we have a table holding all possible values of that data type. So for integers, we have a table &#8216;Integer&#8217; with two columns, &#8216;SurrogateKey&#8217; and &#8216;Value&#8217;, and an infinite number of rows, one row each for each integer.</p>
<p>&#8220;A moment&#8221; says the perceptive gentle reader. &#8220;What data type is &#8216;SurrogateKey?&#8217; And more importantly, what data type is &#8216;Value?&#8217;&#8221;</p>
<p>The type of SurrogateKey we shall leave undefined except to say it is a unique identifier with aleph-null possible values. And the type of &#8216;Value?&#8217; Why, integer, of course, says the White Rabbit. In infinite regress. But that is in the nature of the definition of number. And for each possible width of VARCHAR, such as 1 or 223, we have a table such as VARCHAR_1 or VARCHAR_223 whose columns are &#8216;SurrogateKey&#8217; and &#8216;Value&#8217; where the datatype of Value is &#8216;VARCHAR(1) or &#8216;VARCHAR(223). And the rows contain all the possible permutations of all the valid characters for VARCHARs. So that our table VARCHAR_1&#8242;s rows might be</p>
<p style="padding-left:60px;">KEY VALUE</p>
<p style="padding-left:60px;">1     a</p>
<p style="padding-left:60px;">2     b</p>
<p>etc.</p>
<p>And  EVERYDATE is a table with two columns, &#8216;SurrogateKey&#8217; and &#8216;Value,&#8217; and its rows contain all possible date values. (Those of you who have designed data warehouses may have just had an &#8216;A Ha&#8217; moment.)</p>
<p>So now, at our database design level, our tables consist only of sets of foreign keys with constraints binding them to other tables.</p>
<p>And our Person table definition becomes</p>
<p>CREATE TABLE PERSON {<br />
FirstName mystical_surrogate_key,<br />
LastName mystical_surrogate_key,<br />
Gender mystical_surrogate_key,<br />
Birthdate mystical_surrogate_key,<br />
CONSTRAINT fkFirstName FOREIGN KEY (FirstName) REFERENCES Varchar_20(SurrogateKey),<br />
CONSTRAINT fkLastName FOREIGN KEY (LastName) REFERENCES Varchar_20(SurrogateKey),<br />
CONSTRAINT fkGender FOREIGN KEY (Gender) REFERENCES Varchar_1(SurrogateKey),<br />
CONSTRAINT fkBirthdate FOREIGN KEY (BirthDate) REFERENCES EveryDate(SurrogateKey),<br />
}</p>
<p>Ok. So now, in place of the surrogate keys just imagine that each actual value of a datatype, each varchar, or each integer, is not a literal value, but a foreign key to a table holding all possible values of that datatype&#8230;but because those tables have no other data, only the single columns, we never instantiate them explicitly. We can make direct references from one key value, such as the integer 23, to the same key value, 23, anywhere they occur.</p>
<p>The long-winded point here is that the distinction between data types and tables is not a necessary one, not a base conceptual distinction. There is no difference. The distinction is a practical one, one of convenience. All there are at the bottom are sets and sets of sets. It&#8217;s turtles all the way down.</p>
<p>The First Great Blinder is Date&#8217;s attempt to map from one <em>implementation</em> to another without reference to an underlying conceptual model. This is the most common error made in integration projects. We map one tool&#8217;s export file directly to another tool&#8217;s import file, and, rather than creating a common logical domain model to guide the mapping, we let Junior Programmer do it in their cube. And inevitably we end up with mapping errors.</p>
<p>The more important distinction we should be making in both realms is between entities and non-entities. An entity has identity.  It is unique in its space. We describe an entity with a set of attributes (which as we&#8217;ve seen are sets of sets of sets of &#8230;), just like we describe something without identity.  So what is the difference?  An entity has continuity over time.  It has a continuous existence.  This notion is fundamental to OR-Mapping, not the distinction between data type and tables.</p>
<p>I&#8217;ll have a lot more to say about the nature of identity in another long-promised rumination.</p>
<p>The second mistake Date makes is to use the single table and single class as his canonical example for the mapping. As anyone who has ever worked in the trenches of OR mapping, or model-driven architecture tools, knows, single tables and single classes are just simple cases of the much more useful, and _more fundamental in most important ways_, relations &#8211; not Date&#8217;s relations but queries written to access joined tables, and  &#8211; and there does not seem to be a good word here &#8211; graphs of related classes.</p>
<p>What I&#8217;d like to point out here &#8211; I am wrapping this up for now, but will try to flesh this out more soon &#8211; is the important mapping is not happening at the individual class or table level.  Date make an error in characterizing the mapping of the relational world to the object world  with a the mapping from a single class to a relation.  That&#8217;s obviously not a rich enough example. And the people who have actually designed and used the tools of OR mapping know what&#8217;s right.</p>
<p>So, Mr. Date, here we are.   The First Great Blunder is not a blunder at all.  It is a partial truth.  And your preferred mapping is but another piece of the same truth.  You asked one of the key questions, but you were simply wearing the First Great Blinders and couldn&#8217;t see the arena where the full truth plays out.  To a hammer everything is a nail.</p>
<p>A class <em>can</em> map to a data type.  A class <em>can</em> map to a table.  Your tuple &#8211; a row of a table &#8211; <em>can</em> map to an object. An instance of table data &#8211; a resultset, your relation &#8211; <em>can</em> map to a set of objects, generally in some container managing access to them.</p>
<p>But in the larger arena, these are the fundamental mappings:</p>
<p>A resultset (Date&#8217;s relation) maps to an object graph.<br />
A query definition (Date&#8217;s relational variable) maps to the metadata description of an object graph &#8211; let&#8217;s coin an expression and call it a class graph.<br />
A row of a resultset (Date&#8217;s tuple) maps to a set of individual objects in an object graph connected by pointers.</p>
<p>The fundamental importance of the object graph has become more and more clear over time.  It has emerged at the heart of Service Data Objects, which are object graphs that can be disconnected from the mothership, modified, and phoned home.</p>
<p>More on object graphs soon.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/maxtempleton.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/maxtempleton.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=18&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2008/09/13/on-the-first-great-blunder-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On the true nature of use cases</title>
		<link>http://maxtempleton.wordpress.com/2008/04/23/on-the-true-nature-of-use-cases/</link>
		<comments>http://maxtempleton.wordpress.com/2008/04/23/on-the-true-nature-of-use-cases/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 01:09:18 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[actor]]></category>
		<category><![CDATA[business intelligence]]></category>
		<category><![CDATA[decision theory]]></category>
		<category><![CDATA[knowledge workers]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=17</guid>
		<description><![CDATA[Use cases are primarily used to make software for knowledge workers.   Sure, they are abstract enough and flexible enough to describe users&#8217; interactions with a variety of systems.  You could &#8211; and perhaps people do &#8211; write use cases for driving a car. But most of the time when you see a use case, there [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=17&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Use cases are primarily used to make software for knowledge workers.   Sure, they are abstract enough and flexible enough to describe users&#8217; interactions with a variety of systems.  You could &#8211; and perhaps people do &#8211; write use cases for driving a car. But most of the time when you see a use case, there is software in the offing.</p>
<p>And what exactly do knowledge workers do?  That&#8217;s easy.  They make decisions in the area of their expertise.  They are immersed in a situation made intelligible by their experience and training, and apply their knowledge and reason to make decisions which result in actions.</p>
<p>A user sitting in front of a software screen can only select things.  (We can take care of edge cases by describing writing text as selecting one text out of all possible texts, and by describing drawing with a paint program as selecting one picture out of all possible pix, etc.)</p>
<p>Each selection represents a decision &#8211; check the box, set that radio button, select this item from a combo box &#8211; and the little decisions are rolled up into bigger ones: save, start, do.</p>
<p>There is a range of complexity and sophistication of decision making, and a wide range of the type and depth of expertise a user has to bring to the arena.   At the low end, there are binary decisions in simple spaces &#8211; open a file? ok.  At the high end, there are sophisticated tools that can be used to help analyze complex situations using queuing theory, game theory, probablility, simulation, and other formal techniques.  More about the nature of decisions in a future rumination.</p>
<p>So what is the true nature of a use case?  A use case is a decision context.  It describes an expert engaged in a decision scenario.  The overall goal of the use case is reached by a series of such decisions.  The expert needs to be immersed in the environment where the decision is possible.  They have to be provided with the information, the research, on which to base their decision.  And they need to be presented clear and correct selections that correspond to qualifying and making the decision.</p>
<p>As always, more to come.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/maxtempleton.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/maxtempleton.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=17&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2008/04/23/on-the-true-nature-of-use-cases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>On structuring requirements</title>
		<link>http://maxtempleton.wordpress.com/2008/04/09/on-structuring-requirements/</link>
		<comments>http://maxtempleton.wordpress.com/2008/04/09/on-structuring-requirements/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 03:07:37 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Requirements]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[requirements categorization]]></category>
		<category><![CDATA[temporal requirements]]></category>

		<guid isPermaLink="false">http://maxtempleton.wordpress.com/?p=16</guid>
		<description><![CDATA[Requirements are frequently uncategorized or poorly categorized. Unfortunately it is not unusual to have requirements captured as an undifferentiated list in a spreadsheet, or a shallow bulleted list in a word doc. There are a number of useful ways of structuring requirements. We&#8217;ll touch on one intially, then augment this over time. One very useful [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=16&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Requirements are frequently uncategorized or poorly categorized.  Unfortunately it is not unusual to have requirements captured as an undifferentiated list in a spreadsheet, or a shallow bulleted list in a word doc.</p>
<p>There are a number of useful ways of structuring requirements.  We&#8217;ll touch on one intially, then augment this over time.</p>
<p>One very useful categorization is by the frequency of change or possible change.</p>
<p>The laws of physics, our understanding of how the physical world works, are fundamental requirements for all projects, even if frequently not articulated.   If there was a big bang, there may have been some change near the bang, but it is safe to assume the laws of physics will be stable for the lifetime of one of our software projects.  Sometimes our understanding of them can change, though  &#8211; if x number of objects of a given size fit in a particular box, that is unlikely to change, but the invention of a new lattice packing algorithm might do the trick.  Or making all the chips the same size and shape so they stack in a tennis ball can.</p>
<p>Federal and state laws are generally slow to change.   But they do, and if our project is potentially impacted by such changes during its lifespace, we should take the possibility of change into account.</p>
<p>Contracts with our business partners change at the end of the contract period &#8211; or sometimes sooner if there is a dispute.</p>
<p>Our technical infrastructure changes.  New technologies are introduced and adopted.</p>
<p>Business objectives change much more frequently, driven by changes in the market or  changes in leadership.</p>
<p>Categorize the requirements by their frequency of possible change.  Qualify that with the period of the change and its nature.  Find logical gaps in the resulting picture and fill them.  Then account for the temporal volatility of requirements &#8211; you are designing for the lifespan of your system, not just for the snapshot of it when it rolls out.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/maxtempleton.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/maxtempleton.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maxtempleton.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maxtempleton.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maxtempleton.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maxtempleton.wordpress.com&amp;blog=3129078&amp;post=16&amp;subd=maxtempleton&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maxtempleton.wordpress.com/2008/04/09/on-structuring-requirements/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5dde1ad45fa4d61a44bd0f9f8a07d747?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
	</channel>
</rss>
