1. 20 minutes. 2. Good content. Achieving widespread reuse of complex software components requires a concerted focus on the fundamental design patterns that underly software systems. A design pattern is a successful solution to a set of forces and problems that arise when building software. Patterns aid the development of reusable software by expressing the structure and collaboration of components to developers at a level higher than (1) source code or (2) object-oriented design models that focus on individual objects and classes. Therefore, patterns facilitate reuse of software architecture, even when other forms of reuse are infeasible (e.g., due to fundamental differences in operating system mechanisms or programming language features). 3. Effective teaching/learning resource. 4. A little on the dry side, but not bad.