Для мене мені подобається підхід, який Кент Бек висуває в XP (не впевнений, це "його" ідея чи хтось інший, але саме там я вперше почув це):
Досить важко вирішити сьогоднішні проблеми, не намагаючись розробити проблеми завтрашнього дня і вирішити їх теж.
Розробники можуть витратити багато часу на рішення для вимог, які не існують, крайні випадки, які ніколи не виникнуть, або навіть справжні проблеми, коли вплив проблеми значно менший, ніж витрати на її попередження.
Настав час, який можна вкласти в речі, які користувачі дійсно захочуть та використовуватимуть, - речі, які принесуть їм переваги, які в значній мірі перевищуватимуть навіть ті незручності, які будуть спричинені в тому, що навряд чи станеться одна з цих речей.
Окрім навіть цього неоптимального для користувача результату, вплив на розробника над інженерією таким чином має тенденцію перевищувати складний код, який важче підтримувати і важче підсилити.
Тож для мене, якщо ви знаєте, або можете бути досить впевнені, що щось є вимогою або збирається викликати проблему, тоді вирішіть її, якщо ні, то не.
Можливо, вам доведеться повернутися і переробити його, коли виявиться, що виникла більш широка вимога, ніж ви спочатку реалізовували, але загалом загальні зусилля, які ви докладете до проекту, все ж будуть меншими, оскільки в більшості випадків цього не відбудеться.