SOA is an architectural approach to creating systems built from autonomous services. – Ron Jacobs, Tech-Ed 2005
While this is certainly true, it does not fully explain why so many “experts” and practitioners debate and, sometimes, disagree about what constitutes a well factored SOA-based distributed system.
For some strange reason, SOA reminds me of Kent Beck’s description of how he came to devise the Extreme Programming methodology.
Kent had the mental picture of a control panel with knobs; each knob would represent a practice that, from his experience, he knew worked well.
He then imagined turning those knobs all up to 10 to see the consequences.
The same analogy helps me to capture what I believe is the true spirit of SOA.
I see it as being an architectural model that mainly limits to the extreme the assumptions we make about the services that we create and consume in terms of reliability, communication protocols, network latency, implementation platforms, resiliency, versioning, security, coupling, etc.
I like to think that people around the world are simply attempting to define what “turning a knob to 10” means, evaluating implications, and eventually devising practices that work.
This oversimplification helps me to understand why, for example, some experts suggest that message exchange between services should be fundamentally asynchronous; synchronicity would mean taking for granted certain assumptions about the responsiveness of the services we consume which for some are simply unacceptable.