
शांत सॉफ्टवेयर: एक झिलमिलाते टॉगल को खत्म करना और चैट को यह बताना सिखाना कि वह किस मोड में है
दो छोटे GeekBye रिलीज़, कोई बड़ा फीचर नहीं — बस एक सेटिंग्स टॉगल जिसने झिलमिलाना बंद कर दिया और एक चैट असिस्टेंट जो आखिरकार आपको बताता है कि उसने मीटिंग मोड में जवाब दिया या कोडिंग मोड में। "शांत सॉफ्टवेयर" की असली कीमत यही है, एक-एक डिटेल के हिसाब से।
हर रिलीज़ कोई युद्ध की कहानी नहीं होती। कुछ तो बस छोटी-छोटी, लगभग अदृश्य चीज़ों की सूची होती हैं जो चुपचाप गलत थीं — ऐसी चीज़ें जो किसी चीज़ को क्रैश नहीं करतीं, पर ऐप को थोड़ा अविश्वसनीय, थोड़ा अस्थिर, थोड़ा गैर-अपना महसूस कराती हैं। GeekBye v2.0.3 और v2.0.5 उन्हीं में से दो थीं। कोई नया फीचर नहीं। बस शांति।
"शांत सॉफ्टवेयर" सुनने में एक मूड जैसा लगता है। दरअसल यह ढेर सारे ठोस फैसलों का ढेर है। यहाँ उनमें से तीन हैं।
एक टॉगल जो अपना मन नहीं बना पा रहा था
एक सेटिंग्स टॉगल था — वही जो ऑडियो रिकवरी को कंट्रोल करता है — जो क्लिक करने पर झिलमिलाता था। इसे ऑन करने के लिए टैप करो, और एक पल के लिए यह ऑन दिखाता, फिर वापस ऑफ में झटक जाता, और फिर टिक जाता। एक नन्हा-सा विज़ुअल हकलाना, पर आपकी नज़र उसे पकड़ लेती है, और यह ऐसा पढ़ा जाता है मानो ऐप को यकीन ही नहीं कि वह क्या कर रहा है।
इसकी वजह एक क्लासिक UI रेस है जिसे optimistic update कहते हैं। जब आप टॉगल क्लिक करते हैं, तो ऐप के पास दो विकल्प होते हैं: सेटिंग के सचमुच सेव होने का इंतज़ार करके फिर स्विच अपडेट करना (सही, पर सुस्त महसूस होता है), या स्विच को तुरंत पलट देना और बैकग्राउंड में सेव करना (तुरंत महसूस होता है)। GeekBye दूसरा करता था — तुरंत पलट देना — पर यह वापस आई सेव वैल्यू को फिर से भी पढ़ता था। तो सीक्वेंस यह था: आप क्लिक करते हैं, स्विच optimistically ऑन पलट जाता है, असली सेव वैल्यू एक पल बाद आती है, और एक फ्रेम के लिए दोनों में मतभेद हो जाता और स्विच साफ़-साफ़ उछल पड़ता।
फिक्स यह है कि optimistic वैल्यू और कन्फर्म वैल्यू को साफ़-सुथरे तरीके से एक-दूसरे से सहमत करा दिया जाए — स्विच उसी स्टेट पर टिक जाता है जिसे आपने चुना और सेव कन्फर्म होने पर खुद पर दोबारा शक करना बंद कर देता है। इसके साथ, v2.0.3 ने एक बेरौनक कॉपी पास किया: रिकवर-ऑडियो का विवरण उसकी बगल वाली पंक्तियों से मिलान करने के लिए छाँटा गया, और सेटिंग्स की भाषा को इंसानी बनाया गया। इसमें से कुछ भी फीचर नहीं है। यह सब उस फ़र्क का हिस्सा है जो एक सेटिंग्स पैनल को इंजीनियर किया हुआ महसूस होने और संवारा हुआ महसूस होने के बीच होता है।
एक टूर जो जाने का नाम नहीं ले रहा था
नए-यूज़र टूर बिल्कुल एक बार ही उपयोगी होते हैं। समस्या इसी एक-बार-पन में है: उसे देख लेने के बाद, एक ऑनबोर्डिंग ओवरले जिसे आप हटा नहीं सकते वह ऐसा जमावड़ा बन जाता है जो संकेत देता है कि यह ऐप अब भी आपको नया समझता है। v2.0.3 ने इसके दोनों सिरे ठीक किए — प्रोडक्ट टूर को अब छिपाया जा सकता है, और अगर आप सचमुच उसे वापस चाहते हैं, तो एक Replay Tour बटन है। जब यह मदद करे तब दिखाओ, जब न करे तब रास्ते से हटो, और यूज़र को अपनी शर्तों पर उसे बुलाने दो। यह मान लेना कि यूज़र अब नया नहीं है — यह अपने आप में शांति का एक छोटा-सा रूप है।
वह असिस्टेंट जो नहीं बताता था कि वह कैसे सोच रहा था
यही वाली असल में मायने रखती थी, और यह एक गहरी समस्या से जुड़ी है जिसके पीछे हम लगे हुए थे।
GeekBye का असिस्टेंट संदर्भ के हिसाब से अलग-अलग जवाब देता है। किसी मीटिंग में, "इसके बारे में तुम्हारा क्या ख्याल है?" का एक बातचीत जैसा, मीटिंग-को-समझने वाला जवाब मिलना चाहिए। किसी कोडिंग सेशन में, उन्हीं शब्दों का एक तकनीकी जवाब मिलना चाहिए। तो बैकएंड सवाल को सही फ्रेम में चलाता है — इसे मीटिंग मोड या कोडिंग मोड कहिए — और वह फ्रेमिंग सचमुच आपको मिलने वाले जवाब को बदल देती है।
मुश्किल यह: ऐप कभी बताता ही नहीं था कि किस मोड ने जवाब दिया। तो जब असिस्टेंट किसी बातचीत वाले सवाल का कोडिंग-रंग वाला जवाब देता — या किसी कोड सवाल का जवाब ऐसे देता मानो आप गप्पें मार रहे हों — तो लगता कि AI बस गलत है। यह गलत नहीं था; यह दूसरे मोड में था, और आपके पास उसे देखने का कोई तरीका नहीं था। एक छिपा हुआ स्टेट सही व्यवहार को टूटा हुआ दिखा रहा था। (मोड लॉजिक खुद एक बड़ा काम है — वह ऑर्केस्ट्रेटर जो तय करता है कि कोडिंग सेशन के दौरान गैर-कोडिंग सवालों का जवाब कैसे दिया जाए — पर इसमें से कुछ भी आपके किसी काम का नहीं अगर आप वह फैसला देख ही न सकें जो उसने लिया।)
v2.0.5 ने चैट में एक रीड-ओनली मोड चिप जोड़ी: एक छोटा लेबल जो दिखाता है कि असिस्टेंट ने मीटिंग मोड में जवाब दिया या कोडिंग मोड में। रीड-ओनली होना ही पूरी बात है — यह कोई कंट्रोल नहीं जिसे आप सेट करते हैं, यह सिस्टम पहले से ले चुके एक फैसले में झाँकने की खिड़की है। आप यह अंदाज़ा लगाना बंद कर देते हैं कि कोई जवाब क्यों अटपटा लगता है; आप देख सकते हैं कि वह किस फ्रेम से आया।
वह डिटेल जो चिप को ईमानदार बनाती है
यहाँ एक इंजीनियरिंग फैसला है जिसे आगे बताना बनता है, क्योंकि यह वही किस्म की चीज़ है जो एक जोड़-तोड़ से लगाए गए इंडिकेटर को एक भरोसेमंद इंडिकेटर से अलग करती है।
मोड की जानकारी बैकएंड से स्ट्रीम किए गए रिस्पॉन्स के हिस्से के रूप में आती है — सर्वर-सेंट इवेंट स्ट्रीम में एक छोटा mode फ्रेम। पर एक पुराना क्लाइंट जो इस फीचर से पहले का है, वह जानता ही नहीं कि mode फ्रेम क्या होता है; अच्छे से अच्छे में वह उसे नज़रअंदाज़ करता है, और बुरे से बुरे में कुछ बेतुका रेंडर कर देता है। तो क्लाइंट अपनी क्षमता की घोषणा करता है: वह एक रिक्वेस्ट हेडर भेजता है जो कहता है कि मैं मोड चिप दिखाना जानता हूँ, और बैकएंड mode फ्रेम सिर्फ उन्हीं क्लाइंट्स को भेजता है जिन्होंने वह हेडर भेजा। पुराने क्लाइंट्स को कभी ऐसा सिग्नल नहीं मिलता जिसे वे संभाल न सकें; नए क्लाइंट्स को ठीक वही फ्रेम मिलता है जो उन्होंने माँगा।
यह एक-हेडर वाला हैंडशेक है, और यही "हमने एक फीचर जोड़ा" और "हमने एक फीचर जोड़ा बिना किसी ऐसे यूज़र को तोड़े जिसने अभी अपडेट नहीं किया" के बीच का फ़र्क है। उसी रिव्यू पास ने बाकी व्यवहार को भी कस दिया: चिप रीसेट पर और जब बातचीत का संदर्भ बदलता है तब खुद को साफ़ कर देती है (एक बासी मोड लेबल अपने आप में एक छोटा झूठ है), और यह सिर्फ चैट व्यू में दिखती है जहाँ यह होनी चाहिए।
दो "बिना-फीचर" वाले रिलीज़ ने हमें क्या सिखाया
- झिलमिलाहट एक भरोसे का संकेत है। एक झिलमिलाता टॉगल, एक उछलता स्विच, एक लेबल जो एक फ्रेम ज़्यादा देर तक टिका रहे — इनमें से कोई भी क्रैश वाले मायने में बग नहीं है, पर हर एक फुसफुसाता है कि यह ऐप पूरी तरह काबू में नहीं है। शांति उन फुसफुसाहटों की गैरमौजूदगी है, और आप उसे एक-एक रेस कंडीशन के हिसाब से कमाते हैं।
- एक छिपा हुआ मोड सही व्यवहार को बग जैसा दिखाता है। असिस्टेंट सही काम कर रहा था और उसी के लिए दोष खा रहा था, बस इसलिए कि यूज़र फ्रेम को देख नहीं पाता था। जब आपका सिस्टम कोई अदृश्य फैसला लेता है जो आउटपुट बदल देता है, तो वह फैसला दिखाओ — एक रीड-ओनली चिप अक्सर पूरा फिक्स होती है।
- नए फीचर उन क्लाइंट्स के लिए अदृश्य होने चाहिए जो उन्हें इस्तेमाल नहीं कर सकते। कैपेबिलिटी-हेडर हैंडशेक का मतलब है कि मोड सिग्नल सिर्फ उन्हीं क्लाइंट्स तक पहुँचता है जो उसे रेंडर कर सकते हैं। बैकवर्ड कम्पैटिबिलिटी कोई वर्ज़न चेक नहीं जो बाद में जोड़ा जाए; यह एक क्लाइंट का यह कहना है कि वह क्या समझता है और एक सर्वर का उस जवाब का सम्मान करना है।
ये वही रिलीज़ हैं जिन पर कोई चेंजलॉग की सुर्खियाँ नहीं लिखता, और यही एक बड़ी वजह है कि GeekBye v2 जैसा महसूस होता है वैसा महसूस होता है। जिस रिलीज़ पर यह शांति बनी उसके लिए देखिए एक वर्ज़न 2 बनाने में असल में क्या लगता है (v2.0.0)। उसके साथ हुए रिलायबिलिटी काम के लिए, जिस दिन हमारे ऐप ने खुद पर DDoS किया (v2.0.1) और आपका AI नोटटेकर मीटिंग के बीच में रिकॉर्डिंग क्यों बंद कर देता है (v2.0.9)।