माइग्रेशन

चेतावनी के संकेत कि आप किसी मालिकाना फ़ॉर्मेट में बँध गए हैं

लॉक-इन शायद ही कभी एक अकेले फ़ैसले के रूप में आता है। यह धीरे-धीरे, एक-एक सुविधाजनक शॉर्टकट के साथ जमा होता है, जब तक कि एक प्रदाता के साथ उचित इंटीग्रेशन के रूप में शुरू हुआ कोडबेस चुपचाप उस प्रदाता से अलग करने में ही मुश्किल न हो जाए। कुछ खास पैटर्न को चेतावनी के संकेत के रूप में पहचानना फ़ायदेमंद है, क्योंकि जब ये होते हैं तो हर एक अलग से हानिरहित लगता है।

किसी प्रदाता के सटीक फ़ील्ड नाम आपके पूरे डेटा मॉडल में इस्तेमाल होते हैं। अगर आपका डेटाबेस स्कीमा, आपके आंतरिक API रिस्पॉन्स और आपका फ़्रंट-एंड कोड, सब किसी खास प्रदाता के फ़ील्ड नामकरण का इस्तेमाल करते हैं, जैसे formatted_address या display_name या जो भी वह प्रदाता उसे कहता हो, बजाय आपके अपने चुने हुए नामकरण के जिसे सीमा पर एक बार अनुवादित किया गया हो, तो आपके एप्लिकेशन की हर परत ने उस एक वेंडर की परंपराओं पर निर्भरता अपना ली है।

प्रदाता-विशिष्ट अजीब व्यवहारों को इंटीग्रेशन की सीमा पर अलग करने के बजाय बिज़नेस लॉजिक में संभाला गया है। अगर किसी प्रदाता द्वारा किसी असामान्य पते को फ़ॉर्मेट करने के खास तरीके का वर्कअराउंड उस प्रदाता से बात करने वाले सीमित फ़ंक्शन के बजाय सामान्य बिज़नेस लॉजिक के अंदर रहता है, तो माइग्रेट करने का मतलब है उस वर्कअराउंड को ऐसे कोड से ढूँढकर सुलझाना जिसका ऊपर से देखने पर जियोकोडिंग से कोई लेना-देना नहीं है।

कोई भी जल्दी से यह नहीं बता सकता कि कोडबेस में कितनी जगहों पर प्रदाता का नाम से उल्लेख है। अगर "हम इस वेंडर पर कहाँ निर्भर हैं" का जवाब देने के लिए तुरंत और भरोसे वाले जवाब के बजाय एक सावधान ऑडिट की ज़रूरत पड़ती है, तो वह अनिश्चितता खुद लॉक-इन का संकेत है, क्योंकि इसका मतलब है कि निर्भरता उससे कहीं ज़्यादा फैल चुकी है जितनी कोई सक्रिय रूप से ट्रैक कर रहा था।

क्लाइंट लाइब्रेरी के खास ऑब्जेक्ट टाइप कोड में दूसरी जगहों पर फ़ंक्शन सिग्नेचर के रूप में इस्तेमाल होते हैं। अगर जियोकोडिंग से असंबंधित फ़ंक्शन किसी खास प्रदाता के SDK रिस्पॉन्स टाइप को पैरामीटर के रूप में लेते हैं, तो उस प्रदाता का टाइप सिस्टम असल में आपके एप्लिकेशन के अपने टाइप सिस्टम का हिस्सा बन चुका है, और उसे हटाने के लिए केवल जियोकोडिंग कोड नहीं, बल्कि उसका उल्लेख करने वाले हर फ़ंक्शन को छूना पड़ता है।

इंटीग्रेशन के लाइव रहने के सालों में कभी भी माइग्रेशन का परीक्षण नहीं किया गया, आंशिक रूप से भी नहीं। जो इंटीग्रेशन सैद्धांतिक रूप से किसी दूसरे प्रदाता पर जा सकता है लेकिन जिसे कभी असल में किसी प्रदाता पर आज़माया नहीं गया, वह व्यवहार में उस इंटीग्रेशन से कोई खास अलग नहीं है जो बिल्कुल जा ही नहीं सकता, जब तक कि कोई वास्तव में उसका परीक्षण न करे।

इनमें से कोई भी पैटर्न अपने आप में विनाशकारी नहीं है, और ज़्यादातर इंटीग्रेशन में लंबे समय तक बिना किसी असली परिणाम के इनमें से कम से कम एक दिखता है। इन्हें पहचानने का फ़ायदा यह है कि आप लॉक-इन को एक सोचा-समझा, स्वीकार्य समझौता बना सकते हैं, न कि एक आकस्मिक समझौता जिसे किसी ने चुना ही नहीं। कभी-कभी सुविधा इस जुड़ाव के लायक होती है, खास तौर पर किसी छोटे प्रोजेक्ट के लिए जहाँ पूरे माइग्रेशन में लचीलेपन के मूल्य से ज़्यादा इंजीनियरिंग समय लगेगा। समस्या केवल तब है जब लॉक-इन चुपचाप होता है और सबसे बुरे संभव पल में पता चलता है, यानी किसी डेडलाइन के दबाव में मजबूरी वाले माइग्रेशन के दौरान, बजाय इसके कि उसे पहले से जानबूझकर माना और स्वीकार किया गया हो।

अगर आप जिस प्रदाता पर अभी निर्भर हैं, उसके लिए पहले से कोई कम्पैटिबिलिटी होस्ट मौजूद है, तो इस जोखिम का कुछ हिस्सा स्वाभाविक रूप से कम है, क्योंकि 17 कम्पैटिबिलिटी होस्ट का मतलब है कि कम से कम एक संभावित माइग्रेशन रास्ते में फ़ील्ड-स्तर के लॉक-इन को सुलझाने की बिल्कुल ज़रूरत नहीं, केवल होस्ट और कुंजी बदलनी है। ऐसे इंटीग्रेशन के लिए भी, जिसे आप तुरंत बदलने की कोई योजना नहीं रखते, यह बीमे की उचित मात्रा है।