Left top figure Right top figure

Neotecnica

Industria: Software di ingegneria/industriale
Posizione: Italia
4 basi di codice completamente verificate: frontend, libreria, galleria, backend
Oltre 13.000 problemi di qualità del codice identificati e analizzati in tutti i repository.

Informazioni sul cliente

Neotecnica è un'azienda tecnologica italiana specializzata in piattaforme Digital Twin per la gestione completa di infrastrutture industriali e ICT complesse. La loro piattaforma principale è un'applicazione backend Java EE/Spring che serve clienti in settori ad alta intensità di capitale, supportata da un frontend basato su React e da una libreria di componenti proprietaria condivisa, pubblicata come pacchetto NPM privato.

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

L'incarico ha combinato quattro ambiti problematici distinti ma interconnessi, ognuno con la propria complessità:
  • 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

Risultati del benchmark CIS sul server.png
Solution image

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 codice

WWG 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.

Avvisi di PagerDuty in MSTeams.png
Solution image
  • 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 branching

WWG 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.

Interfaccia grafica di Rancher per la gestione di cluster Kubernetes.png
Solution image

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.

Valutazione della migrazione al cloud e documentazione degli standard

È 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).
Modernizzazione dell'infrastruttura Kubernetes

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.
Rafforzamento della sicurezza e monitoraggio

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.
È stato configurato un sistema di monitoraggio e allerta utilizzando Prometheus, Loki e Grafana, PagerDuty (come hub centrale per la gestione degli incidenti) e Healthchecks.io (per il monitoraggio dello stato di salute basato sui ruoli), integrato con lo spazio di lavoro Microsoft Teams del team. La configurazione includeva la pianificazione dei turni di reperibilità, le politiche di escalation e l'instradamento delle notifiche per singolo utente, sostituendo le notifiche via e-mail con una gestione degli incidenti in tempo reale e basata sui ruoli.

Stack Tecnologico

npm audit + osv-scanner
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
ESLint + depcheck + npm-check
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

Coordinamento di un audit multi-repository senza una toolchain condivisa

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.

Risoluzione del problema dei branch di lunga durata nella libreria dei componenti

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.

Architettura della pipeline Jenkins per tre tipologie di repository distinte

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.

Rafforzamento della sicurezza senza interrompere i servizi attivi

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.

Challenge image
Challenge image

Results

  1. 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à.
  2. 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.

  3. 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.

  4. 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

L'intervento di Neotecnica è stato un'operazione tecnica ad ampio raggio, in cui la sfida non consisteva in un singolo problema complesso, ma nell'effetto cumulativo di anni di crescita senza controlli di qualità formalizzati. Erano presenti vulnerabilità di sicurezza, ma non tracciate. I problemi di qualità del codice erano diffusi, ma non misurati. Il flusso di lavoro Git era funzionale, ma fragile. L'infrastruttura funzionava, ma mancava degli strumenti necessari per renderla affidabile e monitorabile.
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.
Ciò significava produrre report di audit con piani di intervento correttivo, non solo elenchi di risultati. Significava pubblicare esempi funzionanti di pipeline Jenkins, non solo diagrammi di architettura. E significava valutare le strategie Git rispetto ai modelli di branching specifici di Neotecnica, non limitarsi a raccomandare un modello standard e passare oltre.
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.
CEO picture
MOHAMED DERAMCHI,
CEO & Founder

Parliamone!

Alcuni esempi concreti dell’utilizzo delle nostre tecnologie e di come le nostre conoscenze siano state utili per risolvere situazioni critiche o migliorare flussi lavorativi.

    AI & CREATIVITY
    📍 Varese, Elmec Informatica HQ 🗓️ 17.04 ⏰ Evento serale – Ingresso gratuito (registrazione obbligatoria)
    Cosa c'entra Pinocchio con la leadership nell’era dell’Intelligenza Artificiale?
    E come l’AI trasformerà i prossimi 10 anni del tuo business — e del tuo team?
    Un viaggio audace, inaspettato e profondamente umano nell’universo dell’AI:
    Visions of how AI is reshaping creativity, business and society
    🔸Visioni su come l’AI sta ridefinendo creatività, business e società
    🔸Strumenti pratici e storie da applicare subito
    🔸Use case reali: dal design al marketing, passando per l’innovazione
    🔸Non il solito talk sull’AI – ma un viaggio creativo nel futuro tecnologico
    🔸Lezioni di leadership ispirate a... Pinocchio (sì, davvero)
    🎤 Speaker: menti brillanti tra strategia, innovazione e storytelling
    Unisciti a noi