मेरी 500 मिलियन डॉलर की Mars rover गलती
(chrislewicki.com)- फ़रवरी 2003 में JPL क्लीनरूम में Spirit Mars Rover को लॉन्च साइट भेजे जाने में 2 हफ़्ते बचे थे, और break-out-box कनेक्शन की एक गलती 500 मिलियन डॉलर के spacecraft को बर्बाद कर सकती थी
- Spirit और Opportunity NASA का जुड़वाँ Mars rover मिशन थे, जिन पर लगभग 1 बिलियन डॉलर खर्च हुए थे, और शेड्यूल में किसी बड़ी खराबी को ठीक करने की लगभग कोई गुंजाइश नहीं थी
- मोटर की बजाय spacecraft की ओर बिजली का pulse जाने के तुरंत बाद telemetry बंद हो गई, लेकिन नुकसान हुआ या नहीं और कारण क्या था, यह तुरंत तय नहीं हो सका
- अगले दिन पुष्टि हुई कि telemetry का नुकसान Fluke 87III multimeter की leads हटाने की वजह से हुआ था, जबकि असली surge का विश्लेषण H-Bridge motor driver channel पर जारी रहा
- कई हफ़्तों के विश्लेषण के बाद प्रोजेक्ट ने hardware को Use As Is माना, प्रक्रिया ठीक की, वही test जारी रखा, और Mars पर Spirit की वह मोटर सामान्य रूप से चली
लॉन्च से ठीक पहले Spirit पर हुआ test accident
- फ़रवरी 2003 में, NASA JPL के Building 179 High Bay 1 क्लीनरूम में Spirit Mars Rover को Cape Canaveral भेजे जाने में 2 हफ़्ते बचे थे
- Spirit और Opportunity जुड़वाँ Mars rover मिशन थे, और उस समय NASA ने इन जटिल spacecraft पर लगभग 1 बिलियन डॉलर निवेश किए थे
- assembly और test चरण में spacecraft को पृथ्वी पर आख़िरी बार बंद करने से पहले हर system की पूरी जाँच कर उसका सही काम करना सुनिश्चित करना ज़रूरी था
- दोनों rovers में कुल 62 brushed-type motors लगे थे
- पहियों की drive और steering
- robotic arm control
- camera pointing
- Earth-pointing antenna direction control
- landing के बाद unfolding और deployment motions
- उस रात test का लक्ष्य Spirit की robotic arm के सिरे पर लगे Rock Abrasion Tool(RAT) के अंदर का RAT-Revolve motor था
- RAT-Revolve motor Mars की चट्टानों पर grinder और brush को घुमाने का काम करता था
electric signal से motor की हालत जाँचने की प्रक्रिया
- हर environmental test के बाद motor को खोलकर भीतर जाँच करना व्यावहारिक नहीं था
- इसके बजाय motor को spacecraft से अलग कर बाहरी power supply और strip chart recorder से जोड़कर उसकी electrical performance जाँची जाती थी
- सामान्य motor में spin-up के दौरान current एक smooth exponential रूप में घटता है, और गड़बड़ी होने पर signal में blip दिखाई देता है
- test में break-out-box इस्तेमाल होता था, और अगर कनेक्शन ग़लत हो जाए तो भारी current गलत जगह जाकर घातक नुकसान कर सकता था
- pre-check में connection interface, power supply settings, strip chart settings, और reference motor पर short test pulse — सब सही पाए गए थे
ग़लत दिशा में गया electric pulse
- जैसे ही RAT-Revolve motor को energy दी गई, strip chart पर ऐसा signal दिखा जो परिचित नहीं था, और वह खराब motor के सामान्य signal जैसा भी नहीं था
- wiring ट्रेस करने पर पता चला कि break-out-box की गलती की वजह से electric pulse motor की बजाय connector interface की उलटी दिशा में, यानी spacecraft की ओर गया था
- Spirit को launch-prep shipment में सिर्फ़ 2 हफ़्ते बचे थे, इसलिए अगर बड़ी समस्या आती तो recovery का समय नहीं था
- accident की सूचना तुरंत test conductor Leo को दी गई, और उसी समय spacecraft से telemetry कटने की प्रतिक्रिया मिली
- टीम ने तुरंत emergency shutdown procedure चलाया और घटना व नुकसान का आकलन करने के लिए क्लीनरूम से बाहर जाने का निर्देश मिला
telemetry loss और शुरुआती आकलन
- accident के तुरंत बाद दो बातें साफ़ थीं
- एक बड़ा electric pulse इच्छित जगह के अलावा कहीं और गया था
- spacecraft telemetry रुक गई थी
- दोनों घटनाओं के बीच संबंध तुरंत स्पष्ट नहीं था
- टीम को लगा कि electrical surge शायद H-Bridge motor driver circuit में गया होगा
- H-Bridge को electric flow नियंत्रित करने वाले circuit के रूप में संभाला जाता था
- back-EMF की वजह से rover में अतिरिक्त energy सहने के लिए डिज़ाइन किए गए हिस्सों में यह एक था
- spacecraft पहले से powered down था, और टीम ने देखा कि क्या power फिर से देने पर समस्या दूर होती है
- लगभग आधी रात को project manager Pete तक भी घटना की रिपोर्ट पहुँची, और लगभग 1,000 लोगों वाले प्रोजेक्ट की replan संभावना दाँव पर थी
reboot असफल रहा और अगले दिन मिला असली कारण
- standard spacecraft power-up procedure फिर से चलाया गया, लेकिन electronics और software के ऊपर आने के बाद भी telemetry वापस नहीं आई
- ground support equipment rack में एक लाल indicator था जो हर clock cycle पर pulse पाकर जलता था, और प्रति सेकंड 8 बार की robotic heartbeat की तरह उपयोग होता था
- power supply ने परिचित voltage steps और current changes दिखाए, लेकिन indicator नहीं जला और telemetry भी नहीं आई
- अगले दिन घटनाक्रम फिर से देखने पर Fluke 87III digital multimeter एक अहम सुराग बना
- पिछले दिन test के लिए ज़रूरी multimeter ढूँढते समय, एक ऐसे multimeter की leads हटा दी गई थीं जो spacecraft के पास bus voltage monitor करता हुआ लग रहा था
- यह multimeter वास्तव में spacecraft के ground-test telemetry power circuit को पूरा कर रहा था
- leads हटाते ही telemetry power connection टूट गया
Spirit ज़िंदा था, और hardware को वैसे ही उपयोग किया गया
- टीम ने multimeter को उसकी मूल भूमिका में वापस लगाया और spacecraft को फिर power दिया
- telemetry फिर से जीवित हो गई, और पुष्टि हुई कि Spirit मरा नहीं था
- असली नुकसान सिर्फ़ कुछ घंटों का था, और test फिर शुरू हो गया
- इसके बाद कई हफ़्तों तक RAT-Revolve motor के H-Bridge channel का विश्लेषण किया गया, और thin-film demetallization की संभावना पर विस्तृत चर्चा चली
- अंततः प्रोजेक्ट ने उस hardware को Use As Is माना
- rover की launch preparation जारी रही, और Mars पर पहुँचने के बाद Spirit का RAT-Revolve motor सामान्य रूप से चला
failure experience को संभालने का तरीका
- इस घटना ने इस विश्वास को मज़बूत किया कि failure experience साझा करना, बोलने वाले और सुनने वाले दोनों के लिए सीख बन सकता है
- Planetary Resources में hiring process और team culture के दौरान उम्मीदवारों से अपनी failure story साझा करने को कहा जाता था
- संकट के बीच Ernie ने कहा, “अगली बार जब तुम्हें किसी चीज़ को ठीक मानकर approve करना हो, तो इस एहसास को याद रखना”
- accident के बाद कुछ लोगों का मानना था कि ऐसे जोखिम भरे test रोक देने चाहिए, लेकिन Mars पर motor सामान्य चलेगी या नहीं यह जाँचने वाले test की अहमियत के कारण test जारी रहा
- project manager Pete ने उसी व्यक्ति को test lead करते रहने दिया, और उनका आशय था, “हम उसकी training cost चुका चुके हैं, और अब वही व्यक्ति है जिसके इस गलती को दोबारा करने की संभावना सबसे कम है”
- बाद में वही गलती दोहराई न जाए, इसके लिए procedure सुधारा गया, और वही test कई बार फिर किया गया
- यह अनुभव बाद में किसी महत्वपूर्ण approval या assurance के समय उस डर और पछतावे को याद दिलाने वाला reference point बन गया
1 टिप्पणियां
Hacker News की रायें
लेख वाकई बहुत अच्छी तरह लिखा गया है
एक software engineer के तौर पर करियर की शुरुआत में मेरे साथ हुई मिलती-जुलती घटना आज भी याद आती है। करीब 10 साल पहले मैं जिस client company के लिए consulting कर रहा था, उसकी web service का नया version कई महीनों तक बनाया और launch वाले दिन deployment की जिम्मेदारी मेरे पास थी। उस समय development और deployment process लगभग पूरी तरह manual था। जिन हिस्सों को संभव था, उन्हें scripts और SQL से automate किया था, और deploy से ठीक पहले आखिरी test करने के लिए जैसे ही Enter दबाया, उसी पल एहसास हुआ कि अभी-अभी मैंने production credentials पर switch किया हुआ था
Errors जमा होने लगे और service ने response देना बंद कर दिया, तो मुझे पूरा यकीन हो गया कि मैंने database उड़ा दिया है। लेकिन कुछ घंटे पहले ही किसी ने launch की तैयारी में backup पूरा कर लिया था, इसलिए अधिकतर चीजें restore हो गईं। उसके बाद से databases और production systems संभालते समय सावधानी शब्द भी कम पड़ने लगा, और मैंने ठान लिया कि ऐसा फिर कभी नहीं होगा
Test suite चलते समय tables को delete करके फिर से create करता है या खाली करता है। एक दिन lead developer ने production DB पर bug fix explore करने के बाद
make testचला दिया। Test code ने environment variables को ज्यों का त्यों follow किया और Docker के बजाय production से connect हो गया, और तुरंत उन production tables को दर्जनों बार delete और recreate कर दियाखुशकिस्मती से हर customer site पर एक local DB था जो central DB से sync होता था, इसलिए connection टूटने पर भी product चलता रहा। उसने 3–4 दिन तक लंबी shifts में काम करके पुराने backups और customer data को जोड़कर master DB को फिर से बनाया
1 second बाद वे फिर दिखाई देने लगे; असल में सिर्फ view refresh हुआ था। सच में बेहद खराब UI था
Product marketing copy बदलने के लिए मैंने एक छोटी
UPDATEquery लिखी, लेकिन जैसे ही वह तुरंत खत्म नहीं हुई, मुझे समझ आ गया कि गड़बड़ हो गई है। बिना condition के पूरी चीज update हो गई और हजारों product descriptions बदल गए। Backup access वाला DB admin किसी और time zone में था और जा चुका था; एक घंटे से ज्यादा फोन करने के बाद हम restore कर पाएनिकलते-निकलते किया जाने वाला छोटा बदलाव कई घंटों की damage control में बदल गया। Marketing वाला दोस्त लगातार माफी मांगता रहा, लेकिन गलती मेरी थी। Customers की तरफ से ज्यादा कुछ नहीं आया, शायद इसलिए कि वह public holiday weekend का Friday शाम 5 बजे था
sudocommand चलाते समय Enter दबाने से पहले किसी दूसरे व्यक्ति को command verify करनी होती थी। Production में किए जाने वाले हर काम पर भी ऐसी ही policy या practice लागू की जा सकती हैयह वाक्य याद आता है: अगर intern ने production database delete किया, तो वह खराब intern नहीं, खराब process है
यह process की समस्या है या व्यक्ति की, यह आसानी से तय करना मुश्किल है, क्योंकि full-time employees से expectations ज्यादा होती हैं। लेकिन उसकी जगह खुद को रखकर पढ़ते हुए, जिस पल उसे समझ आया होगा कि क्या हुआ है, उस डर और दर्द ने मुझे भावुक कर दिया। इसमें वह एहसास भी शामिल है जब उम्मीद की किरण बुझने के बाद फिर जिंदा होती है। मैंने कभी ऐसा project नहीं संभाला जिस पर इतने लोग निर्भर हों
मेरे हिसाब से वे सभी heroes हैं
Postmortem call में पहली बात यह थी: “हम उस व्यक्ति को blame नहीं करेंगे जिसने ये trades बनाए। यह एक honest mistake थी। इसके बजाय बात करते हैं कि developer बिना authentication के production trading API को hit कैसे कर पाया”
व्यक्ति को blame करने से सिर्फ वही इंसान निकलेगा और पूरी organization कमजोर हो जाएगी। यानी आपने वह इकलौता व्यक्ति निकाल दिया जिसने महंगा सबक सीखा था। किसी व्यक्ति को जिम्मेदार ठहराने का समय केवल तब है जब नुकसान पहुंचाने का इरादा हो, और उस स्थिति में कानून शामिल हो सकता है
कुछ साल बाद जब मैंने job छोड़ी, तब तक उस fragile और unstable site को automatic tests, backup के कई स्तरों, कई data centers में failover system, और नए developers के training व onboarding वाले system में बदल दिया था। वह AWS के शुरुआती दिनों का समय था, जब production site one-click deploy नहीं होती थी
उसी अनुभव की वजह से मैंने proper version control, development environments, Redis, sharding और clustering, VMs, Postgres और MySQL replication, wiki, monit, DNS, load balancers, reverse proxies वगैरह सीखे। क्योंकि मैं site को दोबारा down नहीं करना चाहता था
वह एक छोटी company थी जिसने WordPress का थोड़ा अनुभव रखने वाले high-school dropout को $15 प्रति घंटा देकर production website सौंप दी थी। लेकिन गलती के बाद भी उन्होंने मुझे निकाला नहीं, बल्कि मौके पर सीखते हुए system बेहतर बनाने की आजादी और भरोसा दिया, जिसके लिए मैं आज भी आभारी हूं
ज्यादा नियम और बेहतर processes हमेशा अच्छा ही हों, ऐसा नहीं है। कभी-कभी bureaucracy पहले से धीमे NASA को और धीमा बना देती है। अपने प्रकार की पहली mission में कभी-कभी process के बजाय लोगों पर निर्भर होना और जोखिम उठाना पड़ता है
यानी कुछ हिस्सा लेखक की क्षमता से बाहर तय हुआ था, और उतनी ही संभावना थी कि, जैसा वह डर रहा था, वह हमेशा rover खराब करने वाले व्यक्ति के रूप में याद रखा जाता
यह मेरे अपने अनुभव से भी काफी मेल खाता है। एक बड़ी airline में मैं अक्सर सबसे मुश्किल और जोखिम भरे projects चुनकर लेता था, और उनमें से एक वेबसाइट के लिए नया payment provider जल्दी implement करना था। वह site हर दिन लाखों euro के tickets बेचती थी
deployment के कुछ ही सेकंड बाद मैंने test environment और production environment के फर्क को मिस कर दिया, और पता चला कि production में एक critical variable खाली है। अगर मैंने docs और पढ़कर तैयारी की होती तो यह अंदाजा लगाया जा सकता था, इसलिए sales पूरी तरह रुक गईं और मेरा दिल बैठ गया। लंबे rollback process के बाद कई घंटों तक sales बंद रहीं, नाराज customers की बाढ़ आ गई और लाखों euro का नुकसान हुआ
मैंने elevator में CEO को रोककर कहा कि यह पूरी तरह मेरी गलती है और firing समेत हर नतीजा स्वीकार करूंगा। वह हंसकर कुछ इस तरह बोले, “हम आपको क्यों निकालेंगे? हमने अभी-अभी आपको train करने पर लाखों खर्च किए हैं। आप कल से बेहतर काम करेंगे।” यह अनुभव सच्ची leadership समेत कई मायनों में मेरे लिए formative रहा, और इसके बाद मैंने कई high-risk projects सफलतापूर्वक पूरे किए
Internet कुल मिलाकर भी अक्सर broken रहता है। Black Friday के दौरान payment करते समय Nike webshop error देता है, और helpdesk का solution होता है “app इस्तेमाल करें”
असल में मुझे नहीं लगता कि downtime सीधे-सीधे loss में बदल जाता है। शुरुआती Twitter अपनी popularity और architecture की वजह से अक्सर down रहता था, लेकिन लोगों ने Twitter इस्तेमाल करना बंद नहीं किया
online service में outage हमेशा disaster या company का अंत नहीं होता। Space equipment या ऐसी high-frequency trading software की बात अलग है जिससे company bankrupt हो सकती है, और इसलिए वहां ज्यादा सख्त safeguards होने चाहिए। Theory में तो ऐसा है, लेकिन असल में कभी-कभी space और high-frequency trading industries से सीखी गई best practices से बनी ढीली-ढाली CRUD web service से भी खराब हालत होती है
production deployment के लिए co-pilot की तरह साथ में check करने और rollout रोकने का अधिकार रखने वाला कोई व्यक्ति जरूरी हो सकता है, साथ में आम DevOps safeguards भी होने चाहिए
high-risk projects संभालने वाले लोग अक्सर underestimated होते हैं। कई managers ऐसे employees को पसंद करते हैं जो स्थिर रूप से कोई value नहीं देते, बजाय उन employees के जिनकी expected value positive है लेकिन variance है
मैं TV industry में काम करता हूं। 30 साल पहले एक छोटे local TV station में अपनी पहली नौकरी में मुझे newscast का tape operator बनने की training मिली थी। Broadcast tapes का बड़ा ढेर लगा रहता था और playback VTR चार थे। मेरा काम हर tape डालकर उसे 1-second preroll point पर set करना था
जब किसी tape का playback खत्म होकर उसे निकालने का समय आता, तो अभी-अभी खत्म हुए VTR की बजाय currently on-air VTR का eject button दबा देना बहुत आसान था। मुझे train करने वाला व्यक्ति जब भी मुझे eject button की तरफ हाथ बढ़ाते देखता, तो दांत भींचकर सांस खींचने जैसी बड़ी warning sound निकालता, और उस आवाज की वजह से मैं रुककर दो-तीन बार check करता और फिर tape निकालता
वह सच में irritate करता था, लेकिन सावधान रहने की conditioning के लिए असरदार था। Station policy थी कि live broadcast के दौरान पहली बार tape निकालने पर बिना pay के एक दिन की छुट्टी, दूसरी बार probation, और तीसरी बार firing। कुछ colleagues ने chronic carelessness की वजह से नौकरियां गंवाईं और newscasts बिगाड़ दिए। उस irritating trainer की वजह से मैंने check और re-check करने की आदत सीखी, और मैंने कभी broadcast के दौरान tape eject नहीं किया
इस बात से सहमत हूँ कि ऐसी गलती करने वाला व्यक्ति वही गलती दोबारा नहीं करेगा। इसलिए तकनीकी तौर पर गलती कर चुके और साफ़ तौर पर परेशान व्यक्ति को निकालना आम तौर पर खराब विकल्प है
लेकिन मुझे नहीं लगता कि “असली” सबक यही है। लागत और जोखिम को देखते हुए, जिन हिस्सों को बड़े power surge से टेस्ट किया जाता है, उन्हें धुआँ निकलने की आशंका वाले हिस्सों से compatible न होने वाले dedicated test connectors मिलने चाहिए—यही सबक है
यह कोई छोटा breadboard project नहीं, बल्कि सरकारी एजेंसी का बहुत बड़ा project है, जिसे बहुत से लोगों ने बनाया है, जहाँ formal procedures के कारण समय और पैसा बहुत लगता है और कभी-कभी मज़ाक भी उड़ता है। “28 साल के व्यक्ति को 500 मिलियन डॉलर का robot सौंप दें, जो ज़रा-सी चूक पर फट सकता है” वाला तर्क बहुत अजीब लगता है
खासकर testing के दौरान “normal configuration” से अलग custom cables, connectors और circuits से काम लेना अक्सर पड़ता है। मेरे हिसाब से सबक यह है कि महत्वपूर्ण कामों में जहाँ तक संभव हो 4-eyes principle अपनाया जाए। एक व्यक्ति काम करे और दूसरा व्यक्ति हर step verify करके आगे बढ़ने दे—यह लेख जैसी “बेतुकी गलतियों” को पकड़ने में बहुत असरदार होता है
हालांकि schedule pressure वगैरह के कारण हमेशा दो लोग एक ही test नहीं देख सकते, इसलिए वास्तविक दुनिया में ऐसी गलतियाँ हो जाती हैं। पूरे system को robust बनाना होगा
computing में भी production database या router configuration पर upgrade/migration के हिस्से के रूप में सिर्फ एक बार किए जाने वाले ऐसे काम बहुत होते हैं। कभी-कभी safeguards बनाने की लागत शुरुआत से ही सावधानी बरतने से ज़्यादा होती है। हम हमेशा पूरी तरह सावधान नहीं रह पाते, लेकिन safeguards भी हमेशा perfect नहीं बना पाते, और defective safeguards पर भरोसा करके वैसी ही गलतियाँ कर बैठते हैं
कहानी वाली स्थिति में, hardware वाली pair programming की तरह, लेखक के हर काम के सही होने की verification ही जिसका काम हो, ऐसा partner होना चाहिए था। Mary की तरह role बाँटकर मदद करने वाला assistant नहीं, बल्कि साथ-साथ follow करके check करना ही जिसका एकमात्र काम हो, ऐसा व्यक्ति होना चाहिए था
अगर यह motor controller की data lines में गई होती, तो कुछ जल जाने की संभावना बहुत ज़्यादा थी। connector type अलग थे या नहीं, इसे नकारा नहीं जा सकता, लेकिन जिन दो connectors को गलत तरीके से जोड़ा गया था, उन्हें सचमुच same type के रूप में assign किया गया था
खासकर connectors के लिए पहले से certified products, specific derating, pin spacing, grounded backshell जैसी कई conservative requirements होती हैं। अंत में इस्तेमाल और stock में रखी जाने वाली connector series कुछ ही रह जाती हैं, और किसी भी cost पर उन्हें पूरी तरह non-overlapping बनाना realistic नहीं है। आम तौर पर या तो same signals को standardize किया जाता है, या overlap न हो इसलिए उन्हें unique बनाने की कोशिश की जाती है
उदाहरण के लिए, spacecraft के external connectors में handling के दौरान short circuit रोकने के लिए socket-type connector चाहिए, और intermediate harness कभी हटाया नहीं जाता, इसलिए pin-type connector symmetrically लग सकता है। फिर जब testing के लिए breakout box चाहिए होता है, तो box को उल्टा plug करने का मौका बन जाता है
या breakout box के एक तरफ 100-pin connector हो सकता है और दूसरी तरफ उसे 25 test instruments से जोड़ना पड़ सकता है। चुनने के लिए 25 अलग connectors भी नहीं हैं, और सभी test instruments पर custom requirements थोपना भी संभव नहीं है
spacecraft धीरे-धीरे local microcontrollers और local diagnostics की ओर जा रहे हैं, इसलिए सभी analog signals के लिए ऐसे test equipment घट रहे हैं। आजकल motor भी शायद brushless होता, और ऐसे breakout box के बजाय testing और flight के दौरान motor driver की telemetry पर भरोसा किया जाता
aerospace connectors भी दूसरी industries की तरह order के समय अधिक configurable होते जा रहे हैं, और keys जोड़कर “same” connectors के 10 units होने पर भी उन्हें सिर्फ अपनी जगह plug होने लायक बनाया जा सकता है। फिर भी सभी test equipment को इसी तरह configure करने की मांग करना अब भी unrealistic है
रिकॉर्ड के लिए, अपनी कहानी भी जोड़ता हूँ। University से graduation के बाद मेरी पहली job एक content marketing startup में थी, जो PHP और PerconaDB(MySQL) इस्तेमाल करता था। PHP का experience ज़्यादा नहीं था, लेकिन junior होने वाला बेवजह आत्मविश्वास था। graduation के बाद 6 महीने तक नौकरी नहीं मिली थी, इसलिए अच्छा impression बनाना भी बहुत चाहता था
मुझे feature flag update करने का काम मिला था ताकि नया feature सभी customers के लिए on हो, सिवाय उन customers के जिन्होंने स्पष्ट रूप से off करने को कहा था। flags database में integer 4 और 5 के रूप में string array के अंदर stored थे
ज़रूरी काम करने के लिए मैंने PHP function array_reverse इस्तेमाल किया, लेकिन documentation नहीं पढ़ी, इसलिए मुझे पता नहीं था कि दूसरा argument न हो तो यह keys नहीं, बल्कि सिर्फ values reverse करता है। नतीजतन database ठीक उसके उलट खराब हो गया जिसकी जरूरत थी, और अजीब बात यह कि QA भी pass हो गया
कुछ घंटों बाद इसका पता चला, और उस समय मेरा one-way commute लगभग 3 घंटे का था, इसलिए तब तक management तक मामला पहुँच चुका था। reverse script से इसे आसानी से ठीक किया जा सकता था, लेकिन QA और DB backup failure जैसी कई समस्याएँ सामने आईं
अगले दिन lead architect आए और कहा कि यह PHP के साथ काम करने की rite of passage जैसी गलती है और उन्होंने खुद भी career की शुरुआत में यह किया था—यह बात मुझे आज भी याद है और मैं उसका आभारी हूँ। आखिरकार मुझे निकाल दिया गया, और इससे engineer के रूप में बढ़ने में मदद मिली, लेकिन उस पल और उसके बाद के कुछ हफ्तों में हौसला ज़रूर टूट गया था
array_reverseवाली गलती के कारण निकाल दिया?कहानी बहुत खींच लेने वाली तरह से लिखी गई थी, लेकिन थोड़ी उलझाने वाली भी थी
ऐसा लगता है कि इस टीम ने एक गलती नहीं, बल्कि कई गलतियां कीं। यह साफ नहीं है कि इसका नतीजा spacecraft को असल नुकसान पहुंचा सकता था, या फिर spacecraft क्यों चालू नहीं हो रहा था, इस पर सिर्फ समय और भ्रम ही बर्बाद हुआ
पहली गलती यह थी कि उन्हें पता नहीं था कि multimeter सिर्फ माप नहीं रहा था, बल्कि circuit को complete कर रहा था। यह वाकई खराब design जैसा लगता है, और अगर ऐसा करना ही जरूरी था तो उस multimeter को कभी छूना नहीं चाहिए था। यह किसी एक व्यक्ति की गलती नहीं, बल्कि कम-से-कम दो लोगों, उन्हें manage करने वाले व्यक्ति, और ऐसी system को अनुमति देने वाले जिम्मेदार व्यक्ति तक जुड़ा मामला है
दूसरी गलती breakout box की तरफ थी। उन्होंने माना कि power गलती से spacecraft की तरफ भेज दी गई, और जब spacecraft चालू नहीं हुआ तो निष्कर्ष निकाला कि power surge ने spacecraft को नुकसान पहुंचाया है; लेकिन उन्हें पक्का नहीं था कि वह असल में कहां बहा और क्या damage हुआ, और आखिर में वे गलत निकले
spacecraft के चालू न होने की वजह यह थी कि हादसे से पहले multimeter को circuit से निकाल दिया गया था। RAT-Revolve motor H-bridge channel पर कई हफ्तों के analysis और thin-film demetallization की संभावना पर चर्चा वाली पंक्ति अब भी उलझाती है—क्या उसका मतलब था कि उन्होंने आंका था कि गलत power surge उस channel से होकर गया होगा और उसे damage कर सकता था?
power सच में उस circuit में गई थी, और स्थिति यह थी कि वे तय करने की कोशिश कर रहे थे कि वह damage हुआ है या नहीं। लेकिन motor driver को motor से वापस आने वाली power झेलने में सक्षम होना चाहिए, इसलिए शायद उन्होंने माना कि वह damage नहीं हुआ होगा
एक mechanical और aerospace engineer के तौर पर, काश मेरी सबसे डरावनी कहानियां बस इतनी ही होतीं कि बिना crew वाला 500 million dollar rover का main computer लगभग brick होने वाला था
मैं उन चीजों के लिए safety-critical approvals देने वाला senior था जिनमें लोगों की जानें सवार होती हैं। crash accident के बाद टूटे हुए parts की तस्वीरें देखते हुए “अगर मेरी calculation गलत थी तो?”, “अगर मेरा joint slip कर गया था तो?”, “अगर accelerated fatigue life prediction या stress corrosion cracking से जुड़ी खराब test procedure के कारण हुआ तो?”, “अगर production में डालने की जल्दी में shipment से पहले पकड़ नहीं पाए तो?” जैसी भावना सहनी पड़ती थी
मिलते-जुलते fields की failure stories पढ़ना दिलचस्प है, लेकिन HN पर openly share की जाने वाली कहानियां मुझे यह सोचने पर मजबूर करती हैं कि workplace-induced PTSD कोई competition नहीं है। कुछ लोगों के लिए बस therapy का खर्च ज्यादा होता है
अच्छा है कि वे उस energy को बेहतर बनने की दिशा में इस्तेमाल कर पाए, लेकिन हर कोई trauma पर एक ही तरह से react नहीं करता, और ऐसी reactions की तुलना करना भी आसान नहीं। उदाहरण के लिए, मुझे लगता है कि hiring question के तौर पर इसमें बहुत सारे social variables हैं
भले ही वह ऐसी detail रही हो जिसे procedures पकड़ नहीं सकते थे, अच्छी procedures बनाने का जिम्मेदार कोई न कोई होता है। कई factors हो सकते हैं, लेकिन आखिरकार ऐसा लगता है कि कोई व्यक्ति काफी सीधे तौर पर जिम्मेदार बन जाता है
software engineering या समाज में broadly उन contexts के बारे में सोचें जहां individual mistake collective के नाम पर चली जाती है, तो यह दिलचस्प है
अगर आपमें empathy है और आप “rocket ऊपर जाने के बाद कहां गिरता है, यह मेरे department का काम नहीं” वाला attitude नहीं अपनाते, तो यह काफी भारी पड़ सकता है। safety-critical systems बनाने वाले या उनके fallout से निपटने वाले लोगों के लिए peer support groups हों तो अच्छा होगा। company हमेशा अच्छी counselling नहीं देती
engineering associations या chartered engineer organizations membership fees से ऐसी services दे सकते हैं, लेकिन लोग license या professional accreditation खोने के डर से उनका इस्तेमाल करने से हिचक सकते हैं। पहले शायद लोग colleagues के साथ pub में पीकर मन हल्का करते होंगे, लेकिन alcohol dependence या अगले दिन काम पर असर अच्छा नहीं है, और pub culture भी पहले जैसा नहीं रहा
NOAA-N Prime सैटेलाइट के साथ हुई घटना याद आती है, जब test stand पर उसे固定 करने के लिए पर्याप्त bolts नहीं थे और वह गिर गया था
मूल कारण, अगर मैं गलत नहीं हूं तो सुधार दें, यह था कि सैटेलाइट को सुरक्षित करने के लिए इस्तेमाल होने वाले X-ray inspection bolts बहुत महंगे थे, इसलिए उन्हें किसी दूसरे project को “उधार” दे दिया गया था और वापस नहीं रखा गया था। जब सैटेलाइट को horizontal स्थिति में पलटा जा रहा था, वह जमीन पर गिर गया, और repair cost 135 million dollars थी
https://en.m.wikipedia.org/wiki/NOAA-19
यह दिलचस्प है कि शुरुआत से ही chronological sorting बेहतर की होती तो चिंता से बचा जा सकता था। अगर test readings के timestamps की तुलना telemetry system के last timestamp से की जाती, तो पता चल जाता कि test run से पहले ही telemetry fail हो चुकी थी
“लगता है अभी-अभी spacecraft telemetry पूरी तरह बंद हो गई है” जैसी अस्पष्ट wording के बजाय सटीक timestamps का इस्तेमाल न करना भी वजह का हिस्सा था। इससे सीख मिलती है कि incident के दौरान events वास्तव में कैसे जुड़े थे, इसे ठीक से verify करना चाहिए। दो अलग-अलग signals देखकर किसी खास direction में causality मान लेना आसान है, लेकिन असलियत में उल्टा भी हो सकता है