Abbiamo avuto due principali crisi legate alla dipendenza con due diverse basi di codice (Android e un'app Web Node.js). Il repository Android doveva migrare da Flurry a Firebase, che richiedeva l'aggiornamento delle versioni principali quattro della libreria di Google Play Services. Una cosa simile è accaduta con l'app Node ospitata da Heroku, dove il nostro stack di produzione (cedar) è stato deprecato e doveva essere aggiornato a cedar-14. Anche il nostro database PostgreSQL doveva essere aggiornato dalla 9.2 alla 9.6.
Ciascuna di queste dipendenze delle applicazioni è rimasta inutilizzata per quasi due anni, e quando alcune sono state ritirate e abbiamo raggiunto il periodo "tramonto", è stato un mal di testa importante aggiornarle o sostituirle . Ho trascorso più di 30 ore nell'ultimo mese o due risolvendo lentamente tutti i conflitti e il codice non funzionante.
Ovviamente lasciare che le cose si siedano per due anni è troppo lungo. La tecnologia si muove rapidamente, soprattutto quando si utilizza un provider di piattaforme come Heroku. Supponiamo di disporre di una suite di test completa e di un processo CI come Travis CI, che richiede molto tempo per l'aggiornamento. Per esempio. se una funzione è stata rimossa dopo un aggiornamento e lo stavi utilizzando, i test non sarebbero riusciti.
Con quale frequenza devono essere aggiornate le dipendenze o quando devono essere aggiornate le dipendenze? Abbiamo aggiornato perché eravamo costretti a farlo, ma sembra che una specie di pre approccio sarebbe meglio. Dovremmo aggiornare quando vengono rilasciate versioni minori? Versioni principali? Ogni mese se sono disponibili aggiornamenti? Voglio evitare una situazione come quella che ho appena vissuto a tutti i costi.
PS: per uno dei miei progetti Rails personali, utilizzo un servizio chiamato Gemnasium che tiene traccia delle dipendenze in modo da poter essere avvisato di ad es. vulnerabilità di sicurezza. È un ottimo servizio, ma dovremmo controllare manualmente le dipendenze per i progetti che ho citato.