Я думаю, что это зависит от 2 факторов:
Очевидно, это комбинация из двух вышеупомянутых факторов. Просто не имеет смысла тратить 1 месяц на разработку функции, для реализации которой потребуется 2 дня и которая представляет небольшой риск для архитектуры. Я представляю здесь матрицу компромиссов длины / риска / времени проектирования.
В Code Complete 2 был несколько интересных советов, которые я сейчас нахожусь в процессе чтения. Я не могу вспомнить точную формулировку, поэтому я перефразирую здесь, но она сказала что-то вроде:
2 самые большие ошибки, которые вы можете сделать в дизайне:
1. Attemping to design EVERYTHING (you will fail)
2. Designing NOTHING before implementation
Нахождение счастливой среды между этими двумя является ключом к успешному проектированию и планированию.