Software Design Patterns and Principles (quick overview)