Sachin Malhotra, Ingenieur bei Anthropic, schildert, wie das Unternehmen seinen Test-Impact-Analyse-Dienst unter dem Druck des agentischen Codings grundlegend überarbeiten musste. Ausgangspunkt ist eine Zahlenkette: Die Entwickler liefern im Schnitt achtmal mehr Code pro Quartal als zwischen 2021 und 2025, Claude schreibt 80 % davon und spielt bei PR-Review und -Freigabe eine wesentliche Rolle, die Anzahl der Tests wurde bei annähernd konstanter Teamgröße mit zehn multipliziert. Das Ergebnis all dessen ist eine Verfünfundzwanzigfachung der CI-Jobs in sechs Monaten. Das Schreiben von Code ist nicht mehr der limitierende Faktor; sobald das Review beschleunigt wird, ist es die CI, die den Druck auffängt.
Der Dienst beruht auf zwei deterministischen Komponenten, die synchron bleiben müssen: einem Listener, der die Ergebnisse jedes Laufs erfasst, und einem Selector, der diese Historie liest, um zu entscheiden, welche Tests bei jedem PR laufen. Das Führen einer Pro-Test-Historie erforderte einen einzigen Writer, somit einen einzigen Prozess, somit die Unmöglichkeit, horizontal zu shard-en. Der Fehlermodus besteht darin, dass der Listener zurückfällt: Zwanzig Minuten reichen aus, um Zehntausende Aktualisierungen nicht übernommen zu lassen, was unnötige Untersuchungen auslöst, flaky Tests Merges blockieren lässt und verhindert, dass ein behobener oder hinzugefügter Test läuft.
20 Minuten Listener-Verzögerung können bedeuten, dass Zehntausende Testaktualisierungen nicht übernommen werden
Drei Korrekturen folgen aufeinander, jede mit einbrechender Lebensdauer: die Verdopplung der Kerne hält siebzig Tage; Sharding nach Package — der Listener brauchte keinen einzigen globalen Writer, sondern einen pro Package, und Claude schrieb den Code dafür — hält neunundzwanzig Tage; tägliche Neustarts halten weniger als einen Tag. In der Zwischenzeit überwacht eine Dauer-Session in einer internen Version von Claude Tag den Dienst und alarmiert ab einem Rückstand von fünfzigtausend Jobs; sie plädiert monatelang für die Grundüberarbeitung, doch das Team bevorzugt den Patch.
Die Grundüberarbeitung gibt dem Dienst ein magasin de données en mémoire. Jeder Listener-Worker verarbeitet ein beliebiges Ergebnis, hängt es an ein Log an und macht weiter, ohne etwas zu behalten: zustandslos, somit horizontal skalierbar. Ein separater Consumer aggregiert das Log alle paar Sekunden zur Pro-Test-Historie. Teurer im Betrieb, aber skalierbar und profilierbar. Drei Wochen für einen Entwickler, gegenüber etwa einem Quartal ein Jahr zuvor.
Die Lehren lassen sich auf vier Regeln verdichten: das Exponentielle antizipieren und innerhalb von zwei Quartalen eine fünfundzwanzigfach höhere Last annehmen, das v0 auf das Zehn- bis Zwanzigfache der wahrgenommenen Größenordnung dimensionieren, Dienste so instrumentieren, dass sie als Claudes Augen und Ohren dienen, und den Zustand von Anfang an aus dem Prozess heraushalten.