Il refactoring, come qualsiasi altra attività, deve avere un chiaro obiettivo definito per questo. Una volta che l'obiettivo è chiaro, si prenderà in considerazione lo stato attuale del progetto e la fase del ciclo di vita. Per un progetto di sviluppo completo all'80%, con un ritardo del 30% rispetto alla pianificazione, è necessario giustificare lo sforzo di refactoring basato sull'obiettivo prefissato. In questo esempio, se i pezzi del codice sono stati testati unitamente e funzionano bene in un ambiente di sviluppo, è difficile giustificare il refactoring.
Il fatto che 40 sviluppatori se ne siano andati potrebbe non essere così drammatico come sembra. Mi aspetto che questi sviluppatori abbiano consegnato codice funzionante che è stato rivisto e testato. Quindi, a meno che non ci siano problemi noti in questo codice, lo lascerei così com'è. L'idea è che in un grande progetto come il tuo, mi aspetterei che esistessero standard e procedure e che il codice non fosse un disastro completo.
Ricorda che il refactoring causerà molti se non tutti i test che sono stati fatti per essere ripetuti. Inoltre, poiché il refactoring di queste dimensioni non può essere eseguito da uno o due membri senior, il refactoring potrebbe introdurre problemi che non esistevano. Questo è un rischio che non dovrebbe essere trascurato.
Detto questo, non è insolito aggiungere compiti a un progetto quando accade l'imprevisto. Quindi, se gli sviluppatori scomparissero per qualche motivo, ciò sarebbe considerato un evento di natura speciale e qualsiasi azione per porre rimedio alla situazione deve essere presa. Sarebbe trattato come un incendio o un terremoto, ecc.
In sintesi, non rifarei un grande codice di lavoro in un grande progetto per nessuna buona ragione tecnica solida, specialmente perché sappiamo tutti che la maggior parte dei progetti di solito sono in ritardo.