Sachin Malhotra, ingegnere presso Anthropic, racconta come l'azienda abbia dovuto rivedere completamente il proprio servizio di test impact analysis sotto la pressione della programmazione agentica. Il punto di partenza è una concatenazione di cifre: gli ingegneri rilasciano in media otto volte più codice a trimestre rispetto al periodo 2021-2025, Claude ne scrive l'80% e gioca un ruolo importante nella revisione e nell'approvazione delle PR, il numero di test è stato moltiplicato per dieci con un organico quasi costante. Il prodotto di tutto ciò è un aumento di venticinque volte dei job CI in sei mesi. Scrivere codice non è più il vincolo; una volta accelerata la revisione, è la CI ad assorbire la pressione.

Il servizio si basa su due componenti deterministiche che devono restare sincronizzate: un listener, che registra i risultati di ogni esecuzione, e un selector, che legge questa cronologia per decidere quali test eseguire per ogni PR. Mantenere una cronologia per singolo test richiedeva un solo writer, quindi un processo unico, quindi l'impossibilità di fare sharding orizzontale. La modalità di guasto è il listener che resta indietro: venti minuti bastano a lasciare decine di migliaia di aggiornamenti non applicati, il che innesca investigazioni superflue, permette ai test flaky di bloccare i merge e impedisce l'esecuzione di un test corretto o aggiunto.

20 minuti di ritardo del listener possono tradursi in decine di migliaia di aggiornamenti di test non applicati

— Sachin Malhotra , claude.com

Si susseguono tre correzioni, ciascuna con una durata di vita in calo: raddoppiare i core tiene per settanta giorni; lo sharding per package — il listener non necessitava di un solo writer globale ma di uno per package, e Claude ne ha scritto il codice — tiene per ventinove giorni; i riavvii giornalieri tengono per meno di un giorno. Nel frattempo, una sessione long-running in una versione interna di Claude Tag monitora il servizio e avvisa oltre i cinquantamila job di arretrato; sostiene per mesi la necessità di una revisione completa, ma il team preferisce la correzione temporanea.

La revisione completa dota il servizio di un magasin de données en mémoire. Ogni worker listener elabora qualsiasi risultato, lo accoda a un log e prosegue senza trattenere nulla: stateless, quindi scalabile orizzontalmente. Un consumer separato aggrega il log in una cronologia per singolo test ogni pochi secondi. Più costoso da eseguire, ma scalabile e profilabile. Tre settimane per un ingegnere, contro circa un trimestre un anno prima.

Le lezioni si riducono a quattro regole: anticipare l'esponenziale e presupporre un carico venticinque volte superiore entro due trimestri, dimensionare la v0 a dieci-venti volte la scala percepita, strumentare i servizi perché fungano da occhi e orecchie di Claude, e tenere lo stato fuori dal processo fin dall'inizio.