I've had a few people ask me about loose coupling and SOA recently. There seems to be some confusion around this concept. With the advent of web services and SOA we've been seeking to create architectures and systems that are more loosely coupled. Loosely coupled systems provide many advantages including support for late or dynamically binding to other component while running, and can mediate the difference in t I’ve had a few people ask me about loose coupling and SOA recently. There seems to be some confusion around this concept. With the advent of web services and SOA we’ve been seeking to create architectures and systems that are more loosely coupled. Loosely coupled systems provide many advantages including support for late or dynamically binding to other component while running, and can mediate the difference in the component’s structure, security model, protocols, and semantics, thus abstracting volatility. This is in contrast to compile-time or runtime binding, which requires that you bind the components at compile time or runtime (synchronous calls) respectively and also requires that changes be designed into all components at the same time due to the dependencies. As you can imagine, this type of coupling makes testing and component changes much more difficult. The advantages of loosely coupled architectures, as found within many SOAs (if they are designed and built correctly), are apparent to many of us who have built architectures and systems in the past, at least from a technical perspective. However, they have business value as well. First and foremost, a loosely coupled architecture allows you to replace components, or change components, without having to make reflective changes to other components in the architecture/systems. This means businesses can change their business systems as needed, with much more agility than if the architecture/systems was more tightly coupled. Second, developers can pick and choose the right enabling technology for the job without having concern themselves with technical dependencies, such as security models. Thus, you can build new components using J2EE, which will work and play well with other components written in Cobol or perhaps C++. Same goes for persistence layers, middleware, protocols, etc.. You can mix and match to exactly meet your needs, even leverage services that may exist outside of your organization without regard for how that service was created, how it communicates, nor where it is running. Finally, with this degree of independence components are protected from each other and can better recover from component failure. If the SOA is designed correctly, the failure of a single component should not take down other components in the system. Thus, loose coupling creates architectures that are more resilient. Moreover, this also lends itself better to creating failover subsystem, moving from one instance of a component to another without affecting the other components in the SOA.It should be noted, however, that not all tight coupling is bad. Indeed, in some cases it makes sense to more tightly couple components, such as when the dependencies are critical to the design. An example would be two services that can’t work apart, and must function as one, and thus are better tightly coupled. You have to look at your requirement, and then determine the degree of coupling required in your architecture, and it may not always be loose coupling. Software Development