@markone_dev: Fajnie, że wspominają, z drugiej strony w dyskusjach często się o tym zapomina i sprowadza rozwiązania do uniwersalnych prawd objawionych "dokumentacja jest zła clean code wystarczy", "nie pisz interface'ów go KISS", "pisz interface'y bo SOLID". Zresztą podając ten przykład z UX'ami, POsami też wpadłeś w tę pułapkę (no offence), chociaż osobiście uważam, że dużo ważniejsze od tego "w jaki sposób się pracuje" jest "z kim się pracuje". Jak zbierze się parę kompetentnych osób, to szybko znajdą sobie dobry sposób na efektywne dostarczanie "value". Jak się pracuje z dzbanami, to te procesy staną się jedynie okopami dla wszystkich obiboków, którzy będą udawać pracę, wszystko zgodnie z procedurami, zmiana działania prostej formatki trwa wieki. W ostatnim projekcie miałem takiego UX'a miglanca, który albo kompletnie nie ogarniał, albo szedł w ciężki over employment i kończyło się tym, że po kilku tygodniach dostawaliśmy projekt jakiejś banalnej formatki który może i dałby się zaimplementować, ale nikt z działającym mózgiem by tego nie zrobił. Wszystko okraszone workiem buzzwordów "persona oriented design", "cognitive evaluation", "A/B testing", a guzika nie dało się nacisnąć, bo był za mały na telefon, albo zbiór list pojedynczego wyboru "zaprojektowano" na checkboxach.
A już w temacie - jeżeli jako programista mam ogólne pojęcie do czego ma służyć aplikacja, to całkowicie wystarczy mi szkic UI + notatki dotyczące zachowania "język graficzny" dla aplikacji, czyli kolorki, i np. określenie "material design". Zaimplementuję "jak mi się podoba" zgodnie z tymi wytycznymi, zgarnę UX'a na godzinę, żeby mu pokazać co zostało zrobione, dojdziemy do porozumienia co i jak trzeba zmienić i UI zrobiony. Przy okazji wyjdą mi wszystkie interface'y, których potrzebuję, żeby ten UI działał, zrobię swagger file'a do tego, dopiszę testy do mocka i dam na backend. Jako backendowiec pomarudzę swoje, ale w końcu zaimplementuję, przy okazji unikając problemów, że API, które sobie wymyśliłem dla jakiegoś tam front'u będzie wymagało od frontu wysyłania 100 żądań przy ładowaniu każdego ekranu. Nie jest to ogólnie najlepszy sposób pracy, ale sprawdza się w przypadku ~małych aplikacji mobilnych/webowych, jeżeli tylko wszystkie zaangażowane osoby są w jednym miejscu (łatwość komunikacji), chcą zrobić dobry produkt i mają minimum skilla.
Nie sprawdzi się, jeżeli design jest podstawową wartością aplikacji, został zamówiony na freelance.com i stał się zabetonowany, którakolwiek ze stron jest przekonana o swojej uber zajebistości, albo domena jest na tyle skomplikowana, że nie da się sensownie zobrazować jej głównego sensu szkicami.
Oczywiście nie wyklucza to wykorzystania elementów DDD, bo w końcu np. nie ma sensu w aplikacji nazywać klienta użytkownikiem, skoro zamawiający nazywa go klientem.
Co do łączenia UX i domeny,. konflikt trochę pozorny moim zdaniem. Jeżeli mamy jakiegoś użytkownika (aktora), to zamawiający chce na ogół pozwolić temu aktorowi na wykonywanie pewnych działań (znaleźć informację o produkcie, dodać go do koszyka, zamówić...). Taka "persona oriented app" staje się zamkniętym kawałkiem systemu, który z resztą systemu powinien się wiązać możliwie zwięzłym API. Jednocześnie jako klient sklepu, nie mam najmniejszej ochoty wiedzieć jak zorganizowana jest "domena" i w jaki sposób sklep będzie obsługiwał moje zamówienie.