<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>John Reynolds&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/" />
<modified>2008-04-23T03:34:34Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2008, johnreynolds</copyright>
<entry>
<title>The Next Generation In Workflow?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/04/the_next_genera.html" />
<modified>2008-04-23T03:34:34Z</modified>
<issued>2008-04-23T03:34:25Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9591</id>
<created>2008-04-23T03:34:25Z</created>
<summary type="text/plain">Tom Baeyens, of JBoss jBPM fame, published a great overview of BPM&apos;s past and possible future in his article: Process Component Models: The Next Generation In Workflow ? over at InfoQ.

Check it out!

</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[Tom Baeyens, of <a href="http://www.jboss.org/jbossjbpm/">JBoss jBPM</a> fame, published a great overview of BPM's past and possible future in his article: <a href="http://www.infoq.com/articles/process-component-models">Process Component Models: The Next Generation In Workflow ?</a> over at InfoQ.

Check it out!
]]>

</content>
</entry>
<entry>
<title>Object Only Programming  (and Modelling) Considered Silly</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/04/object_only_pro_1.html" />
<modified>2008-04-18T09:30:34Z</modified>
<issued>2008-04-18T09:30:19Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9560</id>
<created>2008-04-18T09:30:19Z</created>
<summary type="text/plain">Every so often I come across a blog entry that makes my own attempts to put my thoughts in writing seem pathetically inadequate. Stevey&apos;s Blog Rant: Execution in the Kingdom of Nouns is one such entry.</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>Every so often I come across a blog entry that makes <a href="http://thoughtfulprogrammer.blogspot.com/">my own attempts</a> to put my thoughts in writing seem pathetically inadequate. Stevey's Blog Rant: <a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html">Execution in the Kingdom of Nouns</a> is one such entry.</p>

<p>Stevey's position is that Object Only Languages are silly... at least that's how I sum up his blog.</p>

<p>I couldn't agree more, and I couldn't have said it better... I've tried several times:</p>

<p>My first attempt to express my concerns about "Objects Only" was back in in November of 2003: <a href="http://weblogs.java.net/blog/johnreynolds/archive/2003/11/uml_and_process.html">UML and Process Definition for Java - JSR 207</a>. Looking back, I realize that I should have just said "Object Only Modelling is a dumb idea".</p>

<p>For the record... "Process Only Modelling" is also a dumb idea. To borrow Stevey's metaphor, a Kingdom of Verbs is just as silly as a Kingdom of Nouns. Let's all move to the Kingdom of Sentences :-)</p>

<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com">Thoughtful Programmer</a>)</span>
]]>

</content>
</entry>
<entry>
<title>Net Beans (6.1) Page Flows</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/04/net_beans_61_pa.html" />
<modified>2008-04-14T19:19:31Z</modified>
<issued>2008-04-14T19:19:23Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9533</id>
<created>2008-04-14T19:19:23Z</created>
<summary type="text/plain">NetBeans (6.1)  Page Flows may be a small step towards Model Driven development.</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community: NetBeans</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[NetBeans (6.1) Page Flows may be a small step towards Model Driven development: <a href="http://thoughtfulprogrammer.blogspot.com/2008/04/net-beans-61-page-flows.html">Read more here</a>.]]>

</content>
</entry>
<entry>
<title>Iterative Development</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/04/iterative_devel.html" />
<modified>2008-04-10T23:43:12Z</modified>
<issued>2008-04-10T23:43:05Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9514</id>
<created>2008-04-10T23:43:05Z</created>
<summary type="text/plain">Iterative Development is by far the best way to implement your Managed Business Process... unless your definition of &quot;Iterative Development&quot; is different from mine ;-)</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[I've had a surprisingly difficult time conveying my own definition of "Iterative Development" in the context of BPM development. If you are interested in such things, <a href="http://thoughtfulprogrammer.blogspot.com/2008/04/tips-for-business-process-developer.html">please take a look at my other blog</a> for an explanation via analogy....
]]>

</content>
</entry>
<entry>
<title>Getting Tasks to the Right Users in a Managed Business Process</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/03/getting_tasks_t.html" />
<modified>2008-03-08T10:56:32Z</modified>
<issued>2008-03-08T10:56:25Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9335</id>
<created>2008-03-08T10:56:25Z</created>
<summary type="text/plain">Still don&apos;t quite understand what&apos;s different between &quot;normal&quot; programming and developing managed business processes?
Perhaps this blog on Task Routing in a Managed Process will help you to understand the issues that Business Process Developers have to deal with.</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[Still don't quite understand what's different between "normal" programming and developing managed business processes?
<p>
Perhaps this blog on <a href="http://thoughtfulprogrammer.blogspot.com/2008/03/tips-for-business-process-developer.html">Task Routing in a Managed Process</a>  will help you to understand the issues that Business Process Developers have to deal with.]]>

</content>
</entry>
<entry>
<title>Drive the Path (process and data flow)</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2008/02/drive_the_path_1.html" />
<modified>2008-02-09T02:15:08Z</modified>
<issued>2008-02-09T02:14:54Z</issued>
<id>tag:weblogs.java.net,2008:/blog/johnreynolds/105.9167</id>
<created>2008-02-09T02:14:54Z</created>
<summary type="text/plain">Any tools can be used wrong, and I believe that&apos;s the reason many developers hate BPM. They just don&apos;t know how the BPM tools should be used... and I&apos;d love to rectify that situation.
</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[Any tools can be used wrong, and I believe that's the reason <a href="http://thoughtfulprogrammer.blogspot.com/2007/10/why-do-java-developers-hate-bpm.html">many developers hate BPM</a>. They just don't know how the BPM tools should be used... and I'd love to rectify that situation.

If you grok <a href="http://weblogs.java.net/blog/johnreynolds/archive/2004/01/pd4j_is_process.html">Process Driven Development</a> you will love BPM. If you don't, then you'll try to use your BPM tools like a traditional application development environment and you will end up with a mess.

It's all about the Process...
Before you begin development, discover the answers to these questions in this order:
<ol><li>What are the steps? </li><li>What are the possible paths through the the steps? </li><li>What data controls the path through the process? </li><li>What data flows through the process.</li></ol><p>When you know these answers, then start your development efforts with the process diagram and use that to drive your development path in this order:</p><ol><li>Model the process flow. </li><li>Define the data that controls the process flow.</li><li>Build "just enough" user interface to allow you manipulate the data necessary to step through all the process paths.</li></ol><p>It's absolutely critical that you do these steps in this order at the outset of your project... and once you are done you've got to do the following:</p><blockquote></blockquote><blockquote></blockquote><blockquote>Drive through ALL of the process paths with your Business Sponsors.</blockquote><p>If you follow these steps, then you will expose the flaws in the process flow long before you've wasted any time coding up a fancy UI that is WRONG. </p><p>The process should drive the UI, but often our haste to show a sexy screen to our Business Sponsors the UI ends up locking us into a bad process model.   We've all made this mistake, and we know from experience that it screws things up for the rest of the project's life.</p><p>Everyone focuses on UI.  It's the most visible aspect of a project and the easiest to have an opionion about... But in truth the best UI in the world won't make the wrong process right.</p><p>Yes indeed... the UI development tools in some BPM suites often require super-human efforts to build the sexy AJAX powered screens that are all the rage, and often you'll end up developing your fanciest UIs with supplemental tools.  But that's not why some BPM projects fail...</p><p>BPM project's fail when the project team doesn't follow the steps of Process Driven Design that I've laid out in this blog entry.  If you've had problems with BPM... try it my way next time.  I think you'll be pleasantly surprised if you do.</p><p> </p>
<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com">Thoughtful Programmer</a>)</span>]]>

</content>
</entry>
<entry>
<title>My OLPC arrived!</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/12/my_olpc_arrived.html" />
<modified>2008-01-01T03:53:57Z</modified>
<issued>2008-01-01T03:53:49Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8905</id>
<created>2008-01-01T03:53:49Z</created>
<summary type="text/plain">My &quot;Give One, Get One&quot; OLPC arrived, and it&apos;s a blast.  Check out the snapshots at my other blog.
</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[My "Give One, Get One" OLPC arrived, and it's a blast.  Check out the <a href="http://thoughtfulprogrammer.blogspot.com/2007/12/one-laptop-per-grown-up-child.html">snapshots</a> at my other blog.
]]>

</content>
</entry>
<entry>
<title>Give One, Get One</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/11/give_one_get_on_1.html" />
<modified>2007-11-26T23:48:08Z</modified>
<issued>2007-11-26T23:47:59Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8714</id>
<created>2007-11-26T23:47:59Z</created>
<summary type="text/plain">It&apos;s not too late to Give One and Get One...</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>It's not too late to <a href="http://www.laptopgiving.org/en/index.php">Give One and Get One</a>...</p>

<p>The One Laptop Per Child initiative may not be perfect, but why not support them anyway?</p>

<p>I ordered mine today:</p>

<p><strong>Confirmation</strong><br />
Thank you for participating in Give One Get One. Your donation will bring education and enlightenment to children of the developing world, and, in recognition of your gift, you will be receiving an XO laptop for the child in your life as well. If you have any questions or problems, please contact One Laptop Per Child at service@laptopgiving.org. Should your employer wish to match your donation, we are a 501(c)(3) organization and our EIN# is 20-5471780. Thanks again, and welcome to the One Laptop Per Child community! </p>

<p>Merci de votre participation au programme Offrez-en un, recevez-en un ! Votre don servira à l'instruction d'un enfant d'un pays en voie de développement ainsi qu’à son enrichissement personnel. En remerciement, vous recevrez un portable XO pour votre enfant. Pour toute question ou problème, veuillez contacter Un portable par enfant (OLPC) à service@laptopgiving.org. Si votre employeur souhaite compenser votre don, sachez que nous sommes une organisation 501(c)(3) et que notre numéro d’identification d’employeur (EIN) est le 20-5471780. Merci encore et bienvenue dans la communauté OLPC ! </p>

<p>Gracias por participar en Dé uno, reciba uno. Su donación ofrecerá un acceso a la educación y al conocimiento a niños del mundo en desarrollo, y, en reconocimiento a su regalo, Ud. recibirá otro portátil XO a cambio para el niño en su vida. Para cualquier pregunta o inquietud, favor de comunicarse con Un portátil para cada niño (One Laptop Per Child) a service@laptopgiving.org. En el caso de que su empleador deseara igualar su donación, somos una organización 501(c)(3) y nuestro número de EIN es 20-5471780. Gracias nuevamente, y ¡bienvenido a la comunidad Un portátil para cada niño! <br />
</p>]]>

</content>
</entry>
<entry>
<title>The BPM Elevator Speech</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/11/the_bpm_elevato_1.html" />
<modified>2007-11-08T03:05:26Z</modified>
<issued>2007-11-08T03:05:06Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8600</id>
<created>2007-11-08T03:05:06Z</created>
<summary type="text/plain">A few years ago I posted a short blog entry &quot;The SOA Elevator Speech&quot; to try to distill SOA into talking points that you might be able to cover on one elevator ride. With that posting in mind, here&apos;s my attempt at explaining BPM as concisely as I can...
</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>A few years ago I posted a short blog entry "<a href="http://weblogs.java.net/blog/johnreynolds/archive/2005/01/the_soa_elevato.html">The SOA Elevator Speech</a>" to try to distill SOA into talking points that you might be able to cover on one elevator ride. With that posting in mind, here's my attempt at explaining BPM as concisely as I can...</p>

<p><br />
<ul><li>BPM stands for "<strong>B</strong>usiness <strong>P</strong>rocess <strong>M</strong>anagement". You will find some folks who say that the "M" stands for <strong>M</strong>odelling, and a few others who say that the "M" stands for <strong>M</strong>onitoring. In my opinion it really stands for all three so we might as well call it BPM<sup>3</sup>.</li><li>BPM systems deal with processes that include both <a href="http://thoughtfulprogrammer.blogspot.com/2006/11/people-powered-service-providers.html">tasks that Humans perform</a> and Automated tasks.</li><li>BPM systems execute Process Definitions. Process Definitions are usually derived from Process Diagrams... for example a <a href="http://www.ibm.com/developerworks/webservices/library/specification/ws-bpel4people/">BPEL (for people)</a> Process Definition can be derived from a <a href="http://www.bpmn.org/">BPMN</a> Process Diagram. There are many different graphical process notations and process definition languages, but the goals are generally the same.</li><li>BPM systems provide a <a href="http://thoughtfulprogrammer.blogspot.com/2006/11/era-of-process-centric-design.html">Process Centric</a> view of the code base. Rather than focusing on object hierarchies, the focus is on the relationship of the components in the context of a specific business process. This feature comes in particularly useful when debugging a process as well as when the need arises to modify a process.</li><li>BPM tools generally have a Business Relevant focus rather than a Programmer Relevant focus. For example, a typical programming suite might include a profiler for analysing the execution efficiency of code... a BPM suite is more likely to include a profiler for analysing the efficiency of a process (based on historical or simulated metrics).</li><li>The goal of a BPM system is to enable <a href="http://en.wikipedia.org/wiki/W._Edwards_Deming">Continuous Process Improvement</a>. Analysis of existing process behavior combined with simulation of potential process enhancements can be used to identify and improve the business process.</li><li>BPM benefits from SOA, but Process Tasks are not necessarilly reusable services. Many tasks in a Business Process are not reusable in other processes, and <a href="http://blogs.msdn.com/nickmalik/archive/2007/07/02/bottom-up-soa-is-harmful-and-should-be-discouraged.aspx">many SOA services do not correspond to Process Tasks</a>.</li></ul><p>That's already too much material to cover on one elevator ride... I'd better give it a rest for now or you're likely to take the stairs the next time you see me on an elevator :-)</p></p>

<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com/2007/11/bpm-elevator-speech.html">Thoughtful Programmer</a>)</span>
]]>

</content>
</entry>
<entry>
<title>Monolingual web toolkits: Phobos vs. GWT</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/10/monolingual_web.html" />
<modified>2007-10-17T02:33:52Z</modified>
<issued>2007-10-17T02:29:43Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8437</id>
<created>2007-10-17T02:29:43Z</created>
<summary type="text/plain">The JVM is well on its way to becoming a multi-lingual environment with support for Java, Javascript, JRuby, Groovy, etc. but I have to admit harboring concerns about polyglot programming within a single project.</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>The JVM is well on its way to becoming a <a id="chy4" title="multi-lingual environment" href="http://mail.openjdk.java.net/pipermail/announce/2007-October/000016.html">multi-lingual environment</a> with support for Java, Javascript, JRuby, Groovy, etc. but I have to admit harboring concerns <a id="uhcd" title="concerns about polyglot programmng" href="http://www.theserverside.com/news/thread.tss?thread_id=47184">about polyglot programming</a> within a single project. If at all possible, I prefer to use one language per project, but with browser-based applications that's been very tough to do. I've usually ended up with Java on the server side and Javascript on the client.</p><p></p><p>Fortunately, I can now dump either one language or the other... If I want to ditch Java I can pledge my allegiance to the <a id="u81s" title="GlassFish Project Phobos" href="https://phobos.dev.java.net/">GlassFish Project Phobos</a>. If I want to ditch Javascript I can pledge my allegiance to the <a id="m3xe" title="Google Web Toolkit" href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT). </p><p></p><p>Phobos looks really, really neat... you should really check out their <a id="ddw:" title="screencast" href="https://phobos.dev.java.net/screencasts/Phobos/Phobos.html">screencast</a>... but I have not had the bandwidth to even play with it. GWT also looks really neat... some of my colleagues at work have published their favorable <a id="ub79" title="experiences with GWT versus Dojo" href="http://googlewebtoolkit.blogspot.com/2007/10/lombardi-blueprint-built-with-gwt.html">experiences with GWT versus Dojo</a>, and it certainly looks compelling... but once again I haven't even played with it yet.</p><p></p><p>Is it really worthwhile to use a monolingual tool? I think it is, particularly when you are trying to learn how to program. Once you've mastered one programming language it's fairly easy to pick up another, but mastering two (or more) at once seems to me like a bad idea.</p><p></p><p>As I might have mentioned before, I'm interested in teaching "normal" people how to program. Back in the good old days before that darn-old Internet things were pretty simple... I remember teaching a neighbor "enough" Visual Basic to "get by" in a few evenings. Learning "enough" to build a browser based application is dreadful by comparison... </p><p></p><p>I am thinking that Phobos might change that... Javascript seems simple enough for anyone to <a id="t0h5" title="grok" href="http://wordnet.princeton.edu/perl/webwn?s=grok">grok</a>... but maybe I am kidding myself. Even Javascript has a lot of <a id="yw.s" title="cruft" href="http://patricklogan.blogspot.com/2007/10/simplified-javascript-cruft-reduced.html">cruft</a>.</p><p></p><p>On the other hand, GWT does liberate Java programmers from all of those nasty browser inconsistencies. For those who've mastered Java it seems like a natural... but Java seems like a poor choice for a first language to teach someone.</p><p></p><p>What do you think? Teach them Java or teach them Javascript?</p>
<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com/2007/10/monolingual-toolkits-phobos-vs.html">Thoughtful Programmer</a>)</span>
]]>

</content>
</entry>
<entry>
<title>&quot;We don&apos;t see the need for BPM&quot;</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/10/we_dont_see_the.html" />
<modified>2007-10-13T22:58:29Z</modified>
<issued>2007-10-12T01:04:12Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8419</id>
<created>2007-10-12T01:04:12Z</created>
<summary type="text/plain">My recent blog entry &quot;Java Developers Hate BPM&quot; was intended to stir up some folks and to generate a good discussion. It was successful... I got a lot of very good and honest feedback (a.k.a. &quot;hate mail&quot;). </summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[My recent blog entry "<a id="gt.r" title="Really!" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/10/why_do_java_dev_1.html">Java Developers Hate BPM</a>" was intended to stir up some folks and to generate a good discussion. It was successful... I got a lot of very good and honest feedback <span style="font-size:78%;">(a.k.a. "hate mail")</span>. <p></p><p></p><p>Several folks said "We don't see the need for BPM tools"... and I would like to address that in this blog entry.</p><p></p><p>I'm really not surprised that the average Java developer doesn't see a need for BPM... In fact I'm not surprised that the average worker in any industry doesn't see the need for BPM.</p><p></p><p>All of us who work for a living participate in business processes. All of us who interact with businesses participate in business processes. </p><p></p><p>Almost of us participate in business processes. We don't think about it much because we generally don't care what the full process is... We generally only care about the tasks that we have to perform within any process.</p><p></p><p>For example: When you apply for a loan you are a participant in a "Loan Origination Process". In general you really don't care about all of the steps of the process. You don't care about all of the tasks that the lender has to perform. You only care about the process step where you fill out the loan application and the process step where you respond to the lender's decision.</p><p></p><p>When you develop software you are a participant in a "Software Development Process". Speaking for myself, when I am working in "programmer mode" I usually don't care about all of the steps of the process. I only care about understanding the requirements, writing the code, and fixing any bugs that QA finds.</p><p></p><p>My Project Manger (PM) cares about many more steps of the software development process than I do. Project Managers have to coordinate the programmer tasks and those of everyone else on the project. Most of the PMs that I've met don't think of their projects as instances of the software development process... They tend to view their projects as schedules, which explains why those lovely Gant charts in Microsoft Project are pretty much all that they need in terms of tool support.</p><p></p><p>It's only when you get to a much higher level in your organization, perhaps to the VP of Development, that you find someone who might really worry about the whole Software Development Process. If your organization is large enough, the VP might be responsible for several projects that are running at the same time, with each project at a different point in the process.</p><p></p><p>As long as all of your company's projects are completed on time and under budget, your VP is probably going to leave your Software Development Process (SDP) alone. For some strange reason, all of the VPs that I have worked for kept tweaking their SDPs.</p><p></p><p>Development VPs mess with their SDPs to try to lower costs, to have more predictable schedules, and to just generally drive their employees crazy. They want to make more money. Meddlesome Development VPs like to find problems in the process, "improve" the process, and then do it all over again.</p><p></p><p>Your company has lots and lots of business processes besides your Software Development Process. Some are really mundane, some our critical to your company's bottom line.</p><p>All of your Corporate Officers are really interested in managing all of those business processes. Inefficient processes cost more, both in terms of expense and in terms of lost revenue, than efficient processes.</p><p><h3>Managing a process...</h3></p><p>The first step in managing a process is to know what the process actually is. This includes the steps that are done by people and the steps that are done by machines. I once found it necessary to gather a dozen people in a room to find out what everyone thought the process was, and then later discovered the process wasn't at all what they thought it was. Big companies like to spend lots of money to diagram their processes... which they then file away for five years until they do it again.</p><p></p><p>The second step in managing a process is to gather metrics... How long (on average) does it take for each step of the process to take? How often are steps repeated (presumably due to errors)?</p><p></p><p>The third step and fourth steps in managing a process are to analyze and actively manage the process. Use the metrics that you've gathered to analyze process performance, develop a better process, try it out and start all over again. That's Continuous Process Improvement.</p><p></p><p>All good BPM suites provide infrastructure support for all the steps needed to manage processes... </p><h3>First: Know the process</h3><p></p><p>At the heart of all BPM suites is a process engine that executes process definitions. These definitions are usually represented graphically using <a href="http://www.bpmn.org/">BPMN</a> notation. Process diagrams are usually generated in conjunction with the business people who own the process... Please note that it's much more important that the business folks understand how to "read" the process diagram than it is for them to be able to draw the diagram... The process engine is going to execute the diagram, so if it's wrong the process will be wrong.</p><p></p><p>I like to say that processes are composed of Human Powered Services and Autonomous Services... Most BPM suites provide tools that help you build the <a href="http://thoughtfulprogrammer.blogspot.com/2007/08/anatomy-of-human-powered-web-services.html">Human Powered Services</a>. These tools are basically form designers, and they're good for doing many business-task-oriented user interfaces, but they aren't meant to be used for designing "filthy rich" client interfaces... All of the good BPM suites provide interfaces that allow you to hook in virtually any client that you wish to construct. If you want a Swing application to perform a task, then you can write a Swing application and hook it in. If you want to use Netbeans or Eclipse to perform a task, you can do that too.</p><p></p><p>BPM is not about replacing all of the applications that you use. It's about coordinating the use of those applications to perform a process.</p><p></p><p>But back to knowing what the process is.... You know what the process is because you can always see it. The process definition is not scattered across multiple applications and background tasks. It's contained in one precise definition.</p><p></p><h3>Second: Gather metrics</h3><p></p><p>Since the process engine is managing the process, the process engine knows when each task is started and ended. The process engine knows who performs each task. This makes it incredibly easy to instrument a process.</p><p></p><h3>Third: Analyze the process</h3><p></p><p>All good BPM suites provide tools for analyzing all of those nifty metrics that you've gathered. The really good suites even let you use your historical data to simulate how a proposed process change would have performed in the past.</p><p></p><h3>Fourth: Modify the process</h3><p></p><p>With that analysis in hand, you can now go back and modify your process... This is really easy because, as you may remember, the process definition is in a single place.</p><p></p><p>I cannot emphasize how useful it is to have that process definition driving everything else. In essence, you have a process-centric view of your code base. In my pre-BPM days I would join a project and have to spend weeks to track down the code that was responsible for some specific process behavior. With a BPM tool, you can always start at the process diagram and "drill down" to the code you need to change.</p><p></p><h2>But can't I just put all these features together myself?</h2><p>Of course you could. What do you think all the BPM vendors did?</p><p></p><p>Wrong question... Will a client pay you to put all of these features together AND pay you to develop a process on top of that?</p><p></p><p>The optimist in me says: "Why of course they will!"</p><p>The realist in me says: "Why would they?"</p><p></p><h2>Sounds boring... Why shouldn't I just ignore BPM?</h2><p>There's no reason to pay any attention to BPM as long as you don't make your living building process-centric applications. </p><p></p><p>If the applications that you write only involve one participant, you'll never need BPM... but I encourage you take a good hard look at those applications because they may actually function better if they are process-aware.</p><p></p><p>For example... Every issue-tracking system implements multi-participant processes. Sadly the processes are usually hard-coded in these tools, but more and more you'll find that issue tracking tools (<a id="sa1e" title="like Jira" href="http://www.atlassian.com/software/jira/">like Jira</a> ) are providing web-service interfaces to interact better with the other tools that are used in a wider process.</p><p></p><p>Another example... Your favorite IDE. More and more we are seeing process oriented functionality creeping into these tools. Why not leverage an existing process engine (like <a id="d77o" title="Apache ODE" href="http://ode.apache.org/">Apache ODE</a> ) and make those processes more flexible?</p><p></p><h3>Parting thought...</h3><p>From the very beginning, the core of most programming has been Process Definitions and Data Structures. BPM is our latest reminder of that.</p><p>
<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com">Thoughtful Programmer</a>)</span>]]>

</content>
</entry>
<entry>
<title>Why do Java developers hate BPM?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/10/why_do_java_dev_1.html" />
<modified>2007-11-08T03:09:26Z</modified>
<issued>2007-10-10T12:40:33Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8406</id>
<created>2007-10-10T12:40:33Z</created>
<summary type="text/plain">I work on a lot of BPM projects, and I work with a lot of other folks who work on a lot of BPM projects, and we have all encountered resistance from traditional Java developers.</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>Java developers hate <a href="http://thoughtfulprogrammer.blogspot.com/2006/10/business-process-musings.html">BPM</a>.</p>

<p>The preceding sentence is (of course) intentionally tailored to be controversial. People tend to read controversial blogs, and I'd like you to read this one. Now that I have hopefully grabbed your attention I'll tone it down a bit...</p>

<p><span style="font-size:78%;">A lot of</span> Java developers hate <span style="font-size:78%;">having to use</span> BPM <span style="font-size:78%;">tools instead of the object oriented tools that they are comfortable with.</span><br />
I work on a lot of <a href="http://weblogs.java.net/blog/johnreynolds/archive/2007/11/the_bpm_elevato_1.html">BPM</a> projects, and I work with a lot of other folks who work on a lot of BPM projects, and we have all encountered resistance from traditional Java developers. Java developers (in general) would rather use frameworks like Struts and Spring than be saddled with the constraints of a BPM suite.</p>

<p>Java frameworks like Struts and Spring are in the background... they provide just enough support to "set your creativity free" so that you can be a real programmer. You can build almost anything with Spring or Struts (if you've already mastered the intricacies of Java). They are light-weight, they're agile, and they look sexy on your resume.</p>

<p>BPM suites are in-your-face. They rob you of your creativity. They dictate to you how you will develop your application.</p>

<p>BPM suites make programming boring. They force you to use point-and-click and drag-and-drop tools to design your process diagrams, data models and forms. What's worse, they actually encourage Business People to model processes and design forms on their own... Fortunately most Business People are too intimidated to use these tools, but it does open the door for them to look over our shoulders and meddle in our affairs.</p>

<p>That certainly doesn't sound like something that real programmers would like, does it?</p>

<p>I'm not being subtle, am I?</p>

<p>BPM suites are a threat to traditional Java programmers. These suites are far from perfect, but even in their current state we can see where things are heading. The days of the Java Guru as indispensable are fading... We've used Java to build tools that make knowing Java itself less important, and that's opened up competition for us from folks who didn't spend years learning Java.</p>

<p>We're victims of our own success... and that's going to cost us.</p>

<p>That's why Java developers hate BPM.</p>

<hr>
<span style="font-size:85%;">(cross-posted at <a title="John Reynolds" href="http://thoughtfulprogrammer.blogspot.com">Thoughtful Programmer</a>)</span>]]>

</content>
</entry>
<entry>
<title>The Anatomy of a Human Powered (web) Service</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/08/the_anatomy_of.html" />
<modified>2007-08-22T04:10:37Z</modified>
<issued>2007-08-22T04:10:28Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.8075</id>
<created>2007-08-22T04:10:28Z</created>
<summary type="text/plain">Human Powered Services (HPS) are the piece of the puzzle that meshes BPM with SOA... With HPS in the mix choreographing Human and Autonomous services is seamless, without HPS in the mix choreographing Human and Autonomous services is a pain.

</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community: Java Web Services and XML</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p>Human Powered Services (HPS) are the piece of the puzzle that meshes BPM with SOA... With HPS in the mix choreographing Human and Autonomous services is seamless, without HPS in the mix choreographing Human and Autonomous services is a pain.</p>

<p>Continue reading at <a href="http://thoughtfulprogrammer.blogspot.com/2007/08/anatomy-of-human-powered-web-services.html">my other blog...</a></p>]]>

</content>
</entry>
<entry>
<title>Making life simpler: the Java EE Operating System</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/06/making_life_sim_1.html" />
<modified>2007-06-27T01:27:03Z</modified>
<issued>2007-06-27T00:28:23Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.7743</id>
<created>2007-06-27T00:28:23Z</created>
<summary type="text/plain">Earlier this year I suggested that the multitude of Java EE implementations is a bad thing...  but now I think I didn&apos;t go far enough... Why not just build an OS that is a Java EE app-server?</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[<p><span style="font-size:130%;"><br />
One of the biggest challenge for companies with Java EE based products is dealing with installation issues...<br />
</span><br />
<span style="font-size:130%;"><br />
Granted, Enterprise Class applications are much more involved than the "shrink wrapped" applications that we install on our PCs... but it <em>should</em> be possible for a company to package up a Java EE application so that it can be reliably installed on any Java app-server without a lot of headaches. Sadly, that does not seem to be the case... each app-server is a little different, and all those little differences result in a lot of support costs.<br />
</span><br />
<span style="font-size:130%;"><br />
One popular solution to the installation problem is to embed a Java app-server in the product itself... Instead of installing an application on a pre-existing app-server, the product installer includes an app-server. This avoids all the hassles of dealing with an "unknown" app server... but you must admit that this solution is kind of bizarre in some respects: Installing an app-server per application has got to be in some way an immorally over-engineered solution... it's almost like shipping an application with its own Operating System.<br />
</span><br />
<span style="font-size:130%;"><br />
I suppose that a scaled-down embeddable app-server might be a good idea, but a better idea might be to abandon the current app-server-installed-on-your-OS model and go all the way to a Java Enterprise Operating System.<br />
</span><br />
<span style="font-size:130%;"><br />
Earlier this year I suggested that <a href="http://weblogs.java.net/blog/johnreynolds/archive/2007/04/java_ee_should.html">the multitude of Java EE implementations is a bad thing</a>...  but now I think I didn't go far enough... Why not just build an OS that is a Java EE app-server?</p>This may seem reminiscent of claims that a <a href="http://world.std.com/~swmcd/steven/rants/browser.html">Web Browser is part of the Operating System</a>... but hear me out.<br />
</span><br />
<span style="font-size:130%;"><br />
The truth is that write once run anywhere isn't a very important consideration for Enterprise Applications. In most companies, when a new Enterprise Application is deployed, a new server (or pair of servers) is purchased to host the new application. Why not purchase that server with a Java Enterprise OS pre-installed instead of going through the hassle of installing an app-server on top of an OS?<br />
</span><br />
<span style="font-size:130%;"><br />
Back in the 1980's, before Windows became dominant, there were many competing GUI environments... and whenever you wrote a GUI application you had to make a bet. You had to bet that the customers who wanted your application would also want that GUI environment.<br />
</span><br />
<span style="font-size:130%;"><br />
The dominance of Windows "solved" that problem... The GUI environment "became" the OS. Product developers could count on the OS to provide the GUI features that were needed, and the number of quality GUI product offerings soared.<br />
</span><br />
<span style="font-size:130%;"><br />
Bring that same concept forward to today and assume that someone builds an Operating System that is tailored to provide the services necessary to host a Java Enterprise Application... The Java app-server "becomes" the OS. Something like Red Hat Linux plus JBoss, or Solaris plus Glass Fish, but tailored to throw out everything extraneous and polished to really "feel" like Java Enterprise Applications are native applications.<br />
</span><br />
<span style="font-size:130%;"><br />
In spirit, the idea of a Java Enterprise Operating System (JEOS) is a close relative of <a href="https://jdos.dev.java.net/">JDOS</a>... the original intent was to build a "pure Java" environment for executing Java applications. The main difference is that the focus would be on supporting web-based applications and services, with little to no interest in supporting desktop applications.<br />
</span><br />
<span style="font-size:130%;"><br />
Of course, a JEOS won't solve any installation problems unless it captures market share (on servers) approaching the marker share of Windows on PCs. I'll admit that's not much of a likelihood... but who knows? If JEOS reduced the installation and maintenance costs associated with Enterprise applications, it might just catch on.<br />
</span><br />
<span style="font-size:130%;"><br />
The moral of this blog entry, if there is one, is that we don't need new technology to simplify the installation and maintenance (care and feeding) of Enterprise software.  What we need are better combinations of existing technologies... better packaging of existing features can take mundane products and make them shine (compare a Mac to a PC if you doubt this).  There is a beauty to a finely tailored product that is self-evident, and there's no technical reason to keep us from tailoring a beutiful platform for hosting Java EE applications.<br />
</span><br />
<span style="font-size:80%;"><br />
(For more of my ramblings... check out <a href="http://thoughtfulprogrammer.blogspot.com/">my other blog</a>)<br />
</span></p>]]>

</content>
</entry>
<entry>
<title>Recyling old rants... Getter and Setter Methods</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/johnreynolds/archive/2007/06/recyling_old_ra.html" />
<modified>2007-06-24T00:12:25Z</modified>
<issued>2007-06-24T00:09:36Z</issued>
<id>tag:weblogs.java.net,2007:/blog/johnreynolds/105.7721</id>
<created>2007-06-24T00:09:36Z</created>
<summary type="text/plain">I am far from the first person to rant about &quot;Getter and Setter&quot; methods. (some have even said they are evil).. but it&apos;s been awhile since anyone has posted a new diatribe on the subject, so what the heck... Please check out my other blog:

How not to teach programming: Getter and Setter Methods</summary>
<author>
<name>johnreynolds</name>

<email>john.reynolds@secondpath.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/johnreynolds/">
<![CDATA[I am far from the first person to rant about "<a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters">Getter and Setter</a>" methods. (<a href="http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html">some have even said they are evil</a>).. but it's been awhile since anyone has posted a new diatribe on the subject, so what the heck... Please check out my other blog:

<a href="http://thoughtfulprogrammer.blogspot.com/">How not to teach programming: Getter and Setter Methods</a>]]>

</content>
</entry>

</feed>