Contract First or Rewrite Later
Reviewing the four tenets for service orientation, note that tenet #2 (Services are Autonomous) states that services should be independently deployed, versioned and managed. Service contracts should be designed with the assumption that once published, they cannot be modified - this approach forces developers to build flexibility into their schema designs. One way to ensure that the service contract remains flexible is to adopt a Contract-First approach to service development. With Contract-First you define your service contract before developing the service itself. The service contract can then be used to generate the actual service code. Contract-First is a proven approach for reducing the barriers to interoperability since it builds upon decades of experience (CORBA, COM and DCE all used interface languages and encouraged a Contract-First approach to development). Many development environments have added simple support for Contract-First while tools such as thinktecture’s WSCF and the GotDotNet XSD Object Code Generator help to further automate this process. Regardless of the development approach you utilize for service development there is no question that service contracts must be designed in an extensible manner to minimize disruptive versioning changes.
If you want to develop interoperable services adopt contract first or you'll be re-writing portions of your service later.