Für mich gefällt mir der Ansatz, den Kent Beck in XP vorschlägt (nicht sicher, ob es "seine" Idee oder die einer anderen Person ist, aber dort habe ich ihn zum ersten Mal gehört):
Es ist schwer genug, die Probleme von heute zu lösen, ohne zu versuchen, die Probleme von morgen herauszufinden und sie auch zu lösen.
Entwickler können viel Zeit mit Lösungen für Anforderungen verbringen, die nicht existieren, Randfälle, die niemals auftreten werden, oder sogar mit echten Problemen, bei denen die Auswirkungen des Problems erheblich geringer sind als die Kosten für dessen Verhinderung.
Dies ist die Zeit, die in Dinge gesteckt werden könnte, die Benutzer wirklich wollen und nutzen, Dinge, die ihnen Vorteile bringen, die selbst die Unannehmlichkeiten, die in dem unwahrscheinlichen Fall entstehen, dass eines dieser Dinge tatsächlich passiert, massiv überwiegen.
Abgesehen von diesem für den Benutzer nicht optimalen Ergebnis sind die Auswirkungen von Over Engineering auf diese Weise auf den Entwickler in der Regel auf komplexen Code zurückzuführen, der schwerer zu unterstützen und schwerer zu verbessern ist.
Wenn Sie also wissen oder ziemlich sicher sein können, dass etwas eine Anforderung ist oder ein Problem verursachen wird, sprechen Sie es an, wenn nicht, dann nicht.
Möglicherweise müssen Sie zurückkommen und es überarbeiten, wenn sich herausstellt, dass eine größere Anforderung als ursprünglich implementiert vorhanden war. Im Allgemeinen ist der Gesamtaufwand für das gesamte Projekt jedoch geringer, da dies in den meisten Fällen nicht der Fall ist.