This course is about the structures, algorithms, design principles, relationships, and patterns that comprise the stories we tell about our software. Software design is meant to be abstract, distinct and separate from architectures that bind our designs to specific implementation details.