जब आपके ऐप का इंटरनेट कट जाए तो क्या होता है (और काम कैसे जारी रखें)

जब आपके ऐप का इंटरनेट कट जाता है, तो एक ऑफलाइन-फर्स्ट ऐप न तो क्रैश होता है, न फ्रीज़ — यह आपको काम जारी रखने देता है, आपके बदलाव लोकली सेव करता है, और वापस ऑनलाइन आते ही सब कुछ सिंक कर देता है, चाहे वह तीन मिनट बाद हो या तीन दिन बाद।

आपका WiFi बंद हो जाता है। आप अपने ऐप पर एक फॉर्म भर रहे हैं—आधे फील्ड्स भर चुके हैं, इसमें पाँच मिनट लगा दिए हैं। अब क्या होता है?

अगर आपका ऐप ऑनलाइन-ओनली है, तो कहानी यह है: पेज रीलोड या रिफ्रेश हो जाता है। आपका डेटा गायब हो जाता है। आप फिर से शुरू करते हैं। आप ऐप बंद करते हैं, और फिर कभी वापस नहीं आते।

अगर आपका ऐप ऑफलाइन-फर्स्ट है, तो कहानी अलग है: आप टाइप करते रहते हैं। आपका डेटा सुरक्षित है। जब WiFi वापस आता है (तीन मिनट बाद, या तीन दिन बाद), सब कुछ सिंक हो जाता है। यही है ऑफलाइन-फर्स्ट डिज़ाइन एक वाक्य में: ऐप इंटरनेट कनेक्शन के बिना भी काम करता रहता है, आपके बदलाव लोकली सेव करता है, और वापस ऑनलाइन आते ही उन्हें सिंक कर देता है।

ज़्यादातर ऐप बिल्डर्स ऑफलाइन को छोड़ देते हैं क्योंकि बिना उसके बनाना आसान होता है। लेकिन ऑफलाइन-फर्स्ट कोई पेचीदा चीज़ नहीं है—यह एक जानबूझकर लिया गया फैसला है। यही फर्क है उस ऐप में जिसे कोई बार-बार खोलता है, और उस ऐप में जिसे वह डिलीट कर देता है।

जब आपके ऐप का इंटरनेट छूट जाए तो असल में क्या होता है?

जब आपके ऐप का इंटरनेट छूट जाता है, तो या तो वह काम करता रहता है या नहीं करता—बीच का कोई रास्ता नहीं है। और कनेक्शन का टूटना कोई दुर्लभ बात नहीं है: फ्लाइट में बैठे यूज़र के पास इंटरनेट नहीं होता, टनल में मौजूद यूज़र के पास सिग्नल नहीं होता, किसी ग्रामीण इवेंट वेन्यू पर यूज़र को कमज़ोर कवरेज मिलती है, जिस यूज़र का घर का राउटर रात 3 बजे रीबूट होता है वह डेड WiFi पर अटका रहता है, और जो यूज़र अपने फोन से टेदर्ड है वह अपने हॉटस्पॉट के कोटे तक पहुँच जाता है।

इन सभी मामलों में, आपका ऐप या तो काम करता है या नहीं करता।

हमने फ्रीलांसरों के लिए एक टाइम-ट्रैकिंग ऐप बनाया था। यह ऑफलाइन क्रैश हो जाता था। एक फ्रीलांसर (जो इसे कंस्ट्रक्शन साइट्स पर, बिना सिग्नल के इस्तेमाल करता था) ने इसे इस्तेमाल करना बंद कर दिया—उन्होंने पेंसिल और कागज़ पर स्विच कर लिया क्योंकि कम से कम पेंसिल हर जगह चलती है। तीन महीने बाद, ऑफलाइन मोड आने के बाद, वे वापस आए और फिर कभी नहीं छोड़ा।

यह मैकेनिज़्म सीधा-सा है: जब इंटरनेट डाउन हो तो काम को लोकली सेव करें, और कनेक्शन वापस आने पर उसे सिंक करें। बस इतनी ही बात है।

ऑफलाइन के अलग-अलग प्रकार क्या हैं?

ऑफलाइन की तीन तरह की स्थितियाँ होती हैं जिनके लिए आपको तैयार रहना चाहिए: इरादतन, अचानक, और धीमा—और हर एक को अलग तरीके से ठीक करने की ज़रूरत होती है।

इरादतन ऑफलाइन — यूज़र ने खुद ऑफलाइन काम करना चुना है। वे प्लेन में हैं या उन्हें पता है कि WiFi खराब है। वे बाद में सिंक करने की उम्मीद रखते हैं। बनाना सबसे आसान: बस ड्राफ्ट्स को लोकली सेव करें और कनेक्शन वापस आने पर उन्हें पुश कर दें।

अचानक ऑफलाइन — इंटरनेट अचानक टूट गया। यूज़र बीच में कुछ कर रहा था। अगर आप उसे बीच वाक्य में काट देते हैं, तो वह गुस्सा हो जाता है। फिक्स वही है (ड्राफ्ट्स को लोकली सेव करना), लेकिन UX ज़्यादा नरम होना चाहिए: उसे दिखाएँ कि ऐप काम करता रह रहा है, और उसे बताएँ जब वह वापस ऑनलाइन आ जाए।

धीमा ऑफलाइन — कनेक्शन है, लेकिन इतना धीमा है कि न होने के बराबर है। एक कस्टमर फॉर्म भरता है, सबमिट पर क्लिक करता है, फिर सबमिशन पूरा होने के लिए 20 सेकंड इंतज़ार करता है। इतने में, उसे लगता है कुछ गड़बड़ हो गई, और वह फिर से सबमिट पर क्लिक कर देता है (अब आपको डुप्लिकेट मिलता है)। इसे टेस्ट करना सबसे मुश्किल है, लेकिन फिक्स ईमानदार है: उसे दिखाएँ कि काम हो रहा है (एक स्पिनर), या उसे बिना ड्राफ्ट खोए कहीं और नेविगेट करने दें।

आप अपने बिल्डर से ऑफलाइन मोड कैसे माँगें?

आप इसे टुकड़ों में माँगते हैं, एक बड़े फीचर के तौर पर नहीं—ऑफलाइन-फर्स्ट एक डिज़ाइन फिलॉसफी है, कोई एक चेकबॉक्स नहीं। यहाँ पाँच खास अनुरोध हैं जो आप अपने बिल्डर के सामने रख सकते हैं:

  1. ड्राफ्ट्स लोकली सेव करें: “जब कोई फॉर्म या नोट भरे, तो उसे उसके फोन/ब्राउज़र में सेव कर दो। अगर वह पेज रिफ्रेश करे, तो फॉर्म अब भी भरा हुआ दिखना चाहिए।” इसे टेस्ट करें: कुछ भरें, ब्राउज़र टैब बंद करें, फिर से खोलें, और फॉर्म अब भी वहीं होना चाहिए।

  2. ऑफलाइन काम करें: “अगर इंटरनेट न हो, तो ऐप को वह डेटा दिखाना चाहिए जो हमारे पास है, यूज़र को उसे पढ़ने और बदलाव करने देना चाहिए, और उन बदलावों को कतार में रखना चाहिए ताकि इंटरनेट वापस आने पर सिंक हो सकें।” इसे टेस्ट करें: अपना WiFi बंद करें, कुछ उपयोगी करने की कोशिश करें, फिर WiFi वापस चालू करें और डेटा को सिंक होते देखें।

  3. चुपचाप सिंक करें: “जब हम बदलाव सिंक कर रहे हों, तो कोई बड़ा डायलॉग न दिखाएँ। एक छोटा इंडिकेटर दिखाएँ, जैसे ऊपर ‘Saving…’, और काम पूरा होते ही वह गायब हो जाए। अगर सेव करना नाकाम हो जाए, तो बदलाव लोकली रखें और बाद में फिर कोशिश करें।”

  4. सच दिखाएँ: “यूज़र को बताएँ कि कौन-सा डेटा ताज़ा है (अभी-अभी सर्वर से सिंक हुआ) और कौन-सा डेटा सिर्फ लोकल है (अभी सिंक नहीं हुआ)। एक छोटे इंडिकेटर या लेबल का इस्तेमाल करें—इसे डरावना मत बनाएँ, बस ईमानदार रखें।”

  5. एक वर्कफ़्लो, पहले लोकल: “वह मुख्य काम जिसके लिए यूज़र ऐप पर आता है (बुकिंग चेक करना, नोट लिखना, समय ट्रैक करना) ऑफलाइन भी काम करना चाहिए। जो चीज़ें अच्छी हैं पर ज़रूरी नहीं (पुराने सभी रिकॉर्ड्स को सर्च करना, लाइव प्राइसिंग खींचना) उनके लिए इंटरनेट की ज़रूरत हो सकती है।“

असली कहानियाँ

वेडिंग प्लानर ने RSVPs मैनेज करने के लिए एक ऐप बनाया। वह लिस्ट प्रिंट करती, इवेंट्स में घूमती, और जवाबों को चेक करती। लेकिन वेन्यू पर WiFi बहुत खराब होता था। उसने ऑफलाइन-फर्स्ट माँगा: चेकलिस्ट को लोकली सेव करो, घर पहुँचने पर सिंक करो। अब यह उसका मुख्य टूल है—भले ही उसके फोन में सिग्नल हो, ऐप डेटा का इंतज़ार किए बिना काम करता है। उसे यह बहुत पसंद है।

क्लासरूम टीचर एक ऐप का इस्तेमाल छात्रों की प्रगति ट्रैक करने के लिए करती थी। कमज़ोर कवरेज वाले कमरों के बीच घूमते हुए उसके एडिट्स बार-बार खो जाते थे। ऑफलाइन मोड का मतलब था कि वह बेझिझक काम कर सकती थी, बाद में सिंक कर सकती थी, और उसे अपने फोन और अपनी नौकरी के बीच चुनाव नहीं करना पड़ता था। एक बदलाव, भरोसे में बड़ा इज़ाफ़ा।

इंश्योरेंस एडजस्टर मौके पर ही (कुछ ग्रामीण इलाकों में सिग्नल न होने पर भी) डैमेज रिपोर्ट भरता था। मूल ऐप को सबमिट करने के लिए इंटरनेट चाहिए होता था। हमने ऑफलाइन ड्राफ्ट्स जोड़े। अब वह फॉर्म भरता है, ऑफलाइन सबमिट करता है, और वापस गाड़ी चलाते वक्त सिंक हो जाता है। अब “जब तक घर न पहुँचूँ, कुछ सबमिट नहीं कर सकता” जैसी बात नहीं होती।

तीनों मामलों को “बस बेहतर WiFi लगवा लो” कहकर सुलझाया जा सकता था, लेकिन असली दुनिया ऐसे नहीं चलती। ऑफलाइन-फर्स्ट बेहतर सिंक से कहीं बड़ा भरोसे का बदलाव था।

क्या ऑफलाइन-फर्स्ट आपके ऐप को तेज़ बनाता है?

हाँ—ऑफलाइन-फर्स्ट ऐप्स तेज़ महसूस होते हैं क्योंकि आपको सर्वर का इंतज़ार नहीं करना पड़ता। आप टाइप करते हैं, ऐप उसे लोकली सेव करता है (तुरंत), और बैकग्राउंड में सिंक कर देता है। न कोई स्पिनर, न कोई इंतज़ार। इंटरनेट होने पर भी, अनुभव ज़्यादा तेज़ लगता है क्योंकि सर्वर बीच में नहीं आता।

एक ऑनलाइन-ओनली ऐप को हर बदलाव कन्फर्म करने के लिए सर्वर का इंतज़ार करना ही पड़ता है। एक कीस्ट्रोक → नेटवर्क रिक्वेस्ट → सर्वर वेरिफिकेशन → रिस्पॉन्स → यूज़र को दिखाना। यह आमतौर पर ठीक चलता है, लेकिन धीमे नेटवर्क पर (या धीमे सर्वर वाले मोबाइल पर), हर इंटरैक्शन अटक जाता है।

ऑफलाइन-फर्स्ट बनाने में क्या खर्च आता है?

ऑफलाइन-फर्स्ट में शुरुआत में इंजीनियरिंग समय ज़्यादा लगता है। आपके बिल्डर को इन बातों पर सोचना होगा:

  • लोकल स्टोरेज: डेटा को फोन/ब्राउज़र में कैसे सेव करें ताकि ऐप क्रैश होने पर भी वह गायब न हो। मुश्किल नहीं है, लेकिन इसे जानबूझकर डिज़ाइन करना पड़ता है।
  • कॉन्फ्लिक्ट रिज़ॉल्यूशन: अगर यूज़र ऑफलाइन किसी फील्ड को बदलता है, फिर सिंक होने से पहले कोई और (या कोई दूसरा डिवाइस) उसी फील्ड को बदल देता है, तो कौन-सा बदलाव मान्य होगा? आमतौर पर ऑनलाइन वाला (वह ज़्यादा ताज़ा होता है), लेकिन यूज़र को चौंकाने की बजाय पहले से आगाह किया जाना चाहिए। असली उदाहरण: दो फोन एक ही नोट को ऑफलाइन एडिट कर रहे हैं, दोनों ऑनलाइन आते हैं—जो दूसरा सिंक होता है वह जीत जाता है, पहले यूज़र को दिखता है “आपका वर्ज़न पुराना था, यह रहा मौजूदा वाला।”
  • पुराना डेटा: अगर यूज़र तीन दिन तक ऑफलाइन रहा, तो क्या ऐप को कनेक्ट होते ही चुपचाप सब कुछ रिफ्रेश कर देना चाहिए, या पहले उससे पूछना चाहिए? पूछना ज़्यादा सुरक्षित है—पुराने डेटा से जुड़े बिना-सेव बदलाव हो सकते हैं।

इन पर सोचना मुफ़्त नहीं है, लेकिन यह जितना आप सोचते हैं उससे कहीं आसान है।

फायदा: ऐसे ऐप्स जिन पर लोग भरोसा करते हैं। एक ऑफलाइन-फर्स्ट ऐप बहाने नहीं बनाता (“इसे इस्तेमाल करने के लिए इंटरनेट चाहिए”) और आपका काम नहीं खोता। यह बहुत बड़ी बात है।

आप कैसे जाँचें कि आपका ऐप ऑफलाइन काम करता है?

इसे टेस्ट करने के लिए आपको प्लेन में बैठने की ज़रूरत नहीं—आपके फोन का एयरप्लेन मोड ही आपकी टेस्टिंग ग्राउंड है। यहाँ तरीका है:

  1. कुछ खोलें और भरें: कोई सामान्य काम करें (फॉर्म भरें, नोट जोड़ें)।
  2. ऑफलाइन जाएँ: एयरप्लेन मोड चालू करें या WiFi बंद करें।
  3. काम जारी रखें: वही काम फिर से करने की कोशिश करें। अगर ऐप मना कर दे, तो ऑफलाइन-फर्स्ट अभी नहीं है। अगर ऐप काम करे, तो अच्छी बात है। अगर यह उलझन में डाले, तो अपने बिल्डर से एक साफ़ “आप ऑफलाइन हैं” इंडिकेटर माँगें।
  4. वापस ऑनलाइन आएँ: एयरप्लेन मोड बंद करें।
  5. सिंक चेक करें: क्या आपके बदलाव अपने-आप सिंक हो गए? अगर आपको “sync” बटन दबाना पड़ा या पेज रिफ्रेश करना पड़ा, तो अभी यह पूरी तरह तैयार नहीं है।

सबसे अच्छे ऑफलाइन ऐप्स इतने सामान्य महसूस होते हैं कि आपको पता ही नहीं चलता कि वे ऑफलाइन हैं—आपको बस इतना दिखता है कि ऐप अब भी काम कर रहा है।


क्या आपके बनाए ऐप को वाकई ऑफलाइन काम करने की ज़रूरत है? अगर जवाब है “मेरे यूज़र्स के पास कमज़ोर इंटरनेट है, या वे बिना सिग्नल वाली जगहों पर काम करते हैं,” तो हाँ। अगर जवाब है “वे हमेशा स्थिर WiFi पर रहते हैं,” तो अभी के लिए आप इसे छोड़ सकते हैं। लेकिन जिस पल कोई कहे “मेरा काम खो गया,” आपको अफ़सोस होगा कि आपने यह पहले क्यों नहीं माँगा।