Я думаю, что у нас был успешный подход в моей последней работе, поскольку мы выполнили проект вовремя и только с несколькими проблемами, обнаруженными в производстве. Однако над продуктом работали только 3 человека, поэтому я не совсем уверен, как он будет масштабироваться для более крупных команд.
Мы написали спецификации заранее для всего продукта, но не вдавались в подробности и делали упор на пользовательский интерфейс. Это было для нас средством понять, что нужно сделать, и масштаб проекта.
Когда мы начали реализовывать вещи, мы должны были все проработать гораздо более подробно (и неизбежно должны были сделать некоторые вещи не так, как в спецификации). С этой целью мы собрались вместе и разработали лучший подход к реализации каждой функции (иногда с прототипами). Мы не обновляли исходную спецификацию, но делали заметки после встреч, так как потом очень легко забыть детали.
Итак, в общем, мой подход заключается в том, чтобы рассматривать спецификации как исследовательский инструмент и прорабатывать более тонкие детали во время реализации. В зависимости от проекта, также может быть хорошей идеей поддерживать оригинальную спецификацию в актуальном состоянии по мере развития приложения (что нам не нужно было делать в этот раз).