पहली गलती: एक वाक्य की जगह पूरा स्पेक लिखना
जिन लोगों को पहले खराब सॉफ़्टवेयर की मार झेलनी पड़ी है, वे अक्सर बिल्डर खोलकर एक पूरा पैराग्राफ़ टाइप कर देते हैं। ग्रेडिंग सिस्टम, यूनिट प्राथमिकताएँ, ऑफ़लाइन मोड, रंग योजना, सब कुछ पहले जवाब आने से पहले ही आगे डाल दिया जाता है। यह ज़िम्मेदाराना लगता है। पर है नहीं। बिल्डर आपका एक वाक्य पढ़ता है, अनुमान लगाता है कि आपका मतलब शायद क्या है, और लगभग पंद्रह सेकंड में एक प्लान लेकर वापस आता है — "क्लाइम्बर्स के लिए एक ट्रेनिंग लॉग" एक सेशन लॉग, एक ग्रेड-ट्रैकिंग व्यू, और एक डैशबोर्ड में बदल जाता है, जिसमें डिफ़ॉल्ट के तौर पर V-स्केल बोल्डरिंग और YDS रूट्स चुने जाते हैं क्योंकि ज़्यादातर क्लाइम्बर असल में यही इस्तेमाल करते हैं। यह आपको बता देता है कि उसने क्या चुना, प्लान में ही, ताकि अगर आप अपवाद हों तो आप एक ही लाइन में इसे ठीक कर सकें। पहले से पूरा पैराग्राफ़ लिखने से यह चरण छूटता नहीं है। आपको फिर भी एक प्लान मिलता है, आपको फिर भी उसे पढ़ना पड़ता है, और अब आपने ऐसी बाध्यताएँ टाइप करने में तीन मिनट खर्च कर दिए जो प्लान वैसे भी आपके सामने ला देता, और वह भी उसी क्रम में जो आपके बिल्ड के लिए असल में मायने रखता है।
प्लान भरने के लिए खाली जगहों वाला फॉर्म नहीं है। यह गद्य है, और आप गद्य में ही जवाब देते हैं। "असल में इसे Font ग्रेड्स बना दो, मैं यूरोप में हूं" एक पूरा एडिट है। "पार्टनर/बिले-लॉग फ़ील्ड जोड़ दो, मैं अलग-अलग लोगों के साथ क्लाइम्बिंग करता हूं" भी वैसे ही एक पूरा एडिट है। हर एडिट प्लान को दोबारा जनरेट करता है, बिल्ड को नहीं — आप महंगे हिस्से के शुरू होने से पहले दिशा तय कर रहे हैं, उसे दोबारा शुरू नहीं कर रहे। उस प्लान को अप्रूव करना आपका आखिरी ज़रूरी फैसला है। इसके बाद जो कुछ भी होता है वह जनरेशन और वेरिफिकेशन है।
गलती दो: फीड को ऐसे देखते रहना जैसे टर्मिनल अटक गया हो
बिल्ड सर्वर-साइड पर चलता है, और यहां की तबाही लगभग हमेशा एक झूठा अलार्म होती है: कोई शख़्स दो मिनट तक शांत एक्टिविटी फीड को घूरता रहता है और मान लेता है कि यह अटक गया है। ऐसा नहीं है — यह उस फेज़ में है जो हर सेकंड कोई दिखने वाला आउटपुट नहीं देता, और फीड ठीक इसी वजह से बताती है कि आप किस फेज़ में हैं। आप टैब पूरी तरह बंद कर सकते हैं। रन आपके ब्राउज़र में नहीं चलता।
आपको वास्तव में क्या उम्मीद करनी चाहिए, यह शेप के हिसाब से काफी अलग होता है। क्लाइम्बिंग लॉग — कुछ पेज, एक लोकल डेटा मॉडल, किसी बाहरी API को कॉल नहीं करता — तीन मिनट से कम में पूरा हो जाता है, जो "इसे लॉग करो, उसे चार्ट करो, मुझे लिस्ट दिखाओ" जैसी किसी भी चीज़ के लिए सामान्य है। जैसे ही किसी बिल्ड को असली बैकएंड, ऑथ, रिलेशनशिप वाला डेटाबेस, बैकग्राउंड जॉब्स चाहिए होते हैं, आप आठ से बारह मिनट देख रहे होते हैं, क्योंकि अब स्कीमा जनरेशन और माइग्रेशन भी है, और वेरिफिकेशन पास सिर्फ मार्कअप की बजाय सर्वर कोड के खिलाफ दूसरी बार चलता है। गेम्स इससे भी धीमे होते हैं, क्योंकि उन्हें एसेट जनरेशन चाहिए होता है: स्प्राइट्स, साउंड क्यू, कभी-कभी दूसरा विज़ुअल पास अगर पहला प्रयास उस साइज़ पर ठीक न दिखे जिसमें उसे दिखाया जाना है। और नेटिव पैकेजिंग, एक असली इंस्टॉल करने योग्य APK, वेब व्यू को शेल में लपेटा हुआ नहीं, एक असली टूलचेन को सौंपती है। Gradle, साइनिंग, सब कुछ। यह अकेला स्टेप बाकी सबके ऊपर पांच से दस मिनट और जोड़ सकता है, और यही वह फेज़ है जहां शांत फीड का मतलब है कि टूलचेन अपना काम कर रही है, कुछ टूटा नहीं है।
इस मॉडल की असली कीमत यह है कि आप एडिटर में कोड को स्ट्रीम होते देखने का तुरंत, कैरेक्टर-बाय-कैरेक्टर फीडबैक खो देते हैं। इसकी जगह आपको एक ऐसा सिस्टम मिलता है जो आपके लैपटॉप के सो जाने और वाई-फाई के डिस्कनेक्ट होने पर भी चलता रहता है, जिसे आप अपने फोन से चेक कर सकते हैं, और जो चलता रहता है चाहे आप देख रहे हों या नहीं। नब्बे सेकंड के बिल्ड के लिए यह ट्रेड-ऑफ मुश्किल से मायने रखता है। बारह मिनट के बैकएंड बिल्ड के लिए, यह टर्मिनल पर बैठे रहने और कॉफी लेने जाने के बीच का फर्क है।
गलती तीन: जनरेट होने को पूरा हो जाना समझ लेना
यह सबसे महंगी गलती है। एक बिल्ड जो जल्दी खत्म हो जाए और जिसे चेक न किया गया हो, वह पूरा बिल्ड नहीं है, वह एक ड्राफ्ट है जो संयोग से चल जाता है — और इन दोनों के बीच का यही फासला है जहां से तेज़ साइट-बिल्डर्स की खराब प्रतिष्ठा बनती है, बिना सैनिटाइज़ेशन वाले फॉर्म और ऐसे बटन शिप करके जिन तक कीबोर्ड से पहुंचा ही नहीं जा सकता। इस प्लेटफॉर्म द्वारा किसी भी चीज़ को पूरा घोषित करने से पहले, अलग वेरिफायर एजेंट्स इसकी समीक्षा करते हैं: कोड, सुरक्षा, लिंक, SEO, एक्सेसिबिलिटी, और आपके अप्रूव किए गए प्लान के अनुरूपता। यह सचमुच एक अलग पास है, वही एजेंट अपने ही आउटपुट को दोबारा पढ़कर सिर हिलाना नहीं है।
सुरक्षा जांच उन साधारण-सी दिखने वाली चीज़ों को ढूंढती है जो प्रोडक्शन में असल में नुकसान पहुंचाती हैं: क्लाइंट-साइड कोड में कमिट की गई API key, बिना सैनिटाइज़ेशन के इनपुट स्वीकार करने वाला फॉर्म, कोई एंडपॉइंट जो सेशन से यूज़र ID निकालने की बजाय क्लाइंट द्वारा दिए गए यूज़र ID पर भरोसा कर रहा हो। एक्सेसिबिलिटी जांच कोई लिंटर नहीं है जिसे आप कमेंट से चुप करा सकें — यह असली कॉन्ट्रास्ट रेशियो और यह चेक करती है कि इंटरैक्टिव एलिमेंट्स तक कीबोर्ड से पहुंचा जा सकता है या नहीं।
अनुरूपता (Conformance) वह है जिसे लोग सबसे कम महत्व देते हैं। जनरेशन पास के लिए यह आसान है कि वह चुपचाप कोई ऐसी चीज़ छोड़ दे जो आपने मांगी थी — मसलन वह पार्टनर/बिले-लॉग फ़ील्ड जो आपके प्लान एडिट में थी — बिल्ड की तीसरी फाइल में जाकर, बिना किसी के फैसला किए ही प्राथमिकता से हटा दी जाती है। अनुरूपता जांच आपके अप्रूव किए गए प्लान को असली आउटपुट के साथ फिर से पढ़ती है और इस अंतर को पकड़ लेती है। जब यह कोई कमी पाती है, तो फिक्स अपने आप लगाया और दोबारा जांचा जाता है; आपको टू-डू लिस्ट नहीं मिलती, आपको या तो एक ऐसा फिक्स मिलता है जो आप कभी देखते नहीं, या शुरू से ही कुछ गलत नहीं होता। हर वेरिफायर क्या-क्या जांचता है, और लगातार दो बार कुछ फेल होने पर क्या होता है, इसकी मैकेनिक्स How builds verify themselves में हैं। इस सेक्शन से याद रखने लायक एक बात: पूरा होने का मतलब है पास होना, जनरेट होना नहीं। इन दोनों को एक ही मान लें तो आखिरकार आप एक्सपोज़्ड key या न पहुंच पाने वाला बटन शिप कर बैठेंगे।
अगर आप ये तीनों गलतियां न करें तो आपको क्या मिलता है
- क्लिक करके देखा जा सकने वाला असली प्रीव्यू में एक काम करता हुआ प्रोडक्ट — आपके डेटा के साथ चलता हुआ एक असली इंस्टेंस, यह कैसा दिखेगा उसका स्क्रीनशॉट नहीं।
- इससे जुड़ा एक चैट थ्रेड, जहां "हेडर को गहरा कर दो और एक स्टैट्स पेज जोड़ दो" कहने से वर्ज़न एक के बगल में वर्ज़न दो बन जाता है। पुराना वर्ज़न गायब नहीं होता; वह फॉलबैक के तौर पर वहीं रहता है जबकि नया वाला लाइव प्रीव्यू में आ जाता है।
- ऐसे बटन जो असल में काम करते हैं: लाइव पब्लिश करो, कोड डाउनलोड करो, नेटिव इंस्टॉलर बनाओ, स्टोर पर भेजो। बटन के भेस में अपसेल मॉडल नहीं।
वह कोड-डाउनलोड-करो वाला बटन दोबारा देखने लायक है, क्योंकि यही वह चीज़ है जो किसी असली चीज़ के लिए भरोसा किए जा सकने वाले टूल को, सिर्फ डिस्पोज़ेबल प्रोटोटाइप के लिए इस्तेमाल होने वाले टूल से अलग करती है। अगर कोड सचमुच आपका है और उसे ले जाया जा सकता है, फाइल स्ट्रक्चर पढ़ने लायक हो, आपने जो मांगा था उससे ज़्यादा कोई अजीब लॉक-इन न हो, तो प्लेटफॉर्म को हर बार आपकी अगली सेशन कमानी पड़ती है, बजाय इसके कि वह इस बात पर आराम से बैठा रहे कि आप वैसे भी फंसे हुए हैं।



