[1] Due to the fallacies of distributed computing, finding an adequate granularity is hard.
A primary goal of service modeling and granularity design is to achieve loose coupling and modularity, which are two of the essential SOA principles,[3] and to address other architecturally significant requirements.
Many forces influence the service granularity;[4] four particularly relevant factors to consider when designing for an adequate granularity are performance, message size, transactionality and business function: Ideally, each service operation maps to a single business function, although if a single operation can provide multiple functions without adding design complexity or increasing message sizes, this generality can reduce implementation and usage costs.
Reducing message size may require adding a more fine-grained operation.
Many more decision criteria for finding an appropriate granularity exist; there is no global optimum.