Informazioni sul cliente
A metà del 2025, il team di ingegneri aveva accumulato un debito tecnico significativo: il codice sorgente era cresciuto senza controlli di qualità coerenti, il flusso di lavoro Git si basava su push diretti al ramo principale senza revisioni o controlli di sicurezza e l'infrastruttura, in esecuzione su un cluster Kubernetes self-hosted, era priva di strumenti moderni per CI/CD, gestione degli artefatti e monitoraggio degli incidenti. Inoltre, non esisteva un processo formale per individuare le vulnerabilità di sicurezza prima che raggiungessero la produzione.
Neotecnica ha incaricato WWG di condurre un audit tecnico completo di tutti e quattro i repository, ristrutturare i flussi di lavoro di sviluppo e implementazione, rafforzare la sicurezza dell'infrastruttura e valutare la predisposizione del backend AFM alla migrazione al cloud, il tutto con l'obiettivo di ridurre i rischi e stabilire una base scalabile per la crescita futura del prodotto.
Sfida
- Debito tecnico su quattro codebase eterogenee. Lo stack software di Neotecnica comprendeva un'applicazione frontend React, una libreria di componenti React privata con una galleria Storybook e un backend monolitico Java EE/Spring, ognuno con il proprio albero delle dipendenze, configurazione di linting e superficie di vulnerabilità. Condurre un audit significativo su tutti e quattro gli ambiti richiedeva strumenti coordinati e la capacità di interpretare i risultati nel contesto del ruolo di ciascuna codebase nel sistema complessivo.
- Un flusso di lavoro Git senza reti di sicurezza. Tutti i repository di Neotecnica operavano senza protezione dei branch. I branch delle funzionalità, alcuni dei quali sufficientemente longevi da fungere di fatto da versioni beta, venivano uniti direttamente senza pull request, code review o controlli CI. Ciò significava che il codice non revisionato e non testato poteva raggiungere l'ambiente di produzione in qualsiasi momento, e i rollback risultavano operativamente difficili a causa dell'assenza di convenzioni di tagging o di versioning coerenti.
- Infrastruttura priva di CI/CD moderna e di osservabilità. Il cluster Kubernetes esistente era in esecuzione su una configurazione di certificati obsoleta, mancava di ridondanza del piano di controllo ad alta disponibilità e non disponeva di alcuna orchestrazione CI/CD oltre a una rudimentale build Jenkins. Non esisteva un repository di artefatti per la gestione di pacchetti NPM privati e build Maven, né un sistema centralizzato di avvisi per lo stato di salute del cluster o delle applicazioni, né un sistema di reperibilità per la gestione degli incidenti.
- Un backend monolitico al limite dell'architettura. Il backend di AFM presentava problematiche strutturali che andavano oltre la qualità del codice. Strati frontend/backend strettamente accoppiati, credenziali e valori di configurazione hardcoded, gestione manuale dei thread, SQL incorporato e una generale assenza di confini di servizio modulari rendevano il sistema difficile da testare, manutenere ed estendere. Era in fase di valutazione una migrazione al cloud, ma non esisteva una chiara valutazione della sua idoneità né una strategia a fasi per guidarla.
Hai qualche domanda?
Incontriamoci e parliamone.
Soluzione
WWG ha realizzato il progetto attraverso quattro flussi di lavoro paralleli, strutturati per produrre sia una riduzione immediata del rischio sia una chiara roadmap per la modernizzazione a lungo termine.
Audit del codebase: sicurezza, dipendenze e qualità del codiceWWG ha eseguito un audit completo su tutti e quattro i repository utilizzando una metodologia multi-strumento coerente. Ogni codebase è stata valutata per:
- Vulnerabilità di sicurezza: npm audit e osv-scanner hanno rilevato oltre 19 problemi nel frontend e nella libreria dei componenti, tra cui CVE ad alta gravità nelle dipendenze principali e una vulnerabilità ReDoS confermata che interessa tre repository distinti.
- Salute delle dipendenze: npm-check e depcheck hanno identificato pacchetti inutilizzati che si accumulavano come peso morto e decine di pacchetti obsoleti di una o più versioni principali.
- Qualità del codice: ESLint ha rilevato circa 9.000 problemi nel frontend React e oltre 4.000 nella libreria dei componenti, principalmente violazioni di no-undef, variabili inutilizzate e utilizzo di @typescript-eslint/no-explicit-any.
- Backend Java: l'analisi del codice sorgente con SonarQube ha identificato credenziali hardcoded, blocchi di eccezioni catch-all, SQL manuale, blocchi di codice commentati e classi di grandi dimensioni strettamente accoppiate come i principali rischi per la manutenibilità.
Ogni audit è stato consegnato come un report strutturato con una classificazione della gravità per area e una roadmap di risoluzione prioritaria.
Audit del flusso di lavoro Git e riprogettazione della strategia di branchingWWG ha condotto un audit completo del flusso di lavoro Git di Neotecnica su tutti i repository, documentando i rischi dell'approccio attuale: branch principali non protetti, merge diretti da branch di funzionalità a lungo termine, assenza di revisione del codice basata sulle pull request e nessun gate CI prima della produzione.
Sono state valutate in dettaglio due strategie di branching alternative: GitHub Flow (ottimizzata per cicli di implementazione frequenti) e Trunk-Based Development (ottimizzata per ridurre al minimo i conflitti di merge tramite branch di breve durata e feature flag). Per la libreria di componenti React privata, la valutazione ha affrontato in particolare la sfida dei branch beta di lunga durata, che non si adattano perfettamente a nessuno dei due modelli standard. Insieme ai risultati dell'audit è stata fornita una raccomandazione di implementazione concreta, comprensiva di regole di protezione dei branch, modelli di pull request e checkpoint di integrazione CI.
È stata prodotta una valutazione tecnica del backend di AFM, documentandone i limiti architetturali attuali e proponendo una strategia di migrazione a fasi: a breve termine, Dockerizzazione e implementazione di macchine virtuali cloud (AWS EC2/ECS) con migrazione del database Oracle a RDS; a lungo termine, replatforming a microservizi Spring Boot, PostgreSQL e Kubernetes con piena osservabilità (Prometheus, Grafana, ELK).
Per supportare il team di sviluppo in futuro, WWG ha prodotto due documenti standard: Convenzioni di codifica del backend e standard di architettura modulare (che coprono le convenzioni di denominazione Java, l'architettura a livelli, Spring Security, i target di test e l'integrazione con SonarQube) e Linee guida professionali per la creazione di un pacchetto NPM React (che coprono la configurazione di build, il tree-shaking, le dipendenze peer e l'output duale CJS/ESM).
WWG ha ristrutturato da zero i cluster Kubernetes di Neotecnica per garantire alta disponibilità e un supporto CI/CD moderno:
- Alta disponibilità con 3 nodi control plane e gruppi di nodi worker dedicati in base ai carichi di lavoro.
- Installazione e configurazione di Rancher come interfaccia utente per la gestione del cluster, che consente la visibilità dei carichi di lavoro e il controllo operativo senza la necessità di conoscere la riga di comando.
- Installazione di Jenkins con agenti nativi di Kubernetes: le pipeline vengono eseguite con pod effimeri, eliminando la necessità di agenti persistenti sulle VM.
- Implementazione di Nexus Artifact Repository per l'hosting di pacchetti NPM privati (in sostituzione dei sottomoduli Git) e artefatti di build Maven.
WWG ha condotto valutazioni CIS Benchmark per i server che eseguono servizi supplementari come il server di identità Keycloak e il server OpenVPN, producendo report dettagliati sui risultati rispetto ai benchmark di sicurezza applicabili. Il server OpenVPN è stato inoltre configurato per l'accesso remoto del team con file di configurazione per utente e gestione del backup PKI.
Stack Tecnologico
Scansione delle vulnerabilità di sicurezza su tutti i repository JavaScript/TypeScript: identificazione delle CVE e classificazione della gravità
SonarQube
Analisi statica per il backend Java AFM: code smell, problemi di sicurezza, punteggio di manutenibilità
Rancher
Interfaccia utente di gestione di Kubernetes: visibilità del carico di lavoro, gestione dei nodi e controllo operativo
Nexus Artifact Repository
Hosting privato di artefatti per pacchetti NPM e build Maven, in sostituzione dei sottomoduli git
PagerDuty + Healthchecks.io
Gestione degli incidenti con integrazione con MS Teams, pianificazione delle reperibilità e configurazione delle policy di escalation
Qualità del codice, rilevamento delle dipendenze inutilizzate e stato di salute delle versioni dei pacchetti nelle codebase di React e delle librerie di componenti
MicroK8s su VMware
Cluster Kubernetes self-hosted, ristrutturato per l'alta disponibilità con 3 nodi del piano di controllo e gruppi di nodi worker
Jenkins con agenti Kubernetes
Orchestrazione della pipeline CI/CD con agenti pod effimeri; autenticazione GitHub App e pattern Shared Library con modelli riutilizzabili
Keycloak + OpenVPN
Gestione delle identità e degli accessi; regole VPN per utente e backup PKI; hardening CIS Benchmark applicato a entrambi i server;
AWS (EC2, ECS, RDS)
Infrastruttura cloud di destinazione proposta nella roadmap di migrazione AFM per le fasi di implementazione a breve e lungo termine
Principali sfide tecniche
Ciascuna delle quattro codebase operava con una configurazione di base diversa: set di regole ESLint diversi, gestori di pacchetti diversi, sistemi di build diversi. Standardizzare la metodologia di audit su tutte senza modificare le configurazioni esistenti ha richiesto un'attenta selezione degli strumenti e un'accurata interpretazione dei risultati. In particolare, distinguere i problemi di ESLint che erano artefatti di configurazione (ad esempio, regole che segnalavano pattern intenzionalmente dinamici) dal vero debito tecnico ha richiesto una revisione a livello di codice insieme all'output automatizzato.
Il repository della libreria dei componenti aveva sviluppato un modello di branching in cui un branch di funzionalità si era di fatto trasformato in un branch di versione beta di lunga durata. Né GitHub Flow né lo sviluppo basato sul trunk gestiscono questo modello in modo pulito fin da subito: GitHub Flow scoraggia i branch che durano più di una settimana e lo sviluppo basato sul trunk richiede flag di funzionalità per il lavoro non completato. L'audit Git di WWG ha affrontato specificamente questo problema, fornendo una raccomandazione ibrida che riconosceva le esigenze di versioning della libreria senza imporre un flusso di lavoro che avrebbe creato attrito per il team.
I tre repository principali di Neotecnica — un'applicazione React, una libreria NPM privata e un backend Java Maven — hanno requisiti CI/CD significativamente diversi. Un'app React richiede un flusso di lavoro standardizzato per i controlli di qualità e la distribuzione automatizzata. Una libreria NPM necessita di versioning automatizzato e di una gestione sicura degli artefatti per la distribuzione. Un backend Maven richiede un processo di build complesso, che include la containerizzazione e il deployment su un registro privato. WWG ha progettato pipeline di esempio per tutte e tre le tipologie, utilizzando le librerie condivise di Jenkins per estrarre la logica dei modelli riutilizzabile, riducendo le duplicazioni e garantendo al team di Neotecnica riferimenti operativi anziché linee guida astratte.
Sia il server Keycloak che il server OpenVPN erano attivi e in uso durante l'intervento. Le valutazioni e il rafforzamento della sicurezza secondo i benchmark CIS hanno richiesto l'individuazione delle raccomandazioni applicabili immediatamente e di quelle che necessitavano di finestre di manutenzione pianificate.
Results
- Quadro tecnico completo su tutti e quattro i repositoryOgni codebase è stata sottoposta ad audit con strumenti coerenti, producendo report strutturati con risultati classificati per gravità e roadmap di correzione prioritarie, offrendo per la prima volta al team Neotecnica una visibilità concreta sul debito di sicurezza e qualità.
- Oltre 19 vulnerabilità di sicurezza documentate con percorsi di correzione
Tutte le CVE critiche e ad alta gravità sono state identificate, attribuite a pacchetti specifici e associate a passaggi di correzione concreti, inclusi target di versione, alternative di migrazione e raccomandazioni per l’applicazione della CI per prevenire regressioni. - Cluster Kubernetes ad alta disponibilità operativo
Il cluster MicroK8s è stato ristrutturato con un piano di controllo HA a 3 nodi, gestione Rancher, Jenkins con agenti nativi di Kubernetes e hosting di artefatti Nexus, sostituendo una fragile configurazione a nodo singolo con un’infrastruttura di distribuzione pronta per la produzione. - Monitoraggio degli incidenti in tempo reale con instradamento delle reperibilità
PagerDuty e Healthchecks.io sono stati configurati e integrati con Microsoft Teams, fornendo al team di ingegneri una gestione strutturata degli incidenti con criteri di escalation, pianificazione delle reperibilità e instradamento delle notifiche per ogni operatore.
Conclusione
WWG ha affrontato ogni flusso di lavoro con la stessa metodologia: valutare accuratamente lo stato attuale, comprendere il contesto aziendale e operativo e fornire raccomandazioni e implementazioni che il team possa effettivamente mettere in pratica.
Il risultato è una codebase con piena visibilità sulla sua superficie di rischio, un'infrastruttura pronta per la moderna distribuzione CI/CD e un team di sviluppo dotato degli standard e degli strumenti necessari per mantenere la qualità man mano che la piattaforma continua a crescere.