Przejdź do treści
ArchXS

Praktyka

Wytwarzanie systemów i przekazanie

Budujemy systemy produkcyjne, backend, web i mobile, z dokumentacją i rejestrem decyzji powstającymi razem z kodem. Od pierwszego dnia zakładamy, że utrzymywał je będzie ktoś inny.

Wytwarzanie systemów i przekazanie
Rys. 01Systemy budowane z założeniem, że utrzyma je ktoś inny: rejestr decyzji z odrzuconymi opcjami, środowisko odtwarzalne z repozytorium, testy, które faktycznie coś wykluczają.

Jak na to patrzymy

Koszt systemu ujawnia się nie przy pierwszym wdrożeniu, tylko przy pierwszej zmianie zespołu. Dlatego dokumentacja, rejestr decyzji i runbooki są częścią produktu, a nie zadaniem na koniec, i dlatego wybieramy stack otwarty, który da się utrzymać bez zgody żadnego dostawcy na dalsze istnienie systemu. Architekturę dawkujemy tu tak samo jak wszędzie: fundamenty, których nie da się tanio dołożyć później, identyfikator magazynu na każdym agregacie, outbox od pierwszej migracji, wchodzą od razu; cała reszta czeka na dowód, że jest potrzebna.

Co zbudowaliśmy

Prowadzimy równolegle kilkanaście produkcyjnych repozytoriów w dwóch niezależnych ekosystemach: Java 21 z Quarkusem, Panache, GraphQL, Flyway, oraz Python 3.12 z FastAPI. Web i aplikacje mobilne powstają z jednego kodu w monorepo; około dziesięciu systemów działa na wspólnej platformie z jednym dostawcą tożsamości, jednym klastrem PostgreSQL, jednym reverse proxy i jedną warstwą obserwowalności. Schodzimy też do warstwy przemysłowej: OPC UA według IEC 62541 z własnym mostem do szyny zdarzeń, MQTT ze Sparkplug B, telemetria w TimescaleDB. Ewolucję modelu danych pokazuje jedna liczba: 237 ponumerowanych migracji schematu w najdłużej żyjącym systemie. Jakości pilnują testy, które faktycznie coś wykluczają: testy własności dla solvera planowania, golden testy silnika geometrycznego z jawnym, świadomym trybem regeneracji wzorców, testy dostępności w przeglądarce i testy end-to-end na fizycznych urządzeniach mobilnych. Nad jednym systemem produkcyjnym pracujemy w kilkunastu równoległych kopiach roboczych gałęzi, to dyscyplina, która pozwala małej praktyce utrzymać tempo bez wzajemnego deptania sobie po zmianach.

Co z tego wynika

Klient dostaje system, który można przejąć: decyzje i odrzucone alternatywy na piśmie, środowisko odtwarzalne z repozytorium, brak licencji zmieniających model rozliczeń w połowie roku. Współpraca, z której nie da się wyjść bez szkody dla klienta, jest w naszej ocenie źle zaprojektowana, więc projektujemy ją tak, żeby dało się ją zakończyć.