Joe McKendrick asked a really good question in a recent blog that I'd like to tackle: how to build SOA when executives don't care.
A little background: Joe McKendrick and I have been having an interesting discussion about SOA development styles: top-down, bottom-up, and middle-out. In his most recent post, Joe titled (rather humorously) my analogies for the different styles as "Service-Oriented Anarchy" (bottom up) and "Soviet-Oriented Architecture" (top down). Gotta love that.
I had drawn the analogy that bottom up was very "local focused" and capitalistic/democratic, and that is why it appeals so much to us, but that enterprises are not democracies. They are, at best, like a benevolent monarchy, with the CEO (and executive management) setting strategy.
In that post, Joe concluded with a very pertinent point:
"But, again, you have to be fortunate enough to have a benevolent monarch in charge. For too many enterprises, the monarchs are simply clueless and worrying about keeping their golden parachutes packed — not about SOA."
How do you build a SOA in an environment where management has no idea of its value? What do you do when you are at 'ground zero' in a company that doesn't value elegant enterprise design?
First off, let's get something straight: there are two uses of SOA.
Use #1: Application Design. I can use SOA to elegantly seperate my workflow from my activity and entity services when partitioning my application. This is good. This is an example of starting small, as Joe advocates. If you can demonstrate, after you develop a SOA app, that it is easier to integrate with, you may get some good attention from management for doing more. From the app perspective, SOA is extra goodness. It doesn't deliver better functionality, just the ability to integrate better later. It's actually a bit of a tough sell sometimes.
Use #2: Enterprise Agility. If I build enterprise services, then I can compose altogether new applications from existing services. This provides real speed and value to IT, and delivers on the promise of SOA. Here, SOA is not just "added goodness." When providing enterprise agility, SOA is the clear winner. It is in support of this goal that SAP has added services to their huge ERP system, and Seibel provides services to their dominant CRM system.
Everyone wants the Enterprise Agility. So, how to get it?
So, how to develop SOA in an environment where you have no executive support? First, start small. Second, use middle out. Top down builds documentation, but is usually cancelled before a single service is built. Bottom up builds the wrong services, giving you a sprawling landscape of useless points of integration. Bottom-up is like trying to make sense of a Pentacostal congregation when they are "speaking in tongues." (There's a lot of noise, but no one is sure what anyone else is saying).
Middle out is your best hope.
You can do middle out in a small way. You don't need 30 people for a year to make decisions for you, or some huge expensive project to decide what services to build. A small virtual team can build the standards, and they can be written down in a single document of less than 30 pages, along with some sample code that developers can share. You can even use a domain-specific language or a software factory if you want to mess with the new stuff in Visual Studio. I'm working on standards of this kind right now, and hope to publish something by the end of the year for Microsoft IT to use. (Yes, I will share).
The point is: middle out requires one thing: that you communicate with other architects before you build a bunch of services.
We can do that much, even without getting the monarchs to notice.
Nuts. Middle out is just toned down centralism. Give it up man - evolution out of chaos is the way to go.
@David,
When OO programming was just getting started, a lot of folks said "give it up, man. There's nothing you can do in C++ that you can't do in C."
I didn't listen to them either.
Show me any form of human behavior where different people created their own visions of organized solutions to shared problems and, in a democratic society, they 'naturally' work together. Show me. I can come up with hundreds of examples to counter.
How about police and fire communications? Two organizations, each well organized, but they cannot communicate easily with one another in an emergency. The only impetus they have had to work together: legislation.
On the other hand, in the smaller cities surrounding Seattle, all the roads share a numbering scheme. It helps the post office, it helps travelers, it helps planning departments (especially when the cities intersect or in some cases, weave around each other like mating microorganisms). What made the system work? Middle-out.