A General/SufficientDesign satisfies the current requirements. This is the most important point and should be the primary goal for any design.
Taking It Too Far (also known as General/OverDesign)
A design can be overly sufficient - meaning it satisfies more then the current requirements. This is usually caused in an attempt to make a General/FlexibleDesign and results in adding unnecessary complications to the design. To avoid this, start with a General/SimpleDesign then apply General/ReFactoring to add needed flexibility.