A team adopting the “simple design” practice bases its software design strategy on the following principles:
- design is an ongoing activity, which includes refactoring and heuristics such as YAGNI
- design quality is evaluated based on the rules of code simplicity
- all design elements such as “design patterns”, plugin-based architectures, etc. are seen as having costs as well as benefits, and design costs must be justified;
- design decisions should be deferred until the “last responsible moment”, so as to collect as much information as possible on the benefits of the chosen option before incurring its costs.