Il refactoring, come qualsiasi altra attività, deve avere un obiettivo chiaro definito per questo. Una volta chiarito tale obiettivo, prendere in considerazione lo stato del progetto e la fase del ciclo di vita correnti. Per un progetto di sviluppo completo dell'80%, con un ritardo del 30% nei tempi previsti, è necessario giustificare lo sforzo di refactoring in base all'obiettivo prefissato in precedenza. In questo esempio, se i pezzi di codice sono stati testati in unità 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 quegli 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 aspetto che esistano standard e procedure e che il codice non sia un disastro completo.
Ricorda che il refactoring provocherà la ripetizione di molti, se non tutti, i test effettuati. Inoltre, poiché il refactoring di queste dimensioni non può essere eseguito da uno o due membri senior, il refactoring può introdurre problemi che non esistevano. Questo è un rischio che non deve essere trascurato.
Detto questo, non è insolito aggiungere compiti a un progetto quando accade l'imprevisto. Quindi, se gli sviluppatori scomparissero per qualche motivo, quello sarebbe considerato un evento di natura speciale e qualunque azione per porre rimedio alla situazione deve essere presa. Sarebbe trattato come un incendio o un terremoto, ecc.
Riassumendo, non rifatterò il codice di lavoro di grandi dimensioni in un progetto di grandi dimensioni senza una valida ragione tecnica solida, specialmente perché sappiamo tutti che la maggior parte dei progetti è generalmente in ritardo.