Implement only the minimum you need to support the requirements
Implement only the minimum you need to support the requirements that you are implementing in the immediate release. Avoid having to implement and maintain designs to support flexibility that might never be used. Avoid having to implement designs to support flexibility that we know will be used, but not immediately.
Traditionally in OO Analysis and Design it has been considered a good practice to think of, and design to support, possible future change. Thinking ahead is a good practice if the cost of introducing this flexibility when we find we need it is high. However, modern approaches have addressed the issue of cost of change. Where ConstantRefactoring is used, it is good practice not to implement anything if YouAren’tGoingToNeedIt.
Where the requirements are stable and future needs are known, there is a reasonable argument for making preparations in advance. In addition, ConstantRefactoring and all its supporting techniques must be in use, and architecturally significant requirements should be addressed in early iterations.