Correttiva
Risoluzione dei malfunzionamenti rispetto al comportamento atteso. Rientra in garanzia nel periodo concordato, poi diventa parte del servizio di assistenza.
Il rilascio non è la fine del progetto: è l’inizio della fase più lunga della vita di un software. Questa guida spiega che cosa comprende davvero la manutenzione, come distinguerla dalla garanzia e come impostare un contratto che non generi discussioni.
Un applicativo che funziona oggi continuerà a funzionare identico domani: il codice non si deteriora. Quello che cambia è tutto ciò che lo circonda. L’azienda modifica un processo, entra in vigore una nuova norma, un fornitore aggiorna le proprie interfacce, il sistema operativo del server passa a una versione successiva, una libreria che il software utilizza rivela una vulnerabilità.
Per questo la manutenzione non è un costo accessorio ma la condizione perché l’investimento iniziale continui a produrre valore. Un gestionale su misura ben mantenuto vive dieci anni o più; lo stesso gestionale senza manutenzione diventa un vincolo nel giro di tre o quattro.
Risoluzione dei malfunzionamenti rispetto al comportamento atteso. Rientra in garanzia nel periodo concordato, poi diventa parte del servizio di assistenza.
Nuove funzionalità e modifiche dovute al cambiamento dei processi aziendali. È la voce più consistente nella vita di un gestionale e quella che genera più valore.
Aggiornamenti resi necessari da fattori esterni: normative, nuove versioni dei sistemi operativi, cambiamenti nelle interfacce dei servizi collegati.
Aggiornamento delle librerie, revisione delle parti più fragili, ottimizzazione delle prestazioni. È l’attività meno visibile e quella che evita i problemi più costosi.
La maggior parte delle controversie fra cliente e fornitore su questo tema nasce da punti non chiariti all’inizio. Questi sono quelli che conviene mettere per iscritto.
È anche quella che costa di più non fare. Aggiornare le librerie con regolarità è un’attività modesta e ripetitiva; recuperare tre anni di aggiornamenti tutti insieme, invece, è un progetto a sé, con rischio di regressioni e tempi difficili da stimare.
Lo stesso vale per la revisione periodica delle parti più fragili del sistema. Ogni applicativo accumula zone in cui si è intervenuti più volte in fretta: sono quelle in cui si concentrano i difetti e in cui ogni modifica costa più del previsto. Affrontarle con un intervento pianificato è molto meno oneroso che subirle a ogni richiesta di modifica.
Se il tempo necessario a realizzare una modifica di piccola entità sta crescendo nel tempo, il sistema sta accumulando debito tecnico. È il segnale più affidabile che serve un intervento strutturale, e si presenta molto prima che il software dia problemi visibili agli utenti.
La garanzia copre la correzione di difetti: il software non fa ciò che era stato concordato e va sistemato senza costi aggiuntivi. La manutenzione evolutiva copre i cambiamenti: nuove funzioni, adeguamenti normativi, modifiche dovute all’evoluzione dell’azienda. Confondere le due cose è la causa più frequente di attrito fra cliente e fornitore, e va chiarita nel contratto.
Si esprime di solito come percentuale annua del valore di sviluppo, oppure come monte ore concordato. La cifra dipende dalla criticità del sistema e dalla frequenza di evoluzione attesa: un applicativo stabile usato da poche persone richiede molto meno di una piattaforma che cambia con ogni novità normativa.
Nell’immediato nulla, ed è proprio questo che rende la scelta insidiosa. Nel giro di qualche anno però le librerie diventano obsolete, compaiono vulnerabilità note non corrette, gli aggiornamenti dei sistemi su cui gira il software creano incompatibilità e ogni modifica richiede prima un lavoro di ammodernamento. Il costo non scompare: si accumula e si presenta tutto insieme.
A chiamata è sostenibile per applicativi non critici. Per un sistema da cui dipende l’operatività, un contratto con tempi di intervento definiti è ciò che distingue un fermo di due ore da un fermo di due giorni. La differenza non sta nella competenza del fornitore ma nella priorità concordata in anticipo.
Possiamo farlo, previa una fase di analisi del codice esistente. La fattibilità dipende da come è scritto e documentato: un sistema ordinato si riprende in mano in tempi ragionevoli, uno senza documentazione né test richiede un investimento iniziale che va valutato onestamente prima di impegnarsi.