One of the first and more difficult steps in defining an SOA is developing a complete semantic and service-level understanding of your domain. Although the work required is pretty straightforward, the amount of effort and time required is typically huge, and the enabling technology or tools currently available are complex and still emerging. So it pays to spend some time up front planning exactly how you’re going to do this step and what tools you may use to make this job easier.
Why are we doing this? Because you can’t deal with information you don’t understand, including information bound to behavior in applications or existing services. It’s extremely important for you to identify all application semantics -- metadata, if you will -- and services that exist in your domain so that you can properly deal with the data and services that are there and understand the inner workings as well. Remember, the goal here is to create a service-level abstraction of existing systems, and at this point, you’re merely figuring out what’s there.