In questa fase il software può essere modificato in qualsiasi momento, durante e dopo lo sviluppo del sistema. Per come si sta evolvendo l'ingegneria del software da alcuni anni a questa parte, ha più senso vedere lo sviluppo e la manutenzione come un tutt'uno, in cui il software viene modificato continuamente nel corso della sua vita per adeguarlo ai cambiamenti dei requisiti e delle necessità dei clienti.
In un modo o nell'altro, il software subirà delle modifiche e il progetto dovrà essere rilavorato, per ridurre i costi collegati a questo fenomeno, si usano due approcci:
Può verificarsi un cambiamento dei requisiti del sistema che si sta sviluppando, per richiesta dell'utente, del mercato e quindi dei tempi. Qui entrano in gioco:
Esempio: il cliente (una banca) vuole che venga sviluppato un sistema che consenta di prelevare i contanti da uno sportello automatico, ma che consenta anche di versare delle banconote, degli assegni, che consente di pagare le bollette e di fare le ricariche telefoniche.
Di questo, il progettista, svilupperà una struttura del progetto in cui funziona, per esempio, solo il prelievo, e in cui, col tempo, verranno rilasciate versioni che implementano gli altri requisiti.
In questo contesto il refactoring è un altro importante meccanismo che supporta la tolleranza ai cambiamenti.
Il procedimento attraverso cui porzioni di codice vengono modificate al fine di semplificare la leggibilità e la riusabilità del codice, senza modificarne il suo comportamento.