Ao trabalhar em idiomas que não possuem estrutura interna e recursos de organização (por exemplo, se não houver namespaces, pacotes, assemblies etc ...) ou onde forem insuficientes para manter uma base de código desse tamanho sob controle, a resposta natural será desenvolver nossas próprias estratégias para organizar o código.
Essa estratégia da organização provavelmente inclui padrões relacionados a onde diferentes arquivos devem ser mantidos, coisas que precisam acontecer antes / depois de certos tipos de operações e convenções de nomenclatura e outros padrões de codificação, além de muito "é assim que é configurado" - não mexa com isso! " digite comentários - que são válidos desde que expliquem o porquê!
Como a estratégia provavelmente acabará sendo adaptada às necessidades específicas do projeto (pessoas, tecnologias, ambiente etc ...), é difícil fornecer uma solução única para o gerenciamento de grandes bases de códigos.
Portanto, acredito que o melhor conselho é abraçar a estratégia específica do projeto e tornar o gerenciamento uma prioridade-chave: documentar a estrutura, por que é assim, os processos para fazer alterações, auditar para garantir que está sendo respeitada, e crucialmente: mude quando precisar mudar.
Estamos familiarizados principalmente com classes e métodos de refatoração, mas com uma grande base de código em um idioma como esse, é a própria estratégia de organização (completa com a documentação) que precisa ser refatorada conforme e quando necessário.
O raciocínio é o mesmo da refatoração: você desenvolverá um bloqueio mental para trabalhar em pequenas partes do sistema, se achar que a organização geral está uma bagunça e, eventualmente, permitirá que ele se deteriore (pelo menos é a minha opinião) isto).
As advertências também são as mesmas: use testes de regressão, verifique se você pode reverter facilmente se a refatoração der errado e projete-o para facilitar a refatoração em primeiro lugar (ou você simplesmente não fará isso!).
Concordo que isso é muito mais complicado do que refatorar o código direto, e é mais difícil validar / ocultar o tempo de gerentes / clientes que podem não entender por que isso precisa ser feito, mas esses também são os tipos de projeto mais propensos à podridão de software causada por projetos inflexíveis de nível superior ...