Why: - Properly compartmentalized functionality (business logic handled in the right place and separated from other components, such as data Models) - Remove cyclic dependencies - Unit Testing becomes easier (code is now more functional)