Como falar com a gerência sobre código 'genial'?
EDIT:
Obrigado a todos pelos grandes conselhos, comentários e feedback.
Como acontece, ninguém era o “mau da fita” nesta situação. Os conselhos que recebi aqui ajudaram-me a voltar a entrar em contacto com o anterior líder do projecto. Acontece que a minha empresa, sem razão discernível, tinha recebido uma versão “em desenvolvimento” antecipada da base de códigos. A antiga empresa enviou-nos uma versão pronta para produção e, como uma cereja no topo, elogiou-me publicamente pela engenharia inversa eficaz de um produto incompleto à profundidade que eu tinha.
TL;DR
Eu herdei um projecto. Resumindo, o código que tenho a missão de manter é mau.
Esclarecimento: esta pergunta versus dívida técnica
_ Esta pergunta tem a ver comigo a desafiar crenças antigas sobre um produto sem cometer suicídio na carreira. Em vez de ser estritamente sobre lidar com dívidas técnicas, ](https://workplace.stackexchange.com/questions/37115/ask-company-to-allow-time-space-to-pay-off-technical-debt) há isto: a gerência sugere que talvez o código seja tão complexo que eu não consiga entendê-lo, e **postou que os erros são por desenho; ** _ que o desenvolvedor original é tão meta, que o que parece ser erros são na verdade traços de gênio. Talvez outra razão pela qual isto não seja bem uma dívida técnica é que a diferença entre código ‘genial’ e dívida técnica é que a gestão comunica que eu não devo alterar o código ‘genial’, e que o código ‘genial’ não é uma dívida técnica: é a magia negra secreta. **Queria que a gerência pensasse nisso como uma dívida técnica. Em vez disso eles não. A gerência não está preocupada com o tempo, custo ou dinheiro directamente – embora isso seja alguma preocupação.
Detalhes
A maior parte do tempo, eu não ficaria nervoso ao comunicar isto à gerência. Infelizmente uma longa linha de manutenção à peça por pessoas, algumas das quais tinham pouca experiência de desenvolvimento, que apenas “tocaram” no código o tempo suficiente para adicionar um adesivo aqui ou ali, e depois seguir em frente, pintou um quadro à gerência ao longo dos anos em que o projecto está apenas a um passo de estar pronto para a produção.
Isso não é lamentavelmente o caso. Uma pequena _ lista de problemas no código genial_ que encontrei na base de código ~1.5Gb são…
- Há a mesma função, os mesmos nomes de variáveis do mesmo âmbito em toda a base de código (numa linguagem que não suporta isso).
- As funções são definidas mas nunca chamadas.
- Uso e inicialização de variáveis fora de ordem.
- Versões incompatíveis das bibliotecas utilizadas.
- URIs e endereços IP hardcoded sem documentação sobre o que fazem.
- Randomly requested API routes which return nothing or gibberish; which are then not used.
- Hard-coded, unencrypted passwords and private ssh keys.
Devo acrescentar que quando comecei a trabalhar nele, **_ nem sequer compilou. E quando o consegui compilar, falhou em tempo de execução.
É um pesadelo.
O problema é que a direcção recebeu a garantia de quem o herdou, e de anteriores programadores “gung-ho”, de que “funciona”, pelo que investiu significativamente nele… E agora o dinheiro é-me passado. E querem-no em produção em cerca de 2 meses.
Quando eu sugiro que os programadores anteriores podem não ter sido totalmente honestos ou compreendido o produto por completo, a gerência envia sinais mistos sobre “basta fazer”, e “porque é que ainda não está feito” … e “não temos a certeza se alguma vez funcionou” para “estava a funcionar quando o recebeu”, e “nunca o vimos funcionar” para “já está em produção”.
[EDIT: colou a maior parte do parágrafo seguinte na secção TL;DR.
A Direcção também sugeriu que talvez seja tão complexo que eu não o consiga compreender, e postou que os erros são por concepção; _ que o programador original é tão meta, que o que parece erros são na realidade traços de génio._ Admito, não sou nenhum génio, e talvez seja esse o caso: ao qual apresento as minhas observações anteriores sobre as questões muito fundamentais que encontrei.
Talvez haja política em jogo acima do meu nível.