हमारे पास दो अलग-अलग कोड बेस (Android, और एक Node.js वेब ऐप) के साथ दो प्रमुख निर्भरता-संबंधित संकट थे। Android रेपो को Flurry से Firebase की ओर स्थानांतरित करने की आवश्यकता थी, जिसे Google Play Services लाइब्रेरी को चार प्रमुख संस्करणों को अपडेट करने की आवश्यकता थी । इसी तरह की एक घटना हमारे हरोकू-होस्टेड नोड ऐप के साथ हुई जहां हमारे उत्पादन स्टैक (सीडर) को हटा दिया गया और इसे देवदार -14 में अपग्रेड किए जाने की आवश्यकता थी। हमारे PostgreSQL डेटाबेस को भी 9.2 से 9.6 तक अपडेट करने की आवश्यकता थी।
इनमें से प्रत्येक ऐप की निर्भरता लगभग दो साल तक बासी रही, और जब कुछ लोग वंचित हो गए और हम 'सूर्यास्त' की अवधि तक पहुंच गए, तो उन्हें अपडेट करना, या उन्हें बदलना एक बड़ा सिरदर्द रहा। मैंने पिछले महीने में 30 से अधिक घंटे बिताए हैं या दो धीरे-धीरे संघर्षों और टूटे हुए कोड को हल कर रहे हैं।
स्पष्ट रूप से दो साल के लिए चीजों को बैठने देना बहुत लंबा है। जब आप हेरोकू जैसे प्लेटफ़ॉर्म प्रदाता का उपयोग कर रहे हों, तो प्रौद्योगिकी तेज़ी से चलती है। मान लेते हैं कि हमारे पास एक पूर्ण परीक्षण सूट है, और ट्रैविस सीआई जैसी एक सीआई प्रक्रिया है, जो अद्यतन करने के लिए बहुत सारे अनुमान लगाती है। उदाहरण के लिए यदि किसी अपग्रेड के बाद कोई फंक्शन हटा दिया गया था, और आप इसका उपयोग कर रहे थे, तो आपके परीक्षण विफल हो जाएंगे।
निर्भरता कितनी बार अपडेट की जानी चाहिए, या निर्भरता कब अपडेट की जानी चाहिए? हमने अपडेट किया क्योंकि हम मजबूर थे, लेकिन ऐसा लगता है कि किसी प्रकार का पूर्व-खाली दृष्टिकोण बेहतर होगा। जब मामूली संस्करण जारी किए जाते हैं तो क्या हमें अपडेट करना चाहिए? प्रमुख संस्करण? हर महीने अगर अपडेट उपलब्ध हैं? मैं ऐसी स्थिति से बचना चाहता हूं जैसे मैंने हर कीमत पर अनुभव किया है।
PS - मेरी व्यक्तिगत रेल परियोजनाओं में से एक के लिए, मैं Gemnasium नामक एक सेवा का उपयोग करता हूं जो आपकी निर्भरता को ट्रैक करता है ताकि आपको उदाहरण के लिए सुरक्षा कमजोरियों के बारे में सूचित किया जा सके। यह एक महान सेवा है, लेकिन हमें उन परियोजनाओं के लिए मैन्युअल रूप से निर्भरता की जांच करनी होगी जिनका मैंने उल्लेख किया था।