Warum Lines of Code und Commits die falschen Signale sind
Wer Produktivitätsgewinne durch Claude Code an Codezeilen oder Commit-Anzahl misst, misst das Falsche und trifft daraus falsche Entscheidungen. Aussagekräftiger sind Cycle Time, Time-to-First-Review und Defect-Rate bei KI-unterstützten Änderungen, kombiniert mit einer ehrlichen Analyse, in welchen Aufgaben Claude Code Teams tatsächlich verlangsamt statt beschleunigt.
Inhaltsverzeichnis
- 1. Warum Produktivität mit KI so schwer zu messen ist
- 2. Lines of Code und Commit-Anzahl als irreführende Signale
- 3. Cycle Time als aussagekräftigere Kennzahl
- 4. Time-to-First-Review als Frühindikator
- 5. Defect-Rate bei KI-unterstützten Änderungen
- 6. Rework-Rate und Revert-Häufigkeit als Warnsignal
- 7. Wo Claude Code die Entwicklung tatsächlich verlangsamt
- 8. Ein pragmatisches Messsystem aufbauen
- 9. Metriken im direkten Vergleich
- 10. Zusammenfassung
- 11. FAQ
1. Warum Produktivität mit KI so schwer zu messen ist
Sobald ein Team Claude Code einführt, taucht fast automatisch die Frage auf, ob und wie stark sich die Produktivität dadurch verbessert hat. Die ehrliche Antwort lautet meistens: Das lässt sich nicht in einer einzigen Zahl ausdrücken. Softwareentwicklung ist kein Fließbandprozess mit gleichförmigen Arbeitsschritten, sondern eine Kette aus Verstehen, Entscheiden, Schreiben, Prüfen und Integrieren. Ein Tool, das einen dieser Schritte beschleunigt, kann an anderer Stelle neue Reibung erzeugen, etwa durch längere Reviews, weil Reviewer mehr Code in kürzerer Zeit durchsehen müssen.
Hinzu kommt ein methodisches Problem: Die meisten Teams haben vor der Einführung von KI-Unterstützung keine belastbare Baseline erhoben. Ohne Vergleichswerte aus der Zeit davor bleibt jede Aussage über eine Verbesserung Spekulation. Wer die Wirkung von Claude Code seriös bewerten will, muss deshalb zunächst festlegen, welche Fragen überhaupt beantwortet werden sollen, etwa ob Features schneller ausgeliefert werden, ob die Codequalität stabil bleibt oder ob Entwickler weniger Zeit mit Routineaufgaben verbringen. Erst danach ergibt die Wahl konkreter Metriken einen Sinn.
2. Lines of Code und Commit-Anzahl als irreführende Signale
Lines of Code gilt seit Jahrzehnten als klassisches Beispiel für eine Metrik, die das Gegenteil dessen belohnt, was ein Team eigentlich erreichen will. Claude Code kann in Sekunden hunderte Zeilen Boilerplate, Tests oder Dokumentation erzeugen, ohne dass damit ein einziges echtes Problem gelöst wurde. Umgekehrt ist die eleganteste Lösung eines schwierigen Bugs oft eine einzige geänderte Zeile. Wer LOC als Produktivitätsmaß nutzt, schafft einen Anreiz, mehr Code statt besseren Code zu produzieren, und das gilt mit KI-Unterstützung noch stärker als vorher.
Die Commit-Anzahl hat ein ähnliches Problem, nur subtiler. Manche Entwickler committen mit Claude Code häufiger, weil kleine, von der KI vorgeschlagene Zwischenschritte leicht in eigene Commits gepackt werden. Andere squashen alles zu einem einzigen Commit pro Pull Request. Beides sagt nichts über die eigentliche Arbeitsleistung aus, sondern nur über den Commit-Stil. Ein einfacher Blick in die Git-Historie reicht, um zu zeigen, wie wenig diese Rohwerte über tatsächlichen Fortschritt aussagen.
#!/usr/bin/env bash
# git-noise-check.sh - shows why raw LOC and commit counts are misleading
set -euo pipefail
SINCE="${1:-30 days ago}"
echo "== Commits per author since $SINCE =="
git log --since="$SINCE" --pretty=format:"%an" | sort | uniq -c | sort -rn
echo
echo "== Lines added/removed per author (includes generated boilerplate) =="
git log --since="$SINCE" --pretty=format:"%an" --numstat |
awk '
/^[A-Za-z]/ { author=$0; next }
NF==3 { added[author]+=$1; removed[author]+=$2 }
END { for (a in added) printf "%-25s +%-6d -%-6d\n", a, added[a], removed[a] }
'
echo
echo "Note: neither metric distinguishes a one-line bugfix worth hours"
echo "of debugging from 400 lines of AI-generated boilerplate."
3. Cycle Time als aussagekräftigere Kennzahl
Cycle Time, die Zeitspanne vom ersten Commit eines Tasks bis zum Merge in den Hauptzweig, bildet die tatsächliche Durchlaufzeit einer Änderung ab und ist damit deutlich robuster gegen Manipulation als LOC oder Commit-Anzahl. Wenn Claude Code echte Produktivitätsgewinne bringt, sollte sich das in einer kürzeren Cycle Time bei vergleichbaren Aufgaben zeigen, nicht in mehr Output pro Stunde. Wichtig ist dabei, Cycle Time nach Aufgabentyp zu segmentieren, denn ein Bugfix und ein neues Feature haben grundsätzlich unterschiedliche Verteilungen, und ein Team-Durchschnitt über beide Typen hinweg verschleiert echte Trends.
Ein häufiger Fehler ist, nur den Median zu betrachten. Gerade bei KI-unterstützter Entwicklung lohnt sich der Blick auf die Verteilung: Viele kleine Tasks werden spürbar schneller, während ein paar komplexe Tasks durch fehlerhafte KI-Vorschläge sogar länger dauern als vorher. Das Perzentil-95 zeigt diese Ausreißer, die im Median untergehen würden. Ein einfaches Python-Skript gegen die GitHub- oder GitLab-API liefert diese Verteilung ohne zusätzliches Tooling.
#!/usr/bin/env python3
"""cycle_time.py - compute cycle time distribution from PR data."""
import statistics
from datetime import datetime
from dataclasses import dataclass
@dataclass
class PullRequest:
id: int
first_commit_at: datetime
merged_at: datetime
ai_assisted: bool
def cycle_time_hours(pr: PullRequest) -> float:
delta = pr.merged_at - pr.first_commit_at
return delta.total_seconds() / 3600
def summarize(prs: list[PullRequest]) -> dict:
hours = sorted(cycle_time_hours(pr) for pr in prs)
if not hours:
return {}
return {
"count": len(hours),
"median_h": statistics.median(hours),
"p95_h": hours[int(len(hours) * 0.95) - 1],
"mean_h": statistics.mean(hours),
}
def compare_ai_vs_manual(prs: list[PullRequest]) -> None:
ai = [p for p in prs if p.ai_assisted]
manual = [p for p in prs if not p.ai_assisted]
print("AI-assisted:", summarize(ai))
print("Manual: ", summarize(manual))
# Segment further by task type (bugfix, feature, refactor)
# before drawing conclusions from the aggregate numbers.
4. Time-to-First-Review als Frühindikator
Time-to-First-Review, die Zeit vom Öffnen eines Pull Requests bis zum ersten Reviewer-Kommentar, ist ein Frühindikator, der oft übersehen wird, obwohl er direkt mit dem Einsatz von Claude Code zusammenhängt. Wenn KI-generierter Code strukturell unauffällig, aber inhaltlich fehlerhaft ist, brauchen Reviewer länger, um Vertrauen aufzubauen, und die Zeit bis zur ersten Rückmeldung steigt, auch wenn die Cycle Time insgesamt gleich bleibt. Ein Anstieg dieser Metrik ist ein klares Signal dafür, dass Reviewer der KI-Ausgabe misstrauen oder mit dem gestiegenen Umfang der Pull Requests nicht mithalten können.
Ebenso aufschlussreich ist die Anzahl der Review-Runden pro Pull Request. Steigt sie bei KI-unterstützten Changes an, deutet das darauf hin, dass Claude Code zwar schneller einen ersten Entwurf liefert, dieser aber häufiger nachgebessert werden muss, als wenn ein erfahrener Entwickler den Code von Anfang an geschrieben hätte. Diese Daten lassen sich direkt aus der GitHub- oder GitLab-API ziehen und mit einem Flag versehen, das markiert, ob eine Änderung überwiegend KI-generiert war.
{
"pull_request": 4821,
"opened_at": "2026-06-03T09:12:00Z",
"first_review_at": "2026-06-03T14:47:00Z",
"time_to_first_review_hours": 5.6,
"review_rounds": 3,
"ai_assisted": true,
"ai_tool": "claude-code",
"task_type": "feature",
"lines_changed": 214,
"files_changed": 6,
"reviewer_comments": [
{ "severity": "blocking", "category": "logic_error" },
{ "severity": "minor", "category": "naming" },
{ "severity": "blocking", "category": "missing_test" }
],
"merged_at": "2026-06-04T10:03:00Z"
}
5. Defect-Rate bei KI-unterstützten Änderungen
Die Defect-Rate, also der Anteil an Changes, die nach dem Merge einen Bug, einen Hotfix oder einen Revert nach sich ziehen, ist die Metrik, die letztlich entscheidet, ob gewonnene Geschwindigkeit echt oder nur geliehen ist. Voraussetzung für diese Auswertung ist ein konsequentes Tagging: Jeder Pull Request muss markiert werden, ob er überwiegend mit Claude Code entstanden ist, teilweise oder gar nicht. Ohne dieses Tagging lässt sich später nicht mehr rekonstruieren, welche Fehler aus welcher Arbeitsweise stammen.
In der Praxis zeigt sich häufig ein zweischneidiges Bild: Bei klar abgegrenzten, gut spezifizierten Aufgaben wie CRUD-Endpunkten oder Standard-Refactorings liegt die Defect-Rate KI-unterstützter Changes oft nicht höher als bei manuell geschriebenem Code, teilweise sogar niedriger, weil Claude Code Tests und Edge Cases konsequenter mitliefert. Bei Aufgaben mit hoher Domänenkomplexität, etwa individuellen Preislogiken oder Nebenläufigkeitsproblemen, steigt die Defect-Rate dagegen spürbar, weil die KI plausibel wirkenden, aber fachlich falschen Code erzeugt, der im Review nicht auffällt.
6. Rework-Rate und Revert-Häufigkeit als Warnsignal
Die Rework-Rate misst, wie oft Code innerhalb kurzer Zeit nach dem Merge erneut angefasst werden muss, sei es durch einen Folge-Commit, einen Hotfix oder einen vollständigen Revert. Sie ist besonders aussagekräftig, weil sie nicht auf subjektive Einschätzungen angewiesen ist, sondern direkt aus der Git-Historie berechnet werden kann. Ein Anstieg der Rework-Rate nach Einführung von Claude Code ist ein starkes Warnsignal dafür, dass Geschwindigkeit auf Kosten von Sorgfalt erkauft wurde, etwa weil KI-Vorschläge zu unkritisch übernommen wurden.
Ein einfaches Skript über die Commit-Historie reicht, um Reverts und schnelle Folgeänderungen an denselben Dateien zu identifizieren. Wichtig ist ein Zeitfenster, das eng genug ist, um echtes Rework von normaler iterativer Weiterentwicklung zu unterscheiden, in der Praxis haben sich sieben bis vierzehn Tage bewährt. Änderungen, die deutlich später an derselben Stelle erfolgen, gehören zur normalen Weiterentwicklung eines Produkts und sollten nicht als Rework gezählt werden.
// rework-detector.js - flag files touched again shortly after merge
import { execSync } from 'node:child_process';
const REWORK_WINDOW_DAYS = 10;
function getCommitsSince(days) {
const raw = execSync(
`git log --since="${days} days ago" --name-only --pretty=format:"COMMIT|%H|%at"`
).toString();
return raw.split('COMMIT|').filter(Boolean).map(parseEntry);
}
function parseEntry(entry) {
const [meta, ...files] = entry.trim().split('\n');
const [hash, timestamp] = meta.split('|');
return { hash, timestamp: Number(timestamp), files: files.filter(Boolean) };
}
function detectRework(commits) {
const lastTouch = new Map();
const reworked = [];
for (const commit of commits.sort((a, b) => a.timestamp - b.timestamp)) {
for (const file of commit.files) {
const prev = lastTouch.get(file);
if (prev) {
const daysBetween = (commit.timestamp - prev) / 86400;
if (daysBetween <= REWORK_WINDOW_DAYS) {
reworked.push({ file, daysBetween: daysBetween.toFixed(1) });
}
}
lastTouch.set(file, commit.timestamp);
}
}
return reworked;
}
const commits = getCommitsSince(60);
console.table(detectRework(commits));
7. Wo Claude Code die Entwicklung tatsächlich verlangsamt
Eine ehrliche Bewertung gehört zu einer seriösen Messung dazu: Es gibt Aufgabenklassen, bei denen Claude Code Entwickler messbar bremst statt beschleunigt. Bei tief in Legacy-Systemen verwurzelten Änderungen, deren Kontext nicht vollständig im Code selbst sichtbar ist, sondern in ungeschriebenem Domänenwissen steckt, produziert die KI oft plausible, aber falsche Lösungen. Die Zeit, die ein Entwickler braucht, um einen fehlerhaften KI-Vorschlag zu erkennen, zu verwerfen und danach die Aufgabe selbst zu lösen, kann länger sein, als hätte er von Anfang an selbst angefangen.
Ähnliches gilt für hochgradig sicherheitskritischen Code, bei dem jede Zeile einzeln verifiziert werden muss, sowie für Aufgaben, die primär aus Verhandlung und Abstimmung bestehen, etwa das Festlegen einer API-Schnittstelle zwischen Teams. Auch bei sehr kleinen, trivialen Änderungen kann der Umweg über einen Prompt langsamer sein als die direkte manuelle Bearbeitung. Teams, die diese Grenzfälle offen benennen, statt KI-Unterstützung pauschal als Produktivitätsgewinn zu verkaufen, gewinnen intern deutlich mehr Vertrauen in ihre Messdaten.
8. Ein pragmatisches Messsystem aufbauen
Ein funktionierendes Messsystem muss nicht aufwendig sein. Der wichtigste erste Schritt ist ein einheitliches Tagging-Schema in Pull-Request-Beschreibungen oder Commit-Trailern, das markiert, ob und in welchem Umfang Claude Code an einer Änderung beteiligt war. Ohne dieses Tagging bleiben alle nachgelagerten Auswertungen Schätzungen. Darauf aufbauend genügt ein wöchentlicher Cronjob, der Cycle Time, Time-to-First-Review, Defect-Rate und Rework-Rate aus Git- und Issue-Tracker-Daten extrahiert und in eine einfache CSV- oder Dashboard-Ansicht überführt.
Entscheidend ist, die Daten mindestens acht bis zwölf Wochen zu sammeln, bevor überhaupt Schlussfolgerungen gezogen werden, weil einzelne Sprints zu volatil sind und von externen Faktoren wie Urlaub, Release-Druck oder Teamwechseln überlagert werden. Ein rollierender Vier-Wochen-Durchschnitt glättet diese Schwankungen und macht echte Trends sichtbar, ohne kurzfristiges Rauschen zu überbewerten.
#!/usr/bin/env bash
# weekly-metrics-export.sh - collect and export the four core metrics
set -euo pipefail
readonly OUTPUT="metrics/$(date +%Y-%m-%d)-weekly.csv"
mkdir -p metrics
echo "pr_id,ai_assisted,cycle_time_h,ttfr_h,review_rounds,reverted" > "$OUTPUT"
gh pr list --state merged --limit 200 --json number,body,createdAt,mergedAt \
--jq '.[] | select(.body | test("ai-assisted: *true"; "i"))' |
while read -r pr; do
# Extract fields and append a row per PR to the CSV
echo "$pr" >> "$OUTPUT.raw"
done
echo "Exported weekly metrics to $OUTPUT"
echo "Aggregate with a 4-week rolling average before drawing conclusions."
9. Metriken im direkten Vergleich
Die folgende Übersicht stellt naive, leicht verfügbare Metriken den aussagekräftigeren Alternativen gegenüber und zeigt, warum die zweite Spalte in fast jedem Fall die bessere Entscheidungsgrundlage liefert.
| Fragestellung | Naive Metrik | Aussagekräftige Metrik | Warum besser |
|---|---|---|---|
| Wie viel wurde produziert? | Lines of Code | Abgeschlossene Tasks pro Sprint | Belohnt Ergebnis statt Volumen |
| Wie aktiv ist ein Entwickler? | Commit-Anzahl | Cycle Time pro Task-Typ | Misst Durchlaufzeit statt Commit-Stil |
| Vertraut das Team der KI? | Gefühl im Standup | Time-to-First-Review | Objektives Frühsignal aus der Praxis |
| Ist der Code stabil? | Anzahl gemergter PRs | Defect-Rate pro Change-Typ | Erfasst Folgekosten statt nur Output |
| War die Geschwindigkeit echt? | Time-to-Merge allein | Rework-Rate im 10-Tage-Fenster | Deckt geliehene Geschwindigkeit auf |
Kein einzelner Wert aus dieser Tabelle sollte isoliert betrachtet werden. Erst die Kombination aus Cycle Time, Time-to-First-Review, Defect-Rate und Rework-Rate über mehrere Wochen ergibt ein Bild, das belastbar genug ist, um daraus Entscheidungen über den weiteren Einsatz von Claude Code abzuleiten.
Mironsoft
Claude Code Workflows, Engineering Metrics und Magento-Entwicklung
Belastbare Zahlen statt Bauchgefühl bei KI-Produktivität?
Wir helfen Teams, ein pragmatisches Messsystem für Claude Code aufzubauen, das Cycle Time, Review-Metriken und Defect-Rate erfasst und ehrlich zeigt, wo KI-Unterstützung wirklich Zeit spart und wo nicht.
Metriken-Setup
Tagging-Schema, Dashboards und automatisierte Datenextraktion aus Git und CI
Claude-Code-Workflows
Team-Prozesse und Review-Praxis auf KI-unterstützte Entwicklung abstimmen
Auswertung & Reporting
Regelmäßige Reports mit ehrlicher Einordnung statt Marketingzahlen
10. Zusammenfassung
Die realistische Messung von Produktivität mit Claude Code beginnt mit dem Verzicht auf naive Kennzahlen wie Lines of Code und Commit-Anzahl, die beide leicht zu manipulieren sind und keinen Bezug zu tatsächlichem Fortschritt haben. Aussagekräftiger sind Cycle Time pro Task-Typ, Time-to-First-Review als Frühindikator für Reviewer-Vertrauen, Defect-Rate bei getaggten KI-Changes und Rework-Rate als Signal für geliehene statt echte Geschwindigkeit. Diese vier Kennzahlen zusammen ergeben ein Bild, das robust genug ist, um Entscheidungen darauf zu stützen.
Ebenso wichtig ist die ehrliche Anerkennung von Grenzfällen: Bei Legacy-Code mit unsichtbarem Domänenwissen, sicherheitskritischen Änderungen und reinen Abstimmungsaufgaben kann Claude Code Teams messbar verlangsamen. Ein Messsystem, das diese Fälle offen benennt, statt sie zu verschweigen, schafft intern mehr Glaubwürdigkeit als jede pauschale Erfolgsmeldung und liefert die Grundlage für einen gezielten, statt pauschalen Einsatz von KI-Unterstützung im Entwicklungsalltag.
Produktivität mit Claude Code messen - Das Wichtigste auf einen Blick
Naive Metriken meiden
Lines of Code und Commit-Anzahl belohnen Volumen statt Ergebnis und lassen sich leicht künstlich erhöhen.
Cycle Time & Review-Zeit
Segmentiert nach Task-Typ zeigen sie echte Durchlaufzeit und Reviewer-Vertrauen in KI-generierten Code.
Defect- & Rework-Rate
Zeigen, ob gewonnene Geschwindigkeit echt ist oder später als Folgeaufwand zurückkommt.
Grenzen ehrlich benennen
Legacy-Kontext, sicherheitskritischer Code und Abstimmungsaufgaben können mit KI langsamer werden.