# Core Tenants of Software Design **Software design is the art of managing complexity through deliberate structure.** ## The Five Forces **1. Minimize Cognitive Load** Code is read 10x more than written. Design for human comprehension first, machine execution second. If a system requires holding more than 7±2 concepts in working memory to understand, it's too complex. **2. Isolate What Changes from What Stays Stable** Protect the stable core from volatile periphery. Dependencies flow toward stability. Change is inevitable—design for it by identifying and encapsulating variation points. **3. Make Dependencies Explicit and Intentional** Hidden coupling kills systems slowly. Name dependencies, make them visible, control their direction. If you can't draw the dependency graph, you can't reason about the system. **4. Optimize for Deletion** The best code is code you don't have to write or maintain. Boundaries enable removal. Modularity enables replacement. Design so that any piece can be deleted without cascading changes. **5. Align Structure with Reality** Code structure should mirror the problem domain and team structure (Conway's Law). Misalignment creates friction. When structure matches reality, the right changes become easy and the wrong ones become hard. --- **The Principal's Stance:** You don't enforce methodology—you cultivate understanding of forces. Show the pain of ignoring them. Make the invisible visible. Teach teams to see coupling, complexity, and change. Empower them to choose their own constraints wisely.