Tivemos duas grandes crises relacionadas à dependência com duas bases de código diferentes (Android e um aplicativo da web Node.js.). O repositório do Android precisava migrar do Flurry para o Firebase, o que exigiu a atualização da biblioteca do Google Play Services em quatro versões principais. O mesmo aconteceu com o aplicativo Nó hospedado pelo Heroku, onde nossa pilha de produção (cedar) foi descontinuada e precisava ser atualizada para cedar-14. Nosso banco de dados PostgreSQL também precisava atualizar de 9.2 para 9.6.
As dependências de cada um desses aplicativos ficaram obsoletas por quase dois anos e, quando algumas foram preteridas e chegamos ao período de "pôr do sol", foi uma grande dor de cabeça atualizá-las ou substituí-las. Passei mais de 30 horas no mês passado ou dois resolvendo lentamente todos os conflitos e códigos quebrados.
Obviamente, deixar as coisas descansarem por dois anos é muito tempo. A tecnologia se move rapidamente, especialmente quando você está usando um provedor de plataforma como o Heroku. Vamos supor que temos um conjunto de testes completo e um processo de IC como o Travis CI, que tira muitas das suposições da atualização. Por exemplo, se uma função foi removida após uma atualização e você a estava usando, seus testes falhariam.
Com que frequência as dependências devem ser atualizadas ou quando devem ser atualizadas? Atualizamos porque fomos forçados a fazê-lo, mas parece que algum tipo de abordagem preventiva seria melhor. Devemos atualizar quando versões menores são lançadas? Versões principais? Todo mês, se houver atualizações disponíveis? Quero evitar uma situação como a que acabei de experimentar a todo custo.
PS - para um dos meus projetos pessoais do Rails, eu uso um serviço chamado Gemnasium que rastreia suas dependências para que você possa ser notificado de, por exemplo, vulnerabilidades de segurança. É um ótimo serviço, mas teríamos que verificar manualmente as dependências dos projetos que mencionei.