Ich denke, diese Frage ist der Kern der Frage nach dem Lebenszyklus von Agilität und Wasserfall.
Wenn Sie agil arbeiten, ist eine Grundvoraussetzung, dass der Code in Verbindung mit einer engen Entwicklerinteraktion besser und schneller ist als die detaillierte Spezifikation. Das Team priorisiert die Veröffentlichung neuer Funktionen und hoher Qualität gegenüber anderen Dingen - wie formalen Kommunikationsmechanismen wie detaillierten Designspezifikationen. Aber hier gibt es einen Handel - Sie müssen Kommunikationskanäle zwischen Teammitgliedern haben, über die sie nach Nuancen und detaillierten Designabsichten fragen können, wenn sie diese benötigen.
Wenn Sie einen Wasserfall machen, gehen Sie davon aus, dass das Ausfüllen des Codes unter dem detaillierten Entwurf und das anschließende Testen von Bedeutung ist. Und Sie möchten den Stakeholdern frühzeitig einen Einblick geben, wie diese Arbeit ablaufen wird und wie sie aussehen wird, wenn sie abgeschlossen ist. Dies kann dazu führen, dass das Design mit dem Kunden überprüft wird, um sicherzustellen, dass Sie sinnvolle Funktionen ausgewählt haben. Es kann auch sein, es mit Experten in anderen Bereichen zu überprüfen - z. B. Sicherheitsüberprüfungen, Sicherheitsüberprüfungen und Überprüfungen durch Teammitglieder, die in Ihren Code integriert werden müssen. Es wird davon ausgegangen, dass diese Überprüfungen auf lange Sicht Zeit sparen, da Sie dadurch nicht viel Zeit für die Entwicklung des Falschen benötigen.
In letzter Zeit habe ich eine wirklich großartige Fusion zwischen detaillierten Designs und Codekommentar-Tools gesehen - zum Beispiel JavaDoc. Da die detailliertesten Designs Fußabdrücke des Codes und kurze Erklärungen dessen sind, was er tun wird, ist dies mehr oder weniger das Gleiche, was Sie als Codekommentare erwarten würden. Ein Tool, das Codekommentare in detaillierte Designspezifikationen umwandelt, ist also großartig - eine viel bessere Möglichkeit, sie auf dem neuesten Stand zu halten, als sie von Hand zu erstellen.
Ich glaube, dass eine ungenaue Einschätzung, wie detailliert das Projekt sein sollte , ein wesentlicher Faktor für das Kostenwachstum ist. Das Schlimmste ist, dass du verdammt bist, wenn du es tust, und verdammt, wenn du es nicht tust:
- Wenn Ihr Design für die Größe des Teams, die Komplexität der Arbeit und die Anforderungen der Tore, durch die Sie gehen müssen (Sicherheitsüberprüfungen, Sicherheitsüberprüfungen usw.), zu detailliert ist, haben Sie wertvolle Zeit und Geld verschwendet Ein Artefakt, das Sie niemals benutzen werden.
- Wenn Ihr Design nicht detailliert genug ist, verschwenden Sie Geld, da die Teammitglieder falsche Annahmen treffen, die zu Integrationsproblemen führen, und Sie riskieren schwere Nacharbeiten, wenn ein abschließendes Sicherheitsaudit Probleme aufdeckt, die frühzeitig und kostengünstig hätten behoben werden können, wenn sie aufgetreten wären klare Aspekte des Designs vor der Implementierung.
Ich glaube nicht, dass es sich um ein Schwarz-Weiß-Gehäuse handelt. Es kann vorkommen, dass einige Komponenten "gut genug" sind, wenn sie auf hohem Niveau entworfen werden, während andere strenge Detailarbeiten erfordern. Und sich ändernde Team- oder Projektumgebungen können neue Designanforderungen bestimmen, wenn sich ein Projekt weiterentwickelt.