Design patterns are not a fashion statement; they're a recipe for solving common software architectural problems. How can you get access to object dependencies? How can you build a system that allows for arbitrary code to be notified of changes? How can you provide information between two objects in a consistent and fault-tolerant fashion? Join us as we provide an overview of common design patterns, demonstrating the various use cases each attempts to solve, as well as discussing limitations and gotchs. We will attempt to show the simplest possible PHP implementations, as well as real-world examples from OSS projects.