Scenka otwierająca i punkt wyjścia: jak dziś budujemy systemy
Zespół siedzi w salce konferencyjnej. Po jednej stronie stoi PowerPoint z napisem „Przepisujemy monolit na mikrousługi”, po drugiej tablica z listą incydentów z ostatniego kwartału. CTO pyta: „Albo robimy to teraz, albo za dwa lata nikt już nie dotknie tego kodu – co wybieramy?”. Zapada cisza, bo każdy wie, że żadna odpowiedź nie jest naprawdę bezpieczna.
Dzisiejszy krajobraz architektury aplikacji to mieszanka: trochę starego monolitu, trochę nowych mikrousług, masa usług chmurowych, kilkanaście integracji „na szybko”. Z jednej strony jest „stary, ale stabilny” system, który utrzymuje biznes przy życiu. Z drugiej – obietnica nowoczesnych, chmurowych rozwiązań, które mają dawać elastyczność, skalowalność i szybsze wdrożenia, ale w praktyce często dokładają ogromną złożoność.
Kontrast: stabilny monolit vs złożony świat chmury
Klasyczny monolit wciąż działa w wielu firmach. Jedna baza danych, jeden backend, czasem gruby klient. Deploy raz w tygodniu lub raz w miesiącu, spójne logi, jedna paczka do przejrzenia przy błędzie. Główne problemy: rosnący dług technologiczny, coraz trudniejsza rekrutacja programistów chętnych do pracy z „oldschoolowym” stosem, ograniczona skalowalność organizacyjna (kilkanaście zespołów w jednym repo).
Nowoczesne systemy chmurowe są z kolei rozproszone: dziesiątki usług, osobne repozytoria, Kubernetes, kolejki, strumienie, eventy, API gateway, feature flage, CI/CD, infrastruktura jako kod. Na prezentacji wygląda to imponująco. Na co dzień oznacza ogromny wysiłek włożony w utrzymanie spójności, bezpieczeństwa, monitoringu i wiedzy domenowej rozproszonej po wielu zespołach.
Rzeczywistość większości organizacji to hybryda: monolit, wokół którego narasta pierścień mikrousług i serwisów chmurowych. Migracje trwają latami, a koszt mentalny i organizacyjny często jest niedoszacowany.
Sygnały, że dzisiejsze podejścia zaczynają się kruszyć
W wielu firmach widać wyraźne symptomy, że obecne podejścia do architektury aplikacji nie wytrzymają kolejnych 10 lat bez poważnego przeprojektowania:
- Rosnące koszty operacyjne – rachunki za chmurę rosną szybciej niż przychody, a nikt już nie wie, które usługi naprawdę są potrzebne i jakie mają profile obciążenia.
- Złożoność, której nie da się „ogarnąć głową” – nowi ludzie potrzebują miesięcy, by zrozumieć podstawowe przepływy. Incydenty stają się coraz trudniejsze do zdiagnozowania, bo ścieżka żądania prowadzi przez kilkanaście systemów.
- Presja rynku – produkt musi rozwijać się szybciej, integracji jest coraz więcej, rosną wymagania związane z danymi, AI, prywatnością i zgodnością z regulacjami.
- Zmęczenie architektonicznymi „rewolucjami” – po fali SOA, potem mikrousług, cloud-native i serverless, zespoły zaczynają być sceptyczne wobec kolejnych radykalnych zmian.
Teza: architektura przyszłości to przepływy wartości i autonomia zespołów
Za 10 lat słowo „mikrousługi” najpewniej będzie spowszedniałe, tak jak dziś SOA. Głównym kryterium projektowania architektury nie będzie etykietka technologiczna, ale przepływ wartości biznesowej oraz stopień autonomii zespołów produktowych. To, czy dany fragment systemu zrealizowany jest jako monolit, mikrousługa, funkcja serverless czy moduł w platformie, stanie się wtórne wobec pytania: czy zespół jest w stanie samodzielnie dostarczać zmiany i czy cały przepływ – od pomysłu do produkcji – jest płynny.
W praktyce oznacza to lekki odwrót od dogmatycznego dzielenia wszystkiego na mikrousługi i przejście do bardziej pragmatycznych, hybrydowych modeli: modularnych monolitów, „team-sized services”, architektur zorientowanych na zdarzenia i dane oraz silnych platform wewnętrznych, które przejmą dużą część złożoności technicznej.
Krótka historia: od monolitu do mikrousług – co tak naprawdę zyskaliśmy, a co zepsuliśmy
Klasyczny monolit: zalety, o których łatwo zapomnieć
Monolit kojarzy się dziś wielu osobom z „legacy”, ale ten model ma kilka trudnych do przecenienia atutów:
- Spójność – jeden proces, jedna baza, jedno miejsce na logikę biznesową. Zmiana przekrojowa (np. nowy sposób liczenia rabatów) często oznacza modyfikację kilku klas, a nie kilkunastu usług.
- Prostsza operacja – jeden artefakt do zbudowania, jedno wdrożenie, prostsze procedury rollbacku. Zespół SRE lub ops ma relatywnie niewielką przestrzeń do ogarnięcia.
- Łatwiejsze debugowanie – lokalne odtworzenie problemu jest możliwe, bo całość logiki siedzi w jednym procesie. Proste logowanie często wystarcza do diagnozy.
- Niższy próg wejścia – nowa osoba widzi „cały świat” w jednym repozytorium, może łatwiej zbudować sobie obraz domeny.
Problem zaczyna się, gdy monolit rośnie bez dyscypliny. Brak wyraźnej modularności, niekontrolowane zależności między modułami, „święta” baza danych, do której każdy dokłada, jak chce. Po kilku latach zmiana w jednym miejscu potrafi wywołać efekt motyla w zupełnie innym obszarze systemu.
SOA, mikrousługi i cloud-native: fale obietnic
Architektura zorientowana na usługi (SOA) miała wprowadzić porządek: serwisy biznesowe, centralna szyna (ESB), kontrakty. W praktyce wiele wdrożeń skończyło jako „Enterprise Service Bus as a Big Ball of Mud” – jeden punkt skupiający złożoność, vendor lock-in i sporo narzutów.
Mikrousługi obiecywały odchudzenie podejścia: małe, autonomiczne serwisy, każdy z własną bazą, niezależnymi wdrożeniami, zwinnością. Cloud-native dorzuciło do tego kontenery, orkiestrację, autoskalowanie i DevOps. Te idee rzeczywiście przyniosły spore korzyści:
- łatwiejsze skalowanie wybranych fragmentów systemu,
- możliwość równoległej pracy wielu zespołów nad niezależnymi usługami,
- lepszą izolację awarii w dobrze zaprojektowanych systemach,
- bogaty ekosystem narzędzi (Kubernetes, service mesh, observability, IaC).
Problem w tym, że w wielu organizacjach mikrousługi stały się celem samym w sobie, a nie środkiem do osiągnięcia konkretnych efektów biznesowych. Powstawały setki małych serwisów, często bez jasnych granic domenowych, z masą powiązań sieciowych. Złożoność rozkładała się na tyle miejsc, że ciężko ją było w ogóle dostrzec, nie mówiąc o zarządzaniu nią.
Prawdziwe motywacje migracji: nie tylko technologia
Powody, dla których firmy decydowały się na migrację od monolitu do mikrousług, rzadko były czysto techniczne. Najczęściej pojawiały się trzy mocne motywacje:
- Skalowanie organizacji – monolit utrudniał pracę kilkunastu czy kilkudziesięciu zespołów, bo każdy commit dotykał tych samych artefaktów, testów, pipelines.
- Niezależność wdrożeń – oczekiwanie, że każdy zespół będzie mógł wypuszczać zmiany częściej niż „release raz na sprint”, bez czekania na inne moduły.
- Presja wizerunkowa – bycie „nowoczesnym” w oczach rynku, kandydatów, inwestorów. Hasła „mikrousługi” i „cloud-native” dobrze wyglądają w prezentacjach.
Te motywacje są zrozumiałe, ale często prowadziły do pomijania twardej strony kosztów: inwestycji w platformę, kompetencje SRE, monitoring, bezpieczeństwo, mechanizmy zarządzania danymi w rozproszonym środowisku.
Ukryte koszty: eksplozja złożoności i distributed monolith
Rozbicie monolitu na dziesiątki mikrousług rzadko oznaczało automatyczny wzrost jakości architektury. Często widoczny był schemat: te same złe nawyki projektowe, tylko teraz rozsmarowane na wiele repozytoriów i usług. Stąd pojęcie „distributed monolith” – rozproszonego monolitu, w którym usługi są mocno sprzężone, często komunikują się synchronicznie, mają wspólne modele danych i zmiany wymagają „koordynowanych deployów”.
Do tego dochodziły:
- większe koszty poznawcze – trudniej zbudować mentalny model całości,
- bardziej skomplikowane ścieżki debugowania – trace’y przechodzące przez wiele warstw,
- rozbudowane systemy do logowania i obserwowalności – które same w sobie stanowią dodatkową architekturę,
- ryzyko „architektury slajdów” – coś wygląda dobrze na diagramie, ale w praktyce generuje mnóstwo tarcia.
W efekcie część organizacji zaczęła robić krok wstecz: konsolidować usługi, upraszczać architekturę, szukać złotego środka między monolitem a mikrousługami – stąd m.in. rosnąca popularność podejścia modular monolith.
Seria kompromisów, nie prosta linia postępu
Rozwój architektury aplikacji nie przypomina marszu od „gorszego” monolitu do „lepszych” mikrousług i „jeszcze lepszych” serverless. To ciąg kompromisów między złożonością, wydajnością, niezawodnością, kosztami i możliwościami organizacji. Za 10 lat ten wzór się nie zmieni: zmienią się tylko narzędzia, presje zewnętrzne i akcenty.
Następne pokolenie architektur będzie musiało poradzić sobie z jeszcze większą liczbą integracji, wyższymi wymaganiami regulacyjnymi, wszechobecną AI i bardziej rozproszonymi zespołami. Wygrywać będą nie ci, którzy wybiorą „modny wzorzec”, ale ci, którzy nauczą się świadomie zarządzać kompromisami i trzymać złożoność w ryzach.

Fundamentalne siły, które ukształtują architekturę za 10 lat
Cztery główne wektory zmian
Architektura aplikacji przyszłości nie powstanie w próżni. Będzie konsekwencją kilku silnych trendów, które już są widoczne, a w kolejnej dekadzie jeszcze przyspieszą:
- Tempo biznesu – czas od pomysłu do wdrożenia mierzy się w dniach, a nie kwartałach. Produkt cyfrowy musi reagować na dane i użytkowników niemal w czasie rzeczywistym.
- Chmura i edge – aplikacje będą rozciągnięte od centralnych regionów chmurowych, przez multi-cloud, aż po brzeg (urządzenia IoT, przetwarzanie blisko użytkownika).
- Dane i AI – modele ML/AI staną się integralną częścią większości systemów. Dane przestaną być tylko „produktem ubocznym” transakcji; staną się podstawą przewagi konkurencyjnej.
- Regulacje i bezpieczeństwo – prywatność, suwerenność danych, audytowalność decyzji algorytmicznych, odporność na ataki. To nie dodatki, ale wymagania pierwszej klasy.
Każdy z tych wektorów wpływa na decyzje architektoniczne. Np. rosnące tempo biznesu promuje autonomiczne, małe zespoły i rozwiązania, które minimalizują zależności między nimi. Z kolei bezpieczeństwo i regulacje skłaniają do lepszej kontroli nad przepływem danych i do ustrukturyzowania miejsc, w których podejmowane są decyzje.
Rosnący koszt złożoności: ściana, której nie przeskoczymy
Do pewnego momentu rosnącą złożoność dało się „przykrywać” lepszymi narzędziami: platformy chmurowe, automatyzacja, CI/CD, zarządzanie konfiguracją, service mesh. Jednak każdy kolejny poziom abstrakcji jest sam w sobie źródłem złożoności. Dochodzimy do miejsca, w którym kolejne warstwy nie upraszczają całości, tylko ją maskują.
Za 10 lat kluczową kompetencją architektów będzie świadome ograniczanie złożoności – rezygnowanie z części możliwości, aby zyskać przewidywalność i zrozumiałość systemu. Zespoły będą musiały częściej zadawać pytanie „czego nie robimy?”, zamiast „co jeszcze możemy dodać?”.
Zobaczyć to można już dziś w rosnącej popularności rozwiązań typu platform engineering – zespoły tworzą wewnętrzne platformy, które ograniczają „swobodę” w imię standaryzacji. Przyszłe architektury będą coraz bardziej ustandaryzowane pod spodem, a różnicować się będą na poziomie domeny biznesowej.
Zespoły produktowe jako jednostka skali (Conway w praktyce)
Prawo Conwaya mówi, że systemy projektowane przez organizacje odzwierciedlają strukturę komunikacji w tych organizacjach. W praktyce: jeśli firma ma silosy, architektura będzie miała silosy. Jeśli firma zorganizowana jest wokół strumieni wartości (np. „onboarding klienta”, „obsługa płatności”), jej architektura będzie miała moduły odzwierciedlające te strumienie.
Za 10 lat standardem będą zespoły produktowe odpowiedzialne za określoną część wartości biznesowej, posiadające pełen stack: frontend, backend, dane, a nawet część infrastruktury. Architektura aplikacji stanie się de facto zewnętrznym obrazem struktur tych zespołów: „team-sized services” zamiast drobiazgowych mikrousług lub jednej gigantycznej aplikacji.
Co zostanie z monolitu: modularność zamiast „wszystko albo nic”
Spotkanie architektoniczne. Na ekranie diagram: kilkadziesiąt prostokątów, strzałki we wszystkie strony. Po godzinie ktoś półżartem mówi: „A może byśmy to znowu zrobili jako monolit?”. Pada śmiech, ale nikt do końca nie żartuje.
Kolejna dekada przyniesie renesans idei monolitu, ale nie w wersji „jedna kula błota”. Chodzi o monolit modularny – taki, który wewnątrz jest świadomie podzielony na niezależne moduły domenowe, a z zewnątrz wygląda jak jedna aplikacja lub produkt.
Modular monolith jako domyślny punkt startu
Nowe produkty będą coraz częściej zaczynać jako dobrze ustrukturyzowane monolity. Powody są przyziemne:
- niższy koszt startu – jedna baza, jedna aplikacja, jeden pipeline, mniej ruchomych części,
- szybsze iteracje – jedna zmiana kodu może dotknąć kilka modułów bez orkiestracji wydawniczej,
- mniejszy dług operacyjny – mniej komponentów do monitorowania, skalowania i zabezpieczania.
Różnica w stosunku do „starych” monolitów polega na disciplinie wewnętrznej. Moduły będą wydzielane w oparciu o bounded contexts, z jasno określonymi API modułowymi, kontraktami i niezależnymi testami. Technicznie: osobne pakiety, warstwy, często nawet odseparowane schematy w jednej bazie danych.
Za 10 lat mało kto będzie się chwalił „mamy monolit”. Zamiast tego pojawi się język typu: „mamy produkt zbudowany jako modularna aplikacja, z kilkoma wyeksponowanymi usługami”. Etykietki staną się mniej ważne od realnych granic w kodzie i danych.
Monolit za fasadą platformy
Jednocześnie wiele systemów będzie wyglądać na rozproszone, choć pod spodem pozostanie monolityczne. Typowy scenariusz: duży produkt działa jako modularny monolit, ale:
- na zewnątrz wystawia API platformowe (REST/GraphQL/gRPC) obsługiwane przez warstwę gateway,
- komunikuje się z otoczeniem przez event bus (pub/sub, strumienie),
- posiada parę wyodrębnionych usług tam, gdzie naprawdę jest zysk z niezależnego skalowania.
Z perspektywy innych zespołów i partnerów taki system będzie wyglądał jak „platforma usług”. Dla zespołu produktowego pozostanie jednak jedną aplikacją, budowaną, testowaną i wdrażaną w całości. To przesunięcie akcentu: rozproszenie na granicach organizacyjnych, spójność w obrębie zespołu.
Dobrze widać to dziś w produktach SaaS średniej wielkości. Z zewnątrz – setki endpointów, webhooki, integracje. W środku – jeden kod bazowy, kilka modułów biznesowych i parę osobnych komponentów (np. przetwarzanie batchowe, pipeline’y ML). Za 10 lat ten wzorzec będzie jeszcze bardziej świadomy, wspierany przez frameworki i narzędzia.
Refaktoryzacja zamiast heroicznej migracji
W miejsce spektakularnych „migracji do mikrousług” pojawi się raczej ciągła refaktoryzacja granic. Proces będzie wyglądał mniej więcej tak:
- Powstaje moduł w monolicie, z jasnym kontraktem wewnętrznym.
- Moduł dojrzewa, zespół rośnie, obciążenie rośnie.
- Granica staje się „gorąca” – dużo zmian, konflikty, wąskie gardło wydajnościowe.
- Na tej granicy pojawia się osobna usługa, która przejmuje fragment odpowiedzialności.
Z czasem część modułów pozostanie w monolicie na stałe, bo ich logika rzadko się zmienia albo nie ma zysku ze skalowania osobno. Inne będą „wychodzone” jako mikrousługi. Migracja stanie się nie jednorazowym projektem, a stałym sposobem pracy z architekturą.
Taki sposób myślenia spina w całość dwa światy: monolit jako domyślna forma wewnątrz zespołu i rozproszenie jako narzędzie do skalowania pomiędzy zespołami i domenami.

Co zostanie z mikrousług: „team-sized services” zamiast setek atomów
W jednym z fintechów zespół SRE policzył, że średni czas potrzebny na zrozumienie krytycznego przepływu płatności to… trzy spotkania i pięć osób. Usługa przechodziła przez kilkanaście mikrousług. Po dwóch awariach z rzędu pojawiło się pytanie: „Czy naprawdę potrzebujemy tego aż tyle?”.
W kolejnych latach przetrwa nie tyle sam termin „mikrousługi”, ile kilka głównych lekcji, jakie przyniosły.
Granice zgodne z domeną, nie z frameworkiem
Największą wartością mikrousług okazało się wymuszenie myślenia o granicach domenowych. Tam, gdzie projekty DDD i bounded contexts zostały potraktowane poważnie, architektura radziła sobie złożonością lepiej, niezależnie od liczby serwisów.
Za 10 lat standardem będzie projektowanie usług tak, by każda z nich odpowiadała:
- konkretnemu strumieniowi wartości (np. „wypłata środków”, „zarządzanie subskrypcją”),
- albo wyraźnemu bounded contextowi („Billing”, „Identity”, „Catalogue”).
Nie będzie to już „serwis od dwóch endpointów”, ale produktowy komponent: z własnym backlogiem, roadmapą, wskaźnikami biznesowymi. Granice techniczne będą odzwierciedleniem granic odpowiedzialności zespołu, a nie decyzji o wyborze frameworka czy bazy danych.
„Team-sized services”: rozmiar liczony ludźmi
Dobrym sposobem myślenia o docelowym rozmiarze usługi stanie się zasada: system, który jest w głowie jednego zespołu. Taki serwis:
- da się wyjaśnić nowej osobie w ciągu kilku dni,
- ma kod, dane i infrastrukturę, które jest w stanie ogarnąć 5–8 osób,
- może rozwijać się samodzielnie przez dłuższy czas bez konfliktów z innymi zespołami.
To przesunięcie w stosunku do mikrousług „w stylu książkowym”, gdzie serwisy bywały bardzo małe. W praktyce przyszłościowym kompromisem będzie często kilka–kilkanaście serwisów na średni produkt, ale każdy z nich wyraźnie przypisany do jednego zespołu i jednej domeny.
Narzędzia platformowe (service catalogi, IDP, policy as code) pomogą utrzymać ten poziom – nowa usługa nie powstanie „bo tak wygodnie w tym momencie”, lecz przejdzie przez krótki proces decyzyjny: po co, jaką domenę wydziela, jakie ryzyko operacyjne dodaje.
Kontrakty i niezależność wdrożeń pozostaną kluczowe
Z mikrousług na pewno zostaną dwie rzeczy: twarde kontrakty między systemami i niezależność wdrożeń.
Kontrakty będą coraz częściej:
- opisywane maszynowo (OpenAPI, AsyncAPI, GraphQL SDL),
- testowane kontraktowo (consumer-driven contracts),
- łączone z politykami bezpieczeństwa i zgodności.
Niezależność wdrożeń nabierze bardziej pragmatycznej formy. Zespoły będą w stanie deployować codziennie, ale nie dlatego, że system ma 200 serwisów, tylko dlatego, że ich serwis ma osobny pipeline, osobne SLA i ograniczone zależności. W wielu miejscach pojawią się też okna deployowe koordynujące zmiany w krytycznych przepływach – to kolejny kompromis między teorią a praktyką rozproszonych systemów.
Światy event-driven i data-centric: dane jako kręgosłup architektury
Na callu incidentowym ktoś pyta, dlaczego rekomendacje produktowe nagle przestały działać dla części użytkowników. Szybko okazuje się, że to nie bug w silniku ML, tylko brak kilku zdarzeń o zmianie planu taryfowego, które „utknęły” w jednym z serwisów. Coraz więcej problemów tego typu prowadzi do tego samego wniosku: przepływ danych i zdarzeń staje się ważniejszy niż pojedyncze API.
Event-first zamiast API-first
API zostaną, ale środek ciężkości przesunie się w stronę event-first design. Znaczna część komunikacji między usługami będzie dziać się asynchronicznie, przez zdarzenia opisujące fakty w domenie:
CustomerRegistered,PaymentCaptured,SubscriptionDowngraded,ModelPredictionGenerated.
Po stronie architektury oznacza to, że:
- modele zdarzeń staną się umową między domenami, podobnie jak API,
- narzędzia do zarządzania schematami (schema registry) będą równie ważne jak Repos z kodem,
- wiele integracji biznesowych będzie budowane przez „podpinanie się” do strumieni zdarzeń zamiast bezpośredniego „wołania” API.
Zwinność zacznie wynikać nie z tego, że każdy serwis ma swoje endpointy, ale z tego, że nowe funkcje można dobudować poprzez reagowanie na istniejące zdarzenia, bez naruszania starych kontraktów.
System jako graf przepływu danych
Coraz częściej architektura systemu będzie rysowana nie jako pudełka i strzałki HTTP, ale jako graf przepływu danych i zdarzeń. Kluczowe pytania zmienią się z „kto woła kogo?” na „skąd pochodzą te dane, kto je modyfikuje, gdzie są replikowane i jak długo są ważne?”.
W praktyce oznacza to:
- większą popularność event sourcingu tam, gdzie to ma sens – nie jako religia, lecz narzędzie do zachowania historii,
- systemy oparte o strumienie danych (Kafka, Pulsar, systemy chmurowe) jako backbone komunikacyjny,
- architektury łączące operacyjne i analityczne przetwarzanie danych (HTAP, lakehouse) w jednym spójnym modelu.
Za dekadę granica między „systemem transakcyjnym” a „hurtownią” będzie dużo bardziej rozmyta. Dla dewelopera ważniejsze stanie się, jak i kiedy dane są produkowane, niż w jakiej dokładnie tabeli ostatecznie lądują.
Data products i warstwa danych jako platforma
Organizacje zaczną projektować produkty danych tak samo, jak dziś projektują API. Zamiast jednego „data warehouse, do którego wszyscy piszą”, pojawią się:
- wyraźnie zdefiniowane zestawy danych (np. „Customers 360”, „Payments Ledger”),
- z opisanymi właścicielami, SLA, jakością, regułami prywatności,
- dostarczane jako strumienie, snapshoty, widoki, API analityczne.
Warstwa danych stanie się jedną z najważniejszych platform wewnętrznych. Zespoły będą miały do niej „self-service’owy” dostęp, ale w obrębie twardych zasad: kto może czytać jakie dane, w jakiej formie, z jakim opóźnieniem. Architektura aplikacji będzie musiała się do tego dostosować – usługi będą raczej konsumentami i producentami produktów danych niż jedynymi właścicielami swoich baz.
To też zmieni sposób projektowania AI w systemach. Model nie będzie już „gdzieś obok”, ale stanie się po prostu kolejnym konsumentem i producentem zdarzeń – subskrybującym strumienie danych i emitującym prognozy lub decyzje jako nowe fakty w systemie.
Serverless, FaaS i „bezserwerowe monolity”: między funkcją a platformą
Mały zespół produktowy dostaje zadanie: zbudować nowy, prosty proces onboardingu partnerów. Ktoś proponuje: „Zróbmy to w funkcjach serverless, będzie tanio i szybko”. Po trzecim feature requestcie okazuje się, że funkcji jest kilkanaście, transakcje są rozlane po eventach, a debugowanie wymaga przeglądania paru różnych logów w chmurze.
Serverless nie zniknie, ale przestanie być postrzegany jako magiczny sposób na wszystko. Zostanie jako konkretny klocek architektoniczny, z dobrze rozumianymi plusami i minusami.
Funkcje jako klej, nie jako fundament wszystkiego
Za kilka lat funkcje FaaS staną się głównie:
- klejem integracyjnym – reagującym na zdarzenia, transformującym dane, orkiestrującym krótkie przepływy,
- rozszerzeniami produktów – miejscem, gdzie klienci/partnerzy mogą „wstrzyknąć” swoją logikę (np. webhooks-as-code, pluginy),
- warstwą automatyzacji wewnętrznej – taski DevOps, operacje utrzymaniowe, proste workflowy.
Mniej sensu będzie miało budowanie całych krytycznych systemów biznesowych jako „las funkcji”. Problemy z lokalnym uruchamianiem, złożonością przepływów i obserwowalnością nie znikną, nawet jeśli narzędzia się poprawią. Funkcje sprawdzą się tam, gdzie logika jest krótka, dobrze odseparowana i gdzie akceptowalne jest pewne rozproszenie.
„Bezserwerowe monolity” i aplikacje serverless jako nowa normalność
Platformowe runtime’y aplikacji
Lead deweloper patrzy na dashboard chmurowej platformy i widzi „aplikację produktową X” jako jeden byt: metryki, logi, konfiguracje. Pod spodem działają funkcje, kontenery, joby batchowe – ale zespół rzadko myśli o nich osobno. Dla nich to po prostu jeden runtime zarządzany przez platformę.
„Bezserwerowy monolit” nie będzie oznaczał powrotu do jednego, tłustego pliku WAR. Bardziej przypominać będzie logiczną aplikację złożoną z kilku komponentów, które:
- są deployowane jako jeden artefakt (np. „aplikacja onboardingu” złożona z API, workerów i kilku funkcji triggerowanych eventami),
- działają na wspólnym, zarządzanym runtime (np. App Runner, Cloud Run, App Service, platforma firmowa),
- mają jeden zestaw polityk: dostęp do danych, budżet, SLO, uprawnienia.
To pozwoli połączyć wygodę monolitu (jeden zespół, jedna odpowiedzialność, spójne wersjonowanie) z elastycznością serverless (automatyczne skalowanie, billing per użycie, brak troski o serwery).
Granica między „serwisem” a „aplikacją” zacznie się zacierać. Zespół nie będzie najpierw projektował 10 oddzielnych funkcji, tylko jeden moduł biznesowy, który platforma pocięci na funkcje, kontenery, joby. Refaktoring w stronę większego lub mniejszego rozdrobnienia stanie się w dużej mierze decyzją konfiguracji, a nie przebudowy całego systemu.
Wbudowana orkiestracja zamiast klejenia usług „ręcznie”
Przy rozbudowanym procesie biznesowym dziś często kończymy z własną orkiestracją: serwis B „wie”, że po nim ma odpalić się C, a jeśli coś nie wyjdzie, trzeba cofnąć krok A. Logika ta bywa porozrzucana po kilku repozytoriach, dokumentacja szybko się dezaktualizuje, a incidenty wymagają wchodzenia w szczegóły implementacji.
Za kilka lat gros tego problemu przejmą wbudowane orkiestratory w platformach:
- workflowy definiowane deklaratywnie (DSL, YAML, BPMN‑light, code-first, ale w jednym miejscu),
- funkcje, serwisy i joby podpięte jako „kroki” procesu, a nie twardo zaszyte wywołania,
- widoczne w UI przebiegi instancji procesu: co już poszło, gdzie jest retry, które kroki są w stanie „saga compensation”.
Orkiestracja stanie się elementem platformy, a nie biblioteką w kodzie. Zespół produktowy będzie mógł zmienić kolejność kroków onboardingu czy reguły eskalacji, nie dotykając funkcji implementujących pojedyncze akcje. To odciąży deweloperów od „klejenia” rozproszonych przepływów i pozwoli skupić się na logice domenowej.
Konsekwencją będzie też spójniejsze podejście do transakcyjności. Zamiast desperacko próbować odtworzyć „ACID w mikrousługach”, platformy będą oferować wzorce sag, outbox, guarantee delivery jako część runtime’u. Deweloper będzie deklarował, które kroki są kompensowalne, a nie budował od zera mechanizmy pół‑ręcznego rollbacku.
Standardowe „klocki” platformowe i composable apps
Na jednym z wewnętrznych spotkań architektonicznych ktoś pokazuje diagram nowego produktu: „Tu mamy moduł płatności, tu obsługę faktur, tu powiadomienia”. Po chwili okazuje się, że jedyne, co naprawdę trzeba napisać, to thin API nad domeną i kilka reguł biznesowych – reszta to gotowe capabilities platformy.
Architektura za 10 lat będzie w większym stopniu opierać się na składaniu aplikacji z klocków niż na budowaniu wszystkiego od zera. Typowe „klocki” to m.in.:
- autoryzacja i zarządzanie tożsamością (IAM, RBAC/ABAC, delegated auth),
- płatności, billing, subskrypcje, limity użycia,
- notyfikacje omnichannel (email, SMS, push, messaging in‑app),
- compliance by default: logowanie audytowe, retencja danych, consent management.
Wiele z tych elementów już dziś istnieje jako usługi chmurowe, ale są używane punktowo. Kolejny krok to wewnętrzne platformy produktowe, które opakują je w spójny model domenowy organizacji. Zespół produktowy nie będzie integrował się bezpośrednio z 10 usługami w chmurze, tylko z jednym modułem platformy, który dostarczy mu komplet funkcji w ramach „platformowego monolitu”.
Aplikacje staną się więc kombinacją:
- kodu domenowego zespołu (API, workerzy, modele ML),
- skonfigurowanych capabilities platformy (np. „użyj modułu Payments v3 w kraju X z tym zestawem reguł”),
- kompozycji eventów i data products, na których to wszystko bazuje.
Taki model przyspieszy rozwój, ale też wymusi bardziej świadome granice między tym, co jest „custom”, a tym, co jest „commodity”. Przepisywanie w kółko własnego modułu faktur czy własnej biblioteki feature flag trafi do kategorii „antywzorzec organizacyjny”.
Architekt „platformowy” jako nowa rola techniczna
Na daily architektonicznym pojawia się osoba, która nie rysuje pojedynczych serwisów, tylko myśli, jak wszystkie produkty firmy korzystają z tej samej warstwy zdarzeń, danych i runtime’u. To nie klasyczny enterprise architect, który tworzy slajdy, ale architekt platformowy, który buduje wewnętrzne „chmury w chmurze”.
Wraz z dojrzewaniem platform i composable apps, część odpowiedzialności przesunie się z zespołów produktowych do zespołów platformowych. Ich zadaniem będzie:
- definiowanie standardowych capability (płatności, tożsamość, powiadomienia, workflowy),
- projektowanie modelu eventów i produktów danych na poziomie całej organizacji,
- dostarczanie IDP (Internal Developer Platform), które spina wszystkie klocki w jedną całość: katalog usług, szablony, polityki, observability.
Rola ta będzie mieszanką architekta, SRE i product managera: oprócz decyzji technicznych trzeba będzie zarządzać backlogiem funkcji platformy, mierzyć jej adopcję i wpływ na prędkość zespołów. To zmieni też język rozmowy o architekturze – mniej „jaki framework wybierzemy?”, więcej „jakie capability platformy są potrzebne, żeby nowe produkty dało się stawiać w tydzień?”.
Mini‑wniosek jest dość prosty: im dojrzała organizacja, tym większa część „architektury aplikacji” powstaje w zespole platformowym, a nie w pojedynczym squadzie produktowym. Zespoły domenowe przestają wynajdować koło na nowo i koncentrują się na tym, za co realnie odpowiadają – na przepływach biznesowych i jakości doświadczenia użytkownika.
Spójny model bezpieczeństwa jako „by design”, nie „po fakcie”
Po jednym z audytów bezpieczeństwa okazuje się, że ten sam typ błędu konfiguracji uprawnień występuje w czterech różnych serwisach. Każdy zespół „zrobił to trochę inaczej”, każdy popełnił ten sam błąd. Reakcją firm będzie przesunięcie bezpieczeństwa z poziomu usług na poziom architektury i platformy.
Architektura za 10 lat będzie bardziej „secure by default”, nie tylko dzięki lepszym bibliotekom, ale dlatego, że:
- autoryzacja stanie się centralnym komponentem danych (policy store, decoupled authZ), do którego odwołują się usługi, zamiast twardo zaszywać reguły w kodzie,
- polityki bezpieczeństwa będą deklarowane jako code (OPA/Rego, Cedar, inne DSL‑e) i egzekwowane automatycznie przez platformę,
- standardowe ścieżki integracji (np. podpinanie się do strumieni zdarzeń) będą od razu objęte kontrolami zgodności (maskowanie, pseudonimizacja, consent).
W praktyce nowa usługa nie będzie miała dostępu do danych „bo tak ustawił developer”. Trzeba będzie użyć mechanizmu platformy, który zapisze ślad audytowy: kto poprosił o jakie dane, w jakim celu, na jak długo. Takie podejście może na początku spowalniać, ale finalnie ograniczy klasę powtarzalnych błędów.
Bezpieczeństwo stanie się tym samym parametrem architektonicznym, podobnie jak skalowalność czy latency. Decyzja „czy to ma być funkcja, czy serwis?” będzie związana z tym, jaki model trustu i izolacji chcemy uzyskać. „Bezserwerowe monolity” będą preferowane tam, gdzie ważna jest spójna powierzchnia ataku i łatwa kontrola dostępu; luźno powiązane funkcje – tam, gdzie izolacja jest kluczowa, a logika prosta.
Automatyzacja operacji jako część projektu systemu
Incident o 3 w nocy. Pager dzwoni, bo kolejka eventów nagle rośnie, a jeden z konsumentów nie wyrabia. Dziś często skończy się to ręcznym skalowaniem i grzebaniem w konfiguracji. Za 10 lat wiele z tych reakcji będzie wbudowanych w samą architekturę i platformę.
Systemy będą projektowane z myślą o tym, że:
- skala i schemat ruchu rzadko są stałe – trzeba mieć deklaratywne reguły autoscalingu i throttlingu,
- część awarii nie wymaga „człowieka w pętli”, tylko dobrze zaprojektowanych reakcji automatycznych,
- warstwa obserwowalności (metryki, logi, trasy requestów i eventów) jest pierwszorzędnym komponentem, nie „dodatkiem po wdrożeniu”.
Zmieni się więc sposób, w jaki projektuje się same usługi. Zespół domenowy będzie musiał dla każdego kluczowego przepływu zdefiniować:
- jakie SLO obowiązują (np. ile czasu może zająć proces onboardingu w 95 percentylu),
- jakie działania ma podjąć platforma przy ich naruszeniu (skalowanie, włączenie degradacji funkcji, przełączenie na tryb kolejki offline),
- jakie sygnały z warstwy danych i eventów świadczą o tym, że system „zachowuje się nienormalnie” (anomalie, brak zdarzeń, niespójne strumienie).
„Architektura aplikacji” obejmie tym samym nie tylko kształt kodu i usług, ale również kontrakt operacyjny z platformą. W wielu organizacjach ten kontrakt stanie się formalnym artefaktem (np. deklaratywna specyfikacja w repozytorium), równie ważnym jak definicja API czy modelu danych.
Najczęściej zadawane pytania (FAQ)
Czy za 10 lat monolity całkowicie znikną na rzecz mikrousług?
W wielu firmach wciąż działa monolit, który „po prostu robi robotę” i trudno go będzie wyrzucić tylko dlatego, że jest niemodny. Często utrzymuje kluczowe procesy biznesowe, ma spójne dane i znane zachowanie w krytycznych momentach, np. przy zamknięciu miesiąca czy Black Friday.
Bardziej prawdopodobny scenariusz to długotrwała hybryda: część funkcji zostaje w monolicie (czasem przepisywanym na modularny), a wokół niego rośnie pierścień usług chmurowych i mikrousług. Monolity nie znikną, ale zmienią rolę: z „jednego systemu do wszystkiego” w bardziej wyizolowane, dobrze zdefiniowane moduły domenowe.
Kiedy naprawdę opłaca się przejść z monolitu na mikrousługi?
Typowa sytuacja wygląda tak: jeden wielki repozytorium, kilkanaście zespołów, każdy commit rusza pół świata, a release jest wydarzeniem na cały dzień. Jeśli organizacja rośnie szybciej niż architektura i procesy, zespół zaczyna szukać sposobu na rozdzielenie odpowiedzialności i rytmu wdrożeń.
Migracja do mikrousług ma sens, gdy:
- chcesz skalować zespoły i dać im realną autonomię (kod, dane, wdrożenia),
- masz wyraźne granice domenowe, które da się wydzielić jako osobne serwisy,
- jesteś gotów zainwestować w platformę, monitoring, SRE i automatyzację.
Migracja „bo tak robią inni” zwykle kończy się rozproszonym monolitem i większym chaosem niż wcześniej.
Co to jest modularny monolit i kiedy jest lepszy od mikrousług?
Wyobraź sobie monolit, w którym moduły są traktowane jak „mini-serwisy” w jednym procesie: mają wyraźne granice, własne API, brak dzikich zależności na skróty. Z zewnątrz to nadal jedna aplikacja, ale wewnątrz architektura jest dużo bardziej zdyscyplinowana.
Modularny monolit często wygrywa, gdy:
- zespół jest mały lub średni i nie ma zasobów na utrzymanie rozproszonej infrastruktury,
- wymagana jest prostota operacyjna (jeden deploy, jeden monitoring, jeden log),
- logika biznesowa silnie się przenika i sztuczne rozdzielanie jej na mikrousługi wprowadza więcej sieciowych zależności niż wartości.
To dobry etap pośredni: najpierw porządna modularność w jednym procesie, dopiero potem ewentualne wycinanie osobnych usług tam, gdzie rzeczywiście to coś daje.
Jak rozpoznać, że nasze mikrousługi zamieniły się w „distributed monolith”?
Klasyczny sygnał: zmiana jednej funkcji wymaga dotknięcia pięciu–siedmiu serwisów, zsynchronizowanego wdrożenia i kilku feature flag, a i tak nikt nie jest spokojny o efekt. Zamiast autonomii zespołów pojawia się koordynacja między nimi przy każdym większym kawałku pracy.
Na distributed monolith wskazują m.in.:
- silne sprzężenie synchroniczne (łańcuch kilku wywołań HTTP do obsługi jednego requestu),
- wspólne modele danych kopiowane między serwisami lub „magiczna” wspólna baza,
- częste „release trainy”, bo usługi muszą być wdrażane razem,
- incydenty, w których jedna mała zmiana powoduje lawinę błędów w innych usługach.
W takiej sytuacji kolejna mikrousługa nie pomaga; potrzebne jest uproszczenie granic, przeniesienie części interakcji na zdarzenia i czasem… połączenie kilku usług z powrotem w większy moduł.
Jak będzie wyglądać architektura aplikacji za 10 lat – co się zmieni najwięcej?
Coraz częściej decyzje architektoniczne zapadają „od zespołu do technologii”, a nie odwrotnie. Zamiast zaczynać od pytania „mikrousługi czy monolit?”, zespoły będą patrzeć na przepływ wartości: kto odpowiada za dany fragment produktu, jak często musi wdrażać i z kim się synchronizuje.
Za 10 lat większe znaczenie niż sama etykietka („mikrousługi”, „serverless”) będzie mieć:
- autonomia zespołów produktowych – własne backlogi, własny rytm wdrożeń, własne komponenty,
- silne platformy wewnętrzne, które zdejmują z zespołów ciężar infrastruktury, bezpieczeństwa i observability,
- architektury zorientowane na zdarzenia i dane, co ułatwia integracje, analitykę i wykorzystanie AI.
Technologie się zaktualizują, ale główną walutą pozostanie czas między pomysłem a działającą funkcją na produkcji.
Czy mikrousługi są konieczne, żeby skalować organizację i zespoły?
Wiele firm „dobija” się mikrousługami, gdy największym problemem jest chaos procesowy, brak odpowiedzialności za domeny i słabe CI/CD. Nawet idealna architektura nie pomoże, jeśli każdy zespół dotyka wszystkiego i nie ma jasnych granic decyzyjnych.
Możliwe scenariusze skalowania bez armii mikrousług:
- modularny monolit z wyraźnym podziałem na domeny i ownership modułów,
- „team-sized services” – kilka większych, sensownie pociętych serwisów odpowiadających zakresowi jednego zespołu,
- wewnętrzna platforma, która standaryzuje sposób budowania i wdrażania, dzięki czemu zespoły nie toną w szczegółach infrastruktury.
Mikrousługi są jednym z narzędzi, nie celem. Jeśli organizacja rośnie, a architektura nie nadąża, najpierw trzeba uporządkować odpowiedzialności i przepływ pracy, a dopiero później dobierać formę techniczną.
Jak przygotować obecną architekturę na wyzwania kolejnych 10 lat?
Typowy błąd polega na myśleniu w kategoriach: „jakiej technologii nam brakuje?”. Tymczasem pierwsze pytanie powinno brzmieć: „które przepływy wartości są dziś najbardziej zablokowane i dlaczego?”. Często okazuje się, że wąskim gardłem nie jest brak Kubernetesa, tylko jedna „święta” baza danych albo release raz na miesiąc.
Praktyczne kroki na start:
- zmapowanie kluczowych przepływów (od pomysłu do produkcji) i miejsc, gdzie projekt utknął,
- porządkowanie granic domenowych i własności (kto jest „ownerem” których modułów/usług),
- inwestycja w platformę wewnętrzną, testy automatyczne, monitoring i porządny logging,
- stopniowe upraszczanie: łączenie zbędnych mikrousług, wycinanie „szybkich integracji”, redukcja technologicznej różnorodności tam, gdzie nie daje ona realnej przewagi.
Architektura, która wytrzyma dekadę, nie będzie najbardziej „modna”, tylko taka, która pozwala zespołom szybko i bezpiecznie dostarczać zmiany.
Najważniejsze wnioski
- Dzisiejsze systemy to chaotyczna hybryda: stary monolit otoczony pierścieniem mikrousług i usług chmurowych, co prowadzi do rosnącej złożoności, długotrwałych migracji i dużego kosztu mentalnego dla zespołów.
- Monolit sam w sobie nie jest zły – daje spójność, prostą obsługę operacyjną, łatwiejsze debugowanie i niski próg wejścia, dopiero brak dyscypliny modularnej zamienia go w „kloc”, którego wszyscy się boją.
- Obecne podejścia cloud-native i mikrousługowe pękają pod własnym ciężarem: rachunki za chmurę rosną szybciej niż zysk, architekturę trudno „ogarnąć głową”, a diagnoza jednego incydentu wymaga śledzenia żądania przez wiele systemów i zespołów.
- Kluczowym kryterium projektowania na kolejne lata stanie się przepływ wartości biznesowej i realna autonomia zespołów produktowych, a nie to, czy coś nazywa się monolitem, mikrousługą czy funkcją serverless.
- Przyszłość to odejście od dogmatów na rzecz pragmatycznych, hybrydowych modeli: modularne monolity, usługi „w sam raz na zespół”, architektury zorientowane na zdarzenia i dane oraz silne platformy wewnętrzne, które przejmą sporą część złożoności technicznej.
- Organizacje są zmęczone kolejnymi „rewolucjami architektonicznymi”, dlatego nacisk przesunie się z wielkich przepisek i modnych haseł na ewolucyjne zmiany, które realnie poprawiają tempo dowożenia i stabilność systemu.






