एक लोकप्रिय रेमिटेंस एंड्रॉइड ऐप एक विशिष्ट क्षेत्र में पैसे भेजने में विफल हो रहा था। ऐप सामान्य नेटवर्क अनुरोध कर रहा था, लेकिन समस्या के कारण का कोई संकेत नहीं था। मूल कारण का पता लगाने के लिए यह मेरे सभी जासूसी कौशल, साथ ही साथ थोड़ा सा भाग्य लेने वाला था।
एक एंड्रॉइड डेवलपर के रूप में एक लोकप्रिय प्रेषण ऐप पर काम कर रहा है जो 100 हजार से अधिक उपयोगकर्ताओं का समर्थन करता है, यह सुनिश्चित करना मेरा काम है कि ऐप सुचारू रूप से चले और सभी रिपोर्ट किए गए मुद्दों को तुरंत हल किया जाए। मैं ऐप के साथ समस्याओं की रिपोर्ट करने वाले उपयोगकर्ताओं से कभी-कभी समर्थन टिकट प्राप्त करने के लिए उपयोग किया जाता था। लेकिन एक दिन, मुझे ऐसे लोगों से टिकटों की बाढ़ आ गई, जो ऐप के माध्यम से किसी विशेष क्षेत्र में पैसा भेजने में असफल हो रहे थे। यह विशेष रूप से चिंताजनक था क्योंकि यह छुट्टियों के मौसम के करीब था, एक ऐसा समय जब बहुत से लोग अपने प्रियजनों को पैसे भेजने के लिए हमारे ऐप पर भरोसा करते हैं।
मुझे पता था कि मुझे जितनी जल्दी हो सके इस मुद्दे की तह तक जाना होगा। इसलिए मैंने शर्लक होम्स के ज्ञान की ओर रुख किया और अपना जासूसी का काम शुरू किया। लेकिन जैसे ही मुझे जल्द ही पता चला, इस समस्या को सुलझाना कोई आसान काम नहीं होने वाला था। बग के मूल कारण को ट्रैक करने और ऐप को फिर से ठीक से काम करने के लिए यह मेरे सभी जासूसी कौशल, साथ ही साथ थोड़ा सा भाग्य लेने वाला था।
जाल
मैंने अपने डिवाइस पर समस्या को पुन: प्रस्तुत करके, प्रभावित क्षेत्र में पैसे भेजने की कोशिश करते हुए शुरुआत की। निश्चित रूप से, ऐप जम गया और एक त्रुटि संदेश प्रदर्शित किया, जिसमें लिखा था, "लेन-देन विफल। कृपया बाद में पुनः प्रयास करें।" मैंने एंड्रॉइड स्टूडियो में एक प्रोफाइलर का उपयोग करने की कोशिश की, यह देखने के लिए कि क्या कोई प्रदर्शन समस्या थी जो समस्या पैदा कर सकती थी। कोई पासा नहीं; ऐप उम्मीद के मुताबिक काम कर रहा था।
मैंने यह देखने के लिए जल्दी से लॉग की जाँच की कि क्या वहाँ कोई जानकारी है जो मुझे यह समझने में मदद कर सकती है कि क्या हो रहा था। दुर्भाग्य से, लॉग बहुत मददगार नहीं थे। उन्होंने दिखाया कि ऐप सामान्य नेटवर्क अनुरोध कर रहा था, लेकिन समस्या के कारण का कोई संकेत नहीं था। हालाँकि, ऐसा लगता है कि हर बार जब हम transactions समापन बिंदु पर केवल उस विशिष्ट क्षेत्र के लिए POST अनुरोध करने का प्रयास करते हैं तो एक त्रुटि उत्पन्न होगी। मैंने जो भी कोशिश की, ऐसा नहीं लगा; मैं रहस्य को सुलझाने के करीब नहीं लग रहा था।
इसके बाद, मैंने नवीनतम कोड निकाला और उत्पादन शाखा की जाँच की, यह देखने के लिए कि क्या कोई हालिया कमिट समस्या के लिए प्रासंगिक हो सकता है। मैंने पोस्टमैन का उपयोग करके व्यक्तिगत अनुरोध करने का भी प्रयास किया और कुछ असाधारण देखा। अनुरोध ने 400 का प्रतिक्रिया कोड लौटाया, जिसका अर्थ है कि यह एक गलत अनुरोध था; इसका आम तौर पर मतलब है कि क्लाइंट बैकएंड द्वारा आवश्यक सभी जानकारी नहीं भेज रहा है। हालाँकि, अनुरोध में कौन सा डेटा गायब था, यह विवरण देने वाली सार्थक त्रुटि वापस करने में विफल रहा। यह देखते हुए कि यह अनुरोध पहले काम कर रहा था, ऐसा लग रहा था कि समस्या सर्वर साइड पर थी।
इस सिद्धांत का परीक्षण करने के लिए, मैंने कोड में गहरी खुदाई करने के लिए debugger का उपयोग किया। मैंने कोड में प्रमुख बिंदुओं पर ब्रेकप्वाइंट सेट किए और फिर से लेनदेन भेजने की कोशिश की, इस बार हुड के नीचे क्या हो रहा था, इस पर पूरा ध्यान दे रहा हूं। मैंने यह देखने के लिए जाँच की कि क्या अनुरोध में बैकएंड के लिए आवश्यक सभी आवश्यक डेटा हैं और अनुरोध और प्रतिक्रिया को लॉग आउट भी किया है। काश, सब कुछ उम्मीद के मुताबिक होता, लेकिन मुझे अभी भी खराब अनुरोध त्रुटि मिल रही थी।
साज़िश का गहरा जाना
जैसा कि मैंने अपनी जांच जारी रखी, मैं मदद नहीं कर सका लेकिन ऐसा महसूस हुआ कि मुझे कुछ याद आ रहा है। ऐसा लग रहा था कि इस मुद्दे के लिए एक स्पष्ट स्पष्टीकरण होना चाहिए, लेकिन चाहे मैंने कितनी भी कोशिश की हो, मुझे यह नहीं मिला। मुझे ऐसा लग रहा था कि मुझे, मेरी अपनी मोरियार्टी को, अनसुलझी बग को ताना मारना चाहिए।
बस जब मैं उम्मीद खोने लगा था, मुझे एक विचार आया। मुझे याद आया कि समस्या शुरू होने से दो हफ्ते पहले, बैकएंड टीम ने ऐप के सर्वर-साइड कोड के लिए एक अपडेट जारी किया था। क्या ऐसा हो सकता है कि अद्यतन समस्या पैदा कर रहा था?
मैंने बैकएंड डेवलपर्स को स्लैक पर यह देखने के लिए पिंग किया कि क्या उनके पास इस मुद्दे पर कोई अंतर्दृष्टि है। उन्होंने मुझे बताया कि उन्होंने हाल ही में सर्वर-साइड कोड के लिए एक अपडेट को बाहर कर दिया था, लेकिन वे निश्चित नहीं थे कि यह उस समस्या से संबंधित हो सकता है जो मैं अनुभव कर रहा था। वे वर्तमान में एक और समस्या को ठीक करने में लगे हुए थे और बाद में केवल मेरी जांच कर सकते थे। उन्होंने उल्लेख किया कि अपडेट को धीरे-धीरे रोल आउट किया गया था, केवल कुछ प्रतिशत उपयोगकर्ताओं ने इसे पहली बार प्राप्त किया था। एक नई नीति के कारण, हमारे रोलआउट अब चरणबद्ध थे, और उपयोगकर्ता इसे दो सप्ताह की अवधि में प्राप्त करेंगे। क्या ऐसा हो सकता है कि अद्यतन केवल उन उपयोगकर्ताओं के लिए समस्या का कारण बना हो जिन्होंने इसे प्राप्त किया था?
द लाइटबल्ब मोमेंट
मैंने यह देखने के लिए जल्दी से अपने लॉग की जाँच की कि क्या अपडेट के समय और उपयोगकर्ताओं को समस्या का अनुभव होने के बीच कोई संबंध था। और निश्चित रूप से, मुझे एक सुराग मिला!
टीम के साथ कुछ आगे-पीछे होने के बाद, मेरे सिद्धांत की पुष्टि हुई। अपडेट में सर्वर द्वारा कुछ प्रकार के लेन-देन को संभालने के तरीके में बदलाव शामिल था। और यह पता चला कि परिवर्तन विशेष रूप से प्रभावित क्षेत्र के लेन-देन के लिए समस्या पैदा कर रहा था। आगे की जांच के बाद, मैंने पाया कि बैकएंड को अब लेन-देन अनुरोधों में शामिल करने के लिए एक अतिरिक्त फ़ील्ड की आवश्यकता है, एक ऐसा फ़ील्ड जो पहले वैकल्पिक था। यह परिवर्तन इस क्षेत्र में नए नियमों के कारण किया गया था, लेकिन दुर्भाग्य से इसे जल्दबाजी में, खराब दस्तावेज, और पूरी तरह से परीक्षण नहीं किया गया था। परिणामस्वरूप, प्रभावित क्षेत्र के लेन-देन अनुरोधों में फ़ील्ड को शामिल नहीं किया गया, जिससे लेन-देन विफल हो गया।
मुझे विश्वास नहीं हो रहा था। अपने सभी जासूसी कार्यों के बाद, मुझे आखिरकार बग का मूल कारण मिल गया। इसमें काफी शर्लक जैसी कटौती और कुछ रचनात्मक सोच लगी थी, लेकिन मैंने गायब पैसे के मामले को आखिरकार सुलझा लिया था।
मैं तुरंत बैकएंड टीम के पास पहुंचा ताकि उन्हें पता चल सके कि मैंने क्या खोजा था। वे यह जानकर चौंक गए कि उनके अपडेट के कारण समस्या हुई और उन्होंने इस चूक के लिए माफी मांगी। हम दोतरफा समाधान पर सहमत हुए हैं। बैकएंड टीम अब अनिवार्य फ़ील्ड के लिए एक डिफ़ॉल्ट मान के साथ एक हॉटफिक्स जारी करेगी, जिससे उपयोगकर्ता इस दौरान लेन-देन कर सकेंगे, जबकि मोबाइल ऐप टीम ने हमारे एंड्रॉइड ऐप का एक अद्यतन संस्करण जारी किया जो इस अतिरिक्त जानकारी के लिए पूछेगा।
निष्कर्ष
इस बग को सुलझाना एक चुनौतीपूर्ण और पुरस्कृत अनुभव था। इसने मुझे रचनात्मक रूप से सोचने के महत्व की याद दिलाई और किसी मुद्दे को डीबग करते समय अलग-अलग दृष्टिकोणों को आज़माने से नहीं डरना चाहिए। और शर्लक और वॉटसन के बीच मजबूत बंधन की तरह, इसने मुझे सहयोग और टीम वर्क की शक्ति की भी याद दिलाई - बैकएंड टीम की मदद के बिना, मैं शायद कभी भी इस समस्या को हल करने में सक्षम नहीं होता।
मुझे उम्मीद है कि मेरे जासूसी के काम की यह कहानी अन्य डेवलपर्स को हमेशा सुराग की तलाश में रहने और एक चुनौतीपूर्ण समस्या को हल करने में कभी हार न मानने के लिए एक अनुस्मारक के रूप में काम करेगी। जैसा कि शर्लक होम्स ने एक बार कहा था, "एक बार जब आप असंभव को समाप्त कर देते हैं, तो जो कुछ भी रहता है, चाहे वह कितना भी असंभव क्यों न हो, सत्य होना चाहिए।" इस बात को ध्यान में रखते हुए, मुझे पता है कि किसी भी बग पर विजय प्राप्त की जा सकती है, चाहे वह पहली बार में कितना ही पेचीदा क्यों न लगे।