Naquela manhã cheguei cedinho ao escritório para começa a codificar tudo o que eu tinha passado parte da minha noite pensando. Pensando, não, alternando entre curtos cochilos, momentos de completa euforia por ter achado a solução mais simples possível e momentos de decepção e desespero por ter esquecido um corner-case.
Vai me dizer que nunca teve uma noite destas?
O problema era trivial: fazer uma infraestrutura para reinserir dados que foram removidos do sistema por algum engano. Simples, não é? Pois é, a solução também deveria ser. Porém, 'dobrar' o sistema para fazer isso era muito complexo.
Os dados removidos tinham que ser re-gerados praticamente do zero e combinados da maneira correta com os pedaços que não haviam sido removidos. Eu nem preciso dizer o quão complexo e error-prone é 're-gerar' um dado fora do pipeline normal, não é? Sempre tem aquele campo que é preenchido por aquela função que é simplesmente impossível de desacoplar do sistema ou que ninguém sabe direito como ele é gerado. Credo, está dando enjôo só de lembrar do problema!
Na verdade, na minha cabeça, esta feature nem era necessária pois estes dados seriam naturalmente re-inseridos no sistema depois de alguns dias. Eu já havia feito a mudança para que o pipeline recolocasse-os de volta. Mudança simples, por sinal. Porém, segundo o resto do time, fazer a recuperação instantânea dos dados era crucial...
Bom, se era necessário, tinha que ser feita, não é?
Abri meu Vi e comecei a implementar aquelas linhas que já tinham me custado várias horas de sono.
A fase 1, a mais trivial, estava quase pronta, com testes e tudo. Para a fase 2, conversei com um colega que conhecia melhor o sistema e confirmei: minhas horas de sono não foram gastas em vão. A solução ia funcionar!
Peguei um copão de café, voltei para minha mesa, reatachei meu screen, adrenalina total, escrevi duas linhas de código e, simplesmente, parei.
Parei pois me veio à cabeça a imagem do Torsten saindo todo feliz de uma reunião com os PMs (Product Managers) e falando: "Pronto, eliminei mais três features, agora só faltam mais duas!". Acho que não digitei nenhum caracter a mais, virei para o lado e falei com o colega que havia me dado as dicas: "Eu acho que não vale a pena implementar esta feature. É tão complexa! É a única solução possível, mas é complexa de mais, não encaixa no sistema. Ele não foi feito para isso! Vai gerar overhead de complexidade e de manutenção que realmente não vai valer a pena.". Ele disse: "É mesmo.".
Pronto, agora era só convencer o resto do time que qualquer solução era pior que o próprio problema e o meu final de semana estava salvo.
Resultado: conseguimos convencer o resto do time, o sistema ficou muito melhor sem a feature, pude gastar meu tempo melhorando outras partes e implementando features realmente necessárias.
O que fiz no final de semana seguinte? Dormi as horas de sono que haviam ficado pendentes.
Nenhum comentário:
Postar um comentário