No Service is an Island

I think everybody is starting to go a little crazy trying to define the term Service Oriented Architecture. Udi states that he sees “two distinct and complimentary views.” I quote from his site:

  1. SOA is about how to integrate different systems.
  2. SOA is about how to architect a single system.

I disagree. As we all move our systems to be architected around services, different systems and single systems begin to blur together in a way never before possible. As soon as a single system exposes services, it becomes a candidate for integration with other systems. The concept of a “single system” will have less and less meaning as services become more ubiquitous and our “single systems” begin depending on several other systems for their proper functioning. Arguing between the two definitions is pointless: A good service-oriented system both enables and requires integration with other services. In a service-oriented world, no system is an island.

The flexible, resiliant nature of the XML-based interfaces (discussed earlier here and here) is what makes it all possible. It allows that zen to become a reality with minimal effort. Given these new technologies at our disposal, a good architect will design the system to allow for the simplest integration between them. Of course it will still be possible to architect your system poorly. You can write web services all day, but without thinking about how those services might be integrated with other systems, then you’re just using an fancy remoting framework. You will have achieved a “single system,” but such a system is definitely not service-oriented, and you will have missed out on the real value that the web service stack has to offer.