Joe McKendrick wrote a post about CIO's and SOA. In the post he touch on a subject that is near and dear to me. Is the value proposition with SOA more slanted towards the agility it brings to the business or in reuse?
Architecting and coding for agility is nothing new. The principals behind it abstraction, loose coupling have been around for a while. Folks who have been in the OOP world or the EAI world know all about hiding the guts of the underlying implementation from the consumer. The better job you do at that the more agile your service, interface, object, message or whatever you want to call it, is. That's the technical side of agility, the other side is governance. Keeping the interfaces agile requires governance. That can get pretty difficult. The very benefit that the business tends to like about agile IT stuff can also make it very difficult to sustain.
The constant change associated with most businesses and the demand that places on the IT staff can make maintaining the agile infrastructure challenging to say the least. Without strong governance the agile interfaces quickly become very brittle. It is harder to design and code agile interfaces which means shortcuts tend to creep in as the business demands more change.
Reuse complicates the matter even more. Reuse requires picking the right level of granularity for the interfaces as well anticipating some degree of polymorphism across different domains of business. This generally requires a lot more effort during design time especially when moving from IT type services to more business oriented services. I have personally found this to be a significant challenge. It is challenging on two different levels, technical and business oriented.
The technical challenge lies in the both picking the right level of granularity for the services and developing reusable data structures to support this. I have generally found that the lower the granularity level is then more potential for reuse exist and the easier the design. You can always combine lower level services to move up the stack.
The business challenge is far more difficult in my opinion. Reuse especially across business domains requires a very good understanding of the business as well as a solid partnership with the business. This understanding and partnership is not at a high level but rather at a very detailed level for reuse design. Given the pace at which the business moves this can be very difficult to achieve.
I think keeping the interfaces agile and picking small battles for reuse makes some sense from a realism perspective. I have never been convinced completely that SOA would actually save money because of reuse. I do believe in the power of agile interfaces. No doubt that some folks will be successful with large scale reuse in the SOA space. I think for the masses however, achieving an agile infrastructure is a significant accomplishment that will pay dividends with some hard work of course.