- Tight coupling occurs
- Duplication of code
- Unknown issues in application development lifecycle
- requires time to do modification in code
- code not testable
- reduces complexity of code.
- reusability
- reduces error
- increase readability, extensibility
- better testability
- reduces tight coupling
- Architecture (e.g MVC)
- Design Principles (e.g SOLID)
- Design Patterns (e.g Singleton)