# Design Principles
Design Principles provide high-level guidelines or recommendations on how to design software to avoid common problems, make the software more maintainable, scalable, and understandable. They set the foundation for writing good software.
%%
- [ ] DRY (Don't Repeat Yourself)
- [ ] YAGNI (You Aren't Gonna Need It)
- [ ] Give code examples for each principle
%%
- [[Function and Class Naming]]
- [[Directory Structure]]
- [[S.O.L.I.D. Design Principles]]
- [[Three Fundamental Principles of Object-Oriented Programming (OOP)]]
- - [[Domain-Driven Design (DDD)]]