Decide at the Last Responsible Moment

Note that the phrase is the last ‘responsible’ moment, not the last ‘possible’ moment. Make decisions at ‘the moment at which failing to make a decision eliminates an important alternative’. If commitments are delayed beyond the last responsible moment, then decisions are made by default, which is generally not a good approach to making decisions.

By delaying decisions until this crucial point, you increase the accuracy of your decisions, decrease your workload, and decrease the impact of changes. Why? A delay gives you time to increase the amount of information you have when you make a decision, which increases the likelihood that it is a correct decision. That, in turn, decreases your workload by reducing the amount of rework that results from incorrect decisions. Changes are easier because they are less likely to invalidate decisions or incur additional rework.

Source: The Art of Agile Programming, Chapter 3, Page 42

Doing too much too soon, being too smart too early, introduces assumptions about what the future will bring. You don’t really know what the future will bring until you get there, and making incorrect assumptions about it will waste your time both now (doing stuff you didn’t need to do) and later (undoing what you did now).

However, not having an eye to the possibilities of the future at all may cause you to limit your ability to adapt. You must be mindful of decisions made by default. Everything you do is a decision, are you making the decision too soon or too late? What future possibilities are you eliminating with your current actions?

Always implement things when you actually need them, never when you just foresee that you need them.

Source: http://en.wikipedia.org/wiki/You_ain’t_gonna_need_it

“But Ron, I know how to do it right now, and later I might not.”

“So, Sam, you’re telling me that this class you’re writing is so complex that even you won’t be able to maintain it?”

Keep it simple. If you need it, you can put it in later. If you don’t need it, you won’t have to do the work at all.

Source: http://c2.com/cgi/wiki?YouArentGonnaNeedIt