Chciałbym odpowiedzieć:
nic, absolutnie nic, zastępuje potrzebę dobrej komunikacji między programistami w zespole programowania i zarządzania.
Oznacza to pewien poziom rozbicia zadania na proste instrukcje "co musimy zrobić" dla menedżerów i wyjaśnienie wszelkich blokad dróg.
Pracowałem nad małym projektem, w którym cała struktura klasowa programu została zaprojektowana przez kogoś w UML przed napisaniem jakiegokolwiek kodu. Świetnie, ale projektanci nie przewidzieli sposobu, w jaki klasy mogą być używane, lub potrzeby zmiany pewnych struktur, aby lepiej dopasować się do logiki programu. Po prostu wyrzucili projekt, który według nich miał działać.
Mam jeszcze spotkać kogoś, kto potrafi zaprojektować program w swojej głowie i wyprodukować dokładnie to, co pisze poza bardzo prostymi rzeczami. Proces jest dość organiczny i rzeczy muszą się zmieniać, gdy programiści realizują swoje wcześniejsze błędy i naprawiają je. Rozumiem, dlaczego zaczyna się pojawiać pełzanie funkcji, i to tam kierownictwo musi zrozumieć, co się dzieje, być trzymane w pętli i aktualizowane. Dobrzy menedżerowie będą słuchać tego, co mówią ich programiści i odpowiednio dostosować widoki.
Tak więc, z dwóch opcji, wybrałbym dokument projektowy wysokiego poziomu: chcemy, aby oprogramowanie to zrobiło, uruchom na tej platformie, zaakceptuj tego rodzaju dane wejściowe i wypluj tego typu rzeczy. To działa, jeśli powyższe jest utrzymywane.
UML, o ile mi wiadomo, nie jest tego wart.