Ich würde antworten:
Nichts, absolut nichts, ersetzt die Notwendigkeit für eine gute Kommunikation zwischen Programmierern auf einem Programmierteam und Management.
Dies bedeutet ein bestimmtes Niveau der Aufgliederung der Aufgabe in einfache "Was wir tun müssen" -Aussagen für Manager und die Erklärung von Roadblocks.
Ich arbeitete an einem kleinen Projekt, bei dem die gesamte Klassenstruktur des Programms von jemandem in UML entworfen wurde, bevor irgendein Code geschrieben wurde. Großartig, aber die Entwickler haben nicht vorausgesehen, wie die Klassen verwendet werden könnten, oder die Notwendigkeit, bestimmte Strukturen so zu ändern, dass sie besser zur Programmlogik passen. Sie haben einfach ein Design ausgeworfen, von dem sie glaubten, dass es funktionieren würde.
Ich bin noch jemanden zu treffen, der ein Programm in ihrem Kopf entwerfen und genau das produzieren kann, wenn es über sehr einfache Sachen hinausgeht. Der Prozess ist sehr organisch und die Dinge müssen sich auf dem Weg ändern, wenn Programmierer ihre früheren Fehler erkennen und korrigieren. Ich kann sehen, warum Feature Creep auftritt und das ist, wo Management muss verstehen, was vor sich geht, in der Schleife gehalten und aktualisiert werden. Gute Manager werden darauf hören, was ihre Programmierer ihnen sagen und die Sehenswürdigkeiten entsprechend anpassen.
Also, von Ihren zwei Optionen würde ich für das High-Level-Design-Dokument gehen: Wir wollen die Software dies tun, auf dieser Plattform laufen, diese Art von Eingabe akzeptieren und so etwas ausspucken. Das funktioniert, wenn das obige eingehalten wird.
UML, soweit es mich betrifft, ist es nicht wert.