Presents a methodology that integrates modeling and design, UML, patterns, test-driven development, quality assurance, configuration management, and agile principles throughout the life cycle. In this title, the author uses his experiences to help the readers understand software design principles, patterns, and other software engineering concepts.