{"id":12,"date":"2026-03-01T12:11:40","date_gmt":"2026-03-01T11:11:40","guid":{"rendered":"https:\/\/test.high-five.cc\/?p=12"},"modified":"2026-03-01T12:12:15","modified_gmt":"2026-03-01T11:12:15","slug":"art3","status":"publish","type":"post","link":"https:\/\/test.high-five.cc\/?p=12","title":{"rendered":"Skoro m\u0105dre g\u0142owy od 1968 roku nie wiedz\u0105, czym jest architektura, to dlaczego Tw\u00f3j kod bez niej sp\u0142onie?"},"content":{"rendered":"<p>Samozag\u0142ad\u0119 projekt\u00f3w powstrzymuje architektura, nie tw\u00f3j sprytny kod. Zapomnij o zakurzonych ksi\u0119gach, kt\u00f3re juniorzy omijaj\u0105 w ksi\u0119garniach szerokim \u0142ukiem. Wyobra\u017a sobie czterech typ\u00f3w od backendu. Ka\u017cdy z nich inaczej klepie format b\u0142\u0119du HTTP 400, bo \u201etak mu si\u0119 wydaje lepiej\u201d. Sza\u0142u dostajesz w pi\u0105tek o 16:47. Slack wyje bez lito\u015bci. Odkry\u0142 w\u0142a\u015bnie frontendowiec, \u017ce <code>errorCode<\/code> raz przychodzi jako elegancki string, a raz jako surowa liczba od czapy. Z\u017ceraj\u0105 sprinty bez popitki takie cyrki. Jire w wysypisko \u015bmieci zamieniaj\u0105, do kt\u00f3rego nikt bez maski gazowej i litra melisy zagl\u0105da\u0107 nie chce.<\/p>\n<p>Komunikacyjny syf w czystej postaci nas zabija, nie problem techniczny. Wsp\u00f3lny j\u0119zyk, umow\u0119, wr\u0119cz krwawy cyrograf \u2013 tak traktuj architektur\u0119. W nag\u0142\u00f3wku ustalamy licznik, w URL-ach rzeczowniki i ja\u0142owej dyskusji koniec. Robisz to, \u017ceby przy ka\u017cdym commicie nowa osoba w zespole z fus\u00f3w wr\u00f3\u017cy\u0107 nie musia\u0142a. Repozytorium to kto\u015b otworzy trzy miesi\u0105ce po Twoim odej\u015bciu. Wiedzie\u0107 musi, co autor mia\u0142 na my\u015bli, zanim robot\u0119 na tak\u0105 z darmowymi owocami i lepszym biurkiem zmieni\u0142. Tylko koderem jeste\u015b bez tego kontraktu, instrukcjami <code>if<\/code> sypi\u0105cym jak konfetti na bardzo smutnej stypie.<\/p>\n<hr \/>\n<h2 id=\"baza-danych-to-nie-projekt-systemu\">Baza danych to nie projekt systemu<\/h2>\n<p>Architektura to nie baza danych. Raz a dobrze to zapami\u0119taj, bo w jedn\u0105 papk\u0119 juniorom te dwa poj\u0119cia cz\u0119sto si\u0119 zlewaj\u0105. Architektem nie czyni ci\u0119 narysowanie trzech tabel w MySQL Workbenchu i po\u0142\u0105czenie ich kreskami. Dla dzieciak\u00f3w to tylko ciasna piaskownica. Gdy w system walnie 50 tysi\u0119cy zapyta\u0144 na sekund\u0119 z pr\u0119dko\u015bci\u0105 karabinu maszynowego, prawdziwa zabawa si\u0119 zaczyna. B\u0142\u0119dy plu\u0107 zacznie baza szybciej, ni\u017c ty \u201erollback\u201d zd\u0105\u017cysz powiedzie\u0107, je\u015bli pul\u0119 po\u0142\u0105cze\u0144 ola\u0142e\u015b i wszystko jak leci joinujesz. Spos\u00f3b, w jaki te dane oddychaj\u0105, to architektura, a nie to, czy 30 czy 60 znak\u00f3w ma pole <code>username<\/code>.<\/p>\n<p>| Cecha | Porz\u0105dny Monolit | Mikroserwisowy Ob\u0142\u0119d |<\/p>\n<p>| &#8212; | &#8212; | &#8212; |<\/p>\n<p>| <strong>Op\u00f3\u017anienia<\/strong> | Prawie zerowe (wywo\u0142ania funkcji) | Wysokie (sie\u0107, serializacja JSON) |<\/p>\n<p>| <strong>Debugowanie<\/strong> | Proste (jeden stack trace) | Koszmarne (\u015bledzenie log\u00f3w w 10 miejscach) |<\/p>\n<p>| <strong>Koszty<\/strong> | Przewidywalne | Zale\u017cne od humoru dostawcy chmury |<\/p>\n<p>Legendy ju\u017c kr\u0105\u017c\u0105 o tych nieszcz\u0119snych mikroserwisach w budce z kebabem. Wepchn\u0119li\u015bmy tam 12 kontener\u00f3w, bo starociem i nud\u0105 monolit nam \u015bmierdzia\u0142. Tragiczny by\u0142 efekt. Trzy sekundy bite trwa\u0142o pobranie listy sos\u00f3w. Autoryzacj\u0119, serwis stan\u00f3w i osobn\u0105 baz\u0119 dodatk\u00f3w zaliczy\u0107 musia\u0142 ka\u017cdy request o sos czosnkowy. O propagacji kontekstu zapomnieli\u015bmy, wi\u0119c bardziej ni\u017c b\u0142\u0105d kompilacji C++ o trzeciej nad ranem bola\u0142o debugowanie tego \u015bcieku w logach. Pod ci\u0119\u017carem JSON-\u00f3w sie\u0107 nam po prostu zdech\u0142a. Na samo ja\u0142owe gadanie us\u0142ug mi\u0119dzy sob\u0105 marnowali\u015bmy 40% zasob\u00f3w. Bez mrugni\u0119cia okiem te mikro-cuda zaora\u0142em. System nagle jak po reanimacji o\u017cy\u0142 \u2013 jeden prosty monolit, stara baza, dwa JOIN-y. Warunki dyktowa\u0107 musi skala projektu. Zwyk\u0142y kretynizm projektowy pod p\u0142aszczykiem nowoczesno\u015bci inaczej uprawiasz.<\/p>\n<hr \/>\n<h2 id=\"finansowe-harakiri-przez-pdf-y\">Finansowe harakiri przez PDF-y<\/h2>\n<p>Cz\u0119\u015bciej, ni\u017c my\u015blisz, zdarza si\u0119 finansowe samob\u00f3jstwo przez dokumentacj\u0119. Projekt w fintechu z bud\u017cetem 480 000 z\u0142 widzia\u0142em. Na dokumentacj\u0119 funkcjonaln\u0105 posz\u0142o z tego 110 000 z\u0142, a na \u201erozszerzon\u0105 analiz\u0119 przypadk\u00f3w brzegowych\u201d 62 000 z\u0142. Development z nud\u00f3w sta\u0142 i kwicza\u0142. 147 scenariuszy logowania zd\u0105\u017cyli opisa\u0107 analitycy, zanim backend w Javie pierwsze zadanie dosta\u0142. W tym taki, w kt\u00f3rym u\u017cytkownik zmienia przegl\u0105dark\u0119, dwa VPN-y ma w\u0142\u0105czone i jazzu s\u0142ucha w trakcie resetu has\u0142a. Serio, nikt tego nie czyta\u0142. Instrukcj\u0105 obs\u0142ugi ma by\u0107 dokumentacja, a nie epopej\u0105 narodow\u0105.<\/p>\n<p>Wi\u0119ksza iluzja kontroli nad chaosem pojawia si\u0119, im grubszy jest PDF. Ryzyko obni\u017ca specyfikacja na 220 stron? Dok\u0142adnie odwrotnie jest. Na interpretacj\u0119 zapisu o \u201eelastycznych scenariuszach rabatowych\u201d zesp\u00f3\u0142 trzy sprinty traci. Co to w og\u00f3le znaczy? Kwotowy czy procentowy rabat? Silnik w Drools czy regu\u0142y w bazie? Od humoru architekta to zale\u017cy. I najwi\u0119cej kosztuje w\u0142a\u015bnie to \u201ezale\u017cy\u201d. Ogromny koszt poznawczy generuj\u0105 za d\u0142ugie dokumenty. 40 minut junior czyta, a potem o kody b\u0142\u0119d\u00f3w i tak na Slacku pyta. Sygna\u0142, \u017ce za s\u0142owa, a nie za realn\u0105 warto\u015b\u0107 dla biznesu kto\u015b fakturuje, to specyfikacja powy\u017cej 80 stron dla \u015bredniego projektu.<\/p>\n<blockquote><p><strong>Definicja ekspercka:<\/strong> Architektura to moment, w kt\u00f3rym Twoje za\u0142o\u017cenia l\u0105duj\u0105 na stole. README, prosty diagram w draw.io, czasem C4 Model. Nie forma ma znaczenie, tylko tre\u015b\u0107. Redukowanie niejednoznaczno\u015bci to jej jedyna robota.<\/p><\/blockquote>\n<p>Od dekad ko\u0142em historia si\u0119 toczy. Nad \u201esoftware crisis\u201d m\u0105drale p\u0142aka\u0142y ju\u017c w 1968 roku na konferencji NATO. Bo projekty trzy razy szybciej bud\u017cet przekracza\u0142y, ni\u017c kod powstawa\u0142, pad\u0142o to has\u0142o w Garmisch-Partenkirchen. W py\u0142 harmonogramy si\u0119 rozpada\u0142y. W\u0142asnym \u017cyciem \u017cy\u0142 kod pisany w Fortranie, papierowe analizy totalnie ignoruj\u0105c. Naiwnie my\u015bleli, \u017ce wszystko naprawi\u0105 metody in\u017cynierskie. Reacta, Springa i ORM-y generuj\u0105ce zapytania SQL d\u0142u\u017csze ni\u017c twoje ca\u0142e CV masz dzi\u015b. Ale prosto w tw\u00f3j monitor \u015bmiej\u0105 si\u0119 duchy z 1968 roku, je\u015bli nie kumasz, dlaczego wydajno\u015b\u0107 zabija N+1 query. Pobierasz list\u0119 100 autor\u00f3w, a potem dla ka\u017cdego z nich osobno pytasz baz\u0119 o ksi\u0105\u017cki. Gratulacje, 101 zapyta\u0144 w\u0142a\u015bnie wys\u0142a\u0142e\u015b tam, gdzie wystarczy\u0142o jedno porz\u0105dne po\u0142\u0105czenie.<\/p>\n<hr \/>\n<h2 id=\"mapy-google-dla-koderow\">Mapy Google dla koder\u00f3w<\/h2>\n<p>\u017beby\u015b w my\u015blach koleg\u00f3w czyta\u0107 nie musia\u0142, wymy\u015blono zasady Kruchtena i model C4. Jeden obrazek w PowerPoincie zrobiony na kolanie to nie jest architektura. O tym samym systemie to kilka r\u00f3\u017cnych opowie\u015bci. Inaczej z DevOps-em rozmawiasz, inaczej z backendowcem. Widok logiczny, procesowy, fizyczny i developerski da\u0142 nam Kruchten. Skal\u0119 jak Google Maps porz\u0105dkuje C4. Od kontekstu (widok ca\u0142ego miasta) do kodu (numer mieszkania z krzyw\u0105 wycieraczk\u0105). Ale \u015bmierteln\u0105 pu\u0142apk\u0105 bywa to ostatnie powi\u0119kszenie.<\/p>\n<p>Implementacj\u0119 opisujesz, a nie architektur\u0119, gdy poziom kodu rysowa\u0107 zaczynasz. Klasy z IDE pokazujesz, kt\u00f3re jutro skasujesz, zamiast granic odpowiedzialno\u015bci. Inaczej to i tak za trzy sprinty b\u0119dzie wygl\u0105da\u0107. Z diagramem zostaniesz, kt\u00f3ry warto\u015b\u0107 sentymentaln\u0105 i absolutnie zero operacyjn\u0105 ma. Gorsze z\u0142o ni\u017c ca\u0142kowity brak to dokumentacja przeterminowana. Gdzie jeden modu\u0142 si\u0119 ko\u0144czy, a zaczyna drugi \u2013 to ma m\u00f3wi\u0107 architektura. Po jakim protokole i kto z kim gada. Domena repozytorium i rygorystycznego code review to klasy i metody, nie diagram dla 12-osobowego zespo\u0142u, kt\u00f3ry go i tak nie otworzy.<\/p>\n<p>W poniedzia\u0142ek rano jak to ugry\u017a\u0107 bez b\u00f3lu g\u0142owy? Brzytw\u0105 niejednoznaczno\u015b\u0107 architektura wycina\u0107 musi. Tyle papieru wystarczy, ile koledze bez dzwonienia do ciebie w trakcie Twojego urlopu w Egipcie funkcj\u0119 napisa\u0107 pozwoli. Na granicach modu\u0142\u00f3w si\u0119 skup. Je\u015bli jeden klockek na inny wymienisz, co wybuchnie? Pola minowego z \u201equick fix\u00f3w\u201d nie buduj. Dymiace pole bitwy masz, nie projekt, je\u015bli 70% twoich commit\u00f3w to \u201epoprawka na szybko\u201d. Szybciej ni\u017c PowerPoint zmienia si\u0119 kod. Z tym si\u0119 pog\u00f3d\u017a.<\/p>\n<hr \/>\n<h2 id=\"kontrakt-spoeczny-zamiast-magii\">Kontrakt spo\u0142eczny zamiast magii<\/h2>\n<p>W\u0105tpliwo\u015b\u0107 tu si\u0119 pojawia: czy kontrolujesz w og\u00f3le to, co piszesz? Tylko ograniczenie jego artystycznej wolno\u015bci \u2013 tak junior cz\u0119sto o architekturze my\u015bli. \u201eZmieni\u0107 mo\u017cna to p\u00f3\u017aniej\u201d \u2013 naiwni m\u00f3wi\u0105. Mo\u017cna, ale dla bud\u017cetu matematyczna rze\u017ania to ka\u017cda zmiana interfejsu przy 50 klientach. Kontrakt spo\u0142eczny to architektura. Czytelnie ma by\u0107, nie literacko. Rozmow\u0119 w zespole zabija zbyt precyzyjny opis. Co\u015b prostszego zaproponowa\u0107 junior si\u0119 boi, bo \u201einaczej jest w dokumencie\u201d. Kto\u015b pisa\u0142 dokument, kto ogranicze\u0144 ORM-a na oczy nie widzia\u0142. Tylko w urz\u0119dzie skarbowym papier z rzeczywisto\u015bci\u0105 wygrywa.<\/p>\n<p>Po co to wszystko robimy? \u017beby\u015b szefa w my\u015blach czyta\u0107 nie musia\u0142. T\u0142umaczy\u0107 trzy razy tej samej prostej funkcji \u017ceby Product Owner nie musia\u0142. Sakramentalne: \u201eInaczej my\u015bla\u0142em, \u017ce to dzia\u0142a\u201d \u017ceby na daily nie pada\u0142o. Jednoznaczna umowa to architektura. W zbi\u00f3r lokalnych interpretacji bez niej projekt si\u0119 zamienia, a szybciej ni\u017c liczba Twoich commit\u00f3w d\u0142ug techniczny ro\u015bnie. I tylko cudze domys\u0142y b\u0119dziesz wtedy odkr\u0119ca\u0107 zamiast nowe funkcje pisa\u0107.<\/p>\n<p>O twarde zasady zadbaj, zamiast goni\u0107 za kolejnym frameworkiem. Z przekombinowaniem w 9 na 10 przypadk\u00f3w prostota wygrywa. Redukowanie niepewno\u015bci to architektura, nie rysowanie strza\u0142ek dla zabawy. Jedna strona README z jasno okre\u015blonymi zasadami gry czasem wystarczy. \u015awi\u0119te musz\u0105 by\u0107 te zasady. Inaczej sp\u0142onie Tw\u00f3j kod, a Ty razem z nim, deadline\u2019y goni\u0105c, kt\u00f3rych nawet w alternatywnej rzeczywisto\u015bci dotrzyma\u0107 si\u0119 nie da.<\/p>\n<p>Autor: programista z 15 letnim doswiadczeniem, expert, redaktor z zacieciem do pisania lekkich i zartobliwych tekstow<\/p>\n<hr \/>\n<p>Chcia\u0142by\u015b, abym zaprojektowa\u0142 dla Ciebie prosty kontrakt komunikacyjny dla Twojego obecnego projektu?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kr\u00f3tki opis artyku\u0142u widoczny w wynikach wyszukiwania.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[7,6],"class_list":["post-12","post","type-post","status-publish","format-standard","hentry","category-technologia","tag-automatyzacja","tag-python"],"_links":{"self":[{"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/posts\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12"}],"version-history":[{"count":2,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/posts\/12\/revisions"}],"predecessor-version":[{"id":18,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=\/wp\/v2\/posts\/12\/revisions\/18"}],"wp:attachment":[{"href":"https:\/\/test.high-five.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/test.high-five.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}