- Generalized, reusable solutions to common design issues in software engineering
- all about instantiating objects, and how many are we allowed to create link
- all about the app structure. Combining smaller classes or objects to create more complex ones link
- determine ways of app flow and how objects communicate with each other link