Featured Posts

The New Economics of Technology Startups? I have recently been reading the book "Free: The Future of a Radical Price" by Chris Anderson.  Well I am not actually reading it as I find I do not have time for reading books any more.  These days...

Readmore

Here is my hammer. Show me your screw! Well I have been traveling out of the country a lot these past few weeks so its been a while since I posted.  I will try and do better in the future.  During my travels I had a lot of interesting discussions...

Readmore

Consideration For The Technical Implementation of an... I had a lot of questions from people after my last post on BPM and SOA about the layered SOA I proposed and whether it would be slow performance wise.  The answer I gave people was "It depends".  In...

Readmore

Why a Business Process Modeling (BPM) Approach to SOA... I was having a Twitter conversation with Brenda Michelson (@bmichelson) and Todd Biske (@toddbiske) about the tight coupling in peoples minds between BPM and SOA, and why I find that when people take a...

Readmore

Enterprise 2.0 Needs To Stop Being So Naive You know I really struggle to get excited about Enterprise 2.0.  Not because I don't think IT needs to undergo change, but because I feel that Enterprise 2.0 as we seem to be defining it, and covering...

Readmore

  • Prev
  • Next

Why a Business Process Modeling (BPM) Approach to SOA Usually Fails

Posted on : 03-09-2009 | By : Paul Michaud | In : Service Oriented Architecture (SOA), Software Design

Comments

I was having a Twitter conversation with Brenda Michelson (@bmichelson) and Todd Biske (@toddbiske) about the tight coupling in peoples minds between BPM and SOA, and why I find that when people take a BPM centric approach to SOA, it usually ends up not delivering the goods.  So today’s post is about how to properly layer your SOA to include BPM while still yielding all the flexibility and reuse that is the promise of a well done SOA.

For this discussion I will build on the terminology defined in the post entitled “Anatomy of a Service Oriented Architecture”.  I will also use 2 simplified application examples to illustrate some of the pitfalls.

So here is our base example.  Imagine that you need to build  a very simplified Point of Sale System.  It needs to be able to log people in, update customer records and perform a transaction, including updating inventory.  For the sake of argument, I will propose it should look something like this (not 100% accurate but best I could do in 20 minutes).  Sorry the pictures are a bit hard to read.  I need to change templates to get something wider.

Point Of Sale

Furthermore, I will contend that people following a BPM centric approach to SOA are usually likely to design it like this:

Point Of Sale-BPM

and that too often with SOA design we see something like this (which is really bad)

Point Of Sale-BAD

So lets look at these starting from the bottom one which, sad to say represents about 75+% of “SOA” implementations I tend to see.

Point of Sale – Badly Done Case:
This last example is what you get when people decide they need to be SOA, but frankly have no idea how to decompose a problem or do component based design.  It is also what you get when people decide SOA means you just slap a web service interface onto a monolithic legacy app so you can call it SOA to please senior management who have heard all the buzz, and decided they just have to have an SOA by next week to save cost, etc.  This approach buys the company absolutely nothing and in fact only slows down the performance of the existing system and certainly provides no flexibility and reuse at all.

Point of Sale BPM Centric Case:
In the BPM case we will have identified our main processes:

  1. Customer Lookups, etc
  2. Authenticating a User
  3. Processing a Transaction

We would then set about to design service interfaces which align to those and they would look something like this:

1. Customer Service:

1.1 Create Customer
1.2 Update Customer
1.3 Lookup Customer
2. Authentication:

2.1 Create User
2.1 Update User
2.3 Delete User
2.4 Login
3. Transaction:

3.1 Record Transaction
3.2 Void Transaction

Each of those service interfaces more often than not end up being tightly coupled to a back end database which exposes stored procedures which are also tightly aligned to those process services. Its basically a client server design behind the service interfaces, and while I drew them as 3 separate databases supporting each service,  more often then not I will see no decoupling under the covers and it will be one big database.
Now, in this case we have a better design (but still not good) which shows some process orientation and some componentization. This design will offer some reuse, albeit limited.  In addition this system will suffer from some data duplication (consider Paul Michaud as User and Paul Michaud as Customer.  This design would store the records twice for Paul Michaud) which is not desirable in a good SOA.

Point of Sale – Layered Case:
I will contend that this design is optimal (or at least as optimal as I could draw in 20 minutes).  It provides for the same level of BPM support,  but does not require any data duplication and allows for the maximum reuse.  I am not going to go into details on how one would come up with this design in this post but I will come back to that in another post soon.

To prove the point, lets now consider the need to create a second application to do simple contact management.  We would ideally like to reuse our SOA and layer the new application on top of what we already built.  I will contend that for this second application only the layered design would offer any reusable components for this second application.  I will propose the following simple design for the Contact Management Application using SOA.

Contact Management:

Contact Management Simple

Notice that we are using the party service not a Customer Service or anything else.  A contact may be a Company, Organization, Church, Personal friend, etc.  If we had only build Customer Services as in design 2 & 3, which is what the BPM approach would have identified we would not have had a foundation on which to build this second application (unless that second application was very similar to the first one).

Anyhow,  the point is that by focusing on the process we usually fail to identify the necessary Foundation Services or the Fundamental Data Objects on which the SOA should be operating.  I will elaborate on this further in a later post.

As always feel free to leave comments here or on Twitter.com (@techmusings).

  • Share/Bookmark
  • techmusings
    I agree with you re the BPM. The intent here is not to say that you should not do a BPM exercise as part of the SOA design process. You definitely need to do that. The problem is that most people stop there and end up making their design too process specific. You have to take the design process a bit beuond the BPM and look at foundational services and more importantly in my experience you need to identify the fundamental data subjects the architecture needs to deal with as the associated fundamental data objects (or types).

    As for the performance issue, the answer is it depends. Let me cross post the comment I made to a similar question on the original article on technologymusings.com.

    The answer is it depends. Keep in mind that this is a logical architecture at this point. While we may choose to deploy it in a physical realization that matches this with each component on a separate server and every call being through a network hop, etc, it it not necessary. Also, we have not indicated that each service interface needs to be web services (which is slower, but not slow by most people standards (sub 1ms per call typically unless the interface takes big XML data objects in the call)). That said, you can do this message based and have very low latency per hop/call (as low as 3 microseconds with the latest high speed messaging). Either way, a single call to a traditional on disk database is going to swamp the Web Services and the layered network calls. If you want to be low latency the whole design end to end needs to account for that goal. You may put critical service components on a single box to minimize network hops. You may use a binary service interface for those high performance calls, etc. There are many ways to skin this. The key is to remember that SOA does not require statelessnes, SOAP or REST. SOA applies independent of the technologies we choose to use to implement it.

    But your right if you have too many layers and you don't choose your technology implementation well, you could slow it down. But it would take a lot to be noticeable vs the database calls or the internet hop costs themselves.

    Hope that helps
  • venkumar99
    Paul,
    I don't think this is an issue of BPM approach having failed the SOA implementation. All BPM is supposed to identify a process. The actual modelling of as a contact or a customer or a user is part of your SOA and how you define them. That is more an abstraction ant really part of a business process.

    I agree that the design you came up with makes more sense. Lot is also going to depend on how the company goes about its BPM/SOA journey. If one dept of group implements SOA without understanding the business context across other functional areas, you will end up a architecture similar to what you mentioned.
blog comments powered by Disqus