This document discusses software architecture and design patterns. It provides a historical perspective on design patterns and frameworks. It then defines what a design pattern is, explaining that patterns address general and recurring design problems. It also classifies design patterns into different categories. The document concludes by listing references used.