Я бы ответил:
Ничто, абсолютно ничто не заменяет потребность в хорошем общении между программистами в команде разработчиков и менеджментом.
Это означает определенный уровень разбивки задачи на простые заявления «что нам нужно сделать» для менеджеров и объяснения любых препятствий.
Я работал над небольшим проектом, в котором вся структура классов программы была разработана кем-то на UML до написания какого-либо кода. Отлично, но дизайнеры не ожидали, как будут использоваться классы, или необходимости менять определенные структуры, чтобы лучше соответствовать логике программы. Они просто выбросили дизайн, который, как они думали, будут работать.
Мне еще предстоит встретиться с кем-то, кто может разработать программу в своей голове и создать именно это при написании ее сверх простых вещей. Процесс довольно органичен, и вещи должны меняться по мере того, как программисты осознают свои ранние ошибки и исправляют их. Я могу понять, почему начинает происходить ползучесть функций, и именно здесь руководству необходимо понять, что происходит, быть в курсе и обновляться. Хорошие менеджеры будут слушать то, что им говорят их программисты, и соответственно корректировать взгляды.
Итак, из двух ваших вариантов я бы выбрал проектный документ высокого уровня: мы хотим, чтобы программное обеспечение делало это, работало на этой платформе, принимало ввод такого рода и выплевывало подобные вещи. Это работает, если вышеупомянутое соблюдено.
UML, насколько я понимаю, не стоит этого.