<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss"><id>tag:blogger.com,1999:blog-25178118</id><updated>2009-11-07T19:12:37.832-06:00</updated><title type="text">Thoughtful Programmer</title><subtitle type="html">John Reynolds' Blog on Programmers and Programming</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default?start-index=26&amp;max-results=25" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>128</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/TheThoughtfulProgrammer" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-25178118.post-326661045374366079</id><published>2009-07-23T09:53:00.006-05:00</published><updated>2009-07-23T21:24:20.923-05:00</updated><title type="text">Viva Las Lunas!</title><content type="html">It's taken me a few days to figure out what I wanted to write about the 40th anniversary of the moon landing... I was 12 years old - and the moon race played a very prominent role in the world view of that nerdy 12 year old.&lt;br /&gt;&lt;br /&gt;I remember an evening shortly before "One small step" - I don't remember if they'd already landed or if it was between the touch-down landing and Neil Armstrong's famous descent of the ladder - but I was outside with my father and looking up at the moon. Tom, my father, was talking with his friend "Mr. Hahn" about the landing, and "Mr. Hahn" asked me if I was going to watch it on TV that evening.&lt;br /&gt;&lt;br /&gt;For some reason, my response was "No". Perhaps I was just being a contrarian pre-teen, but I definitely remember him reminding me what a special occasion this was. Humans had been standing on the earth looking up at the moon in the sky for thousands of years, but never before had someone been standing on the moon looking back at the earth.&lt;br /&gt;&lt;br /&gt;"Mr. Hahn" was a rather profane man, born into the &lt;a id="ril4" title="wild-catter-oil-patch" href="http://en.wikipedia.org/wiki/Wildcatter"&gt;wild-catter-oil-patch&lt;/a&gt; culture of West Texas and not predisposed to poetry - but he shook me out of whatever funk I was in and I went home and watched Neil and Buzz with rapt attention.&lt;br /&gt;&lt;br /&gt;What amazes me to this day is the undeniable fact that at 12 I was already jaded by the space program before the moon's first footprint. I've been going through my stash of memorabilia weeding things out lately, and I came across a folder bulging with NASA photos and articles and sketches of my own plans for space ships. There's quite a lot of "Star Trek" along with the NASA glossy photos - obviously I was hooked on space.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When I was 9 years old, we were all going to live and work in space. The first astronauts were super-human test pilots - but that made sense. They were blazing the trail that we were all going to follow. Space was not going to be the sole domain of multi-Phd toting eggheads - "Normal people" would be there doing all the things that "normal people" do.&lt;br /&gt;&lt;br /&gt;NASA was an agency of innovation. They were constantly unveiling new rockets, capsules, rocket planes, etc. It was always new and exciting.&lt;br /&gt;&lt;br /&gt;Perhaps the &lt;a id="rop:" title="Apollo One" href="http://en.wikipedia.org/wiki/Apollo_1"&gt;Apollo One&lt;/a&gt; disaster was the beginning of my disenchantment. The inferno that killed those 3 heroes was due to sloppy workmanship, not technical complexity. Even as a 10 year old I was sickened. How could anybody associated with the space program be sloppy?&lt;br /&gt;&lt;br /&gt;After the last moon flight it just got worse.&lt;br /&gt;&lt;br /&gt;&lt;a id="mst9" title="Skylab" href="http://en.wikipedia.org/wiki/Skylab"&gt;Skylab&lt;/a&gt; was a disaster on launch - Solar panels ripping off during launch due to poor construction. The shuttle - supposedly cheap and reliable - just a ticking time bomb of compromises that had more to do with keeping the money flowing to contractors than to accomplishing anything worthwhile.&lt;br /&gt;&lt;br /&gt;NASA (the agency) has no luster left to lose - not the people. The people are great. The agency NASA should be scuttled and its responsibilities parceled out to more focussed agencies: &lt;a id="ast8" title="NOAA" href="http://www.noaa.gov/"&gt;NOAA&lt;/a&gt;, &lt;a id="ffcb" title="DARPA" href="http://www.darpa.mil/"&gt;DARPA&lt;/a&gt;, &lt;a id="r00o" title="DOE" href="http://www.energy.gov/"&gt;DOE&lt;/a&gt;, etc.&lt;br /&gt;&lt;br /&gt;My space heroes are now &lt;a id="kd4z" title="Elon Musk" href="http://en.wikipedia.org/wiki/Elon_Musk"&gt;Elon Musk&lt;/a&gt; and &lt;a id="rgnk" title="Robert Bigelow" href="http://en.wikipedia.org/wiki/Bigelow_Aerospace"&gt;Robert Bigelow&lt;/a&gt;. These guys understand that interest in space has little to do with science - it's about adventure. If it's not exciting, then why go?&lt;br /&gt;&lt;br /&gt;NASA's &lt;a href="http://www.newscientist.com/gallery/lunar-base-designs"&gt;plans for a moon base&lt;/a&gt; are about as exciting as the Antarctic &lt;a id="tp2j" title="Scott Base" href="http://www.antarcticconnection.com/antarctic/stations/scott.shtml"&gt;Scott Base&lt;/a&gt;. How many people do you know who are dying to visit Scott Base? (How many have even heard of it?)&lt;br /&gt;&lt;br /&gt;I know many people who would love to take a &lt;a id="nk_p" title="cruise to Antarctica" href="http://www.coolantarctica.com/Travel/antarctica_travel_home.htm"&gt;cruise to Antarctica&lt;/a&gt; to see the fjords, glaciers and penguins... but who wants to go sit in an over sized high tech igloo? Compare NASA's &lt;a href="http://ares.jsc.nasa.gov/HumanExplore/Exploration/EXLibrary/images/Pics/LUNOX/07Base.gif"&gt;2009 vision of a moon base&lt;/a&gt; to their &lt;a href="http://www.nas.nasa.gov/About/Education/SpaceSettlement/70sArt/AC75-1086-1q.jpeg"&gt;1970's vision for a space settlement&lt;/a&gt; and you'll see how boring the future has become.&lt;br /&gt;&lt;br /&gt;Vegas baby... the moon doesn't need a "base", it needs a "strip". Vegas is a city that never should have been - a gaudy exciting bubble of sex, sin and gambling in the middle of absolutely nothing. If Vegas didn't cater to hedonism, there wouldn't be a Vegas.   &lt;br /&gt;&lt;br /&gt;Musk and Bigelow understand that. They're serious businessmen, and they're following the money that's available now (&lt;a id="oqje" title="COTS" href="http://www.nasa.gov/exploration/news/COTS_selection.html"&gt;COTS&lt;/a&gt;, etc.), but I think they know that the NASA gravy-train and communication satellites are only going to take things so far. The moon's going to remain forlorn until &lt;a id="wm7t" title="Cirque du Sole" href="http://www.cirquedusoleil.com/"&gt;Cirque du Sole&lt;/a&gt; has a lunar venue where they can perform.&lt;br /&gt;&lt;br /&gt;40 years ago something truly amazing happened on the moon. Let's hope that 40 years from now we don't have to look back 80 years for inspiration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-326661045374366079?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/326661045374366079/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=326661045374366079" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/326661045374366079" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/326661045374366079" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/07/viva-las-lunas.html" title="Viva Las Lunas!" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-792237749588207544</id><published>2009-07-22T17:31:00.009-05:00</published><updated>2009-07-22T20:20:57.796-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Get the Words (and Notation) Right</title><content type="html">Dan North (the chief evangelist for &lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;Behavior Driven Development&lt;/a&gt;) loves to say: &lt;br /&gt;&lt;blockquote&gt;"&lt;a href="http://www.infoq.com/presentations/bdd-dan-north"&gt;Get the Words Right&lt;/a&gt;"&lt;/blockquote&gt;&lt;br /&gt;In the context of creating software if you don't know what somebody wants you to build - then you can't build it for them... That statement is true for lots of contexts but let's stick to software for the moment.&lt;br /&gt;&lt;br /&gt;If the person who wants something built uses terms that you don't fully understand, then you'll have to translate those terms into something that you do fully understand. Translation is never perfect, so you're bound to screw up something. When you are ready to explain what you're building to the client (to confirm that you are in fact building the right thing) if you use terms that the client doesn't fully understand, then they'll have to translate your words - and they are likely to misunderstand what you're building.&lt;br /&gt;&lt;br /&gt;Sometimes a 3rd party will be on hand who understands both the client's and the builder's terms (I do that a lot)... but then you are dependent on the translation skills of the 3rd party. The good news is that both you and the client can blame the 3rd party, but your software still stinks.&lt;br /&gt;&lt;br /&gt;Dan's solution to that problem is to spend more time up front agreeing on a common vocabulary between builder and client... with a definite prejudice towards adopting the client's vocabulary whenever possible.&lt;br /&gt;&lt;br /&gt;Seems pretty much like common sense, but it's very hard to actually do it. &lt;br /&gt;&lt;br /&gt;Many programmers just don't really want to understand their client's businesses... they're excited about programming, not business. Business concerns are mundane and boring compared to the challenges that they face when creating software... in their opinion. Many business people are just as bored by technical details as programmers are by business details.&lt;br /&gt;&lt;br /&gt;It's hard - but in truth it's the easiest way to succeed. When everyone is on the same page building projects are actually fun... and the "buildings" are really fun to "live in".&lt;br /&gt;&lt;br /&gt;In the Business Process software domain, we have a common notation for expressing the "flow" aspects of processes - &lt;a href="http://en.wikipedia.org/wiki/Business_Process_Modeling_Notation"&gt;BPMN&lt;/a&gt;. BPMN is relatively simple to learn and it has proved to be a very effective means for Business and Programmer to communicate about the "flow" aspects of their business processes. Unfortunately, BPMN isn't good at all when communicating all of the other aspects of a business process (data requirements, routing rules, etc.) but it's a good start.&lt;br /&gt;&lt;br /&gt;BPMN is Notation rather than words... but Dan's point is hugely relevant - you have to get the Notation right.&lt;br /&gt;&lt;br /&gt;I've worked with BPMN for a few years, and I think the Notation has elements that just aren't right. They don't convey the meaning of the symbol to most Business people.&lt;br /&gt;&lt;br /&gt;Here's my least favorite symbol - the Multiple Instance Activity:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_QviPbycN-9k/Sme0tEy4wuI/AAAAAAAAP_k/SLma-87eFGU/s1600-h/MultipleInstance.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 142px; height: 117px;" src="http://2.bp.blogspot.com/_QviPbycN-9k/Sme0tEy4wuI/AAAAAAAAP_k/SLma-87eFGU/s400/MultipleInstance.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5361452567882154722" /&gt;&lt;/a&gt;&lt;br /&gt;When you see this symbol, you are supposed to know that many copies (instances) of this Activity will be performed at the same time. You "know" this because there are those two little parallel lines on the Activity - They're parallel to each other, so of course that means there are parallel Activities taking place.&lt;br /&gt;&lt;br /&gt;I am not a Business person, but I doubt that many would describe Activities-That-Happen-At-The-Same-Time as parallel Activities. If someone out there knows of a study that proves me wrong, please tell me.&lt;br /&gt;&lt;br /&gt;I think a better symbol would be something like the following:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_QviPbycN-9k/Sme3guGOcTI/AAAAAAAAP_s/Cb6fZSQSj0E/s1600-h/MultipleInstance2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 158px; height: 132px;" src="http://2.bp.blogspot.com/_QviPbycN-9k/Sme3guGOcTI/AAAAAAAAP_s/Cb6fZSQSj0E/s400/MultipleInstance2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5361455654165705010" /&gt;&lt;/a&gt;&lt;br /&gt;With this symbol everyone can see at a glance that Multiple-Things-Are-Happening (hopefully at once). I'd also add some indicator of the number of "Things"... although often that's only determined when the process is running.&lt;br /&gt;&lt;br /&gt;I suspect that the current Multi-Instance symbol was chosen because it is easy to draw by hand. Fair enough... but I find that most of my hand-drawing is done on white boards, and I almost always draw something that looks a lot more like my proposed symbol.&lt;br /&gt;&lt;br /&gt;Fortunately, with the current state of BPMN editors it is usually pretty easy to swap out the "official" notation's symbols for your own... There are much bigger problems to solve in the realm of conveying Business Requirements to Programmers than this little icon - so please don't waste any time lobbying for it to change. I'm just using it to illustrate the point:&lt;br /&gt;&lt;blockquote&gt;Words Matter - Notations Matter - Diagrams Matter&lt;/blockquote&gt;&lt;br /&gt;Pictures are worth a thousand words, so take the time to get the picture right before you start building your next project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-792237749588207544?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/792237749588207544/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=792237749588207544" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/792237749588207544" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/792237749588207544" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/07/get-words-and-notation-right.html" title="Get the Words (and Notation) Right" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_QviPbycN-9k/Sme0tEy4wuI/AAAAAAAAP_k/SLma-87eFGU/s72-c/MultipleInstance.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-6825987948045702216</id><published>2009-07-14T22:55:00.005-05:00</published><updated>2009-07-16T10:17:04.726-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">The Toilet Paper Replenishment Process</title><content type="html">&lt;a id="q33n" title="Don Norman" href="http://jnd.org/dn.mss/toilet_paper_algorithms_i_didnt_know_you_had_to_be_a_computer_scientist_to_use_toilet_paper.html"&gt;Don Norman&lt;/a&gt; has an excellent blog posting about the poor design of many Toilet Paper Dispensers - focusing mainly on the poor algorithms that we simple humans use when given a choice of which roll to use from a multi-roll dispenser... Multi-roll TP dispensers prove Don's thesis that many every day things just aren't designed well. I had read Don's book and seen his blog long ago, but it came back to mind when I encountered the following in a bathroom in &lt;a id="fklz" title="Stanford University's Terman Engineering Building" href="http://www-ee.stanford.edu/timeline.php"&gt;Stanford University's Terman Engineering Building&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: left" id="h0v8"&gt;&lt;img style="WIDTH: 362px; HEIGHT: 285px" src="http://docs.google.com/File?id=ah8ggrjp5wrv_160qfzcnwfg_b" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;No less than six partial rolls of toilet paper perched on top of a standard two roll toilet paper dispenser.&lt;br /&gt;&lt;br /&gt;Obviously Don is right about the design of the dispenser itself... Given the choice of which roll to use we'll pull sheets off each. But obviously there's something more at work here: The process for refilling the dispenser is suspect.&lt;br /&gt;&lt;br /&gt;I suspect the process is something like the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Check the dispenser each day. If either of the rolls is less than 1/4 full&lt;br /&gt;replace it with a full roll and place the partial roll on top of the dispenser.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The objective of this process is to make sure that there's always plenty of toilet paper available... Obviously you don't want to run out.&lt;/p&gt;My guess is that the partial roll is left on the dispenser in the hopes that folks will use it - This is much better than throwing it away, and given frugal college students I'm surprised that the partials aren't disappearing.&lt;br /&gt;&lt;br /&gt;The flaw in the process seems pretty simple... "Enough Toilet Paper on Hand" doesn't take into account the partial rolls. Instead of basing replacement on the size of the rolls installed in the dispenser, it really ought to be based on the total amount of tissue on hand - the rolls in the dispensers plus the partials.&lt;br /&gt;&lt;br /&gt;At first glance this appears to be a classic example of mis-stating the objective of the process. The janitor who refills the dispenser has been told something like "No roll on the dispenser should be less than 1/4 full". The real objective should probably be something like "There should always be the equivalent of a full roll on hand".&lt;br /&gt;&lt;br /&gt;Having restated the objective: What if you ended up an "equivalent full roll" made up of sixteen partial rolls? That certainly wouldn't be acceptable to most folks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Returning to Don Norman's point - the design of the dispenser itself is really at the heart of this "process" problem. The process for refilling the dispenser is overly complex due to the poor design of the dispenser itself. Try as we might to give proper instructions to the janitor, success is going to be highly dependent on the janitor's judgement on whether or not enough toilet paper is on hand.&lt;br /&gt;&lt;br /&gt;What can we learn from this example?&lt;br /&gt;&lt;br /&gt;If a process that should be simple isn't, then look beyond the process definition: It may be better to buy a new dispenser than to figure out how to refill the one that you have.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Prompted by the comment of a good friend and Stanford Alum I delved a bit deeper into the conundrum and sadly discovered that this is both a Process and a Design problem... In another bathroom at Stanford I discovered the following shocking sight:&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_QviPbycN-9k/Sl9B7NqqhqI/AAAAAAAAP_c/rnBzXrn8kCA/s1600-h/TP2.JPG"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 238px; HEIGHT: 260px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5359074567130875554" border="0" alt="" src="http://4.bp.blogspot.com/_QviPbycN-9k/Sl9B7NqqhqI/AAAAAAAAP_c/rnBzXrn8kCA/s400/TP2.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;The superior design of this multi-roll dispenser has been thwarted by the installation of two such dispensers... The point of the design was to eliminate choice (thus simplifying the refill process) - introducing a second dispenser nixes that advantage... and as you can see the "refill process" is still needlessly removing partial rolls.&lt;/p&gt;&lt;p align="left"&gt;Such a thing would never have happened at &lt;em&gt;my&lt;/em&gt; alma matter (&lt;a href="http://www.rice.edu/"&gt;Rice University&lt;/a&gt;) ;-) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-6825987948045702216?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/6825987948045702216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=6825987948045702216" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/6825987948045702216" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/6825987948045702216" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/07/toilet-paper-replenishment-process.html" title="The Toilet Paper Replenishment Process" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_QviPbycN-9k/Sl9B7NqqhqI/AAAAAAAAP_c/rnBzXrn8kCA/s72-c/TP2.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-1938113368715608838</id><published>2009-07-09T22:34:00.003-05:00</published><updated>2009-07-10T21:48:43.372-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><category scheme="http://www.blogger.com/atom/ns#" term="Travel" /><title type="text">Changing planes while in the air</title><content type="html">I fly a lot... way more than I ever thought I would... and I can say with some confidence that it's sometimes much harder to get from point A to point B than you thought it would be.&lt;br /&gt;&lt;br /&gt;My home bases are Austin Texas and Santa Fe New Mexico, and neither is an airline "hub". Airline hubs are those wonderful airports where you can fly to and from a lot of places (non stop)... Neither Austin nor Santa Fe, as I just said, are one of those wonderful places.&lt;br /&gt;&lt;br /&gt;Virtually every trip that I take requires changing planes. I land, scurry to another gate, and take off again. "Scurry" is often a nice way of saying "run flat out as fast as I can". For those of you who don't fly often, you may not realize that most flights board 30 minutes prior to departure, so if you think you have an hour between flights, it's really only 30 minutes... even a minor flight delay can turn "plenty of time" into a missed connection or lost baggage (if you are brave enough to check your bags).&lt;br /&gt;&lt;br /&gt;Each trip that I take is (in a sense) a process. I fly from home to an airline hub, then I fly from that hub to another airport. On rare occasions I have to fly from the second airport to a third... You get the idea. On each flight, I am sitting along with a couple of hundred other people who are each taking part in their own similar processes. As long as all of the planes that we'll use are on time (the plane that we are on along with all the planes that we'll connect to) all of our processes will run smoothly. If the plane that we are on has mechanical difficulties and has to return to the airport, or if weather or some other obstacle keeps us from landing where we expected to, then our processes are all in a heap of trouble.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From a process design perspective the events that I have described are exceptions. We don't "expect" these things to happen, but we have to handle them if they occur. Some airlines have processes in place that work really well... other airlines... well... let's just say that I've slept on a bench in O'Hare airport and leave it at that.&lt;br /&gt;&lt;br /&gt;Exception handling is actually pretty well understood in the realm of Process Design. With BPMN notation you can attach &lt;a id="hmea" title="event handlers" href="http://www.brsilver.com/wordpress/2008/09/17/event-handling-in-bpmn-20/"&gt;event handlers&lt;/a&gt; to Activities and model "what needs to happen" when something out-of-the-ordinary happens. Proper event handling requires a lot of thought... but in a sense it's a well understood aspect of programming that isn't specific to process engineering... and it's not really what I want to blog about today.&lt;br /&gt;&lt;br /&gt;Let's go back to flying... This example is admittedly kind of absurd, but imagine that the airline changes their schedule while I am in the air. Let's say that the itinerary that I am on is now supposed to go from Austin to Denver to Chicago instead of from Austin to Dallas to Chicago. From now on, whenever I want to go to Chicago I will change planes in Denver instead of Dallas.&lt;br /&gt;&lt;br /&gt;What I've described here isn't a process exception - it's a process change. The airline has changed the process of getting from Austin to Chicago.&lt;br /&gt;&lt;br /&gt;For somebody starting a new trip, it's obvious that they will follow the steps of the new process definition. For folks who are already in the air on the first leg of the trip, there are two options:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Continue the following the "old" process steps until the process finishes - this depends on the airline keeping a flight from Dallas to Chicago until everyone in the air gets there.&lt;br /&gt;&lt;li&gt;Switch to the new process while "in-flight" - this depends on the airline re-routing the plane mid-flight to land at Denver instead of Dallas - or perhaps jumping from one plane to another as they pass each other.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Option number one is really safe. The old process is well understood and it's very clear where everyone will end up... we know we have enough gase to get to Dallas. Unfortunately continuing an old process until it is complete isn't always a viable option. Some processes take a really long time to finish, and it's unreasonable to carry on as if nothing has happened (sometimes for years) - the airline can't keep an unfilled plane waiting at Dallas.&lt;br /&gt;&lt;br /&gt;Option number two - metaphorically changing planes while in the air - can be very risky to your in-flight process instances - the planes in the air may not have enough gas to get to the new destination, and it's quite likely that some of the passengers on the flight planned to get off the plane in Dallas. Let's not even think about jumping from one plane to another.&lt;br /&gt;&lt;br /&gt;It's this ability to handle in-flight process changes that makes the implementation of a really good process manager difficult. Creating an "engine" that can execute a process definition is pretty straight forward... it's mostly a &lt;a id="qp2l" title="state machine" href="http://en.wikipedia.org/wiki/Finite_state_machine"&gt;state machine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Switching from one process definition to another while "in flight" can be a heap more complex...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Process improvement is a key goal of BPM adoption... When you figure out how to improve a process you want to be able to implement that change as soon as you can... but process change requires more that modelling the new process... you also really need to model the process of getting instances from the old process definition to the new.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For every possible step in the original process definition, you need to define the corresponding step in the new process.&lt;br /&gt;&lt;br /&gt;If the correlation isn't exact (one process definition has steps that don't really exist in the other), then you must tell the process manager what to do. In some cases, an in-flight instance may need to "go back" and redo a "previous" step in the new process... or the in-flight process may have to perform some "transformation" steps before merging with the new process flow.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, BPM tools don't generally have explicit support for "migration" processes... it's generally left to the practitioner to figure out what to do with in-flight instances, and sometimes there's a rather painful transition when a new process definition is deployed. I'm sure this will change as BPM adoption increases, but in the mean time you'll have to build your own parachutes in case something goes wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-1938113368715608838?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/1938113368715608838/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=1938113368715608838" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1938113368715608838" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1938113368715608838" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/07/changing-planes-while-in-air.html" title="Changing planes while in the air" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-5482554526565837194</id><published>2009-06-25T13:51:00.004-05:00</published><updated>2009-06-25T14:16:43.607-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">People Manage the Process?</title><content type="html">Gerhard Basson has posted a very nice article &lt;a href="http://www.bpminstitute.org/articles/article/article/process-oriented-systems-paradigm-for-the-process-age.html"&gt;Process-oriented Systems Paradigm for the Process Age&lt;/a&gt; over at the BPM Institute web site. I agree with almost everything that Gerhard says... but as usual one little phrase pops out and spawns a blog of my own.&lt;br /&gt;&lt;br /&gt;Gerhard asserts: &lt;blockquote&gt;"processes do not manage people – people manage processes"&lt;/blockquote&gt;I understand what Gerhard means... very clever word-smithing... but I squirmed when I read it. I know that I am splitting hairs here, but "manage" just isn't the right verb for the phrase: &lt;blockquote&gt;"people &lt;em&gt;&lt;strong&gt;verb&lt;/strong&gt;&lt;/em&gt; processes"&lt;/blockquote&gt;&lt;br /&gt;That aside, I vehemently agree (as opposed to vehemently disagree) with Gerhard when he says: &lt;blockquote&gt;"People will bypass and reject any system that does not help them perform work in a natural way."&lt;/blockquote&gt;&lt;br /&gt;It's always about the people... From the conception of the process to the implementation of the process to the running of the process to the improvement of the process... it's always about the people.&lt;br /&gt;&lt;br /&gt;If we don't adapt our systems for the People of the Process Age we're not going to get very far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-5482554526565837194?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/5482554526565837194/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=5482554526565837194" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/5482554526565837194" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/5482554526565837194" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/06/people-manage-process.html" title="People Manage the Process?" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-1210021829291402783</id><published>2009-06-24T09:55:00.006-05:00</published><updated>2009-06-24T12:04:09.272-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Programming Language Sociology</title><content type="html">Bruce Eckel shares his reminiscences about the dawn of C++ and Java in his blog entry: &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=260578"&gt;Why? Language Archaeology&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is great stuff... Insight into the "why" C++ and Java are the way they are (from Bruce's perspective). My take-aways from this essay are the following:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;"Things" often make no sense because the requirements that dictated those "things" are no longer requirements&lt;/li&gt;&lt;li&gt;People skills can be just as important as Technical skills&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I really appreciate Bruce admitting that his opinions about Java are colored by his dealings with Gosling... Social aspects impact Technical aspects. How you feel about someone impacts your evaluation of their work. That is a hugely important thing for us to remember.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was an early adopter of C++ and loved it... but I loved Java more. Was that due to Java's technical superiority? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nope. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I loved Java more because it coincided with the Web... and the Web allowed me to collaborate with other Java developers in a way that I had never been able to collaborate with other C++ developers. The social aspect of this collaboration is why Java trumps C++ on my "fondness scale"... Java had (and still has) a much stronger sense of community than C++.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The stereotype of the programmer nerd with poor social skills had a lot of basis in fact... but in my experience programmers really crave social interaction &lt;i&gt;within a society where they feel comfortable&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My programming focus is now in the realm of Business Process Management, so the society in which I find myself is much broader than that of my C++ days. In my C++ days I wrote stuff &lt;b&gt;for&lt;/b&gt; business people. Now I write stuff &lt;b&gt;with&lt;/b&gt; business people. Huge difference.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Successful Business Programming requires a society where both Business and Technical people feel comfortable. That's tough to accomplish because the passions of those two camps rarely coincide... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time you're in a conference with both Technical and Business people, sit back and watch:&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;When the Business folks get into an animated discussion the Technical guys will be checking their Blackberries. When the Technical folks get into an animated discussion, the Business folks will start looking at their watches.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;The challenge in business programming today is not about programming language features - it's about the social aspects of application development. We've got to solve the problem of engaging everybody in the development process. We need to fully engage the Business folks to make sure that we build the right things, and we need to fully engage the Technical folks to make sure that the things are built right.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Compared to the real challenges of business programming, agonizing over whether or not to include the "new" keyword in Java is seems positively "quaint". Bruce's recollections are a fond trip down memory lane for me... but lets not get stuck in the past lest our descendants look back on our concerns as "quaint" too.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-1210021829291402783?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/1210021829291402783/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=1210021829291402783" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1210021829291402783" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1210021829291402783" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/06/programming-language-sociology.html" title="Programming Language Sociology" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-3294345266607838549</id><published>2009-06-09T08:41:00.004-05:00</published><updated>2009-06-09T08:49:25.796-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Good Engineering != Good Design</title><content type="html">This thought-provoking statement grabbed my attention...&lt;br /&gt;&lt;blockquote&gt;"Most tech products—heck, most products in general—aren’t as good as they can be because they’re put together by the people with the technical knowledge required to build them."&lt;br /&gt;&lt;a href="http://www.macworld.com/article/141051/iphone_black_box.html"&gt;Jason Snell, Macworld.com&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;Jason makes some really good points in this article... Go read it ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-3294345266607838549?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/3294345266607838549/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=3294345266607838549" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/3294345266607838549" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/3294345266607838549" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/06/good-engineering-good-design.html" title="Good Engineering != Good Design" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-4548622077151518114</id><published>2009-06-01T09:43:00.006-05:00</published><updated>2009-06-01T10:45:02.184-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Artists (and programmers) hate negative feedback</title><content type="html">If you really want to piss off an artist, just tell them how their painting/sculpture/etc. could be improved.&lt;br /&gt;&lt;br /&gt;The best possible reaction that you'll get is a politely disingenuous "Thank you"... More likely you'll get some form of "Mind your own business" delivered with various levels of hostility based on the strength of the artist's self-esteem.&lt;br /&gt;&lt;br /&gt;The creation of art is intensely personal... Art is an extension of the artist - created primarily to satisfy the artist's need to create. Art is presented to the public - not shared with the public. The artwork may be sold - but it always belongs to the artist.&lt;br /&gt;&lt;br /&gt;What does this have to do with Programming?&lt;/p&gt;&lt;p&gt;For many programmers - Programming is their Art... and that's the root of many of the conflicts that you will have with programmers.&lt;br /&gt;&lt;br /&gt;There's an anecdote about &lt;a href="http://en.wikipedia.org/wiki/Frank_Lloyd_Wright"&gt;Frank Lloyd Wright&lt;/a&gt;: The story is that he attended a dinner party in a house that he had designed, and before leaving he had &lt;a href="http://books.google.com/books?id=7CXCkW3FOAgC&amp;amp;pg=PA19&amp;amp;lpg=PA19&amp;amp;dq=frank+lloyd+wright+rearranging+furniture&amp;amp;source=bl&amp;amp;ots=n4EYGMRO1c&amp;amp;sig=xNxlxaHQ0Tcfdq_Dj3KKGyvJVco&amp;amp;hl=en&amp;amp;ei=1fMjSqLVIZXhtgfvtfG_Bg&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1"&gt;rearranged the furniture&lt;/a&gt; back to his original plan. Wright couldn't let go... The house was held hostage to his vision rather than released and allowed to become a home. Wright liked to preach that "&lt;a href="http://en.wikipedia.org/wiki/Form_follows_function"&gt;Form follows function&lt;/a&gt;" - but in this case he totally forgot the true function of a home.&lt;br /&gt;&lt;br /&gt;When you have to provide negative feedback to a programmer - focus on conveying the big picture: What do you really need? Instead of focussing on how the current software does not meet your needs, challenge the programmer's inner artist to create something that will fulfill your needs... You'll probably be much happier with the results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-4548622077151518114?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/4548622077151518114/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=4548622077151518114" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4548622077151518114" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4548622077151518114" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/06/artists-hate-feedback.html" title="Artists (and programmers) hate negative feedback" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-4726443291850413678</id><published>2009-05-08T11:16:00.004-05:00</published><updated>2009-05-08T11:51:07.101-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><title type="text">Process Manager Interoperability - Wf-XML</title><content type="html">&lt;a href="http://www.bp-3.com/blogs/"&gt;Scott Francis&lt;/a&gt; sent me a snippet from a recent &lt;a href="http://kswenson.wordpress.com/"&gt;Keith Swenson&lt;/a&gt; blog posting on &lt;a href="http://www.wfmc.org/wfmc-wf-xml.html"&gt;Wf-XML&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;I've been looking for a standard like this... Process Folks have been pretty focused on Process Definitions that can be executed on any Process Manager (Process Portability), but in my day-to-day it seems a lot more important to insure that Process Managers can operate with each other...&lt;br /&gt;&lt;br /&gt;Specifically, I want to be able to incorporate a Process that is running on one Process Manager as a Sub-Process of a Process that is running on another Process Manager. I want to be able to start the Process, Monitor the Process, and get Information back from the Process when it completes.&lt;br /&gt;&lt;br /&gt;Much as we might like a world in which there is only one Process Manager, this just isn't going to happen. Consider the Java app server world... Despite corporate attempts to mandate the use of only one Java app server you still find a mixed bag. Once a WebApplication is developed and deployed on one flavor of Java app server it's seldom migrated to another. It's just not worth the expense or the hassle - even though migration might be relatively straight-forward.&lt;br /&gt;&lt;br /&gt;In the Process World we should be able to take full advantage of previously deployed Process Applications regardless of their BPM platform. If an application has been developed with an embedded &lt;a href="http://www.jboss.com/products/jbpm/"&gt;jBPM&lt;/a&gt; Process Manager I should be able to incorporate it in my &lt;a href="http://www.lombardisoftware.com/"&gt;Lombardi&lt;/a&gt; solution. If my Lombardi implemented Process can be used by a wider &lt;a href="http://www.pega.com/"&gt;Pega&lt;/a&gt; implemented Process, then that should work too.&lt;br /&gt;&lt;br /&gt;Wf-XML is an attempt to make that happen... I haven't had time to delve into the details, but the concept is right on the mark.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-4726443291850413678?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/4726443291850413678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=4726443291850413678" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4726443291850413678" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4726443291850413678" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/05/process-manager-interoperability-wf-xml.html" title="Process Manager Interoperability - Wf-XML" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-5877729871305070277</id><published>2009-04-29T10:05:00.002-05:00</published><updated>2009-04-29T10:10:42.446-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><title type="text">College new-hires and the zen of BPM</title><content type="html">I'm supposed to be preparing a one hour lecture for some college new-hires on: "Basic and Advanced BPM Concepts"... but yet I blog instead ;-)&lt;br /&gt;&lt;br /&gt;For those of you who know me well, you'll probably think that my biggest concern is that I only have an hour.  I tend to go on and on (and on) about topics that I am passionate about, leading a former co-worker to coin the term "&lt;a id="ildi" title="johntification" href="http://johntification.blogspot.com/"&gt;johntification&lt;/a&gt;" in my honor.&lt;br /&gt;&lt;br /&gt;Explaining BPM is what I do - focussing pretty much on what's now being called &lt;a id="suvh" title="BPM-tech" href="http://www.omg.org/oceb/exam-info.htm#WhichSide"&gt;BPM-tech&lt;/a&gt; more than &lt;a id="yj.d" title="BPM-bus" href="http://www.omg.org/oceb/exam-info.htm#WhichSide"&gt;BPM-bus&lt;/a&gt;.  When I first encountered BPM I felt like I had found the &lt;a id="ktrk" title="missing link" href="http://thoughtfulprogrammer.blogspot.com/2006/10/business-process-musings.html"&gt;missing link&lt;/a&gt;... a paradigm and technology that closed the gaps between what I knew how to do and what my &lt;a id="m1eu" title="business colleagues" href="http://thoughtfulprogrammer.blogspot.com/2006/02/software-for-business-people-like-my.html"&gt;business colleagues&lt;/a&gt; really needed.&lt;br /&gt;&lt;br /&gt;I was blown-away by BPM because I had experienced the pain of the problems that BPM addresses.  This stuff fixed something that I knew needed fixing.&lt;br /&gt;&lt;br /&gt;My worry about introducing BPM to college new-hires is that they probably haven't experienced "Process Pains"... at least not from the perspective of one who writes or maintains software, or from the perspective of someone who tries to get the "right" software written. &lt;br /&gt;&lt;br /&gt;When I describe the problems that BPM tackles they may say "So what?".  They may scoff at the magnitude of the problems - and they probably assume that the solutions that BPM provides have always been around.&lt;br /&gt;&lt;br /&gt;With my standard BPM audience I'm fairly assured that heads will begin to nod in recognition of shared pain in thirty seconds or less... &lt;br /&gt;&lt;br /&gt;Most in my audience have experienced meetings where a dozen people had to be present to figure out how that incoming *application* finally ended up as an outgoing *disbursement* (*substitute the inputs and outputs of your own business).&lt;br /&gt;&lt;br /&gt;Most in my audience have also experienced "Office Heroes" - those harried individual who on a daily basis keep a company running through shear force of will.  Whenever anything falls through the cracks... Whenever anything gets lost or derailed... Whenever any critical deadline is in danger of being missed... Office Heroes jump in and save the day.  If a truck hits an Office Hero your business will really have to scramble to recover.&lt;br /&gt;&lt;br /&gt;BPM helps business people understand how their company really runs, and it helps reduce their company's reliance on Office Heroes.  BPM helps IT people provide tools that make it easier to run the company, easing the burden of the Office Heroes.&lt;br /&gt;&lt;br /&gt;My college new-hire audience will certainly understand what I tell them about BPM - but will they relate?  Can I make BPM relevent to their own experiences, or will I just sound like an old guy droning on about the old days:  "When I was your age, computers only had 4K of memory....."&lt;br /&gt;&lt;br /&gt;These "kids" are smart... they just haven't had as much experience.  Instead of relying on shared experience to grok BPM I'll have to find another approach... When (or if) I figure it out I'll let you know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-5877729871305070277?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/5877729871305070277/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=5877729871305070277" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/5877729871305070277" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/5877729871305070277" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/04/college-new-hires-and-zen-of-bpm.html" title="College new-hires and the zen of BPM" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-1025300962725460007</id><published>2009-04-17T13:11:00.009-05:00</published><updated>2009-05-08T12:52:05.661-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><category scheme="http://www.blogger.com/atom/ns#" term="Travel" /><title type="text">Applications as Process Activites</title><content type="html">I return to this topic a lot... BPM solutions automate the transitions between Activities in a Process, but they don't necessarily automate the Activities themselves. Some Activities can be automated, but others require Human interaction or Human judgment to complete. If we are convinced that BPM is a good idea, and we want BPM to be as pervasive as spreadsheets, then we need to make it easier to implement the Human-centric Activities that our Processes need.&lt;br /&gt;&lt;br /&gt;Many BPM suites support building Human-centric Activities within the suite itself, but sometimes you'd rather re-purpose an existing application to do your bidding.&lt;br /&gt;&lt;br /&gt;Let me walk you through an example from my own wonderful life as a &lt;a href="http://thoughtfulprogrammer.blogspot.com/search/label/Travel"&gt;Travelling Guy&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;When I get a new assignment there are a lot of things that I have to do. I've got a mental checklist that I follow, but I'd really rather have a Managed Process to keep me from screwing up.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 176px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5325759700728816258" border="0" alt="" src="http://2.bp.blogspot.com/_QviPbycN-9k/SejmOxEIIoI/AAAAAAAAPMM/nxE_bH3_hoQ/s400/Prepare+For+New+Gig.JPG" /&gt;Most of my gigs are somewhere else, and that makes it very important for me to make travel and lodging arrangements. I almost always need a flight and a hotel, and based on the location I might need a rental car.&lt;br /&gt;&lt;br /&gt;To perform this Activity I use my company's preferred Travel site - it happens to be Orbitz, but it could just as easily be Expedia, Travelocity or any number of sites. Each of these sites supports the concept of a "Trip" and each lets me make flight, hotel, and car reservations. These travel sites also provide feedback - they'll send me email when a reservation is confirmed or "something" changes.&lt;br /&gt;&lt;br /&gt;As I am going through my process of getting ready for a gig, I log on to Orbitz and make the necessary reservations. When I am "done" I will "check off" that task from my list of things to do.&lt;br /&gt;This happens a lot in BPM solutions. An Activity (a task) is assigned to an individual Participant. The Participant gets directions on how to perform the Activity (what it is that they need to do) but they have to use some "external" application in order to actually perform the task (in this example, the Travel site). When they are "done" with the task they "check off" the task and the process continues.&lt;br /&gt;&lt;br /&gt;Processes that are implemented like this can be really error prone. The Process Manager has to rely on the Participant's assertion that the task has been performed correctly. You just have to trust the Participant to do the right thing.&lt;br /&gt;&lt;br /&gt;If you had the time and if you had the money, then you could build all of the tools that the Participant may need to use in order to complete their tasks. Quite frankly, that would be a huge waste of both your time and your money.&lt;br /&gt;&lt;br /&gt;The better approach for all concerned is to encourage the makers of those "external" tools to become Process Aware. Get then to modify their existing applications to be aware of Process Flow.&lt;br /&gt;&lt;br /&gt;Let's go back to my "Get Ready for a Gig" Process... Some time after the Process starts I will need to perform the "Make Reservations" Activity. The Process Instance knows the Location of the Assignment, and it knows the Dates of the Assignment (the Process was started by a message that contained this information).&lt;br /&gt;&lt;br /&gt;When I run the "Make Reservations" Activity from my Task List I'd like Orbitz to open with the Dates and Location of my Trip pre-populated. After I make my reservations, I would like the site to send (structured) confirmation information directly to the Process Manager.&lt;br /&gt;&lt;br /&gt;Based on the information that Orbitz returns, the Process Manager would either move on to the next task, or require me to try again. For example - if Orbitz says that my reserved flight is on the wrong day the Process Manager should tell me.&lt;br /&gt;&lt;br /&gt;If you are a Programmer, then I think you can easily envision how you would make the Webapp that implements the Orbitz Travel Site "Process Aware". The trick is in recognizing that there is a beginning and an end to planning for each Trip. Modify the Webapp to support "Dates" and "Location" on the invoking URL - along with a "Return Address". When the Webapp determines that planning for the Trip is complete, use the "Return Address" to send structured information (most likely XML) back the the Process Manager.&lt;br /&gt;&lt;br /&gt;For Web Services (automated Activities) we've done this for several years. Service providers (like Orbitz) publish WSDLs that define the Services that we can invoke. It's time to do the same for Activities that cannot be Automated. It's time to standardize interactions with what I've called &lt;a href="http://thoughtfulprogrammer.blogspot.com/2006/11/people-powered-service-providers.html"&gt;Human Powered Web Services&lt;/a&gt; - Web Applications that can serve as Process Activities.&lt;br /&gt;&lt;br /&gt;In my ideal world, all Travel Sites would support "the same" interface for starting a new "Trip" and for returning results. That might be a bit much to hope for... but it's a good target to shoot for. Even if every site had a unique interface, we could build adapters for our Processes - a much better situation than today (from a Process Manager's perspective).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you are a Developer who builds sites where folks go to "do things", then I hope I've inspired you to think a bit about those "things" as part of a larger Process. It's not a huge leap to build into your site the hooks that a Process Guy like me needs to incorporate your site into my &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/05/what-is-managed-business-process.html"&gt;Managed Process&lt;/a&gt;. I'll be grateful, and I'll bet the users of your site will be too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-1025300962725460007?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/1025300962725460007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=1025300962725460007" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1025300962725460007" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1025300962725460007" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/04/applications-as-process-activites.html" title="Applications as Process Activites" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_QviPbycN-9k/SejmOxEIIoI/AAAAAAAAPMM/nxE_bH3_hoQ/s72-c/Prepare+For+New+Gig.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-8320991640089198322</id><published>2009-04-14T13:15:00.009-05:00</published><updated>2009-04-14T18:10:33.869-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Clarifying your ideas</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://xkcd.com/"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 298px; FLOAT: left; HEIGHT: 234px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5324618806530937970" border="0" alt="" src="http://2.bp.blogspot.com/_QviPbycN-9k/SeTYl--kFHI/AAAAAAAAPJ0/CP5XAkBD_Rs/s400/UncomforatbleTruth.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;I love the &lt;a href="http://xkcd.com/"&gt;Webcomic xkcd&lt;/a&gt; by Randall Munroe... Geek humor for sure, but often very insightful...&lt;br /&gt;&lt;blockquote&gt;"&lt;a href="http://xkcd.com/568/"&gt;You'll never find a programming language that frees you from the need to clarify your ideas&lt;/a&gt;"&lt;/blockquote&gt;Amen to that. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Programming is the act of transforming requirements into something that a computer can execute... but before those requirements can be transformed they'd better be clear. You might think that this would be obvious, but you'd be wrong... In way too many cases the "idea" that spawned the software either wasn't clarified or it wasn't communicated clearly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Programming languages - both textual and graphical - won't substitute for an idea that hasn't been clarified. But "better" programming languages &lt;i&gt;can&lt;/i&gt; help to insure that the idea has been implemented properly (or at least make it clear what was actually built).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-8320991640089198322?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/8320991640089198322/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=8320991640089198322" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8320991640089198322" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8320991640089198322" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/04/clarifying-your-ideas.html" title="Clarifying your ideas" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_QviPbycN-9k/SeTYl--kFHI/AAAAAAAAPJ0/CP5XAkBD_Rs/s72-c/UncomforatbleTruth.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-8305323854636494049</id><published>2009-04-08T08:37:00.025-05:00</published><updated>2009-04-09T07:41:05.484-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">Business Process and Activity Interfaces</title><content type="html">Business Processes are made up of Business Activities. In a &lt;a href="http://en.wikipedia.org/wiki/Business_Process_Management"&gt;BPM&lt;/a&gt; solution the transitions between each Activity are automated, but the Activities themselves may either be automated or they may be performed by Humans &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(That's why I use the term &lt;/span&gt;&lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/05/what-is-managed-business-process.html"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Managed Business Process&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; instead of Automated Business Process)&lt;/span&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most of the focus in the community of BPM practitioners of late has been on the &lt;b&gt;B&lt;/b&gt;usiness &lt;b&gt;P&lt;/b&gt;rocess &lt;b&gt;D&lt;/b&gt;efinitions (BPDs) that the Process Managers use to control the transitions between Business Activities. BPDs provide the information that the Process Manager needs to assign the right Activities &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/03/tips-for-business-process-developer.html"&gt;to the right Participants&lt;/a&gt; at the right time. Google &lt;a href="http://www.infoq.com/news/2008/05/BPMN20"&gt;BPMN&lt;/a&gt;, &lt;a href="http://www.ibm.com/developerworks/library/specification/ws-bpel/"&gt;BPEL&lt;/a&gt; or &lt;a href="http://www.wfmc.org/xpdl.html"&gt;XPDL&lt;/a&gt; and you'll find plenty to read.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://oryx-editor.org"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 243px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5322668943954598274" border="0" alt="" src="http://2.bp.blogspot.com/_QviPbycN-9k/Sd3rNC1q2YI/AAAAAAAAPIU/SCPIC4qOn7o/s400/BPMN1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;BPDs are crucial... but they only define the Process Flow. Activities are identified in BPDs, but only the interfaces to the Activities are actually defined &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(The interface to the Activity defines the information that is passed from the Process to start the Activity and the information that is returned to the Process from the Activity when it completes)&lt;/span&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;All of the BPM suites that I am aware of generate executable process definitions &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(in one form or another)&lt;/span&gt;. Some BPM suites generate "portable" definitions using standards like BPEL and XPDL, but many &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(including the Lomabardi Teamworks suite that I use)&lt;/span&gt; produce proprietary definitions that will only run on their own Process Managers. One of the big drivers between the efforts to make BPMN 2 "executable" is to drive the industry towards "portable" BPDs that can run Process Managers from any vendor. Great idea... but it's going to take some time to see if it gains traction.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Many BPM suites also incorporate tools to implement Business Activities. A Business Activity is really just an application that is tailored to perform a specific task. The Process Manager kicks off the application with some initial information, the application runs &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(usually gathering information &lt;a href="http://thoughtfulprogrammer.blogspot.com/2007/08/anatomy-of-human-powered-web-services.html"&gt;from a Human&lt;/a&gt;)&lt;/span&gt; and when it completes it passes information back to the Process Manager.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I've had discussions with BPM practitioners who feel that implementing Business Activities should fall outside the realm of a BPM suite. Perhaps I've been &lt;a href="http://www.infoworld.com/d/developer-world/product-review-lombardi-teamworks-conquers-bpm-superb-tools-flexible-execution-676"&gt;spoiled by Teamworks&lt;/a&gt;, but I can't imagine creating my BPD in one tool and implementing my Activities in another tool. It's just incredibly nice to be able to drill down from an Activity on a Process Diagram to the underlying implementation of that Activity.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Despite my bias toward integrated Activities, I freely admit that you must be able to implement an Activity outside the limitation of your BMP suite of choice. Some Activities do require a very sophisticated user interface - and in many cases a pre-existing application can be fairly easily adapted to perform an Activity. I've had to resort to "external" Activities on several occasions (&lt;span class="Apple-style-span"  style="font-size:small;"&gt;for key Activities&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;span style="BORDER-COLLAPSE: collapse;font-family:arial;" class="Apple-style-span" &gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;blockquote&gt;If the implementation of an Activity is beyond a simple Form that the Participant needs to fill out, then you'll have to build some sort of task focused application for the Participant to use to complete the Activity.&lt;br /&gt;&lt;br /&gt;BPM suites such as Teamworks allow you to build rather sophisticated task focused applications - but sometimes it makes more sense to go outside the suite and build the application using JSP, ASP, .Net, Ruby - whatever tools make the most sense to get the job done.&lt;br /&gt;&lt;br /&gt;The "problem" is the lack of standard interfaces for connecting these "external" task oriented applications with your Process Manager/Process Engine. Most of the good BPM Process Managers provide the necessary interfaces, but they are almost always proprietary interfaces.&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;In the early days of BPEL, Activities were "just" standard web services. An Activity (web service) that was invoked from one BPEL engine could be invoked by any other.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;BPEL (by itself) could only implement processes that could be completely automated. Most Business Processes include Human Activities - so pure BPEL implementations were few and far between. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Unfortuntely we've yet to come up with a standard (&lt;span class="Apple-style-span"  style="font-size:small;"&gt;or even a de-facto standard&lt;/span&gt;) for implementing Human Activities. Some BPM suites (&lt;span class="Apple-style-span"  style="font-size:small;"&gt;like &lt;a href="http://www.intalio.com/"&gt;Intalio&lt;/a&gt;&lt;/span&gt;) make use of standards (&lt;span class="Apple-style-span"  style="font-size:small;"&gt;like &lt;a href="http://www.w3.org/MarkUp/Forms/"&gt;XForms&lt;/a&gt;&lt;/span&gt;) to implement the user interfaces for their Activities, but the back-end interfaces between the Process Manager and the Activities are still unique to each vendor. There's no standard for registering an "Activity Application" with a Process Manager There's no standard way for an "Activity Application" to authenticate its user with the Process Manager. There's no standard way for an "Activity Application" to query a Process Manager for Activities that belong to its user. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Until we have these standards, there's really no such thing as a "Portable Activity". I could build a framework that helped me build task oriented applications, but I'd need adapters for any BPM suite that I wanted to interface with.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Hopefully this will change soon. As more BPM suites begin to support "standard" BPDs it will become obvious that we need &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/09/portable-bpm.html"&gt;Portable Activities&lt;/a&gt; too.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-8305323854636494049?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/8305323854636494049/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=8305323854636494049" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8305323854636494049" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8305323854636494049" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/04/business-process-and-activity.html" title="Business Process and Activity Interfaces" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_QviPbycN-9k/Sd3rNC1q2YI/AAAAAAAAPIU/SCPIC4qOn7o/s72-c/BPMN1.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-3923169957004006469</id><published>2009-03-21T16:17:00.018-05:00</published><updated>2009-03-25T17:31:54.981-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">All Big Brothers Aren't Bad</title><content type="html">&lt;div&gt;Joel Trammell beat me to the punch with his posting: &lt;a href="http://www.networkperformancedaily.com/2009/03/you_cant_manage_an_economy_you.html"&gt;You can't manage an economy you don't measure&lt;/a&gt;: &lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;"this problem, in part, was caused by lack of oversight"&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;I'll try to keep my outrage in check because I'm not an economist or an accountant or a lawyer. I don't really know what happened any more than anyone else (probably less than many people) but Joel's point resonates with me: If somebody had been watching and willing, then these problems could have been detected and dealt with earlier. In retrospect, it's obvious that excessive risks were taken for short term gain, and some folks were just plain crooks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;It's ironic that folks in the Financial Services industry were blind-sided by this crisis. For years they have been at the forefront of analysis and pattern recognition technology, driving many of the advances in the field. Software that could have detected Madoff's ponzi schemes is trivial compared to the sophisticated &lt;a href="http://www.nytimes.com/2009/03/10/science/10quant.html?ref=science"&gt;financial gaming models&lt;/a&gt; developed by &lt;a href="http://www.forbes.com/2008/10/07/securities-quants-models-oped-cx_ss_1008shreve.html"&gt;the Quants&lt;/a&gt;. There's really no excuse except for a lack of someone who was willing to look out for everyone else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;At times like these we realize that sometimes a Big Brother can be a wonderful thing to have.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_QviPbycN-9k/ScVsrbDzhVI/AAAAAAAAO4k/-AWD7LbvyJM/s1600-h/big+brother.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315774428434629970" src="http://4.bp.blogspot.com/_QviPbycN-9k/ScVsrbDzhVI/AAAAAAAAO4k/-AWD7LbvyJM/s400/big+brother.jpg" style="cursor: hand; float: left; height: 150px; margin: 0px 10px 10px 0px; width: 102px;" /&gt;&lt;/a&gt;I'll bet that most of you think of &lt;a href="http://en.wikipedia.org/wiki/Big_Brother_(1984)"&gt;George Orwell's Big Brother&lt;/a&gt; when you hear the term. Orwell's Big Brother &lt;a href="http://www.tgdaily.com/content/view/39455/128/"&gt;scares&lt;/a&gt; the hell out of us - a omnipresent leader spying on everyone - but he's just a one dimensional character from a horror story.&lt;a href="http://4.bp.blogspot.com/_QviPbycN-9k/ScVtZ5wJTFI/AAAAAAAAO4s/IdSlHRtdxDo/s1600-h/big+brother+big+sister.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315775226947652690" src="http://4.bp.blogspot.com/_QviPbycN-9k/ScVtZ5wJTFI/AAAAAAAAO4s/IdSlHRtdxDo/s400/big+brother+big+sister.jpg" style="cursor: hand; float: right; height: 80px; margin: 0px 0px 10px 10px; width: 271px;" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;div&gt;We should also think of the &lt;a href="http://www.bbbs.org/site/c.diJKKYPLJvH/b.1539751/k.BDB6/Home.htm"&gt;Big Brothers Big Sisters&lt;/a&gt; organization... proving the point in real terms that having someone to look out for us can be a very good thing indeed.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;But what about privacy?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;My personal belief is that real privacy is an illusion in the 21st century. Maybe not for those living on the margins of society, but for someone like me the walls are transparent and thin. If you are curious and persistent you can probably dig up every embarrassing and questionable act that I've ever done. You can figure out where I live, where I shop, where I eat, where I travel. You can dig up former girlfriends, past employers and folks who can't stand me. My life may not be an open book - but opening my book is way too simple.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I'm not all that happy with my lack of privacy, but I am more concerned by the thought that someone can use that publicly available information to pretend to be me (identity theft). As I wrote in my 2004 blog &lt;a href="http://weblogs.java.net/blog/johnreynolds/archive/2004/12/privately_famou.html"&gt;Privately Famous&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;"I know that many people fear a &lt;a href="http://www.privacy.org/pi/activities/idcard/idcard_faq.html" style="color: #006699; text-decoration: none;"&gt;National Identity Card&lt;/a&gt;, and I can sympathize; Governments are notorious for turning oppressive. I hold the other view; I want a National Identity Card, and I want my DNA and finger-prints on file. Without a trusted identification authority (and I know that nothing is foolproof), it's just too easy for someone else to pretend to be me, and too hard for me to prove that I am me."&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;The price of Privacy can be way too high if it's carried to ridiculous extremes. Our fear of government prying led us to condone the &lt;a href="http://www.progressivestates.org/node/21888"&gt;gutting of regulatory oversight&lt;/a&gt; that we just naturally assumed was protecting us.&lt;br /&gt;&lt;br /&gt;Forget the financial mess for the moment: Did you ever think that American &lt;a href="http://bulletin.aarp.org/yourhealth/policy/articles/every_peanut_product_from_ga_plant_recalled.html?CMP=KNC-360I-GOOGLE-BULL&amp;amp;HBX_OU=50&amp;amp;HBX_PK=peanut_butter"&gt;Peanut Butter would be dangerous&lt;/a&gt; in the 21st century? Didn't &lt;a href="http://www.californiaprogressreport.com/2007/03/food_safety_and.html"&gt;Teddy Roosevelt&lt;/a&gt; institute food safety oversight a hundred years ago?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regulatory oversight is certainly a potential evil - but it's a necessary evil. With the tools that we have today Big Brother can watch us, but we can also watch him. We have no real privacy, but neither does he.&lt;br /&gt;&lt;br /&gt;Technology can help. We can help reduce the "red tape". We can help spot the suspicious. We can help predict the long term. We can help the watchers watch, and we can help watch the watchers.&lt;br /&gt;&lt;br /&gt;We can help avoid messes like this in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-3923169957004006469?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/3923169957004006469/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=3923169957004006469" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/3923169957004006469" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/3923169957004006469" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/03/all-big-brothers-arent-bad.html" title="All Big Brothers Aren't Bad" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_QviPbycN-9k/ScVsrbDzhVI/AAAAAAAAO4k/-AWD7LbvyJM/s72-c/big+brother.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-362209343461820098</id><published>2009-03-21T09:15:00.004-05:00</published><updated>2009-03-21T15:59:30.561-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">The Science of Art</title><content type="html">If you've looked at &lt;a href="http://www.linkedin.com/in/johnreynolds"&gt;my LinkedIn profile&lt;/a&gt; you've probably noticed that I've changed jobs quite a bit over the years.  There have been many reason for changing jobs... but usually I've moved on to grow.  I've moved on because I found something that interested me more, or something that challenged me more.  On a few lucky occasions I've found things that were both more interesting and more challenging.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On other occasions I have moved on because I just couldn't stand it any more.  Frustration over some aspect of my working days would build up until it was obvious (to me) that I was wasting my time and my talents.  Something about the company was perversely keeping me from doing my job in the way that I knew it really should be done (or so I felt at the time).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think that all of us who work for a living have felt something like this from time to time, and that's why I found &lt;a href="http://stopdesign.com/archive/2009/03/20/goodbye-google.html"&gt;Douglas Bowman's post&lt;/a&gt; on his departure from Google to be so poinient. Bowman's artistic design philosophy crashed head first into Google's statistical mantra.  Classic case of irreconcilable differences... Make a clean break and part as friends.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Changing jobs is a personal matter... but Bowman raises an issue of wider interest in the community of UI designers and programmers:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;"&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Is UI Design Science or Is It Art&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;?"&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;The answer is of course both... and everybody has always known that.  What's changed is our radically increased ability to apply Science to our designs.  Analysis of our designs used to be woefully limited to focus groups or beta testers, but as &lt;a href="http://news.cnet.com/8301-17939_109-10201160-2.html?tag=newsEditorsPicksArea.0"&gt;Stephan Shankland&lt;/a&gt; points out: Google's practice of  "&lt;i&gt;Choosing color shades and pixel widths on the basis of the behavior of millions of Web page users is a fascinating development to the form-follows-function school of design.&lt;/i&gt;"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_service"&gt;SaaS&lt;/a&gt; (Software as a Service) solutions it's much simpler to roll out a minor design change and "see what happens".  It's much easier to employ the Scientific method.  It's much easier to test instead of speculate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Take this new "try it and see" capability with a grain of salt - you'd need Google's millions of users to even notice the effect of subtle changes - but the promise is intriguing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bowman's case warns us that there's also a down side if Science is improperly applied.  Demanding statistical justifications for artistic design decisions is fraught with peril... You'll drive off your best artists and you'll likely lose out on true innovation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inspiration seldom comes from statistical analysis... and inspiration is usually at the heart of all good designs.  Statistical analysis can measure the success of a design, and it should be more widely applied.  Statistical analysis helps us continually improve a design, but it's not the genesis of good design.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Art first - then Science.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-362209343461820098?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/362209343461820098/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=362209343461820098" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/362209343461820098" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/362209343461820098" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/03/science-of-art.html" title="The Science of Art" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-4347123938916311997</id><published>2009-03-15T09:52:00.005-05:00</published><updated>2009-03-15T12:58:57.864-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Energy" /><title type="text">Picking Power</title><content type="html">The &lt;a href="http://www.statesman.com/"&gt;Austin American Statesman&lt;/a&gt; has a great graphic by Roberto Villalpando in today's paper that compares the energy costs of building a new power plant - I'd love to post a link, but it doesn't seem to be on their online edition.  Here's a scan:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QviPbycN-9k/Sb0_x_i3iiI/AAAAAAAAO4c/DLAqltEksO0/s1600-h/PowerOptions.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 319px; height: 400px;" src="http://2.bp.blogspot.com/_QviPbycN-9k/Sb0_x_i3iiI/AAAAAAAAO4c/DLAqltEksO0/s400/PowerOptions.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5313473263470873122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;The graphic compares the factors associated with Nuclear, Coal, Natural Gas, Wind Farm, Solar and Wood Biomass power plants.  As you'd expect, it's all about tradeoffs.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I really applaud the Statesman for publishing this comparison.  You might take issue with the details ascribed to each option - but this clearly makes the point that there are pros and cons to every Energy option.  There are costs and savings associated with each option.  Nothing is cut and dried - each option requires careful consideration.  Trite slogans just don't cut it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-4347123938916311997?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/4347123938916311997/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=4347123938916311997" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4347123938916311997" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4347123938916311997" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/03/picking-power.html" title="Picking Power" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_QviPbycN-9k/Sb0_x_i3iiI/AAAAAAAAO4c/DLAqltEksO0/s72-c/PowerOptions.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-8984868255680567850</id><published>2009-03-11T19:13:00.009-05:00</published><updated>2009-03-14T11:24:04.719-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Traffic" /><category scheme="http://www.blogger.com/atom/ns#" term="Energy" /><category scheme="http://www.blogger.com/atom/ns#" term="Travel" /><title type="text">Power trip</title><content type="html">MIT has come up with a battery that can &lt;a href="http://www.tgdaily.com/html_tmp/content-view-41686-181.html"&gt;fully recharge in seconds&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wow.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Talk to anybody in the power industry and they'll tell you that the problem is storage, not generation.  Wind power is great.  Solar cells are great.  &lt;a href="http://en.wikipedia.org/wiki/Solar_furnace"&gt;Solar furnaces&lt;/a&gt; are great.  Unfortunately they're all undependable because the wind and the Sun aren't necessarily there when you need them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Response to this sad fact has resulted in bizarre plans like huge &lt;a href="http://en.wikipedia.org/wiki/Solar_power_satellite"&gt;Solar Power Satellites&lt;/a&gt; orbiting the planet to beam down uninterrupted streams of microwave energy and relatively low tech solutions like the &lt;a href="http://en.wikipedia.org/wiki/Ludington_Pumped_Storage_Power_Plant"&gt;Luddington Pumped Storage Power Plant&lt;/a&gt; using a huge water reservoirs and gravity to store power.  Solutions like these are impressive, but they just don't work for cars.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cars need portable power... and today that portable power is stored in gasoline.  Burning gas to liberate its power isn't that efficient - so folks are looking for substitutes.  The most common substitute that I have heard pitched is the &lt;a href="http://en.wikipedia.org/wiki/Hydrogen_fuel_cell"&gt;Hydrogen Fuel Cell&lt;/a&gt;.  Hydrogen was kind of scary to the Coal and Gas Industries, but then someone got the great idea of making &lt;a href="http://www.fueleconomy.gov/feg/fcv_fuels.shtml"&gt;Hydrogen from Gas and Coal&lt;/a&gt;. Amazing how the same folks keep making money... isn't it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MIT's new batteries kind of throw a wrench in those plans.  If you can fully recharge your car's batteries in a couple of seconds, then why lug around that Gas and Coal to Hydrogen Powered Fuel Cell?  Fortunately, you can still charge that battery from the local Gas and Coal burning Power Plant :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I digress... a battery that charges in seconds is an incredible development.  &lt;a href="http://news.cnet.com/8301-10784_3-9798043-7.html"&gt;Bill Joy&lt;/a&gt; identified batteries as the key stumbling block to practical electric cars:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(53, 53, 53);   line-height: 17px; font-family:Arial;font-size:12px;"&gt;&lt;blockquote&gt;"There's a range of new chemistries coming so that you can imagine, say five to ten years from now, instead of 100 watt-hours per liter we're at today, that a break-out company will have a 500 or thousand watt-hours--a five to 10 times (increase in) the energy density,"&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Bill and the rest of us were thinking about batteries that held more power... not batteries that charge faster.  Our thought was that a &lt;a href="http://www.chevrolet.com/electriccar/"&gt;Chevy Volt&lt;/a&gt; isn't practical because you have to charge it every 40 miles (or use the gas engine).  Give it a 400 mile range and folks will stand in line to buy one (and you can ditch the gas engine).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In retrospect - What were we thinking?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Would you rather have a large &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(400 mile)&lt;/span&gt; gas tank that takes 8 hours to fill or a small &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(40 mile)&lt;/span&gt; gas tank that takes 8 seconds to fill?  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are lots of factors to consider before answering that question... but I suspect that fast beats slow most of the time.  If the MIT batteries really work and you can recharge your car in a few seconds, then I think that most folks will accept a battery powered car as practical even if they still have to charge it every 40 miles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What do you think?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-8984868255680567850?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/8984868255680567850/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=8984868255680567850" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8984868255680567850" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/8984868255680567850" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/03/power-trip.html" title="Power trip" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-9081276783904452496</id><published>2009-03-10T07:02:00.015-05:00</published><updated>2009-03-10T19:50:15.466-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">Is that a bad thing?</title><content type="html">&lt;a href="http://www.networkperformancedaily.com/2009/03/first_sell_then_code.html"&gt;Joe Trammell&lt;/a&gt; recently blogged an interesting anecdote that concludes with the following moral:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;"The first step in trying to improve any process in IT is convincing the people with the power to make decisions that the current process is flawed."&lt;/span&gt;&lt;/blockquote&gt;I'd remove the words "in IT" from Joe's statement.  In any organization, unless "they" agree that "it" is broken, "it" is not going to get fixed. Joe goes on to say:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;"enterprise computing isn't just technical knowledge, it's also social interaction"&lt;/span&gt;&lt;/blockquote&gt;Amen!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my experience, &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/07/most-software-development-obstacles-are.html"&gt;most software development obstacles are cultural&lt;/a&gt;.  People are different. One person's crisis is another person's acceptable annoyance - I'm not going to help you fix something unless I agree with you that it's broken.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's no quick fix for this problem, but I think that we're headed in the right direction - &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/06/bpmn-and-business-rules.html"&gt;BPMN, Business  Rules, Business Natural Languages&lt;/a&gt; -all attempts to foster better communication between Programmers and Business.  All attempts to help each camp understand what the heck the other camp is talking about.  All attempts to help each other understand what the problems really are.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We're not there yet. Communication is still a bit awkward and stifled - but we're getting there.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-9081276783904452496?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/9081276783904452496/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=9081276783904452496" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9081276783904452496" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9081276783904452496" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/03/is-that-bad-thing.html" title="Is that a bad thing?" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-4737865905807741986</id><published>2009-02-21T15:22:00.005-06:00</published><updated>2009-02-21T16:22:43.108-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">Seeing is Believing - Business Process Visualization</title><content type="html">&lt;div&gt;Time to introduce a new TLA (&lt;b&gt;T&lt;/b&gt;hree &lt;b&gt;L&lt;/b&gt;etter &lt;b&gt;A&lt;/b&gt;cronym) to this blog: BPV - &lt;b&gt;B&lt;/b&gt;usiness &lt;b&gt;P&lt;/b&gt;rocess &lt;b&gt;V&lt;/b&gt;isualization.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;I often sum up basics of BPM (&lt;b&gt;B&lt;/b&gt;usiness &lt;b&gt;P&lt;/b&gt;rocess &lt;b&gt;M&lt;/b&gt;anagement) with the following pitch:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Model your Process &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Manage your Process &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Monitor your Process &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;iMprove your Process&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;For me, the enabling factor for BPM was the Executable Process Diagram.  Use tools to graphically depict the Activities and Flows of a Process, and then auto-generate the software necessary to manage the transitions between those Activities.  &lt;/div&gt;&lt;div&gt;With any good BPM Suite I can rest assured that &lt;span style="font-size:130%;"&gt;the Right People will Execute the Right Activities at the Right Time&lt;/span&gt; to keep my Processes Flowing Smoothly.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; The BPM Industry has more than met the PFS (&lt;b&gt;P&lt;/b&gt;rocesses &lt;b&gt;F&lt;/b&gt;low &lt;b&gt;S&lt;/b&gt;moothly) challenge - The decision for a company to adopt BPM technology and methodology is pretty much a no-brainer (Which suite to adopt may require some thought, but whether or not to adopt isn't even an issue any more).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So what's next?  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In a recent post I attempted to describe a BPMS in terms that might have been familiar to any &lt;a href="http://thoughtfulprogrammer.blogspot.com/2009/02/19th-century-bpms.html" id="iqe5" title="19th Century businessman"&gt;19th Century businessman&lt;/a&gt; .  One of the comments I received really peaked my interest:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.blogger.com/profile/02744153944427657174" rel="nofollow" style="color: rgb(85, 136, 170); text-decoration: none"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"&gt;&lt;a href="http://www.blogger.com/profile/02744153944427657174" rel="nofollow" style="color: rgb(85, 136, 170); text-decoration: none"&gt;&lt;i&gt;Roeland Loggen&lt;/i&gt;&lt;/a&gt;&lt;i&gt; said...&lt;br /&gt;Maybe your story reflects one of the key issues with current BPM thinking: if the software provides automated concepts of a year 1890 shopfloor, then not much innovation has been created. Since 1890 many many new ideas have been created on people working in processes. The mechanistic view of typical BPM software has not clue of these more modern concepts. &lt;br /&gt;The 20th century knowledge worker's reality and productivity is muh different from Taylor based process thinking... not based on orchestration, central coordination, workflow items, inbox/task screen.... but adhoc, collaboration, changing processes on the fly based on new insights and events....&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;For the sake of argument: If every 1890 shop floor had an exceptional Process Manager on hand, productivity would have soared... but Roland's right: We can't be satisfied to stop with systems that automate 19th century businesses.  It's the 21st Century, and we can do better than that.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;The key for doing better is &lt;b&gt;B&lt;/b&gt;usiness &lt;b&gt;P&lt;/b&gt;rocess &lt;b&gt;V&lt;/b&gt;isualization (BPV).&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;In my 19th Century BPMS I discussed someone that I dubbed the "Process Visualizer".  This is that person who took the raw metrics that the Process Manager had gathered and turned them into reports, charts and graphs that the Business Owner could use to understand the past and to plan for the future.  These reports, charts and graphs are an integral part of BPV, but there's a whole lot more to the full picture.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;BPV begins with the Process Diagram.  The Process Diagram distills the essence of the problem into a form that Business and IT can share.  It's a crucial part of validating that the process is correct and for communicating the requirements from the process owner to programmers who will implement the process application.  In most of today's BPM Systems the life cycle of the Process Diagram often goes something like this...&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;The Business decides to improve their operations, so they hire an Analyst to come in and help them.  &lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;The Analyst talks to a lot of people and produces an &lt;b&gt;"As Is"&lt;/b&gt; Business Process Diagram.  This diagram is often used by the Analyst to reassure the Business that  the Analyst really understands what's going on.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Now that the Analyst really understands what's going on, a new &lt;b&gt;"To Be"&lt;/b&gt; Business Process Diagram is created.  This diagram is used by the Business to capture exactly how they want the new process to operate.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;At this point simulations can be run to predict how the new process will behave relative to the old.  Simulation is always tricky, but if the assumptions are accurate (hopefully based on historical data), then it's sometimes possible to tune the "To Be" definition to increase the likelihood of success.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Once the Business and the Analyst are happy with the "To Be" diagram, it can be passed on to the Implementers (and it now becomes known as the &lt;b&gt;"As Planned"&lt;/b&gt; diagram).  The Implementers now morph the diagram into an executable diagram, usually adding way more details than the Business wishes to see.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;i&gt;Slight digression:  There's a lot of controversy swirling around &lt;a href="http://www.brsilver.com/wordpress/2008/05/01/which-way-for-bpmn-20/"&gt;BPMN 2.0&lt;/a&gt; over the issue of adding execution semantics to process diagrams.  Implementers (in general) want truly executable diagrams but Business folks (in general) don't want to clutter the diagram with non-Business related details.  I think there's a simple solution... which I will get to later.&lt;/i&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;The Implementers work with the Analyst and Business until all are happy and the process application is deployed into production... at this point the Implementer's diagram becomes known as the &lt;b&gt;"As Built"&lt;/b&gt; diagram.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;i&gt;Note to all: The "As Built" diagram is a clear differentiation from all pre-BPM Systems.  In a BPMS, the "As Built" really is the process that is running in production.  Before BPMS the diagram may have been accurate once, but you never really had confidence that the diagram ever matched reality.&lt;/i&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;In some BPM Systems, the "As Built" diagram is often the end of the line.  Once the process application is deployed they don't think about it much until the next time a process change is contemplated... However, in many BPM Systems the "As Built" morphs into a living and breathing &lt;b&gt;"As Running"&lt;/b&gt; diagram.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Live and historical data breathes life into the "As Running" diagram.  My old friend the Process Visualizer takes the raw data from the Process Manager and animates the "As Running" diagram to give the Business a clear view of what's happening where (and what happened when).  The "As Running" diagram gives you your first glimpse of what BPV can achieve.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Thus far the Process Diagram has be limited to a pretty small audience - those involved in designing the process and those involved in implementing the process.  BPV should expand the Process Diagrams visibility to a much wider audience.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Go into just about any office and ask a typical worker the following question:&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;"What Processes do you work on?"&lt;/span&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Most likely, the response will be a blank stare.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Now ask the worker:&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;"What Activities do you perform?"&lt;/span&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;dd class="comment-body" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;The blank stare will vanish and you'll get a very accurate litany of tasks.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;BPV needs to give each worker the answer to that first question.  It's not enough to know what Activities you need to work on - To do your best you really need to know how those Activities fit into a bigger picture.  Process knowledge is a bigger picture, and it goes a long way to helping the workers understand why they are doing what they are doing.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;A task that seem stupid in isolation may make sense when seen in a process context - or it may really be stupid.  In the former case the worker may do a better job, and in the latter case BPV may give the worker the context needed to communicate their frustration.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;When folks such as Lombardi's &lt;a id="xnzw" href="http://blog.lombardicto.com/" title="Phil Gilbert"&gt;Phil Gilbert&lt;/a&gt; talk about BPM on every desk in an enterprise, this is what they are talking about.  Process Visualization helps everyone put things in context, and that helps everyone do a better job.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Now for a bit of Devil's advocate:  Most workers couldn't make heads or tails out of a BMPN diagram, and if you add all the execution semantics proposed for BPMN 2.0 that percentage is going to drop even further.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Granted, but there's a solution: Different views for different folks.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Returning to my programming roots... I am a huge fan of &lt;a id="rels" href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" title="Aspect Oriented Programming"&gt;Aspect Oriented Programming&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;Aspect Oriented Programming evolved from a simple fact: Most worthwhile endeavors can be broken down into distinct concerns, and often you can meet the goals sooner by dealing with these concerns (aspects) in isolation.  Obviously there are limits to this when concerns overlap, but it's a good place to start.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;With Aspects as my inspiration it's easy to see where Process Diagrams need to go: Aspect Oriented Diagrams.  If we can identify the aspects of a diagram that the Business Owner is interested in, and those that the Operations Folks are interested in, and those that each Worker is interested in, then we can generate the Views that mean the most to the intended audience. It's all just a matter of Perspective, and BPV enables many, many perspectives.  Some views may look like process diagrams, others may look quite different - doing BPV right will employ a lot of artistic scientists.&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;span style="font-size:100%;"&gt;Here are just a few process views that come to mind:&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Process Owner's "40,000 foot" view&lt;/li&gt;&lt;li&gt;Activity Owner's "Escalation logic" view&lt;/li&gt;&lt;li&gt;Participant's "Where does this fit?" view&lt;/li&gt;&lt;li&gt;Operation's "What's happening now?" view&lt;/li&gt;&lt;li&gt;Operation's "What happened?" view&lt;/li&gt;&lt;li&gt;IT's "Capacity planning" view&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; As Roland said, the future is about "ad hoc, collaboration, changing processes on the fly based on new insights and events"...&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px"&gt;BPV's going to help us find those insights.&lt;/p&gt;&lt;/dd&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-4737865905807741986?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/4737865905807741986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=4737865905807741986" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4737865905807741986" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/4737865905807741986" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/02/business-process-visualization.html" title="Seeing is Believing - Business Process Visualization" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-2277052297496238017</id><published>2009-02-18T07:29:00.004-06:00</published><updated>2009-02-18T07:36:15.984-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">Grilling Business</title><content type="html">Mike Hugos offers some interesting thoughts in his article: &lt;a href="http://www.cio.in/esntech/viewArticles/ARTICLEID=5833257/page=0"&gt;How To Truly Partner With Business&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mike points out that the traditional requirements gathering process is:&lt;br /&gt;&lt;blockquote&gt;"about as friendly as being grilled by a police detective"&lt;/blockquote&gt;&lt;br /&gt;Not exactly the relationship we've all dreamed of, is it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-2277052297496238017?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/2277052297496238017/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=2277052297496238017" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/2277052297496238017" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/2277052297496238017" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/02/business-and-it.html" title="Grilling Business" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-9127321712066887928</id><published>2009-02-11T21:51:00.004-06:00</published><updated>2009-02-14T19:50:45.000-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">== != =</title><content type="html">This week I visited a client in the Detroit area, and on the whiteboard in their meeting room I saw the following:&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;== != =&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;For those of you who aren't programmers, this is a slam at perhaps one of the worst programming language syntax decisions that has ever been made.  You can read the above expression as "Equal equal is not equal to equals".   Still lost?  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the C programming language (and derivatives such as C++, Java, JavaScript and C#) the way that you test to see if two variables are equivalent to each other is to use the "==" operator.  For example:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if ( a == b ) { doSomething(); }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you want to assign a value to a a variable you use the assignment operator "=".  For example:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;a = b;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Believe it or not, even folks who have been programming for years occasionally screw up and use the assignment operator "=" when they meant to use the test for equivalence operator ==.   Here's an all too common example:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if ( a = b ) { doSomething;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The line above sets the value of variable "a" to the value of variable "b".  If "b" is not zero, then the function "doSomething()" will be invoked.  Perhaps that's the behavior that the programmer desired, but I really doubt it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;According to the wikipedia article &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_Pascal_and_C"&gt;comparing the Pascal programming language to C&lt;/a&gt;: &lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;"&lt;span class="Apple-style-span"   style="  line-height: 19px; font-family:-webkit-sans-serif;font-size:13px;"&gt;It is common for programmers new to C to &lt;u&gt;accidentally&lt;/u&gt; put assignment expressions in conditional statements such as &lt;code style="background-color: rgb(249, 249, 249); "&gt;if (a = 10) { ... }&lt;/code&gt;, which will always execute because the assignment expression &lt;code style="background-color: rgb(249, 249, 249); "&gt;a = 10&lt;/code&gt; has the value 10 ≠ 0 and is therefore considered "true" in C. Also note that &lt;code style="background-color: rgb(249, 249, 249); "&gt;a&lt;/code&gt; has now got the value &lt;code style="background-color: rgb(249, 249, 249); "&gt;10&lt;/code&gt;, which may affect the following code. This kind of mistake cannot happen in Pascal, as assignments are not expressions; using the wrong operator will cause a compile error (and it's not likely that anyone would mistake the &lt;code style="background-color: rgb(249, 249, 249); "&gt;:=&lt;/code&gt; symbol for equality test).&lt;span class="Apple-style-span"   style="  line-height: normal; font-family:Georgia;font-size:16px;"&gt;" &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;I have to take issue with this statement... It's not just programmers who are new to C.  I made this mistake last week :-)&lt;/div&gt;&lt;div&gt;&lt;div&gt;This mistake is so common that some programming editors will actually flag statements like this to warn the programmer.  I've no idea how much time has been lost on this little syntactical monkey wrench, but I think it's probably quite a bit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Long ago before I learned C I used Pascal.  In Pascal the "=" operator is used to test for equality.  If you want to set a value you used ":=".  When reading this symbol out loud I'd always say "set equal to".  For some reason, I don't ever remember confusing the two or knowing anyone else who ever confused the two.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The BASIC programming language is even simpler... the interpreter uses the context of where "=" appears in an expression to determine what it means.  IF $A = 0 THEN is interpreted as a comparison.  $A = 3 is interpreted as an assignment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't know why the authors of C chose to use "==" and "=" in this way - but unfortunately that decision was inherited by most of the programming languages that are widely used today.  Every  programmer who includes some JavaScript on a web page might screw up and make this mistake... so just remember:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:18px;"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style=" ;font-size:24px;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;== != =&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold;font-size:24px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-9127321712066887928?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/9127321712066887928/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=9127321712066887928" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9127321712066887928" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9127321712066887928" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/02/blog-post.html" title="== != =" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-1173647005527447107</id><published>2009-02-06T13:28:00.006-06:00</published><updated>2009-02-06T17:47:03.958-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">19th Century BPMS</title><content type="html">I sometime find it useful to describe a BPMS (&lt;a href="http://en.wikipedia.org/wiki/Business_process_management"&gt;Business Process Management System&lt;/a&gt;) in terms of things and people that you probably would have found in an office or factory in the 1890s:&lt;br /&gt;&lt;br /&gt;At the center of the BPM system is a &lt;b&gt;Process Manager&lt;/b&gt; who makes sure that each Process runs smoothly.  The Process Manager uses &lt;b&gt;Process Definitions&lt;/b&gt; to know what all the steps of each process are, the proper sequence in which each step should be performed and which people should perform each step.&lt;br /&gt;&lt;br /&gt;The Process Manager hands out assignments to each worker - updating each worker's &lt;b&gt;Task List&lt;/b&gt; to insure that each worker knows what to do and when to do it.  The Process Manager also passes along any information from previous Tasks that the workers doing the remaining Tasks may need.&lt;br /&gt;&lt;br /&gt;If a worker doesn't finish a Task on schedule, the Process Manager may escalate the Task. Escalation could take many forms - the Task might be reassigned or perhaps the worker's supervisor might be informed - It's all laid out in the Process Definition.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;A great Process Manager can manage many instances of many different types of processes simultaneously (that was probably rare in the 19th century).&lt;br /&gt;&lt;br /&gt;The workers do the work (just like they did in the 1890s) performing whatever activities are assigned to them by the Process Manager.  When a worker finishes a Task the Process Manager must be informed.&lt;br /&gt;&lt;br /&gt;Workers in the 1890s were given detailed instructions that told them exactly what to do to accomplish their current Task along with Forms to record any information that the Process Manager or other workers needed.  In today's world the workers rely on software to guide them through each task (often in the form wizards).  Most BPMS systems run these wizards using &lt;b&gt;Task Engines&lt;/b&gt; that can execute any &lt;b&gt;Task Definition&lt;/b&gt;, but often custom applications are developed or adapted to perform specific Tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The Process Managers primary job is to keep every process running... But that's not enough.... Are the processes efficient at accomplishing their goals?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Workers want to know how they are doing relative to their peers.&lt;/li&gt;&lt;li&gt;Bosses want to know how well their workers are doing and whether or not the company's goals and obligations are being met.&lt;/li&gt;&lt;li&gt;Owners want to know how today's performance compares with that of last year... and how next year's perfomance might be better.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Everyone needs to be able to Visualize their processes in meaningful ways that can help answer their questions.&lt;br /&gt;&lt;br /&gt;The Process Manager records all of the raw data necessary to track each process instance, but often relies on someone else to crunch the numbers and produce the meaningful reports, charts and graphs that help make sense of the processes.  I call this someone else the &lt;b&gt;Process Visualizer&lt;/b&gt; for lack of a better title.  I'm sure there were people in 19th century offices who performed a similar function.&lt;br /&gt;&lt;br /&gt;Ultimately it's the Process Visualizer that sets a BPM Sytem apart from a Workflow System. Without visibility into a process you can only guess on what changes might improve it. BPM is about enabling Continuous Process Improvement - so that Visualizer is key.&lt;br /&gt;&lt;br /&gt;Their are many vendors of BPM Systems in the world, and many might take issue with some aspects of my analogies - but I think that most will agree with my broad characterizations.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BPM Systems are made up of relatively mundane parts that would sound familiar to most 19th century Businessmen - the concepts are old - it's our technology (and people who know how to use the technology) that is making these BPM concepts transformational. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just imagine what could have happened in the 1890s if there had been a great Process Manager and Process Visualizer in every office and factory.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-1173647005527447107?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/1173647005527447107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=1173647005527447107" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1173647005527447107" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/1173647005527447107" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/02/19th-century-bpms.html" title="19th Century BPMS" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-9038869721162518807</id><published>2009-02-03T21:42:00.003-06:00</published><updated>2009-02-06T13:32:03.747-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">Process Rules - Why BPMN isn't enough</title><content type="html">&lt;span style="font-size:100%;"&gt;A human-centric process "works" when the right people (aka Participants) perform the right tasks (aka Activities) at the right time and in the right sequence.&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From the above statement you can pretty much derive the types of &lt;a id="y218" title="Rules" href="http://thoughtfulprogrammer.blogspot.com/2008/06/bpmn-and-business-rules.html"&gt;Rules&lt;/a&gt; that govern a Process:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a id="r.wu" title="Routing Rules" href="http://thoughtfulprogrammer.blogspot.com/2008/03/tips-for-business-process-developer.html"&gt;&lt;b&gt;Routing Rules&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;- determine who (which Participant) should perform an Activity&lt;/li&gt;&lt;li&gt;&lt;b&gt;Flow Rules&lt;/b&gt; - determine which Activities should be performed and in what sequence&lt;/li&gt;&lt;li&gt;&lt;b&gt;Escalation Rules&lt;/b&gt; - determine what to do if an Activity is not completed at the right time&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On a &lt;a id="ilbb" title="BPMN" href="http://en.wikipedia.org/wiki/BPMN"&gt;BPMN&lt;/a&gt; diagram the Routing Rules are somewhat indicated by Swim Lanes - Flow Rules are somewhat indicated by Gateways - Escalation Rules are somewhat indicated by attaching Timers (a form of Intermediate Event) to Activities.  The challenge for those of us who implement Process Applications is to fill the gaps between the BPMN diagram that somewhat represents these Rules and the nuances of these Rules.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using BPMN to model a Process is a fairly "Business Person Friendly" method for capturing and validating requirements.  With a bit of training most Business People can "read" BPMN diagrams to validate that the diagram is an accurate representation of the Process they want implemented.  Many BPM Systems translate BPMN diagrams into executable code - so what the &lt;a id="g_2o" title="Business Person" href="http://thoughtfulprogrammer.blogspot.com/2006/02/software-for-business-people-like-my.html"&gt;Business Person&lt;/a&gt; "sees" is what the Process "does".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately there's not a similarly wide-spread "Business Person Friendly" method for capturing and validating Routing, Flow, and Escalation Rules.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm intentionally being imprecise in how I use the term "Rules" - I don't want to get bogged down in a discussion about &lt;a id="pi-f" title="Rules Engines" href="http://en.wikipedia.org/wiki/Rules_engine"&gt;Rules Engines&lt;/a&gt; - I'd rather focus on the way most Business People express Rules.  &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;When a Business Person tells you "Have Frank do this task if the loan amount is over $500K" that's a Routing Rule.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When a Business Person tells you "Do a Credit Check if the Applicant has no Collateral" that's a Flow Rule.&lt;/li&gt;&lt;li&gt;When a Business Person tells you "If the Credit Check isn't completed in an hour notify Frank's boss" that's an Escalation Rule.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Often you'll get ambiguous or conflicting Rules from Business.  It happens all the time.  The Process can't (really) be implemented until the ambiguous is made clear and the conflicts are resolved -  When you encounter these situations (and you will encounter these situations) you'll immediately understand why there's a lot more to implementing a &lt;a id="d98d" title="Managed Business Process" href="http://thoughtfulprogrammer.blogspot.com/2008/05/what-is-managed-business-process.html"&gt;Managed Business Process&lt;/a&gt; than BPMN. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-9038869721162518807?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/9038869721162518807/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=9038869721162518807" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9038869721162518807" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/9038869721162518807" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/02/process-rules-why-bpmn-isn-enough.html" title="Process Rules - Why BPMN isn&amp;#39;t enough" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-912238759474688334</id><published>2009-01-27T04:28:00.003-06:00</published><updated>2009-01-27T04:31:31.628-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><title type="text">Programming or Software Engineering?</title><content type="html">There's an interesting thread going on over at InfoQ regarding the relationship between &lt;a href="http://www.infoq.com/news/2009/01/BPMSoftwareEngineering"&gt;BPM and Software Engineering&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One subtext of this discussion raises a wider question - When is it "Programming" and when is it "Software Engineering"?&lt;br /&gt;&lt;br /&gt;I'm not sure that the distinction really matters... it's kind of like trying to nail down a definition for "Scripting Languages" rather than "Real" programming languages... but I'd like to share my thoughts.&lt;br /&gt;&lt;br /&gt;I think that it's Software Engineering when your primary focus is on the relationships and interactions between software components. Programming is when your primary focus is on implementing specific requirements.&lt;br /&gt;&lt;br /&gt;I know that's a pretty mushy distinction, but it's the best I can come up with for now...&lt;br /&gt;&lt;br /&gt;To build on this distinction a bit more: It is my very strong belief that everyone should be taught how to Program. Reading, Writing, and Arithmetic just aren't enough for the 21st Century - Everybody should be able to write simple programs.&lt;br /&gt;&lt;br /&gt;In contrast, Software Engineering is a very specialized field and way beyond the needs of most people. Like Electrical, Mechanical, Civil and the other Engineering disciplines, it takes years of preparation to master. In my experience all Engineering boils down to math and metrics &lt;span style="font-size:85%;"&gt;(How else can you measure the effectiveness of an algorithm?)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Bringing ths back to the BPM/Software Engineering discussion going on at InfoQ... I agree that BPM is not Software Engineering (it's more akin to Process Engineering). There's a huge amount of Software Engineering that goes into building a BPM suite, but that doesn't generally concern those who are actually using those suites.&lt;br /&gt;&lt;br /&gt;When implementing a &lt;a href="http://thoughtfulprogrammer.blogspot.com/2008/05/what-is-managed-business-process.html"&gt;Managed Business Process&lt;/a&gt; you must employ good Programming skills - but in most cases you are building within the dictates of your BPM suite's Software Architecture. To me that's not really Software Engineering, it's Programming.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-912238759474688334?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/912238759474688334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=912238759474688334" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/912238759474688334" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/912238759474688334" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2009/01/programming-or-software-engineering.html" title="Programming or Software Engineering?" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25178118.post-711997623792561607</id><published>2008-10-23T19:42:00.004-05:00</published><updated>2008-12-05T15:55:41.097-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business Process Management" /><category scheme="http://www.blogger.com/atom/ns#" term="Thoughtful Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="BPM" /><title type="text">cess Dia</title><content type="html">Sometimes (usually about 2 o'clock in the morning when I am keyed up and can't sleep) I have amazing epiphanies that (if properly shared) may potentially alter the future course of All Human Endeavors from this point in time until The End Of All TIme... Here's my latest:&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;If you take the phrase "Process Diagram" and remove from it "cess Dia" you end up with the word "Program".&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;What an amazing correlation between Process Diagrams and Programs!&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Okay, so maybe that's not such an amazing observation, but I'm going to pursue it a bit further because it fits very nicely with a pet theory of mine...&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;A &lt;a href="http://en.wikipedia.org/wiki/Flowchart"&gt;Flowchart&lt;/a&gt; is worth a thousand Words.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Think back... in my case think way back...  When you were first introduced to Programming didn't somebody use a Flow Chart to illustrate what a Program is?  For some of you, especially those of you who are relatively young, perhaps not... but for old-timers I'll bet there's a scribbled Flow Chart somewhere back there in your past.&lt;/div&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/LampFlowchart.svg/180px-LampFlowchart.svg.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 180px; height: 246px;" border="0" alt="" /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why did we abandon Flow Charts and come to rely only on Words?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you've used any of the Graphically Oriented Programming Tools out there (like Lego Mindstorm's &lt;a href="http://www.lego.com/eng/education/mindstorms/home.asp?pagename=robolab"&gt;Robolab&lt;/a&gt;) then I'm sure that you know using Icons to program can become a bit tedious.  It's just easier to use words because you can type really fast.  I'll give you that... but it's also a lot easier to make mistakes with words, and it's often really hard to discern the structure of your program from that mass of words.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apparently I'm not the only one who thinks so... I you Google "&lt;a href="http://www.google.com/search?rlz=1C1GGLS_enUS291&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=code+to+flowchart"&gt;Code to Flowchart&lt;/a&gt;" you'll find an amazing number of tools that will parse your Code and produce (you guessed it) Flow Charts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here's the point of all this rambling...  I think that it's pretty useful to create a flowchart from code, but I think it's even more useful to create code from a flowchart.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From this point forward I'm going to transition from the generic "Flowchart" to the more specialized "Process Diagram"...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Process Diagrams are a great way to visualize the structure of (a certain class of) programs, and they're a much more effective programming tool than words.  A few symbols replace thousands of words, and those few symbols express the intent of the program far better than words ever could.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25178118-711997623792561607?l=thoughtfulprogrammer.blogspot.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://thoughtfulprogrammer.blogspot.com/feeds/711997623792561607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=25178118&amp;postID=711997623792561607" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/711997623792561607" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/25178118/posts/default/711997623792561607" /><link rel="alternate" type="text/html" href="http://thoughtfulprogrammer.blogspot.com/2008/10/cess-dia.html" title="cess Dia" /><author><name>John Reynolds</name><uri>http://www.blogger.com/profile/13852313153136272800</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16294191035180283464" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry></feed>
