> For the complete documentation index, see [llms.txt](https://dailyjournal.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dailyjournal.gitbook.io/notes/software-development/software-design-principles.md).

# Software Design Principles

a set of considerations/guidelines that form the basis of any good product and help with decision making

{% content-ref url="/pages/-MW3BHsEKxvsnprMjkLh" %}
[S.O.L.I.D. Priniciple](/notes/software-development/software-design-principles/s.o.l.i.d.-priniciple.md)
{% endcontent-ref %}

## DRY Principle

* **D**on't **R**epeat **Y**ourself principle
* This principle states that each small pieces of knowledge (code) may only occur exactly once in the entire system. This helps us to write scalable, maintainable and reusable code.

## KISS Principle

* **K**eep **I**t **S**imple, **S**tupid! principle
* This principle states that try to keep each small piece of software simple and unnecessary complexity should be avoided. This helps us to write easy maintainable code.

## YAGNI Principle

* **Y**ou **A**in't **G**onna **N**eed **I**t principle
* This principle states that always implement things when you actually need them never implements things before you need them.

{% embed url="<https://principles.design/>" %}
