What is “Simple Design”?
For a team to adopt the “simple design” principle, it has to
- include refactoring and heuristics such as “YAGNI” (You Aren’t Gonna Need It), since design is a work in progress type of activity
- code simplicity is how design quality is evaluated. the simpler, the better.
- every design element is seen as both costly and beneficial, but every design cost must be justified.
- decisions should be delayed until the “last possibe moment”, allowing to collect as much information as possible before the release of the final product.
- Don’t downplay. For example, while arranging a team, you should not ignore how important design skill is, with the idea that “design will emerge”. Emergency is not made out of magic, therefore those skills are extremely important.
- “Simple Design” only refers to the “software” side of things. It’s very misleading to appeal to the simple design practice to justify decisions which have to do with a customer’s requirements, or the usability of the product in question.
- The practice may also be ill-advised when design choices are inconsistent. For example if the developing team is large and distributed geographically.