O que fazer quando a funcionalidade crítica de uma dependência é interrompida e impede o desenvolvimento?

12

Ontem, eu estava trabalhando em um projeto de API do Rails 5, que está usando a biblioteca age-as-taggable-on para permitir que as coisas tenham tags (como perguntas no SE). O Rails 5 está agora em suporte alfa. Atualmente, existe um PR para corrigir um erro que espera ser mesclado no master; o bug fez com que meu ramo de recursos parasse no meio da conclusão - não consegui implementar nenhuma das funcionalidades da biblioteca porque o carregamento estava interrompido.

Como uma solução rápida, simplesmente clonei o repositório, corrigi o problema com o mesmo código que o PR e apontei meu Gemfile (arquivo de controle de versões de dependências) para o meu próprio fork do Github, até que a correção do bug finalmente seja mesclada novamente no master.

Tive sorte de a correção ser simples ( e de alguém já ter feito isso ), então pude contornar o problema. Mas e se essa biblioteca fosse crítica para o desenvolvimento do meu aplicativo? E se a correção de erro que estava interrompendo meu desenvolvimento não fosse um problema generalizado para outras pessoas , para que a correção não ocorresse rapidamente, como desta vez?

Imagine que esse recurso precisava ser concluído antes do desenvolvimento de outros recursos dependentes - o que você faz nessa situação? E se, para mim, a marcação fosse absolutamente crítica para a próxima frase de desenvolvimento, onde todo o resto dependia dela - mas a dependência da marcação é corrigida para a minha configuração? O que se faz quando a funcionalidade crítica de uma dependência impede o desenvolvimento de (a) recurso (s)?

E, certamente, lutas de espadas em cadeiras de escritório por horas ou dias não é uma opção ...

Chris Cirefice
fonte

Respostas:

19

Essa é uma das razões pelas quais você está usando software de código aberto, certo?

Você poderia argumentar o mesmo argumento para "o que acontece se de repente minha biblioteca de código fechado, cara e proprietária, cair de repente? Haverá alguém disponível na [grande empresa de software monolítica] para consertar isso para mim?" Com o software de código aberto, pelo menos você tem a chance de corrigir esse erro.

Se o seu software exige uma dependência crítica de uma biblioteca de código aberto, há três coisas que você pode fazer para reduzir o risco:

  1. Familiarize-se com a base de código, talvez até fazendo suas próprias contribuições. Essa é outra razão pela qual você escolheu o código aberto, certo?

  2. Tenha uma biblioteca alternativa, se a primeira biblioteca cair. É por isso que você programa para interfaces; para que você possa alterar a implementação, se necessário, certo?

  3. Equilibre o seu desejo de ter uma experiência de ponta com a sua necessidade de estabilidade (ou seja, não use o software alfa). Você sabia no que estava se metendo, certo?

Robert Harvey
fonte
Obrigado pela sua resposta Robert; Sim, decidi usar o Rails 5 para seus novos recursos, e não havia planejado completamente o projeto e não sabia que essa biblioteca teria problemas de compatibilidade com o Rails 5. Está tudo bem, porém, deixei esse ramo como WIP e Estou monitorando o repositório do Github para a correção. Acho que uma das principais lições aqui é planejar bem . Se eu tivesse pesquisado mais de uma hora antes de iniciar o desenvolvimento, teria visto o problema!
Chris Cirefice
11

A solução para o desenvolvimento de aplicativos em que erros ou falta de recursos têm um alto risco de interromper o trabalho é não usar bibliotecas de alto risco. Chato e coxo, eu sei ..

Você disse que esta é uma versão alfa. Não use liberações alfa para projetos críticos. Não é nem uma versão beta, muito menos a 1.0, então esse tipo de coisa é esperado. O objetivo dessa etapa de um projeto é encontrar problemas e fortalecer o projeto.

Se você se encontra nessa situação, basicamente precisa fazer o que fez (fizemos exatamente a mesma coisa). Corrija e PR o projeto.

Mas a solução está usando bibliotecas mais estáveis, com funcionalidade e APIs compreendidas, ou pelo menos mantendo a compatibilidade com versões anteriores com uma versão estável. Você deve ser cauteloso, dependendo de 100% de algo que não tem controle e precisa para ter sucesso.

enderland
fonte
1

Geralmente, é recomendável ocultar bibliotecas de terceiros atrás de adaptadores ou wrappers que você escreve. Isso tem duas vantagens:

  • Você pode trocar a biblioteca de terceiros por outra sem alterar nenhum código
  • Você pode programar o restante do seu código na sua própria interface do adaptador. No caso de um problema temporário com a biblioteca, basta conectar sua própria versão stub / fake ou simplificada da funcionalidade da biblioteca. Dessa forma, o desenvolvimento e o teste de seus recursos downstream não são bloqueados (mesmo que a implantação do programa completo ainda esteja).
jhyot
fonte