अजीब bug की खोज और समाधान की प्रक्रिया
- आंतरिक tools टीम की on-call ड्यूटी के दौरान, Gusto के आंतरिक software का इस्तेमाल करने वाले users ने Chrome browser crash की समस्या का सामना किया.
- इस समस्या ने customer service में कई तरह की बाधाएँ पैदा कीं.
- समस्या सुलझाने के लिए अनुभवी सहकर्मियों, product infrastructure टीम और IT टीम की मदद ली गई.
पहला सुराग
- प्रभावित users के बीच कोई समानता खोजने की कोशिश की गई.
- Gusto के सभी कर्मचारी प्रभावित नहीं थे, और customer-facing software में कोई समस्या नहीं थी.
- दूसरे आंतरिक software web pages सामान्य रूप से काम कर रहे थे.
- crash अनियमित रूप से हो रहा था, और Safari या Firefox में यह समस्या नहीं आ रही थी.
दूसरा सुराग
- यह परिकल्पना बनाई गई कि शायद Chrome version ही समस्या का कारण हो सकता है.
- कुछ users ने जब Chrome version update किया तो लगा कि समस्या हल हो गई है, लेकिन यह पूरी तरह ठीक नहीं हुई.
- यह भी अंदाज़ा लगाया गया कि Chrome extension समस्या का कारण हो सकता है, लेकिन extensions के बिना भी समस्या दोबारा सामने आई.
bug को reproduce करने में कठिनाई
- infrastructure टीम ने सभी engineers से समस्या को reproduce करने का अनुरोध किया.
- Turkey के दो engineers को छोड़कर engineering टीम में किसी ने भी crash report नहीं की.
- security कारणों से Chrome crash reporting feature बंद था, जिससे समस्या सुलझाना और कठिन हो गया.
किस्मत का मोड़
- Denver के एक engineer ने बताया कि Grammarly desktop app डाउनलोड करने के बाद यह समस्या शुरू हुई.
- यह पता चला कि Grammarly app हटाकर कंप्यूटर restart करने पर समस्या हल हो जाती है.
प्रगति
- debugging संभव होने पर, कारण खोजने के लिए कई कोशिशें की गईं.
- मुख्य आंतरिक application ActiveAdmin पर आधारित था, लेकिन React इस्तेमाल करने वाले नए हिस्सों में crash नहीं हो रहा था.
- common code के हिस्सों की जाँच करते हुए पता चला कि 'My History' dropdown menu ही समस्या की वजह था.
समस्या का समाधान
- यह पुष्टि हुई कि
loader-spinner.gifimage file ही समस्या पैदा कर रही थी. - उस GIF को किसी दूसरी image से बदलते ही page अब crash नहीं हुआ.
- Grammarly या Chrome में से किसने समस्या ठीक की, यह स्पष्ट नहीं है, लेकिन अब मूल GIF Chrome को crash नहीं कराता.
निष्कर्ष
- एक अप्रत्याशित animated GIF ही debugging का जवाब निकला.
- जिज्ञासा और सहयोग के ज़रिए समस्या का समाधान हुआ.
- Gusto ऐसे सहयोगी और जिज्ञासु लोगों के साथ काम करने का अवसर देता है.
GN⁺ की राय
इस लेख की सबसे महत्वपूर्ण बात यह है कि इसमें एक अप्रत्याशित कारण से पैदा हुए bug को खोजने और हल करने की प्रक्रिया का विस्तार से वर्णन किया गया है. यह लेख software engineering की जटिलता और अप्रत्याशितता को दिखाता है, और इस बात पर ज़ोर देता है कि teamwork और लगातार समस्या-सुलझाने की क्षमता कितनी महत्वपूर्ण है. यह इस बात का दिलचस्प उदाहरण देता है कि engineering टीमें मिलकर कठिन समस्याओं को कैसे सुलझाती हैं, और engineering में रुचि रखने वालों के लिए यह एक बेहद आकर्षक कहानी हो सकती है.
1 टिप्पणियां
Hacker News की राय
पढ़ते हुए मुझे लगा कि यह शायद Grammarly से जुड़ी समस्या होगी; पहले भी एक मिलता-जुलता bug देखा था, जो reproduce नहीं हो रहा था लेकिन किसी खास department के अंदर कई लोगों को प्रभावित कर रहा था
आखिर में common factor Grammarly extension का installed होना निकला, और यह production site पर नहीं बल्कि सिर्फ staging preview URL पर हो रहा था
वजह Grammarly extension का गलत regular expression था, और domain name करीब 100 characters से ज्यादा होते ही page hang हो जाता था
अगर यह मामला सच में desktop app की वजह से हुआ है, तो यह और भी डरावना लगता है
कई समस्याएं किसी खास combination तक narrow down हो जाती हैं, लेकिन अगर असल में क्यों हो रहा है यह पता न चले, तो संतोष नहीं मिलता
इसलिए अब मैं regex engine के बारे में पढ़ रहा हूं: https://swtch.com/%7Ersc/regexp/regexp1.html
Windows 10 के company-wide upgrade के दौरान एक manager का पुराना laptop बदला गया; software और network requirements की जांच, user profile और documents backup जैसे processes अच्छे से तय थे
equipment assessment sheet में 10 साल पुराना ThinkPad, 4GB RAM, और power cable निकालते ही बंद हो जाता है—ऐसा note था; उसे reference के तौर पर इस्तेमाल करते रहने का धैर्य सच में काबिले-तारीफ लगा
नया laptop deploy होने के बाद लगभग सब सामान्य था, बस Grammarly license transfer नहीं हो रहा था, इसलिए request डाली गई; एक हफ्ते बाद license key apply हो गई और Grammarly भी ठीक से काम करता दिखा
लेकिन उसी दिन बाद में सूचना आई कि security camera webpage crash हो रहा है; helpdesk ने reboot, cache clear, browser reinstall, profile recreate तक कर लिया, पर हल नहीं निकला, तो मामला मेरे पास आया
network, firewall logs, दूसरे PC, on-site/external access सब जांचा, लेकिन मेरी तरफ सब ठीक था और किसी और को भी समस्या नहीं थी
जब पूछा “हाल में PC या office में कुछ बदला है क्या?”, तो उन्होंने मजाक में कहा, “आज Grammarly install किया है, कहीं वही तो नहीं?”; ideas खत्म हो चुके थे, तो सच में uninstall करके देखा और वह चल पड़ा
Grammarly फिर से on करके link पर click किया तो पक्का fail हुआ
वह camera software बहुत पुराना था, custom homepage link बहुत लंबे PHP-generated URL जैसा था, और site पर Grammarly इस्तेमाल करने वाला वही अकेला व्यक्ति था, इसलिए यह problem सिर्फ एक बार दिखी
developers अक्सर यह संभावना भूल जाते हैं कि extension वजह हो सकता है, लेकिन extensions web page के साथ हर तरह की चीजें कर सकते हैं
एक university professor ने कहा कि paper लिखते समय underline बनी नहीं रह रही है, तो मैंने इसे साधारण user mistake समझा और लगा कि 5 मिनट में मदद कर दूंगा
लेकिन 3 घंटे से ज्यादा बाद पता चला कि एक खास video card driver version और एक खास printer driver version का combination सिर्फ underline output को रोक रहा था
https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
crash reporting बंद होने के बावजूद user profile directory में कहीं .dmp file बन गई होने की संभावना है
उस file को https://crbug.com/new bug पर manually upload कर दें, तो Chrome developer debug कर सकता है
अगर crash reporting बंद करने जैसी वजहों से dump share नहीं कर सकते, तो Chromium में
minidump_stackwalkbuild करके symbol-less stack trace बना सकते हैं और bug पर upload कर सकते हैंतब Chrome developer symbols attach कर सकता है
details यहां हैं: https://www.chromium.org/developers/decoding-crash-dumps/
इस bug को बनाने वाला technology combination दिलचस्प है। 2023 का web सच में कुछ ऐसा ही है
जानना चाहता हूं कि Chromium bug fix हुआ या नहीं, लेकिन इस list में navigate करना आसान नहीं है: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
अच्छा लगा कि Gusto ने यह article शायद इसलिए डाला कि “गलती हमारी नहीं थी” दिखाते हुए Grammarly पर हल्का-सा dig ले सके
Linux में बूट करने के बाद कभी-कभी आवाज़ नहीं आती थी, बाद में पता चला कि यह Windows dual boot सेटिंग से जुड़ा था
Windows से restart करने पर वह Realtek audio device को पूरी तरह shutdown नहीं करता था, बस sleep state में छोड़ देता था, और Linux उस device को शुरू नहीं कर पाता था
समाधान बस इतना था कि Windows में हमेशा shutdown करके फिर power button दबाकर चालू किया जाए, और समस्या अभी भी बनी हुई है: https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...
Windows और Linux dual boot करने वाले एक व्यक्ति के यहां Wi-Fi तभी काम करता था जब वह Windows में boot करके फिर Linux में restart करता था
Linux installation में Wi-Fi card के लिए firmware package नहीं था, इसलिए Windows से reboot करने पर device पहले से तैयार हालत में होता था, लेकिन सीधे Linux में cold boot करने पर नहीं चलता था
मैं मानता हूं कि अंत पूरी तरह anticlimactic है
बात ऐसी है कि Chrome source code और Grammarly source code दोनों तक access नहीं है, इसलिए सिर्फ अनुमान लगा सकते हैं; सोचता हूं क्या यह “open source” movement का नतीजा है
source code के बिना पूरी तरह रास्ता भटक जाने और और गहराई में जाने से इनकार करने वाले developers पैदा हो गए हैं; और जो कंपनियां सच बताना नहीं चाहतीं, उनके लिए यह रवैया बहुत सुविधाजनक होगा
पहले source के बिना भी programs को disassemble करके समझने और patch करने वाले बहुत लोग थे, और उनमें से काफी professional developers भी नहीं थे
बस software को अपनी जरूरत के मुताबिक चलाने की motivation थी, और इसी दौरान जितना जरूरी था उतना सीखते गए
यह लेख पूरे stack की पागल कर देने वाली complexity को भी छूता है. framework के ऊपर framework की कतार देखकर लगता है कि इसका बड़ा हिस्सा हमने खुद बुलाया है
कहा गया कि
loader-spinner.gif, यानी menu options load होते समय दिखने वाला placeholder हटाने पर page crash होना बंद हो गया; लेकिन यह भी सवाल है कि menu options load होने में इतना समय लगता ही क्यों है कि animation की जरूरत पड़ेsoftware engineering की दुनिया बेहद विशाल है, और stack के हर हिस्से को जानना बहुत पहले से ही लगभग असंभव हो चुका है
ऊपर से software engineering सीखने की यात्रा है, और हर व्यक्ति उस यात्रा में अलग-अलग जगह पर है
disassembler खोलना या debugger attach करना तो दूर की बात है, लगता है ऐसी skills अब ठीक से सिखाई भी नहीं जातीं
आमतौर पर वह लगभग तुरंत पूरा हो जाए, फिर भी देर लगने की स्थिति के लिए loading spinner रखना समझ में आता है
सबसे अजीब मामला वह था जब एक user ने कहा कि किसी खास form में डाला गया text save करने पर बदल जाता है
पहले लगा कि वही form कोई और साथ-साथ edit कर रहा है, लेकिन logs के हिसाब से ऐसा नहीं था, और मेरे computer पर सही text दिख रहा था
फिर screenshot में देखा कि कुछ menu text भी अजीब थे, और वजह यह निकली कि Chrome का “Translate this page” option चालू था
app के अंदर सही तरीके से language बदलने का तरीका बताने पर समस्या गायब हो गई
लगता है अब app या element पर लागू करने के लिए नया आदेश यही है. dynamic बदलाव support न करना पड़े इसलिए शायद यह CSS नहीं है, और देखने में बदसूरत है: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
कभी-कभी बड़े single-page apps के meta tags देखते हुए, यह पता करने की कोशिश में कि वह tag क्यों चाहिए, नई तरह की दहशत मिल जाती है
Japanese websites पढ़ते समय मैं अक्सर Google Translate पर निर्भर रहता हूं, और React इस्तेमाल करने वाली हर website टूट जाती है
क्योंकि React और Google Translate एक-दूसरे से अनजान रहते हुए DOM nodes update करने की कोशिश करते हैं
बाद में इस समस्या से मुक्त web widget फिर से बना सकता हूं या नहीं, यह देखने के लिए मैंने Google Translate implementation को गंभीरता से देखा भी था
[1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
यह बहुत जाना-पहचाना issue है
पहले मैंने Chrome के accessibility tools को dropdown menu में ऐसी समस्या पैदा करते देखा था, और इसे बहुत छोटे HTML से भी reproduce किया जा सकता था
2 साल पहले जिस खास bug से मेरा सामना हुआ था, वह Chromium-Edge में था, लेकिन symptoms और कारण बहुत मिलते-जुलते थे
Grammarly लगभग निश्चित रूप से Chrome के accessibility tools के किसी हिस्से पर निर्भर करता होगा
ऐसे tools Edge, Brave, Chrome जैसे Chromium variants में थोड़े-थोड़े अलग होते हैं
अगली बार ऐसा हो तो मेरा सुझाव है कि बस दूसरा browser इस्तेमाल करवाएं
खासकर Firefox में Chrome से bookmarks, passwords वगैरह import करने की capability काफी बेहतर हो गई है
universe ने अब switch करने का signal भेजा है, और हम signal को ठुकरा नहीं सकते
वैसे मैं Firefox engineer हूं, लेकिन इस सलाह से उसका कोई लेना-देना नहीं है
PM के नजरिए से, onboarding आसान बनाने में 4 महीने लगाए, और अब लोगों से नया browser install करने को कहें?
browser-based product का दुनिया के सबसे ज्यादा इस्तेमाल होने वाले browser में ठीक से काम न करना अच्छा signal नहीं है
सुरक्षा कारणों से Chrome crash reports को ब्लॉक रखते हुए कर्मचारियों को Grammarly install करने की अनुमति देने वाली corporate security policy मुझे वाकई बहुत पसंद है