Chúng tôi đã có hai cuộc khủng hoảng liên quan đến phụ thuộc lớn với hai cơ sở mã khác nhau (Android và ứng dụng web Node.js). Repo Android cần để di chuyển từ Flurry sang Firebase, yêu cầu cập nhật thư viện Google Play Services bốn phiên bản chính. Một điều tương tự đã xảy ra với ứng dụng Node được lưu trữ trên Heroku của chúng tôi, nơi ngăn xếp sản xuất của chúng tôi (tuyết tùng) không được dùng nữa và cần được nâng cấp lên cedar-14. Cơ sở dữ liệu PostgreSQL của chúng tôi cũng cần cập nhật từ 9.2 đến 9.6.
Mỗi sự phụ thuộc của các ứng dụng này đã bị trì hoãn trong gần hai năm và khi một số bị phản đối và chúng tôi đã đến thời kỳ 'hoàng hôn', việc cập nhật chúng hoặc thay thế chúng là một vấn đề đau đầu. Tôi đã dành hơn 30 giờ trong một hoặc hai tháng qua để giải quyết chậm tất cả các xung đột và mã bị hỏng.
Rõ ràng để mọi thứ ngồi trong hai năm là quá dài. Công nghệ di chuyển nhanh chóng, đặc biệt là khi bạn đang sử dụng một nhà cung cấp nền tảng như Heroku. Giả sử rằng chúng tôi có một bộ kiểm tra chính thức và quy trình CI như Travis CI, có rất nhiều phỏng đoán khi cập nhật. Ví dụ: nếu một chức năng đã bị xóa sau khi nâng cấp và bạn đang sử dụng nó, các thử nghiệm của bạn sẽ thất bại.
Bao lâu thì phụ thuộc nên được cập nhật, hoặc khi nào phụ thuộc nên được cập nhật? Chúng tôi cập nhật vì chúng tôi bị ép buộc, nhưng có vẻ như một cách tiếp cận ưu tiên nào đó sẽ tốt hơn. Chúng ta có nên cập nhật khi các phiên bản nhỏ được phát hành? Phiên bản chính? Mỗi tháng nếu cập nhật có sẵn? Tôi muốn tránh một tình huống như những gì tôi vừa trải qua bằng mọi giá.
Tái bút - đối với một trong các dự án Rails cá nhân của tôi, tôi sử dụng dịch vụ có tên Gemnasium để theo dõi các phụ thuộc của bạn để bạn có thể được thông báo về các lỗ hổng bảo mật. Đó là một dịch vụ tuyệt vời, nhưng chúng tôi sẽ phải kiểm tra thủ công các phụ thuộc cho các dự án tôi đã đề cập.