Przejdź do głównej zawartości

Metryki AI-native SDLC

Metryki AI-native SDLC łączą na każdym etapie cyklu życia jeden wskaźnik wyprzedzający, który reaguje w ciągu kilku dni od zmiany procesu, z jednym opóźnionym wynikiem jakości lub niezawodności, który nie może się pogorszyć. Oba pochodzą z danych, które zespół już ma: historii gita plików intent.md, spec.md i plan.md, metadanych pull requestów, przebiegów CI, wdrożeń i trackera incydentów.

Twój zespół wdrożył łańcuch artefaktów dwa miesiące temu. Pull requesty mergują się szybciej, tech lead mówi, że review stało się cięższe, a nikt nie potrafi wskazać, który etap zwalnia ani czy jakość się trzyma. Dashboard DORA zmienia się raz na kwartał, czyli o wiele za późno, żeby ci powiedzieć, że specyfikacje są przepisywane w połowie budowania.

Ta strona jest dla dewelopera, który prowadzi AI-native cykl życia w repozytorium, i dla tech leada, który raportuje wyniki jednego zespołu. Opisuje sygnały na poziomie etapów. Definicje organizacyjne, które te sygnały zasilają, takie jak accepted change rate czy koszt zaakceptowanej zmiany, mają jedną kanoniczną stronę: DORA, SPACE, DX Core 4 i pomiar AI.

  • Tabelę z jednym wskaźnikiem wyprzedzającym i jednym opóźnionym dla każdego etapu i praktyki oraz miejscem, gdzie leżą dane.
  • Cztery konwencje w repozytorium, dzięki którym każdą metrykę etapu policzysz git log i API swojego hostingu kodu.
  • Tabelę decyzyjną, która zamienia liczby z jednego tygodnia na jedno działanie.
  • Trzy prompty do skopiowania: pierwszy pisze skrypt ekstrakcji, drugi diagnozuje tydzień danych, trzeci mierzy, czy plik instrukcji działa.
  • Sposób na udowodnienie, że liczby są prawdziwe, oraz błędy, przez które kłamią.

Jak wskaźniki wyprzedzające i opóźnione działają razem?

Dział zatytułowany „Jak wskaźniki wyprzedzające i opóźnione działają razem?”

Wskaźnik wyprzedzający reaguje w ciągu godzin lub dni od zmiany jednej praktyki: zacznij commitować plan.md przed implementacją, a czas od planu do zmergowanego pull requestu przesunie się w tym samym tygodniu. Wskaźnik opóźniony to wynik jakości lub niezawodności, który ujawnia się po tygodniach: poprawki, defekty, które uciekły na produkcję, change fail rate.

Czytaj je zawsze parami, nigdy osobno. Praktyka działa, gdy jej wskaźnik wyprzedzający się poprawia, a opóźniony się utrzymuje albo też poprawia. Argumentem za parowaniem jest raport DORA 2025 (Google Cloud, 2025-09-23), który stwierdził „a positive relationship between AI adoption on both software delivery throughput and product performance”, a w następnym zdaniu: „AI adoption does continue to have a negative relationship with software delivery stability”. Panel, który pokazuje tylko szybkość, przekazuje połowę tego wniosku.

Wskaźnik wyprzedzającyWskaźnik opóźnionyCo to znaczyCo zrobić w tym tygodniu
Poprawia sięUtrzymuje się lub poprawiaPraktyka działaZostaw ją; zacznij mierzyć następny etap
Poprawia sięPogarsza sięAutomatyzacja ominęła bramkę zamiast przez nią przejśćWstrzymaj rozszerzanie zakresu agentów na tym etapie; zaostrz sprawdzanie dowodów na bramce
Stoi w miejscuUtrzymuje sięPraktyka nie jest używana albo dane jej nie widząSprawdź pokrycie znacznikami (patrz sekcja o weryfikacji), zanim obwinisz zespół
Pogarsza sięPoprawia sięBramka jest szczelna, ale wolnaZautomatyzuj sprawdzanie dowodów, żeby człowiek czytał wnioski, nie cały artefakt

Każdy wiersz to jedna praktyka z cyklu życia. Kolumna ze źródłem wskazuje system, który już przechowuje znaczniki czasu, więc żaden z tych wskaźników nie wymaga nowego produktu analitycznego.

Etap i praktykaWskaźnik wyprzedzającyWskaźnik opóźnionyGdzie leżą dane
Plan: zapis intent.mdCzas od pierwszej prośby do zacommitowanego intent.mdOdsetek intencji przyjętych do projektowania wobec zamkniętych; edycje intent.md po pierwszym commicie spec.mdHistoria gita folderu z intencjami
Design: pisanie spec.mdCzas od commitu intent.md do commitu zaakceptowanego spec.mdCommity spec.md z datą późniejszą niż pierwszy commit plan.md tej samej zmiany (poprawki wymagań)Git log
Build: tryb planowania, potem implementacjaOdsetek zmian mergowanych po pierwszym przejściu implementacji; czas od akceptacji planu do zmergowanego pull requestuCykle poprawek na zmianę; jak często zmergowany diff wciąż zgadza się z listą plików w plan.mdMetadane pull requestów, wyniki przeglądu dryfu
Build: plik instrukcji (CLAUDE.md, AGENTS.md, Rules w Cursorze)Komentarze w review powtarzające błąd, któremu plik powinien zapobiecCzas do pierwszego zmergowanego pull requestu nowej osoby w zespoleKomentarze z review; historia gita pliku instrukcji
Build: skillsCzas od akceptacji właściciela polityki do merge’a zaktualizowanego skillaUwagi z review powołujące się na tę politykę, których powinno ubywać do zeraPull requesty w folderze skills
Build: równoległe sesjeRozpoczęte sesje na inżyniera dziennie (średnia zespołu, nigdy w rozbiciu na osoby) i szczytowa liczba sesji równoległych przy utrzymanym odsetku merge’y po pierwszym przejściuZmergowane zmiany na repozytorium na tydzień, czytane obok cykli poprawekTelemetria agentów; historia pull requestów
Test: pętla feedbacku sesjiOdsetek zmian od agenta, które przechodzą CI za pierwszym razemCzas w review na pull request; change fail ratePrzebiegi CI; metadane pull requestów
Test: ciągłe ewaluacjeOdsetek zaliczonych ewaluacji po każdej zmianie konfiguracji; czas, w jakim incydent staje się ewaluacjąRegresje złapane w CI wobec złapanych na produkcjiWyniki zestawu ewaluacji; tracker incydentów
Deploy: review przez agentaCzas do pierwszego review; odsetek wątków review zamkniętych przez agenta-autora bez commitu człowiekaDefekty i podatności złapane przed merge’em wobec złapanych na produkcjiHosting kodu; tracker incydentów
Deploy: hooki jako bramki akceptacjiCzas oczekiwania każdej zmiany na każdej bramceNaruszenia bramek, które docierają na produkcję, przed hookami i po nichLogi hooków; tracker incydentów
Deploy: CI/CDOdsetek awarii pipeline’u obsłużonych bez wzywania człowiekaMetryki dostarczania DORA, osobno dla każdej usługiCI i narzędzia wdrożeniowe
Maintain: zamknięcie pętliCzas od przekroczenia pasma kontrolnego do intent.md w triażuOdsetek wykryć, które kończą się zmergowaną poprawką; powtórne incydenty tej samej klasyLog skryptu detekcji; historia pull requestów
Maintain: planowe skanyOdsetek repozytoriów objętych harmonogramem; czas od wykrycia do poprawki w reviewPodatności znalezione przez skan wobec znalezionych na produkcji lub zgłoszonych z zewnątrzHistoria skanów; tracker incydentów

Ostatni wiersz etapu Deploy celowo odsyła do DORA. Pięć metryk dostarczania (change lead time, deployment frequency, failed deployment recovery time, change fail rate i deployment rework rate) definiuje strona o frameworkach metryk, a ta strona ich nie powtarza.

Większość metryk etapów to czas między dwoma commitami albo liczba commitów po określonej dacie. Da się je policzyć tylko wtedy, gdy artefakty trafiają do repozytorium w chwili akceptacji i w przewidywalnym miejscu.

  1. Daj każdej zmianie jeden folder. Trzymaj intent.md, spec.md i plan.md danej zmiany razem, na przykład w intent/notifications-digest/. Uwaga o umieszczaniu plików w opisie łańcucha artefaktów omawia monorepo i intencje obejmujące wiele repozytoriów.

  2. Commituj artefakt w chwili akceptacji, nie na końcu. Znacznik czasu commitu, który dodaje plik, jest zegarem etapu. spec.md zacommitowany razem z implementacją zeruje czas projektowania i odbiera metryce sens. Squash merge robi to samo po fakcie: skleja commity intent.md, spec.md, plan.md i kodu z gałęzi w jeden commit na main, a git log na main nie odzyska już osobnych znaczników czasu. Jeśli mergujesz przez squash, scalaj każdy zaakceptowany artefakt osobnym małym pull requestem, używaj dla gałęzi zmian merge commitów albo rebase merge, albo czytaj znaczniki czasu commitów z listy commitów pull requestu przez API hostingu kodu (w GitHubie GET /repos/{owner}/{repo}/pulls/{pull_number}/commits), a nie z main.

  3. Wpisz identyfikator zmiany do pull requestu. Linia Change: notifications-digest w opisie pull requestu łączy dane z hostingu kodu z folderem artefaktów. Check w CI, który blokuje pull request bez tej linii, pilnuje, żeby połączenie się nie rozsypało.

  4. Oznaczaj zmiany od agenta i poprawki. Pull requesty współtworzone przez agenta dostają etykietę (agent-assisted albo, tam gdzie jest włączona, własną etykietę Claude Code claude-code-assisted). Wycofania rób przez git revert, którego komunikat wskazuje wycofany commit. Commity naprawcze niosą trailer Follow-up: #PR z numerem pull requestu, który naprawiają.

Z tymi konwencjami gitowa część tabeli to trzy polecenia uruchamiane w terminalu w katalogu głównym repozytorium:

Okno terminala
# Kiedy każdy artefakt trafił pierwszy raz do repozytorium: zegar etapu dla każdej zmiany
# (%cI to data committera, ten sam zegar, który czyta --since)
git log --diff-filter=A --reverse --format='%h %cI' --name-only -- \
'intent/*/intent.md' 'intent/*/spec.md' 'intent/*/plan.md'
# Poprawki wymagań jednej zmiany: commity spec.md po pierwszym commicie plan.md
CHANGE=notifications-digest
FIRST_PLAN=$(git log --diff-filter=A --format=%H -- "intent/$CHANGE/plan.md" | tail -1)
git log --oneline "$FIRST_PLAN"..HEAD -- "intent/$CHANGE/spec.md"
# Wycofania i poprawki naprzód z ostatnich 30 dni
git log --since=30.days --grep='^This reverts commit' --format='%h %cI %s'
git log --since=30.days --format='%h %(trailers:key=Follow-up,valueonly,separator=%x2C)' | awk 'NF>1'

Wszystkie trzy polecenia czytają datę committera, więc rebase przesuwa zegar commitu na chwilę jego przepisania; licz więc z historii, którą mergujesz, a nie z gałęzi, która wciąż jest rebase’owana. Polecenie o poprawkach liczy tylko commity spec.md, które w historii następują po pierwszym commicie plan.md: edycja spec.md w tym samym commicie, który dodaje plan.md, nie jest poprawką, a zakres $FIRST_PLAN..HEAD ją pomija.

Dane o pull requestach, CI i wdrożeniach pochodzą z API hostingu kodu. Zamiast pisać tę część ręcznie, zleć agentowi napisanie całej ekstrakcji jako jednego skryptu promptem poniżej i zacommituj wynik.

Każda metryka etapu z tabeli pochodzi z gita, hostingu kodu, CI i trackera incydentów, więc jest taka sama niezależnie od tego, który agent napisał kod. Od narzędzia zależą tylko dwa wiersze: równoległe sesje i znacznik zmian od agenta. Pełny pomiar, łącznie z kosztami, opisuje strona o frameworkach metryk.

Claude Code eksportuje metryki i zdarzenia OpenTelemetry, gdy telemetria jest włączona. Ustaw ją dla całego zespołu w managed settings. claude_code.session.count liczy rozpoczęte sesje, a nie sesje działające jednocześnie: odczytuj z niej liczbę rozpoczętych sesji na inżyniera dziennie, a równoległość wyprowadzaj z nakładającej się aktywności session.id w eksportowanych zdarzeniach:

{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317"
}
}

W planach Team i Enterprise, z zainstalowaną aplikacją Claude dla GitHuba i włączoną analityką GitHuba, zmergowane pull requesty z liniami współtworzonymi przez Claude Code dostają etykietę claude-code-assisted. Metryki wkładu są w publicznej becie i nie działają przy Zero Data Retention; tam używaj własnej etykiety agent-assisted (sprawdzone w dokumentacji analityki Claude Code, 2026-09-26). Przełącznik GitHub analytics w ustawieniach administracyjnych Claude Code włącza Owner.

Kolektor i dashboardy opisuje strona o obserwowaniu agentów; ccusage (npx ccusage@latest) podaje liczbę sesji i koszty z jednej maszyny, bez serwera.

Zacznij tam, gdzie dane już istnieją, a efekt jest największy, potem idź w górę cyklu. Zanim zmienisz jakąkolwiek praktykę, odtwórz co najmniej trzy miesiące historii jej wskaźników, żeby pierwszy tydzień po zmianie miał punkt odniesienia.

  1. Najpierw Test i Deploy. Odsetek zmian przechodzących CI za pierwszym razem, czas do pierwszego review i czas w review nie wymagają nowych konwencji: CI i hosting kodu już je mają. Pokazują też najczęstsze wąskie gardło, gdy kod piszą agenci, czyli review.

  2. Potem Build. Dodaj linię z identyfikatorem zmiany i etykietę agenta, zacznij commitować plan.md. Odsetek merge’y po pierwszym przejściu i cykle poprawek stają się policzalne.

  3. Następnie Design i Plan. Gdy intent.md i spec.md trafiają do repozytorium w chwili akceptacji, wypełniają się wiersze czasu projektowania i poprawek wymagań.

  4. Na końcu Maintain. Wiersze zamknięcia pętli wymagają najpierw deterministycznego skryptu detekcji i kolejki triażu; przygotowuje je etap Maintain.

  5. Przeglądaj co tydzień na retrospektywie. Tech lead przynosi tabelę decyzyjną i dane z jednego tygodnia, a zespół wybiera jeden etap do zmiany. Pierwsze czytanie danych robi prompt poniżej.

Metryka, której nikt nie sprawdza, staje się najsłabiej zrecenzowanym artefaktem w repozytorium. Cztery kontrole utrzymują te liczby w ryzach bez ręcznego przeglądania danych co tydzień.

  • Żadna liczba nie pochodzi od modelu. Skrypt ekstrakcji jest deterministyczny, zacommitowany i ma testy jednostkowe na repozytorium testowym, zgodnie z tą samą zasadą co deterministyczna detekcja. Agenci piszą skrypt i interpretują jego wynik, ale nigdy nie wytwarzają samych liczb.
  • Pokazuj pokrycie znacznikami obok każdej metryki. Jeśli identyfikator zmiany ma tylko połowa zmergowanych pull requestów, czas projektowania policzony na ich podstawie opisuje pół zespołu. Wiersz z pokryciem poniżej 80% traktuj jako ostrzeżenie, nie wynik.
  • Sprawdzaj ręcznie dziesięć zmian w miesiącu. Wylosuj dziesięć zmergowanych pull requestów i porównaj znaczniki czasu, etykiety i powiązania z poprawkami ze skryptu z historią. Więcej niż jedna niezgodność na dziesięć oznacza błąd w logice ekstrakcji, nie w zespole.
  • Trzymaj się reguły par i jednostki. Każdy wskaźnik wyprzedzający pojawia się w tym samym widoku co jego opóźniona para, a każda liczba dotyczy repozytorium lub usługi (średnie zespołu są w porządku), nigdy nie jest widokiem jednego inżyniera.

Tech lead odpowiada za cotygodniowy widok zespołu i zatwierdza każdą zmianę praktyki. Same definicje należą do właściciela metryk w organizacji, wskazanego na stronie o frameworkach metryk; zespół nie zmienia wzoru lokalnie.

Wskaźnik wyprzedzający staje się celem. Ktoś ustala „specyfikacja w jeden dzień” i specyfikacje robią się coraz cieńsze. Na etapie Build rosną wtedy poprawki wymagań. Naprawa: usuń cel, pokazuj czas projektowania wyłącznie obok poprawek wymagań i omawiaj tę parę na retrospektywie.

Artefakty trafiają do repozytorium hurtem. intent.md, spec.md i plan.md lądują w tym samym commicie co kod, więc czas każdego etapu wynosi zero. Naprawa: dodaj check w CI, który blokuje pull request, gdy folder zmiany nie ma plan.md we wcześniejszym commicie, a historię odtwarzaj tylko ze zmian, które je przechodzą.

Squash merge kasuje zegar etapów. Każdy artefakt trafił na gałąź na czas, ale squash złożył je wszystkie w jeden commit na main, więc czas każdego etapu znów wynosi zero, a git log na main tego nie pokaże. Naprawa: scalaj każdy zaakceptowany artefakt osobnym małym pull requestem, przełącz gałęzie zmian na merge commity albo rebase merge, albo niech skrypt ekstrakcji czyta znaczniki czasu commitów z listy commitów każdego pull requestu przez API hostingu kodu zamiast z main.

Poprawki udają nową pracę. Naprawa zeszłotygodniowej zmiany od agenta przychodzi jako nowy pull request z funkcją, bez powiązania, więc odsetek merge’y po pierwszym przejściu wygląda idealnie. Naprawa: dopisz trailer Follow-up: #PR do checklisty review i niech agent recenzujący oznacza poprawki świeżo zmergowanego kodu, które go nie mają.

Rośnie liczba równoległych sesji, a z nią poprawki. Przepustowość wygląda lepiej, ale każda zmiana wymaga więcej rund. Naprawa: ogranicz liczbę równoległych sesji na inżyniera do ostatniego poziomu, przy którym odsetek merge’y po pierwszym przejściu się utrzymywał, i podnoś go dopiero wtedy, gdy poprawi się odsetek zmian przechodzących CI za pierwszym razem.

Ciężar review spada na kilku seniorów. Czas w review rośnie, ale tylko dla pull requestów, które wymagają dwóch konkretnych recenzentów. Naprawa: rozbij czas w review na grupy recenzentów (nie na osoby), ustal limity rozmiaru pull requestów i przeczytaj, jak utrzymać ruch w kolejce review.

Liczby zamieniają się w ranking. Pojawiają się widoki per inżynier i zespół zaczyna optymalizować liczniki. Naprawa: usuń widoki per osoba, zapisz w umowie zespołu, że te metryki opisują proces, i trzymaj ocenę indywidualną z dala od nich.

Jeśli etapy są dla ciebie nowe, zacznij od przeglądu cyklu życia. Gdy sygnały etapów działają, zepnij je z definicjami na poziomie organizacji.