Depinde de tipul proiectului, de durata lui, de rigurozitatea cerintelor pentru lansare, de ce vrei sa atingi, de viteza de dezvoltare, daca esti la faza incipenta, daca esti in dezvoltare de mai mult timp, daca esti in mentenanta.
Daca esti pe un proiect in faza incipienta normal ca nu vei incepe proiectul cu framework-ul/ librariile vechi de 2 ani fiindca pe alea le stii. In majoritatea cazurilor versiunile sunt legate intre ele, iei ultima librarie de care depind alte librarii si vezi ca ceva mai vechi nu merge cu ceva mai nou, deci totul trebuie sa fie nou. Foloseai rxjs si acum sunt signals, bad luck sau o librarie inainte era cu plugin-uri si acum e cu setare declarativa, bad luck. Documentatia la libraria veche dispare sau e mai greu de gasit…
Daca esti pe un proiect in dezvoltare, ai cateva provocari in functie de marimea proiectului, in special pe CI/CD. Cu cat creste mai mult cu atat iti dai seama ca la un anumit punct devine un chin si te muti pe alt proiect sau cauti solutii precum schimbarea webpack-ului cu vite/esbuild…, tool-uri care iti ruleaza testele doar pe ce s-a schimbat s.a.m.d.
E posibil sa ai un proiect la care niciodata sa nu dai de probleme folosind aceeasi librarii, dar e posibil sa vina un feature unul dupa altul la care mai bine treci pe o versiune noua ca oricum trebuie sa implementezi acelasi lucru… (e.g. se scot plugin-urile dar tot ce faceai tu cu plugin-uri custom s-a inclus in librarie intr-un mod sau altul)
Dar e posibil si sa ai un proiect care inainte sa fie livrat clientului va fi scanat de un tool automat care cauta vulnerabilitatile/bug-urile la fiecare dependinta si nu iti da ok-ul pana nu le rezolvi pe toate. Ce faci ? Iti dai demisia ca nu mai poti livra sau devii frustrat ca inveti ceva nou la n luni (mai bine zis random, ca poti sa ai probleme saptamanal daca faci release des) ?
Toate proiectele care platesc bine au oameni responsabili de cybersecurity/code quality si nu iti vor permite sa dai clientului ceva ce are vulnerabilitati. (si de multe ori sunt breaking changes chiar daca semver spune diferit)
Daca ai un tool precum RenovateBot pe proiect o sa vezi ca iti face un MR automat cam zilnic fiindca s-a schimbat ceva. Daca trec testele poti sa dai merge, dar daca nu trec faci refacturare sau il ignori. (daca poti, ca poate vine ordin de mai sus ca toate dependintele sa fie up to date)
Cel mai dureros pe backend e kubernetes, stiu ca sunt echipe care nu sunt obligate sa il foloseasca, dar cam toate proiectele mari il implementeaza si nu e neaparat rau, dar e complicat si schimba total arhitectura in cazul microserviciilor. Plus fiecare cloud are ceva specific si se tot schimba, nu poti sa ai un singur deployment pentru toate.
Iar nu in ultimul rand ai factorul uman, mereu exista riscul ca sa angajeze pe cineva mult mai senior ca tine care a lucrat cu o anumita librarie/tehnologie si nu e un lucru rau, dar se schimba iarasi uneltele/tehnologiile fiindca asa vrea technical lead-ul/management-ul… Cateodata nu se schimba uneltele ci pur si simplu trebuie tu sa inveti ceva diferit de ce faceai inainte, cam mereu cand vine cineva nou in echipa. Bine daca esti in aceeasi echipa de 10 ani nu se pune problema.