DEV Community

Andrea Schiona
Andrea Schiona

Posted on

From Chaos to Clarity: How We Transformed a Brownfield Multi-Repo Project with AI Agents, OpenCode & SpecKit

Come abbiamo trasformato un progetto brownfield multi-repo in un workflow di sviluppo agentico con OpenCode e SpecKit — senza forzare un monorepo.

Modernizzare un progetto software legacy (“brownfield”) con l’assistenza dell’AI è oggi un obiettivo raggiungibile — anche quando il codice è distribuito su più repository. In questo articolo, ti guido attraverso come abbiamo evoluto un progetto Git multi-repository classico in un workflow di sviluppo assistito da AI utilizzando OpenCode e GitHub SpecKit. Lungo il percorso, confronteremo questo approccio con altri assistenti di coding AI come GitHub Copilot, Amazon CodeWhisperer e Sourcegraph Cody, e condivideremo lezioni pratiche apprese.

I nostri obiettivi erano chiari:

✅ Una vista unificata e coerente dell’applicazione multi-repo (frontend, backend, componenti condivisi)
✅ Generazione e manutenzione automatiche della documentazione tecnica “as-is”
✅ Un flusso operativo ripetibile per analisi, sviluppo di feature ed esecuzione locale

Questo percorso si inserisce in una esplorazione più ampia che sto documentando. Se ti interessano le basi architetturali di questo approccio, ti consiglio di leggere il mio articolo precedente:
👉 https://medium.com/p/627795029809


🧩 La Sfida del Multi-Repo Brownfield

In un setup enterprise tipico, una singola applicazione spesso si estende su più repository Git — ad esempio, una UI frontend, uno o più servizi backend, librerie condivise e codice di infrastruttura. Ogni repo ha la propria storia e il proprio ciclo di deployment. Questa separazione è intenzionale e vantaggiosa per l’autonomia dei team, ma crea problemi quando gli assistenti di coding AI devono comprendere il quadro completo.

I progetti brownfield amplificano questa sfida: la codebase è grande, matura e plasmata da anni di decisioni e convenzioni. Introdurre un agente AI in questo ambiente significa che deve apprendere i pattern del progetto e non rompere nulla. L’AI necessita di una vista panoramica del sistema per essere veramente utile — altrimenti potrebbe suggerire modifiche che ignorano dipendenze in un altro repo o codice che non segue le convenzioni esistenti.

Perché non passare direttamente a un monorepo? Migrare tutto il codice in un solo repository potrebbe dare all’AI il contesto completo, ma è di solito impraticabile per un sistema maturo. Il passaggio a un monorepo introduce overhead pesanti (cambiamenti CI/CD, tooling, interruzione dei flussi di team) e rischi significativi senza benefici immediati. A meno che non si parta da zero o i repository siano già strettamente accoppiati, una migrazione a monorepo raramente vale la pena per questo scopo. Invece, abbiamo cercato una soluzione non disruptiva: mantenere i repo separati ma lasciare che l’AI li veda e lavori su di essi come se fossero unificati.


🛠️ Implementazione Passo-Passo

Step 1: Consolida i Repository Localmente

Abbiamo creato un workspace locale e clonato tutti i repo Git rilevanti (frontend, backend, componenti condivisi) in sottocartelle. Questo fornisce una struttura di file unificata per l’analisi.
📎 Per approfondire questo setup e la sua rationale, vedi il mio articolo: https://medium.com/p/627795029809

mkdir workspace
cd workspace
git clone <repo-frontend-url> frontend
git clone <repo-backend-url> backend
git clone <repo-shared-url> shared
Enter fullscreen mode Exit fullscreen mode

Step 2: Valida una Baseline Pulita

git -C frontend status
git -C backend status
git -C shared status

git -C frontend remote -v
git -C backend remote -v
git -C shared remote -v
Enter fullscreen mode Exit fullscreen mode

Step 3: Crea un Repository Dedicato per le Specifiche

mkdir spec
cd spec
git init
git branch -M main
git remote add origin <repo-spec-url>
Enter fullscreen mode Exit fullscreen mode

Step 4: Inizializza OpenCode e SpecKit

opencode init
speckit init
Enter fullscreen mode Exit fullscreen mode

Step 5: Genera la Documentazione AS-IS

speckit scan --source ../workspace
speckit generate as-is
speckit export --format md --out ./docs/as-is
Enter fullscreen mode Exit fullscreen mode

Step 6: Commit e Verifica

git add .
git commit -m "chore(spec): initial AS-IS baseline"
git push -u origin main
Enter fullscreen mode Exit fullscreen mode

Poi verifica l’esecuzione locale:

cd ../workspace/frontend
npm install
npm start
cd ../backend
npm install
npm run dev
Enter fullscreen mode Exit fullscreen mode

🤖 Usare Agenti AI su un Sistema Brownfield

Comprensione Cross-Repo

Con tutti i repository caricati nel contesto, l’AI poteva ragionare su modifiche che coinvolgevano frontend, backend e codice condiviso. Identificava correttamente dove posizionare le modifiche e ci chiedeva di confermare quale repo modificare.

Aggiornamenti Automatici della Documentazione

Dopo aver implementato le modifiche, riavviavamo:

speckit scan --source ../workspace
speckit generate as-is
speckit export --format md --out ./docs/as-is
Enter fullscreen mode Exit fullscreen mode

Sviluppo Iterativo, Spec-First

Abbiamo seguito la metodologia di SpecKit:

  • Scrivi o aggiorna una specifica
  • Genera un piano con /plan
  • Scomponi i task con /tasks
  • Implementa con OpenCode

Guidare l’AI con le Regole

Abbiamo perfezionato la nostra Costituzione per:

  • Prevenire la duplicazione del codice
  • Applicare il layering architetturale
  • Vietare anti-pattern (es. try/catch nei componenti UI) 📎 Ho esplorato questo argomento in modo più approfondito in un articolo dedicato: https://medium.com/p/da4204b3286a

📚 Perché Tenere le Specifiche e la Documentazione in un Repository Separato?

Abbiamo scelto di memorizzare tutte le specifiche e la documentazione in un repository Git dedicato (spec) invece di mescolarle nel codice dell’applicazione. Questo ha permesso:

  • Versioning e storia indipendenti
  • Workflow di review dedicati
  • Meno rumore nei repository del codice
  • Migliore governance della documentazione cross-repo

Alternative come incorporare le specifiche in ogni repo o memorizzarle in una cartella non versionata sono state scartate a causa della frammentazione, della mancanza di versioning e della scarsa revisionabilità.


⚖️ Confronto tra Tool: Assistenti AI per Progetti Brownfield

Un aspetto chiave della nostra valutazione è stato il confronto tra diversi strumenti di AI assistance. GitHub Copilot eccelle nel suggerire codice inline all’interno dell’IDE, ma ha un contesto limitato al file corrente o alla piccola porzione di codice aperta. Amazon CodeWhisperer e Sourcegraph Cody offrono una comprensione più ampia del repository, ma faticano ancora a coordinare modifiche coerenti su più repo separati. OpenCode, combinato con SpecKit, si è distinto per la capacità di operare su un workspace consolidato, applicare regole architetturali e mantenere la documentazione sincronizzata — senza richiedere una migrazione a monorepo.

Per progetti brownfield complessi, la scelta dello strumento non è solo una questione di qualità del completamento codice, ma di governance del cambiamento: quanto l’AI riesce a capire le regole del tuo sistema e a rispettarle durante modifiche estese.


🚀 Conclusione

Trasformare un progetto brownfield multi-repo in un workflow assistito da AI non è solo possibile — è potente. Federando i nostri repository in un singolo contesto AI e adottando un processo di sviluppo spec-first, abbiamo ottenuto:

  • Coerenza tra i repository
  • Documentazione sempre aggiornata
  • Iterazioni più veloci con meno overhead manuale

Non abbiamo dovuto ristrutturare il progetto o forzare un monorepo. Invece, abbiamo introdotto tooling AI in modo complementare ai flussi esistenti. Ad ogni iterazione, l’AI si è allineata maggiormente alla nostra architettura e alle nostre convenzioni.

Questo approccio è adatto a tutti? Se gestisci una codebase grande e complessa distribuita su più repository, credo che meriti seria considerazione. Con il setup e la governance giusti, gli agenti AI possono diventare collaboratori potenti — che non dormono mai, non dimenticano mai e seguono sempre le regole che tu definisci.


Riferimenti


Andrea Schiona — AI Breakfast / Software Architecture

Top comments (0)