This document discusses various object-oriented design principles and smells. It describes signs of poor architecture like needless repetition, rigidity, immobility, fragility, opacity, and viscosity. It then outlines principles for good design such as strong encapsulation, loose coupling, the Law of Demeter, single responsibility, coding to interfaces, open/closed principle, and dependency inversion. It emphasizes separating concerns, minimizing coupling between classes, and favoring composition over inheritance.