Nie do końca zgadzam się z odpowiedzią maple_shaft, ale w komentarzu nie było wystarczająco dużo miejsca, aby powiedzieć cały mój kawałek! ;-)
Zgadzam się, że każdy programista może i powinien być architektem, ale to nie znaczy, że każdy programista powinien być odpowiedzialny za architekturę całego produktu lub systemu. Co więcej, nie sądzę, aby można było pomalować każdy zespół architektoniczny za pomocą tego samego szerokiego pędzla, a po prawidłowym wykonaniu zespoły architektoniczne mogą wnieść wielką wartość do całego procesu opracowywania produktu. Błędne przekonanie jest takie, że architekci powinni dyktować każdy aspekt projektu systemu. Zamiast tego powinni skupić się na projekcie wyższego poziomu i pozostawić szczegóły implementacji swoim zespołom programistycznym. Nie oznacza to jednak, że programiści nie powinni być zaangażowani w proces planowania i projektowania od samego początku.
Im większy i bardziej modułowy, a ostatecznie bardziej złożony produkt, tym bardziej prawdopodobne jest, że znajdziesz różne części produktu obsługiwane przez różne zespoły programistów. Takie zespoły nie muszą rozumieć systemu jako całości, pod warunkiem, że mają pełne zrozumienie części systemu, za które są odpowiedzialne. Często te dodatkowe zespoły są zatrudniane jako podwykonawcy w konkretnym celu opracowania modułu w konkretnym obszarze technologii, w którym architekci lub inne zespoły mogą nie mieć specjalistycznej wiedzy. Moje szczególne talenty polegają na opracowywaniu interfejsów API, a ja jeszcze nie widziałem dobrze przemyślany interfejs API, który został opracowany całkowicie ekologicznie, nie powodując jednocześnie bałaganu pod względem użyteczności lub nie wymagało to, aby ktoś się wyróżniał jako osoba, która zapewniła poziom jednolitości między różnymi aspektami API. Mogę wymienić wiele przykładów i powodów, ale nie sądzę, że takie sytuacje to BS z wieży z kości słoniowej, że wielu może tak uważać. Niestety, istnieje wiele miejsc, szczególnie w sektorach obrony, medycyny i finansów, w których paranoja korporacyjna skutkuje słabo określonym i jeszcze słabiej zarządzanym rozwojem produktu, którego jestem pewien, że najbardziej interesował go wałek klonowy. Sądzę, że są to rzeczy, które nadają architektom trochę źle zasłużone złe imię (ogólnie rzecz biorąc). Niestety, istnieje wiele miejsc, szczególnie w sektorach obrony, medycyny i finansów, w których paranoja korporacyjna skutkuje słabo określonym i jeszcze słabiej zarządzanym rozwojem produktu, którego jestem pewien, że najbardziej interesował go wałek klonowy. Sądzę, że są to rzeczy, które nadają architektom trochę źle zasłużone złe imię (ogólnie rzecz biorąc). Niestety, istnieje wiele miejsc, szczególnie w sektorach obrony, medycyny i finansów, w których paranoja korporacyjna skutkuje słabo określonym i jeszcze słabiej zarządzanym rozwojem produktu, którego jestem pewien, że najbardziej interesował go wałek klonowy. Sądzę, że są to rzeczy, które nadają architektom trochę źle zasłużone złe imię (ogólnie rzecz biorąc).
Więc gdzie jest środek, którego szukał PO? Odpowiedzią jest otwarcie kanałów komunikacji. Architekci muszą przekazać specyfikacje opisujące ich projekty wystarczająco szczegółowo, aby zapewnić, że zespoły programistów zrozumieją, gdzie są granice. Historie i scenariusze fabularne w najszerszym tego słowa znaczeniu, w których wszystko uważa się za czarną skrzynkę. Architekci muszą wtedy zapewnić zespołom dostęp do czasu architekta, aby potwierdzić wszelkie założenia i odpowiedzieć na wszelkie pytania dotyczące specyfikacji, które wydają się zbyt szerokie lub niejasne. Potem naprawdę chodzi o upewnienie się, że poszczególne zespoły są świadome tego, nad czym pracują inne zespoły, i że wiedzą, z kim współpracować z innymi zespołami, aby zapewnić, że każda część systemu będzie dobrze grała z innymi częściami. Te zespoły spotykają się bezpośrednio. Gdy system zostanie zaprojektowany na najszerszym poziomie, architekci powinni być po prostu ludźmi, do których zwracają się zespoły, kiedy potrzebują kontroli poczytalności i aby zapewnić utrzymanie „wizji” produktu. Powinny również uwzględnić każdy wymagany proces integracji i zapewnić bardzo potrzebną „ochronę powietrzną” dla zespołów programistycznych od menedżerów, klientów i innych zainteresowanych stron, zapewniając jednocześnie, że te różne osoby mogą się spotkać, aby wypracować między im, jak rzeczy powinny działać.
Architekci IMHO powinni przede wszystkim być facylitatorami i komunikatorami, a projektantami - drugimi. Co do poziomu specyfikacji? Myślę, że najlepsi architekci to ci, którzy pytają swoje zespoły o poziom szczegółowości, jaki chce zespół, i między nimi znajduje równowagę, która działa. Różne zespoły mogą mieć różne wymagania w zakresie wymaganej ilości dokumentacji lub kierunku. Zespoły seniorów mogą znaleźć z grubsza narysowany schemat i szybka rozmowa może być wystarczająca, aby zacząć, podczas gdy zespoły zapełnione stosunkowo młodymi programistami mogą wymagać nieco więcej, aby je uruchomić. Przede wszystkim architekt musi zachęcać programistów do wykorzystywania własnych talentów projektowych, aby uzyskać najlepszy efekt końcowy z każdego zespołu.