Я большой поклонник быстрого прототипирования, быстрого наращивания и быстрой итерации. эволюция, а не "интеллектуальный дизайн". вы пишете программное обеспечение для решения проблем людей, а люди склонны менять свое мнение и потребности с течением времени, даже коротких периодов времени.
хорошо бы получить требования, вид с высоты птичьего полета и "подписаться" как можно более четко до начала кодирования, но нет смысла быть догматичным, все это изменчиво. будьте готовы редактировать, вносить поправки и выбрасывать код по ходу дела. забавно, что вы никогда не придете к точке завершения в любом случае... большинство кода, кажется, меняется, пока людям есть до него дело, а потом, когда никому нет дела, его просто удаляют.
Теперь, чтобы быть уверенным, это не относится к тем частям программного обеспечения, которые должны работать с первого раза, например, системы управления самолетами, системы управления ядерными реакторами и т.д., но я думаю, что это не ваш случай.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: