Quando leio as respostas, tenho a sensação de que muitas pessoas subestimam o quão ruim e inatingível pode ser uma base de código.
Apenas para ilustrar isso, estou trabalhando no local onde o projeto inteiro se originou de um arquivo "principal" de centenas de milhares de LOC. ... a pior parte é que a besta ficou maior e maior ao longo do tempo:
- métodos com dezenas de milhares de LOC
- mais de 15 níveis de recuo
- GOTOs se espalham sobre eles, quebrando os loops
- ponteiro aritmético, void * casted everywhere
- muitos nomes de variáveis "duas letras"
- lotes de código ninguém tem ideia do que faz
- ninguém realmente sabe como a coisa toda funciona mesmo ... mas funciona e faz milhões
- código duplicado em todos os lugares com algumas linhas alteradas aqui e ali
- coisas obscuras de WINAPI
- comportamento não determinístico por causa de variáveis não inicializadas, estouro de buffer, ponteiros errados ...
- sem documento, sem especificação
Antes de começar a trabalhar, não imaginava que algo tão catastrófico pudesse existir. Os custos de manutenção são, obviamente, surpreendentes e tudo é feito para tentar minimizar as mudanças.
Pelo lado, porque todo mundo sabe que isso é um pesadelo, um novo software "2.0" é feito, mas é tão grande que representa pelo menos uma dúzia de homens-ano.Eu acho que você deve simplesmente falar sobre isso com seu gerente. Falar faz maravilhas. O que é importante para eles é entender qual é o estado atual. Essa manutenção é realmente extremamente difícil, demorada, propensa a erros, tudo isso por causa do código ruim. Além disso, continuar trabalhando nisso normalmente aumenta a dívida técnica porque acrescentamos pilhas de lixo com base em outras pilhas de lixo. ... mas enquanto isso, por ser uma porcaria produtiva que ganha o dinheiro da empresa, temos que lidar com isso, mesmo que seja difícil e improdutivo.
A outra coisa engraçada é que qualquer idiota pode transformar um código fonte normal em uma pilha de porcaria. No entanto, quanto mais baixo for o código, mais inteligente será o que lida com ele. O lado ruim disso é que o idiota parecia produtivo desde que ele adicionou recursos, e o brilhante, improdutivo, já que ele tem que lidar com a bagunça de seu antecessor. Apenas bons gerentes com conhecimento técnico podem entender o que está acontecendo.