Dla mnie podoba mi się podejście, które Kent Beck proponuje w XP (nie jestem pewien, czy to „jego” pomysł czy ktoś inny, ale właśnie tam go usłyszałem):
Wystarczająco trudno jest rozwiązać dzisiejsze problemy, nie próbując dowiedzieć się, jakie są jutrzejsze problemy, a także je rozwiązać.
Deweloperzy mogą poświęcić dużo czasu na rozwiązania nieistniejących wymagań, wyjątkowe przypadki, które nigdy nie wystąpią, a nawet autentyczne problemy, których wpływ jest znacznie mniejszy niż koszt zapobiegania.
Jest to czas, który można poświęcić na rzeczy, których użytkownicy naprawdę będą chcieli i używają, rzeczy, które dadzą im korzyści, które znacznie przewyższą nawet niedogodności, które zostaną spowodowane w mało prawdopodobnym przypadku, gdy jedna z tych rzeczy się wydarzy.
Poza tym nieoptymalnym rezultatem dla użytkownika, wpływ na programistę nadmiernej inżynierii w ten sposób jest zwykle złożony na złożonym kodzie, który jest trudniejszy do obsługi i trudniejszy do ulepszenia.
Więc dla mnie, jeśli wiesz lub możesz być całkiem pewien, że coś jest wymogiem lub spowoduje problem, rozwiąż je, jeśli nie, to nie.
Być może będziesz musiał wrócić i przerobić go, gdy okaże się, że wymaganie było szersze niż pierwotnie wprowadzone, ale ogólnie całkowity wysiłek włożony w projekt będzie nadal mniejszy, ponieważ w większości przypadków tak się nie stanie.