When discussing about SOA a very common question goes about the
granularity of services.
I have always applied
two principles to decide for myself if a service has the right granularity :
1. Does it make sense ? If a Business User of this service reads the service specification, he should be able to understand it. This requires to have servcice specifications in natural language.
2. Is it Human ?Services are ways to request for information. My basic belief is that it should be possible for a normal human being to process that information. I like to think about services in terms of web pages : how would it look like if it was a web page ? (That's probably because I'm a fan of the Semantic Web vision). The rationale is that if the service provides something that is not human (thousands of records) there is room for service re-factoring (by using an iterator for instance).
A service that would dump all your emails at once on your screen in one page would be useless. What you want is a service to browse emails titles 20 by 20 and the possibility to open an email by selecting it. In addition you want a search function. Paging, Summaries and Searching are examples of human services.