Cohesive

A post by James Webber, criticised by

In his post James states:

“Since every component or service is decoupled from every other component or service it should be possible to arrange and re-arrange them in a Lego-style in a myriad of useful ways. Building out “business services” from some more fundamental set of services is how the books tell us to do it. In fact we could even do that quite easily with point-and-client BPM tools, ruling out such overheads as developers and change management along the way. Right?”

That’s a pretty good description of my understanding, although I’m not so naive about the developer bit and version control and dealing with sync between analyst and developer are clearly important.

“No. In fact absolutely wrong.” says James.  This is great :-) I love it when people get straight to the point and start trashing conventional wisdoms.  The important thing is why?

“…low cohesion is a by-product of this architecture to keep those services and databases general enough to be recomposed by the BPM toolkit. And we all know how successful that is: Not very.”

Oh crap.  All this time spent learning BPMN/BPEL/B…, using tools, following the trends, trying to figure out what this all means to me in my domain.  What haven’t they told me James?

“the secret is this: build your services to implement business processes.”

Bugger, I thought I was building business processes from services.  Faced with an endless loop my brain closed down yesterday.  Having slept on it, this blog posting is the start of my therapy.  Plus, a little voice kept shouting granularity.  I’ve got to get better so that I can stop hearing the voices.  James, help me

“talk to the business guys and understand their processes, their workflows [that's me, talking to myself...]. Help them to prioritise which of those processes or workflows are most important, and then build out a service that implements that process [that implements those services, I want to add]. Don’t forget to include the business-centric messaging (if you’re SOAP-y) or resources (if you’re Web-y) [hey, that's me too, web-y, but not like the Man from Atlantis] that the process uses to enable it to be consumed by other processes across the enterprise (or even more widely).”

James, I’m confused …

“If you’re confused about how to build such a service, it’s just an instance of MVC:”

So, you mean like Ruby on Rails, a framework that I managed to build something with.  That sounds great.  I can use my favourite framework, which has a restful architecture baked in, to build a service (a small lego brick) that captures a business process.  But heck, that endless loop is starting – isn’t the small-lego brick business process itself composed of smaller lego-bricks?  Erase that program quickly I need an abort routine.

GO.TIGHT

I’m thinking, the process in my new business process service, that doesn’t have to be loose does it?  Going tight is when I can stop the endless loop of greater granularity.  I could embed something like openWFEru in the RoR app to run it, and then provide the external resources that I need to compose it into my big lego-brick (even though I don’t know how to build a big lego brick of resources using tools, I’m thinking it could be just as quick using Ruby, but then I’m really spoiling the story ‘cos that makes me a software guy not a domain guy and that’s not helpful and get’s me back to where I started from, yes?  shit).

James, am I close to passing software architecture 101?

“It might sound like a pretty dumb idea that my business stakeholders are to become (inadvertent) IT architects…they are the authoritative source of truth for business processes – those same processes that we reflect in our services. So when a process changes or is retired in the business world, the business folks (inadvertently) govern the SOA world – we change our services to continually match the business-level processes.”

Perhaps not (on the 101), but I agree.  I’m a domain expert, I want to leverage all this fantastic loose resource stuff to make my life better.  But I need to know how IT is broadly going to do it.  It just that when I ask them they just don’t seem to know just now.  We can do web apps though … ;-)

Hey, I’m feeling a bit better now, but if you’re a software architect and you’re reading this [probably not] then drop me a comment and tell me where I’ve got my wires crossed (just like that ESB) [sorry, I didn't mean that].

Explore posts in the same categories: BPM / SOA

Tags: ,

You can comment below, or link to this permanent URL from your own site.

2 Comments on “Cohesive”

  1. Jim Webber Says:

    Hi Jason,

    You’re not so confused from what I can tell from this posting.

    Your service implements something useful from a business perspective. For example it might implement a bunch of processes around customer management (cohesive, loosely coupled) versus implementing a data-centric customer service (not very cohesive, but still loosely coupled).

    When it comes to implementation then MVC works well as a pattern because it decouples the outside world of services from your internal domain model. Rails is an OK framework for doing this if you’ve decided to expose your cohesive, loosely coupled service via a RESTful interface.

    Hope that helps a bit.

    Jim

  2. Jason Says:

    Jim

    Thanks for your reply. Yes, I think this posting and other comments have helped me clarify my thinking.

    There are, it would seem to me, to be two things – BPM ‘in the large’ and BPM ‘in the small’. John Mettraux covered this ground http://jmettraux.wordpress.com/2006/07/05/bpm-inside/.

    BPM inside is about using embedded engine, running domain processes (cohesive) and exposed through a WS or RESTful interface.

    BPM outside is about running an ‘enterprise’ engine, combining cross-domain process services to create a new process of value to the organisation (not cohesive?).

    Hope this helps business folks like me!


Comment: