software-designlisted
Install: claude install-skill Tibsfox/gsd-skill-creator
# Software Design
Software design is the discipline of organizing code so that it is correct, understandable, and changeable. A well-designed system makes the right things easy and the wrong things hard. This skill catalogs the principles, patterns, and architectural styles that professional software engineers use to achieve this, with emphasis on when each applies and when it does not.
**Agent affinity:** dijkstra (structured programming, formal reasoning about design), kay (OOP, message-passing architecture)
**Concept IDs:** code-code-organization, code-abstraction, code-decomposition, code-peer-review
## Part 1 -- Design Principles
### The SOLID Principles
Robert C. Martin codified these five principles for object-oriented design. They apply more broadly to any modular system.
#### S -- Single Responsibility Principle (SRP)
**Statement:** A module should have one, and only one, reason to change.
**What it means.** Each class, function, or module should serve exactly one purpose. If you change the database schema, only the database layer should change. If you change the UI layout, only the UI layer should change.
**Violation signal.** A class that has methods for both parsing user input AND writing to the database. A function that both validates data AND sends an email.
**Fix.** Separate the responsibilities into distinct modules. A UserValidator validates; a UserRepository persists; an EmailService sends.
#### O -- Open/Closed Principle (OCP)
**Statement:** So