# Specification & Design

Everything starts with this. But if it is not understood well, the clean coding is worth for nothing.

### Specification

* Specification must be clear, complete and consistent
* Specification must be well understood by the developers
* Avoid implementing a poorly specified features - _they will ruin the code_

### Design

#### Do not underdesign

* The design should be a correct and complete solution for the given problem
* Draw examples to see every possible cases and to find the good solution

#### Do not overdesign

* Do not design for assumptions
* Do not design solutions which will be used much later - _"They will be good in the future"_
* YAGNI - _You Ain't Gonna Need It_

