Il costo nascosto di PHP legacy: rischio, tempo e debito tecnico in numeri

Un modello in tre voci per stimare quanto costa davvero restare su un PHP fuori supporto: rischio, tempo e debito tecnico, con formule, fonti dei dati, un esempio dichiaratamente inventato e come presentare la decisione alla direzione.

Copertina con il logo php∞, la categoria Compliance e business, il titolo Il costo nascosto di PHP legacy e il numero 48

Restare su una versione di PHP fuori supporto sembra la scelta più economica. Il server costa quello che costava, l’applicazione funziona, il preventivo di migrazione è una cifra concreta da approvare oggi mentre i rischi sono ipotetici e lontani. Per questo, quando si confrontano le due strade, la migrazione perde spesso in partenza: si confronta un costo certo con un costo che nessuno ha mai calcolato.

In questo articolo proviamo a rendere visibile quel costo. Non pubblichiamo percentuali o medie di settore, perché ogni azienda ha numeri suoi e quelle che circolano raramente sono confrontabili. Proponiamo invece un modello in tre voci, rischio, tempo e debito tecnico, con le formule per stimarle, le fonti da cui ricavare i dati e un esempio dichiaratamente inventato per mostrare come si usa. Alla fine il modello serve a una cosa sola: presentare alla direzione una decisione informata.

Perché il costo non si vede

I costi visibili di un’applicazione legacy sono quelli che arrivano in fattura: hosting, canone di manutenzione, eventuali licenze. Sono stabili, facili da confrontare e spesso bassi. Gli altri sono distribuiti in voci di bilancio diverse, o non compaiono affatto: le ore che un tecnico interno dedica a tenere in piedi il sistema, l’intervento notturno per un’urgenza, il progetto rinviato perché la libreria richiesta non gira sulla versione in uso, il rischio di un incidente che non si è ancora verificato.

Iceberg stilizzato. Sopra la linea di galleggiamento la punta con i costi visibili, in fattura ogni mese, facili da confrontare e spesso bassi: hosting e server, canone di manutenzione, licenze. Sotto, la parte nascosta che cresce ogni anno, collegata a tre schede: rischio, cioè incidente su una CVE senza patch, fermo, ripristino, notifiche, sanzioni e contestazioni; tempo, cioè patch e verifiche manuali, urgenze fuori orario, eccezioni di scanner e audit; debito tecnico, cioè ogni modifica costa di più, librerie e SDK bloccati, competenze rare da trovare. Nota: rappresentazione qualitativa, le proporzioni non indicano valori reali
I costi in fattura sono la parte piccola; il resto è distribuito e cresce con il tempo.

C’è poi un effetto temporale. Ogni anno su un ramo fuori supporto si accumulano nuove vulnerabilità senza correzione ufficiale, le librerie si allontanano e le persone che conoscono il codice cambiano lavoro. Il costo di restare cresce, e con lui cresce il costo della migrazione che si sta rinviando.

Prima voce: il rischio

Il rischio si esprime come perdita attesa: la probabilità che in un anno si verifichi un incidente, moltiplicata per il suo impatto. Nessuno dei due fattori è noto con precisione, ed è normale. L’errore è rinunciare alla stima per questo motivo, perché così si usa implicitamente una probabilità pari a zero.

L’impatto

L’impatto è la parte più stimabile, perché si compone di voci che l’azienda conosce:

  • fermo: ore di indisponibilità moltiplicate per il margine che il sistema genera o protegge in un’ora;
  • ripristino: analisi forense, ricostruzione dei server, recupero dei dati, ore interne ed esterne;
  • obblighi: notifica al Garante, ove possibile entro 72 ore, se sono coinvolti dati personali (art. 33 del GDPR), notifiche al CSIRT Italia per i soggetti NIS2, consulenze legali;
  • conseguenze: sanzioni, penali contrattuali, clienti persi. Per le sanzioni le norme indicano soglie massime, utili solo come ordine di grandezza del caso peggiore.

La probabilità

La probabilità si stima per intervalli. I fattori che la spostano sono noti: quanto il sistema è esposto su Internet, da quanto tempo il ramo è fuori supporto, quante vulnerabilità pubblicate riguardano davvero la configurazione in uso, se esistono exploit pubblici. Due fonti ufficiali aiutano a ragionare su basi concrete: il catalogo delle vulnerabilità sfruttate della CISA, che elenca le CVE per cui esiste evidenza di sfruttamento reale, e il punteggio EPSS di FIRST, che stima la probabilità di sfruttamento di ogni CVE nei trenta giorni successivi.

Seconda voce: il tempo

Il tempo è la voce più sottovalutata perché è già pagata, sotto forma di stipendi e di contratti a ore. Si misura raccogliendo, per qualche mese, le ore dedicate a:

  • verificare e applicare correzioni a mano, o cercare soluzioni alternative quando la correzione non esiste;
  • gestire urgenze, spesso fuori orario e quindi con un costo maggiore;
  • rispondere a scanner, questionari dei clienti e auditor che segnalano la versione obsoleta;
  • adattare configurazioni del sistema operativo per tenere in vita pacchetti datati;
  • spiegare internamente perché una richiesta non si può fare “su questo sistema”.

Se le ore non sono registrate, una stima ragionevole si ottiene chiedendo alle persone coinvolte quante ne hanno dedicate nell’ultimo trimestre, con un intervallo minimo e massimo.

Terza voce: il debito tecnico

Il debito tecnico è il sovraccosto che si paga su ogni modifica perché il codice e la piattaforma sono vecchi. Come per un debito finanziario, c’è un capitale, cioè il lavoro necessario per aggiornare, e ci sono gli interessi, cioè il tempo in più speso ogni volta che si interviene. Gli interessi si vedono in tre modi:

  1. modifiche più lente: senza test automatici e con librerie datate, ogni intervento richiede più verifiche manuali e più cautela;
  2. opportunità bloccate: un SDK di pagamento, un connettore o una libreria che richiedono una versione di PHP più recente non si possono adottare;
  3. competenze più costose: trovare chi lavori volentieri su codice e strumenti fuori supporto è sempre più difficile.

La stima pratica è il numero di modifiche fatte in un anno moltiplicato per il sovraccosto medio di ciascuna, che chi sviluppa sa indicare con un intervallo onesto confrontando interventi simili su sistemi aggiornati.

Il modello completo

Schema del modello in tre schede sommate. Rischio, P per I: P è la probabilità annua di un incidente, espressa per intervalli, I è la somma di fermo, ripristino, notifiche e consulenze. Tempo, H per T: H sono le ore all’anno di gestione manuale, urgenze e audit, T è il costo orario interno o del fornitore. Debito tecnico, M per S: M sono le modifiche all’anno, S è il sovraccosto medio di ciascuna rispetto a un codice aggiornato. Le tre schede confluiscono nella formula costo annuo di restare uguale a P per I più H per T più M per S, e sotto nella formula anni di rientro uguale a costo della migrazione diviso risparmio annuo. Nota: ogni fattore va espresso come intervallo minimo, probabile e massimo, con le ipotesi scritte accanto
Tre prodotti, una somma e un confronto: il modello sta in una pagina.

La tabella riassume dove trovare i dati per ogni fattore.

FattoreCome si stimaFonte del dato
Probabilità (P)intervallo annuo, rivisto ogni trimestreesposizione, CVE applicabili, catalogo CISA, EPSS
Impatto (I)somma di fermo, ripristino, obblighi, conseguenzemargini, contratti, piano di continuità
Ore (H)ore registrate o stimate su un trimestresistema di ticket, interviste
Tariffa (T)costo orario pieno, interno o esternoamministrazione, contratti
Modifiche (M)interventi all’anno sull’applicazionestorico del repository e dei ticket
Sovraccosto (S)tempo in più per interventoconfronto con interventi simili su sistemi aggiornati
Ogni valore va scritto come intervallo, con l’ipotesi da cui deriva.

Un esempio con numeri inventati

Per mostrare il metodo, immaginiamo un gestionale esposto su Internet. I valori che seguono sono di fantasia e non descrivono un caso reale. Il reparto IT stima tra 60 e 120 ore all’anno di gestione legata alla versione obsoleta. Gli sviluppatori registrano una ventina di interventi all’anno, ciascuno con un sovraccosto stimato tra 2 e 6 ore. Il tempo e il debito tecnico valgono quindi, insieme, tra 100 e 240 ore all’anno, da moltiplicare per la tariffa oraria.

Per il rischio, il gruppo di lavoro stima l’impatto di un incidente grave partendo da tre giorni di fermo, dal costo di ricostruzione e dalle notifiche, e assegna alla probabilità annua un intervallo prudente. Il prodotto si aggiunge alle ore. Il totale, espresso come intervallo, è il costo annuo di restare. Confrontato con la stima della migrazione, dà il numero di anni in cui la migrazione si ripaga. Con intervalli ampi il risultato sarà ampio anch’esso, e va bene: indica già se la decisione è chiara o se conviene approfondire una voce in particolare.

Per la stima del costo della migrazione rimandiamo all’articolo su come stimare tempi e costi della migrazione di un gestionale.

Gli errori più comuni

  • Contare solo la fattura. Il confronto tra canone attuale e preventivo di migrazione ignora le tre voci che contano di più.
  • Confondere “non è successo” con “non succede”. L’assenza di incidenti negli anni passati dice poco sulla probabilità futura, soprattutto quando le vulnerabilità aperte aumentano.
  • Usare il caso peggiore come valore atteso. Le sanzioni massime spaventano ma distorcono il calcolo; vanno indicate a parte come scenario estremo.
  • Ragionare sui soldi già spesi. Nella decisione conta il costo da qui in avanti; quanto è costato sviluppare il sistema è già speso.
  • Dimenticare il periodo di transizione. Una migrazione dura mesi; nel frattempo il sistema va protetto, e anche questo costo va messo in conto.

Come presentarlo alla direzione

Il risultato va portato a chi decide in una pagina: le tre voci con i loro intervalli, le ipotesi principali, il costo della migrazione, gli anni di rientro e le opzioni. Le opzioni di solito sono tre: migrare subito, migrare in un periodo definito proteggendo nel frattempo la produzione con il backport delle patch, oppure accettare il rischio per un tempo limitato con una data di revisione. Le confrontiamo nel dettaglio nell’articolo backport o migrazione.

Per le organizzazioni soggette alla NIS2 questo passaggio è anche un obbligo: il decreto italiano attribuisce agli organi di amministrazione l’approvazione delle misure di gestione dei rischi e la responsabilità delle violazioni. Una decisione documentata, con numeri e ipotesi, è la base per dimostrarlo.

In breve

Il costo di un PHP legacy va ben oltre la fattura dell’hosting e si divide in tre voci che si possono stimare: il rischio, come probabilità annua per impatto di un incidente; il tempo, come ore di gestione manuale, urgenze e audit per la tariffa; il debito tecnico, come numero di modifiche per il sovraccosto di ciascuna. Ogni fattore va espresso come intervallo, con le fonti e le ipotesi scritte accanto: catalogo CISA ed EPSS per la probabilità, piani di continuità e contratti per l’impatto, ticket e repository per tempo e modifiche. La somma dà il costo annuo di restare, il confronto con la migrazione dà gli anni di rientro. Il modello lascia la decisione a chi la deve prendere e gli permette di basarla su numeri dichiarati.

IL PROSSIMO PASSO

Mettiamo
in sicurezza.

Indicaci versione di PHP, sistema operativo e cosa ti preoccupa. Ti risponderemo con una valutazione dell’esposizione e una proposta di intervento.

Richiedi supporto

Ti porta al modulo di richiesta, in quattro passi.

PHP LEGACY · MANAGED SERVER S.R.L.info@phplegacy.it +39 02 5656 9681

Lunedì – venerdì · 09:30 – 19:30

Urgenza in corso? Reperibilità H24
+39 340 985 4556 ↗