Dívida técnica: minha biblioteca Rust agora virou um CDO
- Como uma piada sobre dívida técnica, existe a brincadeira de que, se há dívida técnica, então também deveria haver derivativos para lidar com essa dívida.
- O ecossistema Rust acabou criando uma solução que parece securitizar a dívida técnica.
- Por exemplo, uma biblioteca
stuff depende de outra biblioteca learned-rust-this-way, mas o autor de learned-rust-this-way perdeu o interesse e os problemas começaram a se acumular.
A realidade da dívida técnica
learned-rust-this-way é considerada dívida técnica, o que não causa um problema direto, mas ainda assim continua sendo uma dívida.
- Em algum momento, alguém percebe que
learned-rust-this-way é uma dívida, não consegue entrar em contato com o autor original, e ela é adicionada ao banco de dados RUSTSEC.
- O RUSTSEC, como agência de classificação, avalia essa dívida como lixo, e por causa disso o CI (integração contínua) de muita gente começa a falhar.
Como resolver a dívida
- Como mantenedor de
stuff, o estresse aumenta quando os usuários começam a reclamar do uso de learned-rust-this-way, e passam a exigir alguma ação para lidar com a dívida.
- Migrar para uma alternativa é uma opção, mas, neste caso, todas as alternativas são pouco atraentes.
- Fazer um fork de
learned-rust-this-way leva ao mesmo tipo de exigência, sendo apenas uma solução temporária, sem realmente resolver o problema.
A solução que realmente funciona
- Se você incorporar esse código à sua própria biblioteca, aquele lixo de dívida técnica de repente passa a ser avaliado como “AAA”.
- Você não mexe mais no código, esconde o fato de que ele foi incorporado, e continua mantendo a biblioteca como antes, enquanto o mundo segue girando.
- Ao vendorizar e incorporar
yaml-rust em insta, ele passou a ser uma fusão do código de insta com yaml-rust, e assim a dívida técnica foi promovida à classificação AAA.
A opinião do GN⁺
- Este artigo compara a dívida técnica a derivativos financeiros para explicar, de forma espirituosa, problemas que surgem no desenvolvimento de software.
- Dívida técnica é um problema comum no desenvolvimento de software, e o artigo apresenta aos desenvolvedores uma forma criativa de lidar com ela.
- Sistemas de avaliação como o RUSTSEC no ecossistema Rust podem ajudar desenvolvedores a avaliar a estabilidade de bibliotecas, mas ao mesmo tempo também podem gerar estresse desnecessário.
- Incorporar código como forma de resolver dívida técnica pode ser uma solução temporária; no longo prazo, é necessária uma estratégia de manutenção sustentável.
- Em situações assim, vale considerar várias alternativas, como manutenção guiada pela comunidade, co-manutenção de projetos open source, ou buscar versões alternativas da biblioteca.
1 comentários
Comentários do Hacker News
deprecated) e sem manutenção (unmaintained). Isso foi feito sem aviso ou indicação de outro mantenedor; o pacote ainda funciona, mas é usado por mais de 4.000 outros crates, então ferramentas de auditoria e atualização automática passarão a alertar sobre o uso de crates sem manutenção.collateralized debt obligation, já que a palavracollateralizedfoi usada várias vezes.Collateralized Debt Obligation. Ele gostaria de escrever um artigo sobre “dívida técnica”, porque acha que a metáfora de “dívida” não se encaixa bem nesse conceito. “Código de alta viscosidade” talvez seja uma expressão melhor. Parece ter alta indutância, já que o código não pode ser facilmente alterado para se adaptar a novos recursos.junk tech debtde repente recebe notaAAA, o autor parece querer dizer que o mesmo código não pode ter uma classificação melhor de dívida antes e depois do vendoring. Mas isso olha apenas para o valor do código em si e perde a parte mais importante da proposta de valor geral. O mantenedor que faz vendoring do código agora passa a possuí-lo, e um mantenedor ativo que incorpora código de um projeto morto aumenta o valor desse código porque existe um humano que pode responder a issues, revisar pull requests e corrigir bugs.npm auditem geral faz alertas exagerados sobre problemas de segurança e, desde que a licença permita, o vendoring é uma das formas mais confiáveis de se livrar dos problemas absurdos que vêm dos usuários.yaml-ruste reescrito em Rust puro para criar oyaml-rust2. Esse fork passa completamente pela suíte de testes do YAML e também apresenta melhor desempenho nos benchmarks. A migração também parece simples. No fim, o problema continua o mesmo: ainda dependemos de outras pessoas que hoje trabalham de graça, sem qualquer garantia de que continuarão fazendo isso para sempre.