Jestem wielkim zwolennikiem projektowania danego problemu i nie wysadzam twojego projektu, próbując odgadnąć wszystkie przypadki, które musisz uwzględnić, ponieważ „pewnego dnia możemy go potrzebować”.
Zasadniczo, biorąc pod uwagę listę konkretnych wymagań, zaprojektuj w oparciu o to, nie oznacza to jednak, że nie powinieneś:
- skonfiguruj aspekty projektu, a nie koduj je na stałe w swoim rozwiązaniu. Albo przez parametry przekazane w czasie wykonywania, albo przez zewnętrzną konfigurację odczytaną przy uruchomieniu (lub po HUP'ingu).
- zasznuruj swój kod magicznymi liczbami,
- unikaj sprawdzania, czy istnieje już coś, co można ponownie wykorzystać, być może po dostosowaniu istniejącego rozwiązania, aby zapewnić podejście odpowiednie dla istniejącej sytuacji, a także dla nowych wymagań.
Głównym problemem związanym z projektowaniem „możliwych przyszłości” jest to, że zawsze zgadujesz. Być może podejmowanie wykształconych domysłów, ale „kiedy przychodzi do odpychania” to wciąż tylko seria domysłów.
Robiąc to, masz również bardzo realną możliwość ściśnięcia rozwiązania, aby dopasować go do ogólnego przypadku (przypadków), zamiast rozwiązać konkretny problem, o którym mowa w Twoich znanych wymaganiach.
Co to mówi „Gdy wszystko, co masz, to młotek, wszystko zaczyna wyglądać jak gwóźdź”.
Chciałbym mieć funta za każdym razem, gdy słyszę, jak ktoś mówi: „Ale jest to rozwiązanie, które można lepiej dostosować do tych ogólnych przypadków, które możemy zobaczyć w przyszłości”.