<?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>Thoughts on Collaborative Planning</title>
	<atom:link href="http://kswenson.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kswenson.wordpress.com</link>
	<description>Techniques for empoyering office workers to be more efficient, more adaptive, and more effective.</description>
	<lastBuildDate>Mon, 23 Nov 2009 21:41:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='kswenson.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/38346721e83452a1ff1c1cb475911081?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Thoughts on Collaborative Planning</title>
		<link>http://kswenson.wordpress.com</link>
	</image>
			<item>
		<title>Kanban for Software Development</title>
		<link>http://kswenson.wordpress.com/2009/11/22/kanban-for-software-development/</link>
		<comments>http://kswenson.wordpress.com/2009/11/22/kanban-for-software-development/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 21:05:16 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=679</guid>
		<description><![CDATA[Last Wednesday I got a full scale indoctrination into the agile software development methodology called Kanban, loosly based on the Toyota Production System (TPS) mechanism with the same name.  Toyota uses the kanban as a mechanism to allow for just the right amount of parts to be ordered and to be delivered just in time [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=679&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Last Wednesday I got a full scale indoctrination into the agile software development methodology called Kanban, loosly based on the Toyota Production System (TPS) mechanism with the same name.  Toyota uses the kanban as a mechanism to allow for just the right amount of parts to be ordered and to be delivered just in time (JIT) in order to avoid overproduction and waste in the production line.  Kanban Software Development Methodology (KSDM) brings the same lean ideas to a development team.<span id="more-679"></span></p>
<p>The <a href="http://qconsf.com/sf2009/tracks/show_track.jsp?trackOID=304">Kanban track</a> at<a href="http://qconsf.com/sf2009/conference/"> QCon</a>, the SD conference in San Francisco, had a line of speakers coordinated to give a thorough explanation: David Anderson, Jeff Patton, Henrik Kniberg, Chris Shinkle, and David Laribee.  What I found impressed me as an approach that may answer some of the problems I have been having in moving teams to agile development.</p>
<p>My first thought was that it should not be called &#8220;Kanban&#8221; since there is no kanban card: neither physical nor virtual nor electronic.  Instead the focus is on &#8220;leveling&#8221; (also known in TPS as &#8220;heijunka&#8221;) which is a way of keeping the amount of work in each category steady.  Kanban is the mechanism in TPS for achieving this leveling, but in KSDM achieves this leveling without a Kanban token itself.  I won&#8217;t dwell any more on the name, because it is in widespread use, and the ideas attached to the name as so important.</p>
<h2>Resources</h2>
<p>Being new to the topic, I refer you right away to resources with a more thorough treatment of the subject:</p>
<ul>
<li><a href="http://www.limitedwipsociety.org/">LimitedWIPSociety</a> &#8211; a focal point for this philosophy.  &#8220;WIP&#8221; means &#8220;Work In Progress&#8221;.</li>
<li>The <a href="http://finance.groups.yahoo.com/group/kanbandev/">kanbandev group</a> at Yahoo has discussions on these topics.</li>
<li><a href="http://www.infoq.com/articles/hiranabe-lean-agile-kanban">Kanban Applied to Software Development: from Agile to Lean</a> &#8211; a good article from Kenji Hiranabe at InfoQ that lays things out in good detail.</li>
<li><a href="http://www.agilemanagement.net/resources/BetterSoftwareKanbanPrimer.pdf">The Kanban Primer: A Cultural Evolution in Software</a> &#8211; a good overview article from David Anderson</li>
<li><a href="http://kswenson.wordpress.com/2009/10/24/taiichi-ohno-reinterpreted/">Taiichi Ohno Reinterpreted</a> &#8211; my post from a few weeks ago visiting the fundamentals of Toyota Production System</li>
</ul>
<p>My goal will be to simply cover my impression of what is different or unique about this approach to agile software development &#8212; there is a lot more to it than I can cover here.</p>
<h2>Key Concepts</h2>
<p>The key to any Lean (with a capital L) method is to eliminate waste.  In software, work that is partially complete is waste.  This partially complete work is known as &#8220;Work In Progress&#8221; or WIP.  There is a necessity to have a certain amount of WIP, but the point is to minimize that to the degree possible.  You minimize WIP, and as a result that work gets accomplished quickly.  It only stands to reason: with a fixed amount of workers, reducing the number of things being worked on will allow them to spend more time on those fewer things, and get them to a completed state more quickly.</p>
<p>Let me  emphasize how important this is.  Development projects that go for 8 months with no visible results are dangerous on many levels.  By taking such a big bite of work at once, you commit the entire department to a direction without knowing whether it is going to work.  There is no way to gauge the progress of the team, except in vague status measures which can be manipulated by incompetent players to hide reality.   KSDM is about nibbling away at the work.  Each small unit is completed and made customer ready BEFORE the next unit is started.  In my <a href="http://kswenson.wordpress.com/2009/10/24/taiichi-ohno-reinterpreted/">reading of Taiichi Ohno</a>, this production in small continuous batches, instead of huge batches, is the essential ingredient of Just In Time manufacturing.</p>
<p>The focus is on &#8220;flow&#8221; of development activities. Focus on flow does two thing: first it obviously help to continuously get things completed.  The other thing is that it helps to expose trouble.  Whenever there is a disruption in the flow, when the flow does not work quite right, it is an indication of a problem that needs addressing.  If works starts to pile up at one step, this is an indication that you should focus effort on that step and find out what is not working well.</p>
<h2>How it Works</h2>
<p>This seems in many ways contrary to the punctuated approach emphasized by Scrum and other strict iterative development.  This apparent difference is an illusion caused simply by scale.  KSDM allows for finer grained control.  Scrum is a fairly course grained approach, e.g. all work gets done in a three week cycle.  If you look at the larger scale, over the year, Scrum is providing a steady flow of features into the product.  The 3 week iteration is a mechanism to assure that there is not a huge huge backlog of incomplete work.  All the work, of the complete development cycle must be started and finished in that one sprint, which can be difficult if you have people that specialize in certain phases of development.</p>
<p>KSDM takes this control to a different level.  You break the work process in a series different activities (phases).  You then set a limit of how many job units you will allow at any phase.  A simple rule of thumb: you can have a few more work units as you have people doing that job, so that each has one thing to work on at a time, and a small cache of completed jobs.  The people in a given phase will do their work on a job unit to completion, so that it is ready for the next phase of work.</p>
<p>This is where the somewhat brilliant key idea behind KSDM comes to play.  The completed job does NOT free the person for working on another job, until that job is pulled into the following phase and work is started there.  If work is piling up at a particular phase, those people are NOT ALLOWED to work ahead.  As Taiichi Ohno makes so clear, that working ahead is waste.  Instead of working ahead, they can look around to see what is wrong.</p>
<blockquote><p>&#8220;I feel a disturbance in the flow&#8230;&#8221;   &#8211; Obi Wan Kenobi on software development</p></blockquote>
<p>To put this in concrete terms, consider a process which involves (1) detailed design, (2) coding, (3) testing, and (4) documenting.  Each of these stages you place a limit on the number of jobs, and for the sake of example lets say that limit is 4.  Say for example that the coders have finished coding on their four job units, and are ready to take a new one.  But the testing is backed up for some reason, still working on the last four job units, and are not ready to take a new job.  The developers are <em>not allowed </em>to pull in a fifth job unit.  There is <em>no point</em> in coding up more features when the earlier features are not getting tested or documented.  It is also possible that because the developers are not pulling jobs from design, that the design phase becomes filled up with completed tasks.  When work backs up in this way, one should go and figure out why testing is stuck.  Maybe the real problem is that the documentation is blocking test.  Whatever it is, <em>the primary job of the entire team is to identify the problem with the flow</em>, and fix it.  Do not simply work ahead accumulating a huge pile of work for &#8220;someone else&#8221;.  Instead, focus on the big goal, which is to get features completed to a customer ready state as quickly as possible.</p>
<h2>Reflection</h2>
<p>This idea of setting limits on the number of discrete jobs that can exist at any given phase at a time is so simple, and yet so profound, that I want to format these paragraph all in bold italics. It allows people to specialize into different role, to focus on their particular work, while the mechanism assures that the primary goal is not being lost.  Some teams can take a feature (a story actually, a small separable part of a feature) from design to completely implemented, tested and document in only four days.</p>
<p>Kanban works in a car factory because the time to complete a particular job is well known.  A Corolla comes off the line every 97 seconds.  The factory is set up to produce a car&#8217;s worth of parts every 97 seconds as well.  The parts are highly repeatable, so if it takes more than 97 seconds to build four doors, then you need either multiple steps, or parallelism, whatever makes the most sense.  Once you have figured out exactly how long it takes to build a door it can be done again and again.  Software is not so repeatable.  Every software job is different and unique.  How does that work with Kanban?  The interesting thing: it does not turn out to matter.  You break features into stories that are approximately the same size, but if one story takes three times the effort as another story, no problem.  With software the job does not need to be timed to fit into 97 second slots.  We can be flexible in the time dimension: one story takes one day, and another takes three days.  What is important is that that story, no matter how long it takes, is completed before another is pulled in by that resource.  With this understanding, my biggest concern was eliminated.</p>
<p>Clearly the method requires that features be broken down into fine grained stories.  If you did not do this, you run the risk of &#8220;starving the line&#8221;.  That is, one phase is filled with long running jobs, and the following phase has completed all their work.  One area to explore is when the feature designer claims that the feature can not be broken down into small stories.  There are surely techniques to address this, including job classification and prioritization, minimum marketable features, and other details which I can&#8217;t cover in this post.</p>
<p>Finally, it appears to me that a teams with a long practice of waterfall development might be able to <em>evolve </em>into this method.  There is no big disruptive change. Just make the process visible, and limit the amount of work that is in progress at any given time.  This allows Taiichi Ohno&#8217;s concept of  &#8220;autonomism&#8221; to take over, and team can self organize to become more efficient.   This make a lot of sense.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/679/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/679/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/679/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/679/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/679/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/679/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/679/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/679/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/679/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/679/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=679&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/11/22/kanban-for-software-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Devaluing Email Addresses</title>
		<link>http://kswenson.wordpress.com/2009/11/21/devaluing-email-addresses/</link>
		<comments>http://kswenson.wordpress.com/2009/11/21/devaluing-email-addresses/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 01:08:34 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Social Network]]></category>
		<category><![CDATA[anti-spam]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=667</guid>
		<description><![CDATA[Attacking back at the Spammers
Some of my friends and acquaintances know that I am have been experimenting with a new scheme to control spam email.  Like many people, I have had to abandon email addresses in the past due to over-abundance of spam.  When you open a new email address, there is no spam.  But [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=667&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>Attacking back at the Spammers</h2>
<p>Some of my friends and acquaintances know that I am have been experimenting with a new scheme to control spam email.  Like many people, I have had to abandon email addresses in the past due to over-abundance of spam.  When you open a new email address, there is no spam.  But as you continue to use the box, eventually the knowledge that you are actually using a particular email address gets out.  Once your email address becomes known to the spammers there is no sure way to get them to forget it.<span id="more-667"></span></p>
<p>A verified email address has value, and lists of email addresses are traded and bartered in the spam underworld.  Even a non-verified but potentially valid email address has value.  Sending a piece of spam does not cost much, but it has a cost.  Sending to all possible email addresses (start with aaaaaaaa@aaaaa.com, then aaaaaaab@aaaaa.com, etc) is not viable.  Spammers want an email address that is known or at least likely to work.</p>
<p>You could say that a particular email address has value because it is so much rarer than a completely random email address.  A list of 1000 addresses that reaches 1000 people is the same value as a list of 100,000 addresses that reaches 1000 people.  From a spammer&#8217;s perspective, you would like every email address to be valid (reach a person) forever, and have no addresses that go to dead ends.  When people change their email address, there is a cost (albeit small) to the spammer, because the old email address become invalid.  My goal then is to frustrate spammers by filling their lists with invalid email addresses.</p>
<h2>The Answer</h2>
<p>The value of my email address is due to its relative rareness.  I can decrease the value of a particular email address, by increasing the number of email addresses I use.  The idea is this: I can use thousands of email addresses out of a pool of billions of possible address.  I can use a unique email address for (almost) every occasion.  All of the email addresses deliver mail to me.  Imagine the extreme: I print my business cards with a unique email address on every card.  Anyone who uses the address has no problem sending email to me.</p>
<p>It is possible that in the course of normal email interchange, an email message with that address on it, gets posted to some sort of web page (e.g. email forum archive) and the spammers pick it up from there.   The anti-spam feature is that whenever I start to receive spam on a particular email address, I <strong>turn off (disable) the address</strong>.</p>
<p>What if a legitimate party was using that address?  What if that is the email address I gave to my mom to use to contact me?  This would block email from her as well.  Part of the scheme has to be keeping a record of who I have given the address to.  When I turn that email address off, I go back to the legitimate person that I gave it to (e.g. mom), and give them a new email address to use.</p>
<p>You might be thinking correctly that this is onerous to have to tell people to use a different address.  But keep this in mind: if I have given unique addresses to each of my hundreds of correspondents, then all of those addresses except this one remain unaffected.  In the past, I have had to abandon entire email inboxes to ALL correspondents, and send them ALL a new address.  Since there is no way I can remember all of them,  I undoubtedly lose a many along the way.  The need to abandon an email address is rare in general, and contacting one person to switch is painful, but far better than contacting all your contacts.</p>
<h2>Version 1.0</h2>
<p>About 6 months ago I put in place a plan to experiment with.  It turns out that the XPDL.ORG site, which I help run, has unlimited free email forwarding.  So what I did was create new cryptic email addresses, and forward them all to my regular email inbox.  For example:</p>
<blockquote><p>kds_Why54TzrvyZfgzNqqerf@xpdl.org</p></blockquote>
<p>Every time I signed up for some sort of online service or account, I would create a new forwarding address. I created a private wiki page where I recorded the cryptic address, who or what I gave the address to, and when I did that.  The idea is that if I ever have to turn that forwarding off, I can get back in touch with whomever I gave it to.</p>
<p>The email address must be long so that it can not be guessed.  For example if I just use &#8220;keith1&#8243;, &#8220;keith2&#8243;, etc. it would be too easy for the spammers to guess other valid email addresses.  This could cause me to have to turn off many many addresses inconveniently.  If I make the address long and cryptic, then it is very very hard to guess other legitimate addresses, making those addresses relatively safe.</p>
<p>Most of these email addresses are entered into online forms, and used by those services, without anyone actually having to read them, or type them, so it really does not matter how long and complex the email address is.</p>
<h2>It is not perfect&#8230;</h2>
<p>What about &#8220;from&#8221; address on email?  On my standard email, I created a new cryptic address as my &#8220;from&#8221; address every month. It does not matter how long or complicated an email address is when people simply use the &#8220;reply&#8221; button.  Cycling every month is not perfect because if someone puts that email in their address book, and it also gets on a spam list, I might turn it off, and I don&#8217;t know who using that address, so I don&#8217;t have any way to let them know a newer address to use.  Creating a new unique address for every email might be better, because this decreases the chance that someone would hang on to an address that also got on a spam list, but that causes other difficulties.</p>
<p>Some services require you to log in using your email address.  If you really want to keep your &#8220;real&#8221; address private, then you have no choice but to give them and use the cryptic on to log in.  Typing that long and meaningless address is a pain, so in those cases I have to create an address that is easier to remember and type, which unfortunately decreases its security.</p>
<p>Because you are using many email addresses simultaneously, it is possible to start getting multiple copies of a message.  For example, if a message comes to you using address &#8220;a&#8221;, and you reply to it using address &#8220;b&#8221;, then both addresses become part of the ongoing email address.  Some email in-boxes are smart enough to eliminate the duplicate, but not all are.</p>
<p>Every time you sign up for a mailing list, you use a unique cryptic email address, but again this can cause message multiplication when the message is addresses to multiple lists which have different email addresses for you.</p>
<p>In the six months that I have been doing this, I have not had the opportunity yet to turn off an email address.  This is because it takes time to get on those spam lists, so as far as I know, none of my &#8220;new&#8221; email addresses that are less than 6 months old are on any lists yet.    So it is really too early to tell.  It is also true that going to the admin interface and creating a new cryptic email address, recording what I am using it for, and then using that in the sign up form, makes signing up for any service quite a bit more trouble.   Sometimes I am too lazy, and just go ahead and use the fixed address because it is easier.</p>
<h2>Version 2.0</h2>
<p>I just found out about a new service called<strong> <a href="http://www.otherinbox.com/">otherinbox.com</a></strong>.  This is the service that I have been looking for, and it is aimed at <a href="http://www.404techsupport.com/2009/01/01/otherinboxcom-the-perfect-secondary-e-mail/">exactly</a> this problem.  (Scott Francis: you mentioned this service to me a while ago, but it took me this long to investigate.)</p>
<p>You get an account ($20/year &#8211; trial accounts are free) and it gives you an infinite number of email addresses which all go to you.  It has all the capabilities described above, including the ability to block an address at any time in the future.  You can record notes about a particular address to remind you of who you gave the address to, and when.</p>
<p>There is one particular improvement over my old scheme: you don&#8217;t have to set up the address in advance.  When signing up for an account at Barnes and Noble I can create a suitably cryptic address on the fly, and it will automatically create the inbox for that address without extra work from me.  Usually such services start by sending an email for you verify that you own the address, so I can go to the otherinbox.com, find that new email address, and set the address to be forwarded.  This is so much nicer to do later instead of having to do it before you sign up, particularly when you are not on line.  You can even make up an address while filling in a paper form with a pencil, and eventually the account is created for you &#8212; if needed.</p>
<p>They have a lot of other features for filtering and such.  Email can be forwarded, or picked up directly from their web or IMAP interface.  If you want, you can let the email pile up there, and receive only a digest of the email once a day.  That might be really handy with some of the email lists I am on.</p>
<h2>Contemplations</h2>
<p>Perhaps this seems like a lot of trouble, to have to set up and manage a bunch of different email addresses so that you can have the option to cut one off if necessary.  To be honest:<em> it is lot of trouble</em>.  OtherInBox looks like a lot less trouble than my initial way, but it is still more trouble than just being able to give out a single address forever.  Some of the need for this might go away if we had widespread cryptographic signing of email messages so we could know who the email came from, but there are many forces working against that.  Signed messages would not help in a mailing list situation when you are exchanging messages with people you do not know.   There are some possibilities that social software will offer some benefits in this area, once they have matured a bit more.<em> So for now given the current infrastructure, this looks like the best hope for combating spam.</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/667/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=667&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/11/21/devaluing-email-addresses/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Cloud Contracts</title>
		<link>http://kswenson.wordpress.com/2009/11/20/cloud-contracts/</link>
		<comments>http://kswenson.wordpress.com/2009/11/20/cloud-contracts/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 21:58:26 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[cloud]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=683</guid>
		<description><![CDATA[Down-to-Earth Contracts that Keep the Cloud Aloft &#8211; A look at the basic interoperability requirements when communicating with the Cloud,  Keith Swenson &#38; Jacques Durand, Nov 2009
Working together with Jacques Durand, a colleague and expert in the B2B exchange standards space, we put together this article exploring how many of the same standards and agreements [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=683&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote><p><a href="http://cloudcomputing.sys-con.com/node/1196601"><strong>Down-to-Earth Contracts that Keep the Cloud Aloft</strong> &#8211; A look at the basic interoperability requirements when communicating with the Cloud</a>,  Keith Swenson &amp; Jacques Durand, Nov 2009</p></blockquote>
<p>Working together with Jacques Durand, a colleague and expert in the B2B exchange standards space, we put together this article exploring how many of the same standards and agreements necessary today will also be necessary for applications deployed to the cloud.  Just published!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/683/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=683&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/11/20/cloud-contracts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Interstage BPM Version 11 &amp; Cloud</title>
		<link>http://kswenson.wordpress.com/2009/11/19/interstage-bpm-version-11-cloud/</link>
		<comments>http://kswenson.wordpress.com/2009/11/19/interstage-bpm-version-11-cloud/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 02:09:17 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Fujitsu]]></category>
		<category><![CDATA[Interstage]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=671</guid>
		<description><![CDATA[Fujitsu made a couple of press releases last week, announcing two things: a new release of Interstage BPM, Version 11, and our Cloud BPM offering.  This post just contains links to articles on the subject of these announcements.

Product Review: Interstage BPM V11 &#8211; Column 2
Fujitsu Interstage BPM in the Cloud &#8211; Column 2
Fujitsu BPM Cloud [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=671&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Fujitsu made a couple of press releases last week, announcing two things: a new release of Interstage BPM, Version 11, and our Cloud BPM offering.  This post just contains links to articles on the subject of these announcements.</p>
<ul>
<li><a href="http://www.column2.com/2009/11/fujitsu-interstage-bpm-v11/">Product Review: Interstage BPM V11</a> &#8211; Column 2</li>
<li><a href="http://www.column2.com/2009/11/fujitsu-interstage-bpm-in-the-cloud/">Fujitsu Interstage BPM in the Cloud</a> &#8211; Column 2</li>
<li><a href="http://www.channelinsider.com/c/a/Cloud-Computing/Fujitsu-BPM-Cloud-Challenges-IBM-Oracle-401162/">Fujitsu BPM Cloud Challenges IBM, Oracle in Cloud Computing</a> &#8211; Channel Insider</li>
<li><a href="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1373879,00.html">Fujitsu fields BPM on cloud computing platform</a> &#8211; Search SOA</li>
<li><a href="http://esj.com/articles/2009/11/09/fujitsu-enhanced-cloud.aspx">Fujitsu Announces Free Access to Enhanced Cloud BPM Platform</a> &#8211; Enterprise Systems</li>
<li><a href="http://www.ctoedge.com/content/fujitsu-cracks-bpm-auto-discovery-code">Fujitsu Cracks BPM Auto Discovery Code</a> &#8211; CTO Edge</li>
<li><a href="http://www.itbusinessedge.com/cm/blogs/vizard/auto-discovery-comes-to-bpm/?cs=37324">Auto-Discovery Comes to BPM</a> &#8211; IT Business Edge</li>
<li><a href="http://www.cbronline.com/news/fujitsu_releases_new_version_of_interstage_bpm_091109">Fujitsu releases new version of Interstage BPM Captures hybrid collaborative process patterns</a> &#8211; CBR</li>
<li><a href="http://soa.sys-con.com/node/1177177">Fujitsu Interstage BPM Version 11, Lets Businesses Proactively &#8220;Sense and Respond&#8221; to Change</a> &#8211; SOA World</li>
<li><a href="http://www.ebizq.net/news/11878.html">Fujitsu Announces Free Access to its Enhanced Cloud BPM Platform for Solution Providers and Enterprise Teams</a> &#8211; EBizQ</li>
<li><a href="http://searchcio-midmarket.techtarget.com/tip/0,289483,sid183_gci1374184,00.html">Process intelligence tools reduce guesswork, increase payout of BPM</a> &#8211; Search CIO Midmarket</li>
<li><a href="http://searchcio-midmarket.techtarget.com/tip/0,289483,sid183_gci1374184,00.html">Process intelligence tools reduce guesswork, increase payout of BPM</a> &#8211; a writeup on the use of Process Discovery at ESI.</li>
<li><a href="http://www.sdtimes.com/content/article.aspx?ArticleID=33936">Fujitsu gives BPM users a helping hand</a> &#8211; article by David Worthington at SD Times.</li>
</ul>
<p>While there are many small features in the Version 11 release, the two main ones are a significantly extended capabilities in Dynamic BPM and extended tenant management capabilities.  The latter feature helps to support the extended cloud BPM offering which includes a complete BPM design, development, and run-time capability which is free for small teams.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/671/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/671/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=671&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/11/19/interstage-bpm-version-11-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Errors &amp; Learning Opportunities</title>
		<link>http://kswenson.wordpress.com/2009/11/12/errors-learning-opportunities/</link>
		<comments>http://kswenson.wordpress.com/2009/11/12/errors-learning-opportunities/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 18:11:53 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=662</guid>
		<description><![CDATA[This button in this situation produces an error report &#8230; therefor the button should be disabled.
I question this line of reasoning.  I have observed this reasoning used at all levels, from programmers, to UI designers, to Product managers, and even to customers (users) themselves.  The goal seems to be &#8220;protect the user from error messages&#8221;.   [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=662&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote><p>This button in this situation produces an error report &#8230; therefor the button should be disabled.</p></blockquote>
<p>I question this line of reasoning.  I have observed this reasoning used at all levels, from programmers, to UI designers, to Product managers, and even to customers (users) themselves.  The goal seems to be &#8220;protect the user from error messages&#8221;.   Some people naively think <span id="more-662"></span>that a perfect user interface is one in which the user never sees an error message.</p>
<p>&#8220;Good usability&#8221; means that a user can use a product without requiring significant training.  It should be expert friendly as well as novice friendly.  This means that the product itself helps to train the novice user.  <strong>An error message is an opportunity to learn.</strong></p>
<p>Intelligent people learn from mistakes.  My dad used to say that &#8220;if you are not making mistakes you are not learning anything.&#8221;  Imagine, if you can, a school designed around the idea of preventing students from making mistakes.  Imagine a math teacher who instead of grading a test, would correct all the mistakes or otherwise <em>prevent</em> students from having incorrect answers.  Clearly, the student would learn very little.  Students who already knew all the concepts would do fine, but those attending to pick up concepts would be out of luck.  It would be &#8220;expert friendly&#8221; but not &#8220;novice friendly&#8221;.  Allowing students to make mistakes (safely) and learn from them is a widely accepted pedagogical principle.</p>
<p>How odd it is that many software designers attempt to eliminate the occurrence of error reports.  Error messages are assumed to be &#8220;bad&#8221;.  Usually it is explained: &#8220;the user should not have to see an error message.&#8221;  So they disable controls.  I have covered this in the past with posts <a href="http://kswenson.wordpress.com/2006/08/19/please-dont-disable-my-menu-options/">Please Don’t Disable My Menu Options!</a> and <a href="http://kswenson.wordpress.com/2007/10/02/89/">More on Disabling UI Controls</a>.  Because of this misguided design principle, the user interface is not as good at training new users.  It seems that such software is designed to be &#8220;expert friendly&#8221; but not &#8220;novice friendly&#8221;.</p>
<p>In defense of these people, many software packages have extremely poor error reporting interfaces.  Often the software &#8220;accuses&#8221; the person of making a mistake, blaming them for doing something wrong. This makes error reports unnecessarily distasteful.</p>
<p><strong>An error message should instead be presented as an opportunity to learn something about the program. </strong>Like any good tutor, the information is presented at the time that you need it, at the time that you try a particular approach.  The error message should contain useful information about why that particular action was not applicable at the moment.  From this, the user would learn about the software, learn what was possible, and what is not possible.</p>
<p>Instead of trying to &#8220;protect&#8221; the user from error messages, we should be aiming for the exact opposite extreme: copious error messages.  Instead of disabling actions, the actions should be enabled, and should explain why that action might not be used at that moment, and when it can be used.  It is harder to make this kind of user interface, but worth it.  It is far more novice friendly because it helps them learn the product as they use it.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/662/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=662&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/11/12/errors-learning-opportunities/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Taiichi Ohno Reinterpreted</title>
		<link>http://kswenson.wordpress.com/2009/10/24/taiichi-ohno-reinterpreted/</link>
		<comments>http://kswenson.wordpress.com/2009/10/24/taiichi-ohno-reinterpreted/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 00:18:29 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=642</guid>
		<description><![CDATA[Taiichi Ohno is credited with the creation of the Toyota just-in-time production system, and his book &#8220;Toyota Production System: Beyond Large Scale Production&#8221;  is a surprisingly good read even today when many of these principles are considered well established.
My interest was in understanding how this philosophy applies to Agile/Lean Software Development.  I was pointed this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=642&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Taiichi Ohno is credited with the creation of the Toyota just-in-time production system, and his book &#8220;Toyota Production System: Beyond Large Scale Production&#8221;  is a surprisingly good read even today when many of these principles are considered well established.</p>
<p>My interest was in understanding how this philosophy applies to Agile/Lean Software Development. <span id="more-642"></span> I was pointed this way by <a href="http://www.poppendieck.com/ld.htm">Tom and Mary Poppendieck&#8217;s</a> excellent book on the same subject, as well as an insightful paper from Fujitsu on the subject of <a href="http://sciencelinks.jp/j-east/article/200706/000020070607A0159269.php">Innovation in Software Development Process by Introducing Toyota Production System</a> (<a href="http://www.fujitsu.com/downloads/MAG/vol43-1/paper16.pdf">pdf</a>).   As I am reading I am surprised at how perfectly the advice from Mr. Ohno fits to the advice I would give to a software team for Lean/Agile software development</p>
<h2>Mapping Concepts to Software</h2>
<p>Before the advice applies, you need to understand how software maps to 20th century automobile manufacturing.  Ohno&#8217;s central theme is to eliminate waste.</p>
<p>One form of waste is the consuming of parts (which cost money) into incomplete products (which can not be sold yet).  The most wasteful form of mass productions would be one where you build 1000 car chassis, then you put 4000 wheels on them, then you put 1000 engines in them.  All the time you have this inventory of 1000 incomplete cars until they are finally finished.  He would prefer that there be only a single incomplete car at a time.  The reality is that it takes time to put the parts together, and so there is an assembly line with a number of cars being worked on at the same time, and the real goal is a very steady even stream of not only the finished cars, but also all the parts flowing into the process.  The total accumulation of incomplete cars, as well as the accumulation of incomplete parts, adds to the amount of waste, and should be eliminated to the degree possible.  If you have a significant amount of over production, then there is additional waste from the need to store the extra parts and handle them multiple times.</p>
<p>For software, the bytes that form the lines of code cost nothing.  You should not think of lines of code as being the parts of the system, and you should not think about the source code as being the output of the process.  This focus on the source code as the &#8220;product&#8221; is one of the biggest misconception in the software industry.  Reality is less tangible.  The &#8220;parts&#8221; that are consumed are simply the &#8220;person-hours&#8221; that are invested in discovering and developing a feature.  This includes time from not only programmers, but all the various roles on the team.   The output is best described as  &#8220;satisfied customers&#8221;.  While slightly inaccurate, this phase is meant to remind us that it is not enough to burn a CD with the program on it, but the final sale is for installed software which is successfully used to solve customer problems.  If you have done the job right, they will be &#8220;satisfied&#8221;.</p>
<p>Just as in a car factory, you do not want to build 1000 cars in parallel, similarly in software you do not want to create 1000 features in parallel.  As you start to build a car, the waste builds as you add more and more parts, but the waste disappears when the car is completed and ready for shipment.  The uncompleted cars are a liability on the organization, and building cars in parallel multiplies the amount of waste.  Similarly, once your start designing a feature, and start investing person-hours, the waste builds in direct proportion.  Finally, when the new feature is actually in a &#8220;customer-ready&#8221; shape, that waste disappears.  The started-but-uncompleted features are a liability.  Features designed but not coded is a waste of time.  Code that is written but not tested is a real liability because there is now a hidden amount of work that must be done to correct problems in the coding.  Completed features in the code, but can not be installed are still a waste.  Building a bunch of features in parallel multiplies the waste.</p>
<p>Careful readers will notice that the above discussion is slightly simplified.  Even a perfect factory would have cars in an incomplete state, and a perfect software team would have some feature in an incomplete state.  It is wrong to call all items in transit &#8220;waste&#8221;, rather it is waste only if it is more than the minimum necessary.  We want to minimize the number of incomplete features, not eliminate them entirely.</p>
<p>While you can envision a software development team as a factory that produces &#8220;features&#8221;, you need to be very careful.  When building 1000 cars/day, all of the various steps are highly repeatable.  The time for each step can be measured to a high precision, and the exact costs of parts can be predicted.  For software development no such predictability exists.  You start a software feature with no reliable estimate of the cost.  This does not change the goal of elimination of waste.  Even though you don&#8217;t know ahead of time the amount of waste, it still makes sense to runs thing in such a way as to minimize waste in whatever amount occurs.</p>
<h2>Quotes from the Book</h2>
<p>Understanding the mapping, we can now take quotes directly from the book (including page numbers), and translate them in to meaning for software development teams.</p>
<blockquote><p>The loom stopped instantly if any one of the warp or weft threads broke.  Because a device that could distinguish between normal and abnormal conditions was build into the machine, defective products were not produced.  &#8211; p6</p></blockquote>
<p>Automated testing and continuous testing are a central pillar of Agile development.  Ohno is talking here about looms that were perfected by Toyoda Sakichi from 1910 to 1926.  Amazing that the concept of continuous automated tests was in use a century ago.</p>
<blockquote><p>Stopping the machine when there is trouble forces awareness on everyone. &#8211; p7</p></blockquote>
<p>When a test fails, a software team should drop whatever it is doing and address the problem of the test.  This does force awareness on everyone.</p>
<blockquote><p>&#8230;the workers themselves should push the stop button to halt production if any abnormality appears. &#8211; p7</p></blockquote>
<p>Stopping a production line is expensive, but here we see that Ohno understand that the expense of an unfixed problem is far greater.  The biggest enemy of software quality is ignoring test failures.  Once I joined a team where the  building of the product produced thousands of warnings from the compiler.  The developers felt that warnings were harmless, but they are not.  First thing I had them do was fix the code that caused the harmless warnings, so we could then see if any important warnings came out.  Allowing anyone to check in source with a broken test propagates those broken tests, and that causes a blindness to the real problems in the code.</p>
<blockquote><p>Repeating <em>why</em> five times, like this, can help uncover the root of the problem and correct it.  -p17</p></blockquote>
<p>So much of software is written to get around problems at other layers of software.  Code bases often seem like a huge elaborate house of cards.  Compensating code is distributed throughout to hold it together.  One should ask: &#8220;why is that routine written this way&#8221;, &#8220;why does that support routine return this result&#8221;, &#8220;why is this value needed&#8221;, etc.  Addressing the problem at the lowest level will eliminate the need to multiple copies of the compensating code, and usually reduce the potential for bugs.</p>
<blockquote><p>We regard only work that is needed as real work, and define the rest as waste. &#8230; we must make only the amount needed. -p19</p></blockquote>
<p>Here Ohno explains an important concept that overproduction is waste as well.  Well known in software methodology as <a href="http://en.wikipedia.org/wiki/YAGNI">YAGNI</a>.  Don&#8217;t implement anything until you need it for an actual end-user use case.  Contrary to this, programmers often pride themselves on &#8220;complete&#8221; implementations of interior object classes, commonly adding a host of getters and setters which are not (yet) needed by anyone, but they anticipate will be needed at some time in the future.  This additional coding is precisely the kind of overproduction that Ohno is speaking of: not only does it waste the programmer&#8217;s time to implement it, but the excess lines of code increase the code review and maintenance burden in the way exactly analogous to the need to store the extra parts in a car factory.</p>
<blockquote><p>I used to tell production workers one of my favorite stories about a boat rowed by eight men.  One rower might feel he is stronger than the next and row twice as hard.  This extra effort upsets the boat&#8217;s process and moves it off course. -p24</p></blockquote>
<p>Lessons on teamwork are always useful, and this points out the danger of measuring anything intermediate to &#8220;customer satisfaction&#8221;.  The goal in rowing is to get the entire boat to the end line as quickly as possible, and a focus on anything else, such as individual force on the oar can distract from this goal.  In software, getting a workable feature to the final customer is the goal, and measuring anything else, such a number of lines produced, or bugs found at a particular phase, can distort the process in unacceptable directions.</p>
<blockquote><p>The operating method of the Toyota production system is kanban.  This piece of paper carries information that be divided into three categories: (1) pickup information, (2) transfer information, and (3) production information. -p27</p></blockquote>
<p>Kanban was a way of decentralizing the control of production.  The factory is oriented on pull-based production, and the kanban is a way to communicate the detailed need for production, in order to avoid over (or under) production.  The kanban might be considered to be analogous to storycards that are used to communicate details of a customer use case.  This is only the top level, because kanban is used to communicate within the factory within any producing/consuming relationship, and for the most part this is NOT done in a software team.  Sometimes a bug report can be used to allow one team to make a request for enhancement on another team, and to track the progress.  In this case the bug report is analogous to the kanban.  But caution should be used in the analogy: remember that software parts are unpredictable by nature.  The very regularity of car parts, and the known quantity and cost of the parts, makes it very easy to implement specific requests for production.  In software, however, every part is unique and custom made for the situation, and so a much richer, more interactive discussion is needed.  Kanban should not be implemented literally in a software development team to replace internal communications.  Still, the idea that performance level is tuned according to the need to produce a given use case is very important.</p>
<blockquote><p>I have good reason for emphasizing the role of top management in discussing the first rule of kanban.  &#8230;management commitment and strong support are essential to the successful application of this first rule. -p31</p></blockquote>
<p>Here he is talking about moving control of production from the central planners, and replacing that with the more &#8220;autonomic&#8221; method of Kanban.  It is interesting to see how this must have been very uncomfortable for upper management to &#8220;trust&#8221; that the people on the floor would regulate things correctly.  It is the same with moving software development to an agile approach, where individuals on the team self-organize to get the current sprint done.  The waterfall approach gave more control to external authority, and also provided a better way to measure progress.  Changing to a lean software approach means that this control and to some extent this ability to report progress is eliminated.   This top management support is essential.</p>
<blockquote><p>Unless one completely grasps this method of doing work so that things will flow, it is impossible to go right into the kanban system when the time comes. -p33</p></blockquote>
<p>The key word here is &#8220;flow&#8221;.  In a factory the flow of physical parts is paramount.  In software, the flow of feature ideas is paramount.    The flow of continual builds, and regular sprints, with customer quality code available at all times is the key.  Stockpiling a huge number of features for implementation in an 8 month project is precisely like the mass production of cars that was beginning to show signs of inefficiency in the 60&#8217;s and 70&#8217;s.  Mass production creates waste.  Waste is eliminated by a steady flow of product releases, each quickly generated from the last.  <strong>This is the central theme of the book, and it is the central theme of Lean Software Development.</strong></p>
<blockquote><p>In the beginning, everyone resisted kanban because is seemed to contradict conventional wisdom.   &#8230; To make kanban understood throughout the company, we have to involve everyone. If the manager of the production department understood it while the workers did not, kanban would not have worked.  -p35</p></blockquote>
<p>How interesting that Mr. Ohno had so much pushback.  He admits else where that it was non-intuitive, but remember that conventional wisdom is based exclusively on what you used to do.  We see the same with software method, including the need to include everyone.  If you train part of a team on the method, you will surely fail, (and I have direct personal experience with this).</p>
<blockquote><p>While traditional planned mass-production system does not respond easily to change, the Toyota production system is very elastic and can take the difficult conditions imposed by diverse marked demands and digest them. &#8211; -p37</p></blockquote>
<p>This is the promise of Lean/Agile software development: the continuous flow of small features allows for much more rapid response to market changes.  It is <em>ironic </em>that cars with all their physicality can be developed in an agile way, while software which due its lack of physicality aught to be easy to change, but is still developed with a waterfall model making it impervious to change.</p>
<blockquote><p>Production Leveling:  It had been a long accepted production fact that continuous punching with one die in the press beings the cost down.  It was considered common sense to product in the largest lots possible and punch continuously without stopping the press. -p38</p>
<p>In the 1940&#8217;s, Toyota&#8217;s die changes took two to three hours &#8230; By the late 1960s it was down to a mere three minutes. -p39</p></blockquote>
<p>The idea that large production runs can reduce cost is well established, and is exactly counter to the idea of producing only as many of a thing that you need.  Not deterred by this, Toyota figured out how to eliminate much of the waste in small production runs.  Ohno had faith that die changes could be made faster, and without that faith it would never have been accomplished.</p>
<p>The same thinking perpetuates waterfall software development: the established <em>&#8220;fact&#8221; </em>that there is overhead in checking in and testing code, therefor, if you have to touch the code you should implement as many features at once as possible.  If you have the orientation that testing is long and difficult, and you do it only once a quarter, then the idea of doing it once a day is simply impossible to consider, and quick development sprints equally impossible.  However, if you understand the advantage of continuous flow of features, then you automate your tests, and make them so you can run them every day.  If you have faith that tests can be automated and run quickly, then you have a chance of realizing this potential.</p>
<blockquote><p>To ensure that we have 100% defect-free products, we must set up a syste that automatically informs us if any process generates defective products -p41</p></blockquote>
<p>Automated testing, continuous builds, with automated runs of tests.  Require each programmer to run the tests before checking in, don&#8217;t check in if the test does not run.  This is Agile/Lean software development, and Ohno is telling us about it in the 70&#8217;s.</p>
<blockquote><p>Rule three of kanban prohibits picking up or producing goods without a kanban.  Overproduction is automatically checked, even if someone wants to make more. -p43</p></blockquote>
<p>If software is developed only to meed the needs of a specific use case, and the use case is attached to the check in, we will eliminate over coding of things not needed for the use case.</p>
<blockquote><p>If one sticks to the idea that, once set, a plan should not be changed, a business cannot exist for long.   Sticking to a plan once it is set up is like putting the human body in a cast.  It is not healthy.   -p46</p></blockquote>
<p>This puts a dagger in the heart of the idea that plans should be perfectly formed ahead of time, and this is particularly true in software where nothing is predictable.  Instead, a lean/agile approach to software allows plans to be flexible over time.  Very important, and an idea I frankly did not expect to come from a car manufacturing giant.</p>
<blockquote><p>The plant should be a place where such judgments can be made by workers autonomously. -p45</p></blockquote>
<p>Again a common theme in lean/agile software development approaches, but not what I expected to hear from a manufacturing giant.  In this case he describes the business organization as having an &#8220;Autonomic Nervous System&#8221;.</p>
<blockquote><p>Similarly we want information only when we need it.  Too much information induces us to procese ahead, and can cause mix-up in sequence.  In business, excess information must be suppressed. -p50</p></blockquote>
<p>The kanban allows the information to be carried with the products/parts, one of the reasons why kanban works.  It is interesting to see the bias against too much information.  He talks about automatic fine tuning in this quote:</p>
<blockquote><p>as long as we cannot accurately predict the future, our actions should change to suit changing situations. -p52</p></blockquote>
<p>Again we see flexibility and adaptibility as a core value, the antithesis of putting together a perfect plan and then executing long term against that plan.  Instead, adapt as you go along.</p>
<blockquote><p>In any manufacturing situation, we frequently see people working ahead.  Instead of waiting, the worker works on the next job, so the waiting is hidden.  If this situation is repeated, inventory begins to accumulate at the end of the production line or between lines. -p59</p></blockquote>
<p>Here we touch upon a very pernicious area of waste in software products.  If the schedule is relatively fixed, when a programmer finds that an implementation went well and they get done early, they often turn to implementing an extra pet project they have been intending to implement.  It is routine for development team to report to product management that few extra features have been included &#8220;for free&#8221;.  The worst cases of these I have seen have actually caused delays in the product because once implemented we found flaws in the approach, but it was too much work to pull out the functionality, so instead extra work went into fixing it.  Extra work is not extra value, it is instead increased waste.</p>
<blockquote><p>Making large lots of a single part &#8212; that is, punching out a large quantity of parts without a die change &#8212; is a common sense production rule even today. &#8230; The Toyota system takes the reverse course.  Our production slogan is &#8220;small lot sized and quick setups.&#8221; -p95</p></blockquote>
<p>In this chapter he compares Ford production system to Toyota system in order to emphasize the differences.  The parallel of the Ford system to waterfall software method is strong, while the Toyota system is like Lean/Agile software development.  The biggest single driver of continued use of waterfall is the idea that creating a bunch of features at once will reduce overall cost.  There is a feeling that there is an &#8220;overhead&#8221; to the cycle that can not be avoided, and therefor do as much in a single cycle is the most efficient way.  Toyota&#8217;s concept of flow and production leveling is just as radical as the idea of continuous builds and fast sprint feature cycles.  Both are are not intuitive, and have to be seen to believe that it is possible.  It should be obvious, however, that large lot sizes will make changing the product more difficult and maybe nearly impossible.  Thus it is the method of manufacturing that causes the inability to respond.</p>
<blockquote><p>For automation to be effective, we must implement a system in which the machines sense the occurrence of an abnormality and stop themselves.  In other words, we must give the automated machines a human touch &#8212; enough intelligence to make them autonomated and achieve &#8220;worker saving&#8221; rather than &#8220;labor saving&#8221;. -p113</p></blockquote>
<p>In software development, of course, machines are replaced with automated script and programming that does steps of the process, and these must include tests at every step.  Ohno&#8217;s statement here is strong: the automation without the sensing causes more waste than it is worth.  Thus tests built into the automated process, or possibly into the product itself, becomes most important in automating builds and steps in the software cycle.</p>
<h2>Conclusions</h2>
<p>In 117 pages he sets out a clear description of how Toyota has accomplished the climb to be the world&#8217;s biggest car maker, and is a <em>must read</em> for anyone interested in industrial production strategy.</p>
<p>Then, if you understand the mapping to software development, you find that he sets out an equally clear description for Lean/Agile software development.  If Ohno was alive today, I am convinced he would have been an eloquent proponent for developing software in short iterations, with continuous builds, continuous testing, immediate response to build breakage, and guided by feature burn-down.  In other words, a proponent of Agile Software Development.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/642/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/642/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/642/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/642/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/642/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/642/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=642&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/10/24/taiichi-ohno-reinterpreted/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Putting Your Toys Away</title>
		<link>http://kswenson.wordpress.com/2009/10/20/putting-your-toys-away/</link>
		<comments>http://kswenson.wordpress.com/2009/10/20/putting-your-toys-away/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 18:02:03 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Social Network]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=636</guid>
		<description><![CDATA[You know that book on how everything important is learned in Kindergarten?  Along that same line, before I got into Kindergarten, my mother taught me to that if I put my toys away, I will be able to find them again later.  I am sure there was a lot of crying and whining involved, but [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=636&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>You know that book on how everything important is learned in Kindergarten?  Along that same line, before I got into Kindergarten, my mother taught me to that if I put my toys away, I will be able to find them again later.  I am sure there was a lot of crying and whining involved, but like most people I eventually got the point.</p>
<p>Fast forward to the adult world.  How many times have you heard these questions:</p>
<ul>
<li>Where is the latest spreadsheet?</li>
<li>Does this document have the latest changes in it?</li>
<li>Are your changes in this document?</li>
<li>Can you send the copy of the file that contains all the latest updates?</li>
</ul>
<p>This situation is caused by the worst scourge of our time: the addiction to email. <span id="more-636"></span> Specifically the attempt to use email as a document management system.</p>
<p>The solution is so simple: find a place to put the document, where everyone can access it.  Put it there, and always update it there.  If you always get the document from there you will always have the latest copy.  If the always put updates there, everyone else will always get the change.  This is so obvious that I am sure most of you reading this will feel slightly insulted that I am spelling it out in such detail.</p>
<p><strong>Why is it then so difficult to teach people this behavior?</strong></p>
<p><em>Part of it is simply short sighted thinking</em>:  it takes extra effort to put your toys away, and the benefit of putting them away might be a long time from now (like tomorrow).  Just like it is easier to leave your toys sitting in the middle of the room, when someone requests a document, it is simply easier to just email it to them.  Attach it as an attachment, and off it goes, problem solved &#8230; for the moment.  It takes quite a bit longer view to realize that (1) others may come back and request the document again, and (2) even that person is going to in the future want updated versions.  Why put out extra effort now, in order to save that work which will come in the future (like tomorrow).</p>
<p><em>Some of it is blindness to the dynamics</em>: documents change over time, but for some reason we always act as this version I am sending now is the final version never to be modified again.  I laugh every time I see a document with a title that includes &#8220;FINAL&#8221; in the name.    It is even funnier when the title has multiple repetitions of FINAL.  How does this blind spot persist when at the same time we all have such difficulty locating the &#8220;updated&#8221; copy.</p>
<p><em>Some of it is selfishness</em>:  I received an email this week from the finance department detailing exactly how to handle a particular kind of financial transaction.  From the detail of the procedure involved, it was obvious that the entire company was not expected to memorize the exact procedure.  They apparently expected everyone in the company to carefully file this important information away in a place that you can find it if the need ever arises.  Instead of taking the time to organize the information in a single place where everyone can get it, they push this task out to everyone in the company.  Multiplying the real effort to the company by many fold.  Clearly it would be better for everyone to integrate this into a corporate knowledge base, organized so I can find it if I needed, at that time that I need it.  But that kind of foresighted thinking is rare when it is just so easy to send an email.</p>
<p><strong>First Step is Acknowledgment of the Problem</strong></p>
<p>Let say that everyone realizes that email attachments are the problem, what can we use instead.  There are some problems with current document management systems (DMS).</p>
<p><em>Access</em> :  I can send an email to whomever I want, and attach the document.  But putting a document into a DMS, how can I guarantee that the intended recipient can access the document?  Most internal corporate networks have become byzantine mazes as the result of attempt to control who can access what through the use of blocking certain addresses at certain routers.  I have heard this complaint from many people at many organizations.  The blocks are put into place in the name of safety, and getting thing unblocked is nearly impossible since it is virtually impossible to prove that such a change is still safe.  Desktop computer A is cut off from desktop computer B because a virus might propogate along that path.  How can you prove that virus will not?  You can&#8217;t.</p>
<p><em>Access Control</em>:  If you are lucky enough to find a DMS that everyone can access, how do you  make sure that only the intended recipient(s) can access it?  All DMS have fine grained access control, but it is usually a large amount of trouble to change it because of the detail that you have to work at.  Addressing an email message is easy, especially if you use &#8220;Reply&#8221;.   Assigning users to access a document is easy, but there is no analog to &#8220;reply&#8221;.   Few DMS offer a way for people to request a document from those who own it.  Most DMS don&#8217;t even allow people to be aware of documents they don&#8217;t have access to, which would be necessary to make the request in the first place.</p>
<p>Transitive Access Control: If I send a document to Joe, he can forward it to Mary.  If I give right to Joe to access a document, most DMS systems will NOT allow Joe to give access to Mary.  It wouldn&#8217;t be &#8220;control&#8221; otherwise, would it?  But to allow a DMS to replace email, this is exactly what is needed.   In the <a href="http://wiki.600building.com/nugen/">Process Leaves</a> system, we implemented such ability to &#8220;forward&#8221; the rights to another person, but most users find this so surprising and unexpected that they never use it.</p>
<p>The solution is to make a shared &#8220;room&#8221; where all the toys can be shared equally within a group.  That is the solution that many approaches have taken, and it is not difficult.  But someone still has to set up the room in advance, in anticipation of the need to share, and most people will not take this step.  It is just easier to send the documents as an attachment and force the work onto everyone else.  In groups that I work with, even making the room available to people, they rarely get used.</p>
<p><em>Any ideas on how to break the email addiction?</em> Any tricks you know of in getting people to use &#8220;places&#8221; to put documents?  I made a similar plea last year in &#8220;<a href="http://kswenson.wordpress.com/2008/09/18/page-first-then-e-mail-please/">Page First, Then E-Mail, Please</a>&#8221; about the email message itself.  Otherwise, I am afraid, it is a bit like teaching teenagers the benefits of a tidy room &#8212; in other-words: a lost cause.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/636/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/636/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/636/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=636&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/10/20/putting-your-toys-away/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Process Improvement: Informed &amp; Lean</title>
		<link>http://kswenson.wordpress.com/2009/10/15/process-improvement-informed-lean/</link>
		<comments>http://kswenson.wordpress.com/2009/10/15/process-improvement-informed-lean/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 20:55:32 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[process discovery]]></category>
		<category><![CDATA[process mining]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=628</guid>
		<description><![CDATA[I could call this post &#8220;Removing the Risk from Lean Process Improvement&#8221; because it starts with the assumption that you want to improve your processes using Lean principles, but you want guidance on how to apply those principles most effectively.
Soooo much discussion of Lean last week at the Forrester Forum and the Gartner BPM Summit.  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=628&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I could call this post &#8220;<strong>Removing the Risk from Lean Process Improvement</strong>&#8221; because it starts with the assumption that you want to improve your processes using Lean principles, but you want guidance on how to apply those principles most effectively.</p>
<p>Soooo much discussion of <a href="http://en.wikipedia.org/wiki/Lean_manufacturing">Lean</a> last week at the Forrester Forum and the Gartner BPM Summit.  Who can argue against Lean?  It is after all a focus on providing more value with less waste.  Lean is a focus on eliminating waste, the original sevens wastes identified by Toyota, as well as elimination of anything that does not provide value to the customer.  We all want to get rid of waste and inefficiency.</p>
<p><em>How do you identify the waste in your business process?</em> This is harder than you might think.  <span id="more-628"></span>Sure, you probably have many <em>anecdotes </em>about cases that went terribly wrong, but how much did that really cost?  How common is it?  After all, one extreme case does not signify a trend.  What you need is a <em>quantitative measure</em> of how much your current process inefficiencies are costing you.</p>
<p>This is exactly what <a href="http://esi.com">Electro Scientific Industries, Inc</a>. (ESI) wanted to do.  They knew they had process inefficiencies for two reasons: they were having inventory problems and they were having a hard time responding quickly to customers.  But what was causing this?  ESI embarked on a Process Mining exercise using <a href="http://www.fujitsu.com/global/services/software/interstage/abpd/">Fujitsu&#8217;s Automated Process Discovery</a>.  What they found astounded them.  What they expected to be a 5 to 7 step process, with maybe a dozen variant paths, turned out to be far more complex in reality.  They analyzed 12,000 cases that had occurred in the past 3 years, and they found 1300 distinct process paths.  They found actual evidence for hundreds of cases of severe repetition, including one case where the order was changed 120 times!  They were able to identify errant paths, and tell precisely how many cases had gone that way.  They found specific process steps with unusually long average transition time, and could measure exactly how many cases were effected by this.  All of this information was pulled out of their existing SAP system without the need to install any new software in their environment.</p>
<p><em>This is exactly what you need for a Lean Process Improvement project.</em> Greg Mueller who headed up the project at ESI, was able to show precise measures of the cost of process inefficiency to upper management.  This resulted in ample support for initiatives to fix them.  Peter Schooff did a <a href="http://www.ebizq.net/blogs/bpminaction/2009/10/how_automated_process_discover.php">podcast</a> with Greg on exactly how they went about this.  As Greg says: &#8220;Process Discovery found 17 different ways to eliminated waste from their business process, any one of which would have more than made up for the effort of doing the discovery.&#8221;   Also, see the<a href="http://www.column2.com/2009/10/fujitsu-process-discovery-case-study-gartnerbpm/"></a><a href="http://www.column2.com/2009/10/fujitsu-process-discovery-case-study-gartnerbpm/"> blog post from </a>Sandy Kemsley covering this use case.</p>
<p>Being able to get precise measures of waste that can be eliminated is critical, even more amazing is how quickly this evidence can be gathered.  Some of the most important evidence was exposed on the second day of investigation.  The data gathering was completed in the first two days.  Analysis continued with what is best described as a &#8220;learning&#8221; phase: gaining a better and better understanding of what was really going on in the organization.  The team would slice the hypercube different ways, isolating teams from each other to discover process patterns in different offices or for different situations.  That data collection is still available today for immediate access so that when someone comes up with an innovative idea to eliminate waste, they can go back to the historical data and estimate the amount of savings that will generate.  The analysis never ends, but within two weeks they were able to identify 17 specific projects to eliminate waste from the business process, along with evidence based estimates of the savings to be made.</p>
<p><em>For those of you planning Lean Process Improvement projects</em>, visualize sitting there, one week from today, with specific evidence based assessments of where your biggest process inefficiencies were, and how much they were costing you?  How much would that be worth?  Would that help you get funding and support for your project?  Sure it would.  You owe it to yourself to at least investigate what a process mining session might be able to do.</p>
<p>Fujitsu has been offering this service for about a year.  The biggest barrier is that is it just so hard to believe that the results are possible.  It seems too good to be true.  I admit, if I had not seen the results myself, I would be skeptical.  But I have seen the results (<a href="http://solutions.us.fujitsu.com/www/content/aboutus/casestudies/index.php">1</a>, <a href="http://www.sap.com/community/showdetail.epx?ItemID=17872">2</a>) which are nothing short of amazing.  Anyone considering process improvement will be wise to <a href="http://www.fujitsu.com/global/services/software/interstage/download/Forrester-Learn-Webinar-2009May-QA.html">learn about them</a> as well. <em> Informing yourself up-front with quantitative measures of the waste in your current processes, will eliminate much of the risk in a Lean Business Process Improvement program</em>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/628/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=628&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/10/15/process-improvement-informed-lean/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>Human BPM vs. Case Management, Summit Nov 3</title>
		<link>http://kswenson.wordpress.com/2009/10/14/human-bpm-vs-case-management-summit-nov-3/</link>
		<comments>http://kswenson.wordpress.com/2009/10/14/human-bpm-vs-case-management-summit-nov-3/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 00:11:48 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[Case Management]]></category>
		<category><![CDATA[human process]]></category>
		<category><![CDATA[portability]]></category>
		<category><![CDATA[WfMC]]></category>
		<category><![CDATA[XPDL]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=624</guid>
		<description><![CDATA[There might be three distinct kinds of process support necessary:
1) System Centric Processes
2) Human Centric Processes
3) Knowledge Worker Processes
System centric processes are fairly well defined: it is a kind of software engineering for very complex distributed systems. These are designed to completely automate the information flow so that no person has to be involved.
Human Centric [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=624&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>There might be three distinct kinds of process support necessary:</p>
<p>1) System Centric Processes<br />
2) Human Centric Processes<br />
3) Knowledge Worker Processes<span id="more-624"></span></p>
<p><strong>System centric processes</strong> are fairly well defined: it is a kind of software engineering for very complex distributed systems. These are designed to completely automate the information flow so that no person has to be involved.</p>
<p><strong>Human Centric Processes</strong> are those well defined processes which involve people. Since people are not &#8220;invoked&#8221; the way that software services are, there are a lot of extra capabilities that are needed in order to interface successfully with the asynchronous nature of personal interactions.</p>
<p>Are <strong>Knowledge Worker Processes</strong> distinct type of process, or just an extreme case? The unique thing about knowledge work is that it is unpredictable. Human Centric Processes can still be formal processes that are all predefined. Knowledge work, by it very nature, can not be predicted in advance. There is no fixed process for this kind of work. The work is &#8220;impromptu&#8221; in that the sequence of steps is figured out at the time that the work is done.</p>
<p>Some have called the technology to support knowledge workers &#8220;<a href="http://kswenson.wordpress.com/2009/09/23/what-is-case-management/">Case Management</a>&#8220;. Especially in the medical field where you have experts who examine the &#8220;case&#8221; (the collection of documents and reports compiled for a given case) and then decide what to do next. (See <a href="http://www.cmsa.org/">CSMA</a>.)   Case management is also the name used in the legal field.  See particularly work at <a href="http://www.ncsc.org/default.aspx">National Center for State Courts</a> which is promoting an idea of <a href="http://contentdm.ncsconline.org/cgi-bin/showfile.exe?CISOROOT=/tech&amp;CISOPTR=565">Configurable Case Management</a>.   Some also call this area Dynamic BPM. Some call it &#8220;Unstructured BPM&#8221;. A better term might be Situational Process Management.</p>
<p>Where exactly is the boundary, if any, between Human Process and Knowledge Worker Process? Clearly KWP need extra support at run time to allow processes to proceed in ways that were not predicted in advance.</p>
<h2>Thought Leader Summit Workshop</h2>
<p>WfMC will be holding a Thought Leader Summit on this subject on Nov 3 in Maidenhead England. Please find additional information at:</p>
<p><a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwfmc%2Eorg%2Fnovember-member-meeting%2Ehtml&amp;urlhash=NUMa&amp;_t=disc_detail_link" target="_blank">http://wfmc.org/november-member-meeting.html</a><br />
<a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Expdl%2Eorg%2Fnugen%2Fp%2Flpqyjklyf%2Fpublic%2Ehtm&amp;urlhash=2Mi9&amp;_t=disc_detail_link" target="_blank">http://www.xpdl.org/nugen/p/lpqyjklyf/public.htm</a></p>
<p>The purpose of the workshop is to clarify the requirements of “the kind of process support which is needed in order to support knowledge workers”. What is and is not included in this kind of a product / technology?  This is the essence of this discussion hosted by WfMC. Henk de Man from Cordys will be there. Dana Khoyi from Global 360 will be there. John Hoogland from Pallas Athena will be there. Max Pucher from Isis Papyrus will be there. Many other thought leaders including Justin Brunt, Nathaniel Palmer, Keith Swenson (myself), Robert Shapiro, are expected to attend in order to get to the bottom of this highly relevant issue.</p>
<p><strong>Goals: </strong>Determine <a href="http://kswenson.wordpress.com/2009/09/23/what-is-case-management/">the best name</a>; create a short and long definition of the capabilities; get agreement on a list of requirements that such technology must have to be considered in the category; draw up a &#8220;Reference Model&#8221; or &#8220;Notional Architecture&#8221; for the category; follow through with a site for market education.  It is a tall order.  To those coming: be prepared to roll up your sleeves.  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The summit will continue on Nov 4 with a workshop on BPMN 2.0 portability. Will BPMN diagrams be exchangeable between tools? Will BPMN 1.2 diagram be portable to BPMN 2.0?  Answers to these questions will be worked on as a continuation of the fine work of the <a href="http://www.xpdl.org/nugen/p/gseonklyf/public.htm">BPMN 2.0 / XPDL 2.2 working group</a>.  This group has already completed a proposed BPMN2.0 serialization schema, prototype transform from XPDL2.1 to proposed BPMN2.0 serialization, and prototype transform from BPMN2.0 serialization to XPDL2.1.  This workshop will continue with discussions of BPMN 1.2 Status and use today, how fast people are migrating to 2.0, diagram interchange conformance classes, tools for validation, BPMN 2.0 Finalization Task Force Status, concerns over the direction, and other working group activities.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/624/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=624&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/10/14/human-bpm-vs-case-management-summit-nov-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
		<item>
		<title>26 Hints for Agile Software Development</title>
		<link>http://kswenson.wordpress.com/2009/10/01/26-hints-for-agile-software-development/</link>
		<comments>http://kswenson.wordpress.com/2009/10/01/26-hints-for-agile-software-development/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 00:05:45 +0000</pubDate>
		<dc:creator>kswenson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://kswenson.wordpress.com/?p=616</guid>
		<description><![CDATA[I collect nuggets of wisdom on various topics. Recently I have been going over the topic of Agile software development; what really matters?  Below is a list of 26 key principles to guide an agile software development team.

Get case 1 fully working before starting case 2. Another way of saying this to use a kitchen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=616&subd=kswenson&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I collect nuggets of wisdom on various topics. Recently I have been going over the topic of Agile software development; what really matters?  Below is a list of 26 key principles to guide an agile software development team.</p>
<ul>
<li><strong>Get case 1 fully working before starting case 2.</strong> Another way of saying this to use a kitchen metaphor is: &#8220;<em>Serve the current meal before starting to cook the next</em>&#8220;.  <span id="more-616"></span>The biggest problem with software development is to start a bunch of things in parallel, because inevitably work will include something that is later discarded, meaning wasted work.  Work on one case (or a small number of cases depending upon team size); get that fully functional; get the tests running; write the documentation; check it all in as a finished piece of work, before you start on the next case.</li>
<li><strong>Never break the build</strong>.  Pretty obvious, but must be included in any list of software development advice.  A programmer who is taking all the proper precautions to test before checking in will never break the build.  If the build is broken, it is always because someone took a shortcut.</li>
<li><strong>Never implement a routine before it is needed in a use case</strong>.  When implementing a particular class, you should have a particular use case in mind, and you should implement only the methods required for that use case.  You might think about  the potential for other capabilities on a class, and you might document this in a comment, but implementation should wait until it is actually needed in a use case.</li>
<li><strong>Never add a data member before it is needed in a use case.</strong> Exactly like above except with regard to class data members.  It may seem obvious to the programmer that a &#8220;customer&#8221; record will need a &#8220;ship to address&#8221;, but that ship to address should not be implemented until you have a use case which specifically needs it.</li>
<li><strong>Don&#8217;t be afraid to make a decision;  don&#8217;t be afraid to change an earlier decision</strong>.  Agile development is about quickly responding to uncertainty.  Early in development you do not have complete information.  You should delay decisions as long as possible, but there comes a time that a decision is needed to move forward.  You can not hold up decision until that information comes in.  Instead, make the best decision you can on the available information.  Later, when new information arrives, don&#8217;t be afraid to change that decision.  (<em>Some dinosaurs call this flip-flopping, but I call it reacting to a changing environment.</em>)</li>
<li><strong>Continually learn how to improve quality.</strong> This job never ends, so you should expect to be constantly on the look out for things that could be improved, and collect examples of ways that quality problems were identified and addressed.</li>
<li><strong>Measure, measure, measure.</strong> Agile development helps address the problem of uncertainty about the future, but there should be no uncertainty about the past.  Tests should be continually running.  Performance of every run should be measured and recorded.</li>
<li><strong>Design around people, not systems.</strong> Too often developers get sidetracked into designing for technical opportunities. Never lose sight of the ultimate purpose of the software, and that is to help people get work done.</li>
<li><strong>Tests are part of the product</strong>.  Many developers and managers consider the product to be what you ship to the customer, and everything else less important.  The tests should be considered an actual part of the product, worthy of full consideration during design, and even, in many cases, delivered with the product to the customer. (This latter part is controversial, but a built-in self-test as part of a software delivery takes inconsequential space, and yet provide tremendous benefit when needed.)</li>
<li><strong>Write the test before the code.</strong> The test itself can be used to clarify the design for exactly what is needed.   Many times there are flaws in the design approach which are discovered when working through the test cases.  Think how much time would be saved to work through those cases before coding.  But: write the test for case1, and code for case 1, before starting case 2.</li>
<li><strong>Eliminate Waste.</strong> Frankly, another ubiquitous platitude which must be included in any list of development principles because it is so important.  There is no end to the job of looking for waste where it exists and eliminating it.  Eliminate anything that does not add value to the actual customer.  If you can not identify the value to the customer, then you probably don&#8217;t need it.</li>
<li><strong>Build a culture of immediate response to build breakage.</strong> Understand that when the build is broken, it effect everyone in the project, and so there is nothing more important than making sure that the central core code is building and testing properly.  I have seen teams that allowed broken tests to persist for months because is was someone else&#8217;s job.  Everyone suffered, but nobody acted.  Instead, there needs to be widespread recognition that a little work will pay back in a big way over the team.</li>
<li><strong>Every team members needs to understand the needs of the customer</strong>.  Large complex projects must be broken into separate teams and further divided for handing out to developers, but this should never be done to the extent that people lose sight of the desires and goals of the actual users of the final product.</li>
<li><strong>Keep related definitions together.</strong> Structure the code so that highly related things are located together, possibly within one class.   This is a standard OO design principle of encapsulation.  Ideally, all the code outside the class will not need to know the details of the internal workings.  Some developers delight in spreading details across multiple files in order to organize in different way: such as to keep all the same data types together, or to organize alphabetically.  For example, putting all the constants in one class in a different package from where they are being used adds unnecessarily to the complexity of the program.   The guiding rule should be to group by relatedness with the result being to hide complexity.</li>
<li><strong>Always run the tests before checking in.</strong> This guideline will help you satisfy the   &#8220;never break the build&#8221; guideline.</li>
<li><strong>Premature optimization is the root of all evil.</strong> A quote from Don Knuth which rings true today.  Code should be written well to avoid needless waste at the micro level, but optimization beyond the individual method level should wait until testing within the entire program with a stress test bases on an actual end user use case.  Intuition of what is important for overall performance is almost always wrong when based only on a static understanding of the code.  Instead, measure the behavior of the complete system, to identify the 1% of the code that really makes a different in performance, and focus on that.</li>
<li><strong>Minimize backlog of uncompleted coding tasks.</strong> When a developer starts to work on a use case, there is a cost associated with all the code that has been modified, but not completed and tested.  Holding uncompleted changes for days or weeks adds up to a significant risk of waste due to rework.  Consider three tasks estimated to take 1 day each.  Starting all three at one time, and working in parallel for three days involves an accumulation of 9 &#8220;units&#8221; of cost.  But doing each task sequentially, completing each task before starting the next, involves only 3 &#8220;units&#8221; of cost.  This is not intuitive.  Our intuition tells us that while we are in there, we might as well do three things at once, before buttoning the work up.  But software is not like physical construction.  Short, quick, and complete jobs not only cause less cognitive load, but also reduce the chance that uncompleted work will conflict with another person&#8217;s uncompleted work.</li>
<li><strong>Never overgeneralize functionality.</strong> This is also know as &#8220;<em>YAGNI &#8211; You Aren&#8217;t Going to Need It</em>&#8221; .  While coding a particular class, programmers like to think with a small tweak this class might be used for several other purposes.  This is fine if those purposes are required by the current use case, but usually the programmer is thinking about uses which have not been invented yet, and which may in fact never be needed.  (<em>This subject always reminds me of the classic Saturday Night Live skit about the product which was both a floor wax, and a dessert topping.</em>)</li>
<li><strong>Never use 3 lines when 2 lines would do. </strong> Succinctness in code pays every time someone else has to read it.  But don&#8217;t shrink the code to the point of being difficult to read.  Smaller, well written code can easier to maintain and easier to spot errors in, than verbose, ornately written code.  Always simplify as much as possible, but no more.</li>
<li><strong>Never ever measure code by counting lines.</strong> The number of lines needed to do a particular task varies greatly from programmer to programmer, and from style to style.  The number of lines of code does not tell you much of anything about the completeness or the quality of the code.  Code quality can vary by a factor of 200, and this overwhelms any usefulness of the count of the lines.  Count instead functioning use cases.</li>
<li><strong>Continually re-design and re-factor.</strong> Apply this cautiously because some code is brittle and difficult to change, but in general you should not be afraid to change the code to match the real use case.  A data member may have been an integer in the past, but when a use case requires it to be a floating point don&#8217;t be afraid to change it, only be sure to complete everything: tests, documentation, installer.</li>
<li><strong>Delete dead code.</strong> There is a tendency to let &#8220;sleeping dogs lie&#8221; when it comes to large blocks of code that is not well understood.  One example is adding a new method to a class to replace another, quite often the developer will leave the old method there &#8220;just in case&#8221;.  Some effort should be expended to check to see if that method is needed, and <em>delete it</em> if there is no evidence that it is needed.  The worst offense is commenting out blocks of code, and leaving that commented code around.  Commented code should be deleted as soon as you know that the tests run, and certainly before checking it in.  It is easy to add code at any time, it is hard to delete code at any time.  Therefor, at a particular time that you have a good idea that something might not be needed, and small extra effort to verify this and eliminate the code will make the codebase more maintainable.</li>
<li><strong>Don&#8217;t invent new languages.</strong> Programmers love to make text files that drive functionality in way configurable at run-time.  There are no end of configuration files to be able to change the behavior of the program without recompiling.  The advent of XML is driving a chain of specialized custom &#8220;scripting languages&#8221; that allow functionality to be &#8220;programmed&#8221; by the end user without having to compile.   The flaw in this reasoning is that the precise definition of the behavior of the operations almost never well defined outside of the context of a particular implementation, and these types of scripting languages are mainly useful only to people who have an intimate knowledge of the internal working of the code body in question.  Thus, real end users without detailed internal knowledge can never possibly know what is necessary to anticipate the effect of complex combinations of commands.   Scripting languages have a use, and can not be eliminated, but the designer must take a very very conservative approach and use existing languages as far as possible, and avoid inventing new ones.</li>
<li><strong>Do not create a design until you are ready to implement and test the implementation.</strong> You should have some overall idea of where you are going, and a overview of the system architecture that will be aimed for, but no detailed design, no detailed description of functional implementation should be written down until the development iteration that will allow that design to be implemented and tests.  The detailed design should cover only as much as is needed to handle the current use case.  The biggest cause of waste in software development is time spend designing things that are not needed or need to be redesigned because of some mistaken assumptions that the design is based on.</li>
<li><strong>Software is Plastic.</strong> Unlike physical manufacturing, software can be changed in significant ways very easily.   In fact there is plenty of evidence that software is easier to change than the design specifications that describe the software.  Furthermore, software communicates the design more effectively than the specification.  Therefor, you should spend the time to implement the design directly, so that customers can see the details of the design.  If you miss and have the change the design, it is easier to change the software than it would be to change the spec.   But most important, your information about what the customers wants is far better after they have seen the code running.</li>
<li><strong>Take the time to code a complete description of the problem in the code that detects and reports exceptional situations. </strong> Programmers are often very lazy and throw exceptions with superficial descriptions of what is wrong.  Thinking that they are the only people who will ever see the problem, and they will remember the meaning of the problem from the vague description included.  But in fact more time is wasted in customer support situations because of inaccurate or incomplete error reports than any other cause.   Write every error message is if you are explaining the situation to someone who just walked into the room and has no experience with the code.  The customer, and the customer support team, after all, have no experience with the code.</li>
</ul>
<p>These are presented in no particular order.  I welcome comments on principles that I have left out, or (if this is the case) principles that you disagree with.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kswenson.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kswenson.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kswenson.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kswenson.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kswenson.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kswenson.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kswenson.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kswenson.wordpress.com/616/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kswenson.wordpress.com/616/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kswenson.wordpress.com/616/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kswenson.wordpress.com&blog=190929&post=616&subd=kswenson&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kswenson.wordpress.com/2009/10/01/26-hints-for-agile-software-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/03e8a6ac1c28065a1f13ee21ab4913b0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kswenson</media:title>
		</media:content>
	</item>
	</channel>
</rss>