| Term | Definition |
| open/closed principle | classes should be open for extensions but closed for change |
| Liskov Substitution Principle | object of superclass should always be substitutable by object of subclass |
| law of demeter | talk only to friends (as low coupling as possible) |
| high cohesion | everything a class should do should be closely related to each other |
| weak coupling | changes to module shouldn't affect other modules (modules should depend on as few modules as possible) |
| Modularity | decomposition of software into modules in hierarchical manner |
| information hiding | only expose necessary functions |
| stakeholders | people who care about the outcome |
| cowboy coding | lack of development cycle (what you've been doing in school: code and fix) |