Wydaje się to rzadkie, ale powszechne doświadczenie, że czasami pracujesz nad projektem i nagle coś niespodziewanie się pojawia, rzuca ogromny klucz w prace i bardzo zwiększa złożoność.
Na przykład pracowałem nad aplikacją, która rozmawiała z usługami SOAP na różnych innych komputerach. Wymyśliłem prototyp, który działał dobrze, a następnie opracowałem regularny interfejs i ogólnie wszystko działało w przyjemny, dość prosty i łatwy do naśladowania sposób. Działało świetnie, dopóki nie rozpoczęliśmy testowania w szerszej sieci i nagle strony zaczęły przekraczać limit czasu, ponieważ opóźnienie połączeń i czas wymagany do wykonania obliczeń na zdalnych komputerach spowodowały przekroczenie limitu czasu żądań do usług mydlanych. Okazało się, że musimy zmienić architekturę, aby rozdzielić żądania na ich własne wątki i buforować zwrócone dane, aby można je było stopniowo aktualizować w tle, zamiast wykonywać obliczenia na podstawie żądania na żądanie.
Szczegóły tego scenariusza nie są zbyt ważne - w rzeczywistości nie jest to świetny przykład, ponieważ był dość przewidywalny, a ludzie, którzy napisali wiele aplikacji tego typu dla tego rodzaju środowiska, mogli go przewidzieć - z tym wyjątkiem, że ilustruje sposób, w jaki można zacząć od prostej przesłanki i modelu i nagle do eskalacji projektu dochodzi do eskalacji złożoności.
Jakie masz strategie radzenia sobie z tego rodzaju zmianami funkcjonalnymi, których potrzeba pojawia się - często w wyniku czynników środowiskowych, a nie zmian specyfikacji - później w procesie rozwoju lub w wyniku testowania? Jak zachować równowagę między unikaniem przedwczesnego ryzyka optymalizacji / YAGNI / nadmiernej inżynierii projektowania rozwiązania, które łagodzi potencjalne, ale niekoniecznie prawdopodobne problemy, w przeciwieństwie do opracowywania prostszego i łatwiejszego rozwiązania, które może być tak samo skuteczne, ale nie obejmuje gotowości do każda możliwa ewentualność?
Edycja: odpowiedź Szalonego Eddiego zawiera: „wysysasz to i znajdujesz najtańszy sposób na wdrożenie nowej złożoności”. To sprawiło, że pomyślałem o czymś ukrytym w pytaniu, ale nie podniosłem się specjalnie.
Po uderzeniu w ten guz i wprowadzeniu niezbędnych zmian. Czy robisz coś, co utrzyma projekt tak blisko harmonogramu, jak to możliwe, ale może wpłynąć na łatwość konserwacji, czy wrócisz do swojej architektury i przerobisz ją na bardziej szczegółowym poziomie, który może być łatwiejszy do utrzymania, ale odepchnie wszystko podczas rozwoju?