Badam AI w SDLC / dwa eksperymenty
Czy architektura ma znaczenie,
gdy kod pisze AI?
Agent skończył pracę. Pull requesty są gotowe. Teraz sprawdzam, ile z tego działa i co właściwie kupiłem za zaoszczędzony czas.
- Architektury w pierwszej próbie
- 3
- Konfiguracje w drugiej próbie
- 3
- Najlepszy wynik scenariuszy w próbie architektur
- 78%
Jeżeli agent wygenerował kod taniej, chcę wiedzieć, co oznacza „taniej”. Czy oszczędziłem na wywołaniach modelu? Czy zespół szybciej dostanie działającą funkcję? A może różnicę zapłaci później, kiedy zacznie poprawiać wynik?
W marcu 2026 przeprowadziłem na GitHubie dwa eksperymenty opisane w tym materiale. W pierwszym zmieniałem architekturę. W drugim zostawiłem N-Layer i porównałem trzy konfiguracje agentów. Policzyłem czas, zarejestrowany koszt oraz metryki kodu. W porównaniu architektur sprawdziłem też scenariusze biznesowe.
Najpierw warunki porównania
Dwa pytania. Dwie osobne próby
W pierwszej próbie sprawdzałem, czy sposób podziału systemu zmienia wynik pracy GitHub Copilot. W drugiej interesowało mnie, jak przy jednej architekturze zachowują się różne konfiguracje narzędzia oraz modelu.
14 epików · 151 zadań · 3 repozytoria
133 kolejne zadania na konfigurację
Każda próba ma własny zakres. Zestawiam wyniki wewnątrz próby. Kosztów oraz czasu nie porównuję bezpośrednio między tymi dwoma eksperymentami.
Eksperyment 01
Najkrótszy czas nie dał najlepszego wyniku
Przygotowałem ten sam zakres: 14 epików oraz 151 zadań. Zadania były automatycznie przypisywane do agenta. Proces tworzył pull requesty oraz je scalał. Zmieniała się struktura rozwiązania.
Modularny monolit miał wyznaczone granice modułów oraz ich odpowiedzialności. N-Layer porządkował kod w warstwach. W wariancie YOLO nie narzuciłem tych granic. Agent sam wybierał strukturę. To nadal była jakaś architektura, tyle że decyzję o niej zostawiłem agentowi.
% zaliczonych scenariuszyWięcej = lepszy wynik w tej próbie
Skala każdego wykresu zaczyna się od zera i kończy na 100%.
40 scenariuszy przygotowanych z pomocą ChatGPT. Wynik dotyczy sprawdzonych zachowań, a nie kompletności całego systemu.
O tyle lepszy był wynik N-Layer od YOLO w sprawdzonych scenariuszach biznesowych: 78% wobec 48%. To różnica punktów procentowych.
YOLO skończyło pracę w 43 godziny 30 minut. N-Layer potrzebował 51 godzin 32 minut. Wariant bez narzuconych granic był więc około 16% szybszy oraz 14% tańszy od N-Layer. Gdy sprawdziłem zachowanie systemu w 40 scenariuszach przygotowanych z pomocą ChatGPT, wynik YOLO był jednak najniższy.
N-Layer miał też najniższą gęstość problemów jakości zgłoszonych przez Sonar: 11,66 na 1000 linii kodu. YOLO miało 30,61, czyli około 2,6 razy więcej. W skanie Snyk wariant YOLO miał sześć zgłoszeń high oraz dwa medium. Pozostałe warianty miały wyłącznie zgłoszenia medium.
Modularny monolit wymagał najwięcej czasu oraz najwyższego zarejestrowanego kosztu. Miał jednak najniższą maksymalną złożoność według NDepend: 24 wobec 39 dla N-Layer oraz 56 dla YOLO. Z kolei YOLO miało najniższy raportowany dług techniczny: 0,90% wobec około 1,5% w pozostałych wariantach. Repozytoria różniły się rozmiarem. Jedna korzystna metryka nie opisuje całego rozwiązania.
Sprawdź pełne dane porównania
| Metryka | Modularny monolit | N-Layer | YOLO |
|---|---|---|---|
| Czas | 72 h 18 min | 51 h 32 min | 43 h 30 min |
| Zarejestrowany koszt (USD) | 38,63 | 27,91 | 24,10 |
| Pull requesty | 151 | 122 | 124 |
| Projekty w rozwiązaniu | 25 | 4 | 1 |
| Linie kodu (około) | 56 000 | 44 700 | 28 000 |
| Sonar: problemy jakości / 1000 linii | 14,75 | 11,66 | 30,61 |
| Sonar: Bug (liczba) | 43 | 4 | 40 |
| Sonar: Vulnerability (liczba) | 1 | 0 | 30 |
| Sonar: code smells (liczba) | 754 | 510 | 755 |
| Snyk: zgłoszenia bezpieczeństwa | 3 medium | 4 medium | 6 high + 2 medium |
| NDepend: problemy High (liczba) | 39 | 11 | 25 |
| NDepend: maksymalna złożoność | 24 | 39 | 56 |
| NDepend: raportowany dług techniczny | 1,53% (27 dni) | 1,51% (27 dni) | 0,90% (9 dni) |
| Zaliczone scenariusze biznesowe | 53% | 78% | 48% |
Różnice procentowe obliczyłem na podstawie czasu oraz kosztu z tabeli. W tym eksperymencie N-Layer był najbardziej przekonującym kompromisem. Ta próba nie ustala najlepszej architektury dla każdego systemu.
Eksperyment 02
Ten sam podział systemu. Trzy konfiguracje
W drugiej próbie zostawiłem N-Layer. Każda konfiguracja wykonywała kolejno 133 zadania przy tym samym zakresie technicznym oraz tych samych instrukcjach, w tym pliku AGENT.md. Każda utworzyła 133 pull requesty.
godziny i minutyMniej = krótszy czas wykonania
Skala każdego wykresu zaczyna się od zera. Najdłuższy pasek odpowiada największej wartości w zestawieniu.
133 zadania wykonywane kolejno przez każdą konfigurację. Porównuję całe konfiguracje, więc różnicy nie przypisuję wyłącznie modelowi.
Najkrótszy czas w tej próbie uzyskał GitHub Copilot z Claude Sonnet 4.6. Zarejestrowany koszt wyniósł 11,03 USD.
W porównaniu z Codex oraz GPT-5.1-Codex-Max konfiguracja Copilot z Sonnet 4.6 potrzebowała około 16% mniej czasu. Jej zarejestrowany koszt był około 29% niższy. Claude z Haiku 4.5 miał najniższy koszt godziny pracy, ale pracował najdłużej. Dlatego cena godziny sama nie wystarcza do oceny całego zadania.
Claude z Haiku 4.5 miał najmniej problemów jakości Sonar w przeliczeniu na 1000 linii kodu. Jednocześnie miał najwyższą wartość zbiorczego wskaźnika Snyk „All”. Codex miał najniższą wartość tego wskaźnika Snyk, ale najwyższą gęstość problemów utrzymywalności Sonar. Copilot miał najniższą gęstość zgłoszeń Bug w Sonar. To różne sygnały, których nie składam w jedną ocenę.
Sprawdź pełne dane porównania
| Metryka | Codex | Claude | GitHub Copilot |
|---|---|---|---|
| Model | GPT-5.1-Codex-Max | Claude Haiku 4.5 | Claude Sonnet 4.6 |
| Czas | 22 h 44 min | 30 h 21 min | 19 h 02 min |
| Zarejestrowany koszt (USD) | 15,62 | 13,82 | 11,03 |
| Pull requesty | 133 | 133 | 133 |
| Koszt / PR (USD, zaokrąglony) | 0,12 | 0,10 | 0,08 |
| Koszt / godzinę (USD, zaokrąglony) | 0,69 | 0,46 | 0,58 |
| Linie kodu (około) | 51 000 | 24 800 | 13 400 |
| Sonar: problemy jakości / 1000 linii | 11,87 | 8,95 | 10,83 |
| Sonar: utrzymywalność / 1000 linii | 7,20 | 3,15 | 3,14 |
| Sonar: Bug / 1000 linii | 0,08 | 0,24 | 0,07 |
| Sonar: code smells / 1000 linii | 10,69 | 7,70 | 9,04 |
| Sonar: Vulnerability (liczba) | 0 | 1 | 0 |
| Snyk: wskaźnik „All” (jednostka niepodana) | 1,96 | 19,04 | 5,54 |
Dla wskaźnika Snyk „All” materiał nie podaje jednostki. Zachowuję wartości ze źródła. Nie opisuję ich jako liczby podatności ani liczby zgłoszeń na 1000 linii. Wiersz Sonar Vulnerability pokazuje liczbę zgłoszeń, a pozostałe wskazane wiersze Sonar pokazują gęstość.
Dla tego porównania nie mam odpowiadających mu wyników scenariuszy biznesowych. Mogę porównać czas, koszt oraz zgłoszenia narzędzi. Nie mogę na ich podstawie wskazać agenta, który dostarczył najwięcej działającej wartości biznesowej.
Moja interpretacja
Metryka ma pomóc w decyzji
Dla mnie te wyniki pokazują, dlaczego przed uruchomieniem agenta warto ustalić granice rozwiązania oraz sposób sprawdzenia wyniku. W próbie architektur różnice pojawiły się zarówno w metrykach kodu, jak też w zachowaniu systemu. Sam licznik wykonanych zadań tego nie pokazywał.
Nie wyciągam z tego zasady, że więcej modułów zawsze pomaga. Modularny monolit był najdroższy w tej próbie. Nie traktuję też mniejszej liczby linii kodu jako dowodu lepszego projektu. Mniej kodu może oznaczać prostsze rozwiązanie. Może również oznaczać pominiętą część zachowania. To trzeba sprawdzić.
Zanim policzę oszczędność na generowaniu kodu, chcę wiedzieć, które zachowanie systemu zostało sprawdzone.
Podobnie czytam wyniki skanerów. Zgłoszenia Sonar, Snyk oraz NDepend opisują różne właściwości kodu. Brak zgłoszeń w jednej kategorii nie oznacza, że cały system jest bezpieczny. Niższa gęstość zgłoszeń nie potwierdza też, że proces klienta działa prawidłowo.
Do zastosowania w projekcie
Jak przygotowałbym własną próbę
Zacząłbym od procesu, za który ktoś w firmie odpowiada. Jeżeli rozwiązanie ma skrócić obsługę zamówienia, zapisuję obecny czas oraz oczekiwaną zmianę. Dopiero potem wybieram fragment pracy dla agenta. Wtedy mam punkt odniesienia dla kosztu.
Jeden zakres
Ten sam stan początkowy, zadania oraz warunki uruchomienia. Zapisuję konfigurację narzędzia, model oraz instrukcje.
Dowód działania
Ustalam scenariusze biznesowe przed generowaniem kodu. Uwzględniam błędne dane oraz integracje.
Pełniejszy koszt
Oprócz użycia modelu mierzę czas przeglądu, poprawek oraz ponownego sprawdzenia. Zapisuję pracę człowieka.
Decyzja człowieka
Wyznaczam osobę, która oceni wynik. Ustalam dopuszczalne dane, uprawnienia oraz warunki zatrzymania próby.
To propozycja sposobu pracy, a nie dodatkowy wynik eksperymentu. Dopiero taki pomiar pozwoliłby mi oszacować, czy niższy koszt generowania kodu przekłada się na korzyść w konkretnym projekcie. W biznesie chcę wiedzieć, skąd bierze się ta korzyść oraz kto może ją potwierdzić.
Otwórz kartę weryfikacji zmiany z AIŹródło / granice wniosków
Co dokładnie pokazuje ten materiał
Artykuł opracowałem na podstawie własnego materiału „Czy architektura ma znaczenie, gdy kod pisze AI? Wyniki dwóch eksperymentów”, opartego na prezentacji „Designing Software Architecture for AI Agent”. Opisane eksperymenty przeprowadziłem w marcu 2026 na GitHubie. Data publikacji tego opracowania to 22 października 2026.
Wcześniejsza analiza na tej stronie opiera się na moim wpisie z LinkedIn z 10 grudnia 2025. Oba opracowania zawierają część tych samych wyników porównania architektur. Nie traktuję ich jako dowodu dwóch niezależnych powtórzeń. Pliki CSV odtwarzają tabele z tego opracowania; nie są logami przebiegu eksperymentu.
Wyniki odnoszą się do wskazanego zakresu, instrukcji oraz konfiguracji. Nie są aktualnym rankingiem modeli. Materiał nie zawiera serii powtórzeń, przedziałów ufności ani pełnego pomiaru pracy człowieka. Zarejestrowane koszty nie obejmują całego kosztu dostarczenia oraz utrzymania produktu.
W drugim eksperymencie porównuję konfigurację narzędzia wraz z modelem. Nie oddzielam wpływu samego modelu. Nie przenoszę też wyników testów biznesowych z pierwszej próby na konfiguracje z drugiej. Dane skanerów traktuję jako odczyt dla badanego kodu oraz ustawień z czasu eksperymentu.
Projektuję software tak, żeby dało się go rozwijać, sprawdzać oraz poprawiać. Te eksperymenty pomagają mi stawiać lepsze pytania przed kolejną próbą. O przydatności rozwiązania decyduje zachowanie, które potrafię sprawdzić w kontekście pracy organizacji.