When I talk about versioning I don't mean simply updating code and pushing out an updated set of libraries to target locations. A traditional, monolithic application is typically updated by rebuilding the entire solution and deploying the complete package to desktops or servers. This makes deployments fairly burdensome but on the plus side, the developers are fairly confident that the changes being made only affect entities within the discrete application boundaries.
A solution based on an SOA pattern is much easier to deploy because functional modules may stand alone if principles of encapsulation and loose coupling are correctly applied. Changes made to a single service shouldn't necessarily impact every component of the application and force a massive redeployment of the entire system. However, this flexibility comes at a cost. Unlike classic applications with discrete boundaries, SOA applications have components with a potentially disparate set of clients outside of the...