- Rigidity: difficult to make changes (small change causes a cascade of subsequent changes)
- Fragility: a single change causes breaks in many places
- Inseparability: no reusability
- Opacity: code is hard to understand
- Make sure you communicate intent
- Avoid disinformation
- Use pronounceable names