1. To make the design process easy by breaking unmanageable tasks into several smaller and manageable tasks (by divide-and-conquer approach).
2. Modularity and clear interfaces, so as to provide comparability between the different providers' components.
3. Ensure independence of layers, so that implementation of each layer can be changed or modified without affecting other layers.
4. Each layer can be analyzed and tested independently of all other layers.