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.

Common Mistakes

  • 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.