আপনার অ্যাপের ইন্টারনেট চলে গেলে কী হয় (এবং কীভাবে কাজ চালিয়ে যাবেন)
আপনার অ্যাপের ইন্টারনেট চলে গেলে, একটি অফলাইন-ফার্স্ট অ্যাপ ক্র্যাশ করে না বা থমকে যায় না — এটি আপনাকে কাজ চালিয়ে যেতে দেয়, আপনার পরিবর্তনগুলো স্থানীয়ভাবে সংরক্ষণ করে, এবং আপনি অনলাইনে ফিরে এলেই সবকিছু সিঙ্ক করে দেয়—তা তিন মিনিট পরেই হোক বা তিন দিন পরে।
আপনার WiFi বন্ধ হয়ে গেল। আপনি অ্যাপে একটা ফর্ম পূরণ করছিলেন—অর্ধেক ফিল্ড ভরা হয়ে গেছে, পাঁচ মিনিট খরচ করে ফেলেছেন এতে। এবার কী হবে?
আপনার অ্যাপ যদি শুধু অনলাইনেই চলে, তাহলে গল্পটা এমন: পেজ রিলোড বা রিফ্রেশ হয়ে যায়। আপনার ডেটা উবে যায়। আপনাকে আবার শুরু করতে হয়। আপনি অ্যাপটা বন্ধ করে দেন, আর কখনো ফিরে আসেন না।
আপনার অ্যাপ যদি অফলাইন-ফার্স্ট হয়, তাহলে গল্পটা অন্যরকম: আপনি টাইপ করতেই থাকেন। আপনার ডেটা নিরাপদ থাকে। WiFi ফিরে এলে (তিন মিনিট পরেই হোক বা তিন দিন পরে), সবকিছু সিঙ্ক হয়ে যায়। এক লাইনে অফলাইন-ফার্স্ট ডিজাইন মানে এটাই: ইন্টারনেট সংযোগ ছাড়াও অ্যাপ কাজ করতে থাকে, আপনার পরিবর্তনগুলো স্থানীয়ভাবে সংরক্ষণ করে, আর আপনি অনলাইনে ফেরার সঙ্গে সঙ্গেই সেগুলো সিঙ্ক করে দেয়।
বেশিরভাগ অ্যাপ বিল্ডার অফলাইন বিষয়টা এড়িয়ে যায় কারণ এভাবে বানানো সহজ। কিন্তু অফলাইন-ফার্স্ট জটিল কিছু নয়—এটা একটা সচেতন সিদ্ধান্ত। এটাই পার্থক্য গড়ে দেয় এমন একটা অ্যাপের মধ্যে যাকে মানুষ বারবার হাতে তুলে নেয়, আর এমন একটার মধ্যে যাকে তারা ডিলিট করে দেয়।
আপনার অ্যাপের ইন্টারনেট চলে গেলে আসলে কী হয়?
আপনার অ্যাপের ইন্টারনেট চলে গেলে, হয় সেটা কাজ করতে থাকে, নয় করে না—মাঝামাঝি কিছু নেই। আর সংযোগ হারানো মোটেও বিরল কিছু নয়: বিমানে থাকা একজন ব্যবহারকারীর ইন্টারনেট নেই, টানেলের মধ্যে থাকা একজনের সিগন্যাল নেই, গ্রামীণ কোনো অনুষ্ঠানস্থলে থাকা একজনের কভারেজ থেকে থেকে আসে-যায়, যার বাসার রাউটার রাত তিনটায় রিবুট হয় তার WiFi মরে পড়ে থাকে, আর যে ফোনের হটস্পটে টিথার করে আছে তার কোটা শেষ হয়ে যায়।
এসব প্রতিটা ক্ষেত্রেই, আপনার অ্যাপ হয় কাজ করে, নয়তো করে না।
আমরা একটা ফ্রিল্যান্সার টাইম-ট্র্যাকিং অ্যাপ বানিয়েছিলাম। সেটা অফলাইনে ক্র্যাশ করত। একজন ফ্রিল্যান্সার (যিনি সিগন্যালহীন নির্মাণ সাইটে এটা ব্যবহার করতেন) সেটা ব্যবহার করা বন্ধ করে দিলেন—তিনি ফিরে গেলেন পেন্সিল আর কাগজে, কারণ পেন্সিল অন্তত সব জায়গায় কাজ করে। তিন মাস পরে, অফলাইন মোড আসার পর, তিনি ফিরে এলেন আর আর কখনো ছেড়ে যাননি।
কলাকৌশলটা খুবই সরল: ইন্টারনেট বন্ধ থাকলে কাজ স্থানীয়ভাবে সংরক্ষণ করুন, সংযোগ ফিরলে সেটা সিঙ্ক করুন। ব্যাপারটা এটুকুই।
অফলাইনের বিভিন্ন ধরন কী কী?
যে তিন ধরনের অফলাইনের জন্য আপনার পরিকল্পনা থাকা উচিত: ইচ্ছাকৃত, আকস্মিক, আর ধীর—আর প্রতিটার জন্য দরকার আলাদা সমাধান।
ইচ্ছাকৃত অফলাইন — ব্যবহারকারী নিজেই অফলাইনে কাজ করার সিদ্ধান্ত নিয়েছেন। তিনি বিমানে আছেন, অথবা জানেন যে WiFi খারাপ। তিনি জানেন পরে সিঙ্ক হবে। বানানো সবচেয়ে সহজ: শুধু খসড়াগুলো স্থানীয়ভাবে সংরক্ষণ করুন আর সংযোগ ফিরলে সেগুলো পাঠিয়ে দিন।
আকস্মিক অফলাইন — ইন্টারনেট হঠাৎ চলে গেছে। ব্যবহারকারী তখন কিছু একটার মাঝখানে ছিলেন। বাক্যের মাঝখানে তাকে থামিয়ে দিলে তিনি বিরক্ত হবেন। সমাধান একই (খসড়া স্থানীয়ভাবে সংরক্ষণ), কিন্তু UX-টা হবে আরও সহানুভূতিশীল: তাকে দেখান যে অ্যাপ কাজ করে চলেছে, আর তিনি আবার অনলাইনে ফিরলে সেটা জানিয়ে দিন।
ধীর অফলাইন — সংযোগ আছে, কিন্তু এতটাই ধীর যে না থাকারই মতো। একজন গ্রাহক ফর্ম পূরণ করেন, সাবমিট চাপেন, তারপর সাবমিশন শেষ হতে ২০ সেকেন্ড অপেক্ষা করেন। ততক্ষণে তিনি ভাবেন কিছু একটা ভেঙে গেছে, আর আবার সাবমিট চাপেন (এবার আপনি পান একটা ডুপ্লিকেট)। টেস্ট করা সবচেয়ে কঠিন এই ধরনটাই, তবে সমাধানটা সৎ: হয় তাকে দেখান যে কাজ চলছে (একটা স্পিনার), নয়তো খসড়া না হারিয়ে তাকে অন্য পেজে যেতে দিন।
আপনার বিল্ডারকে কীভাবে অফলাইন মোড চাইবেন?
এটা একটা বড় ফিচার হিসেবে নয়, বরং টুকরো টুকরো করে চাইবেন—অফলাইন-ফার্স্ট একটা ডিজাইন দর্শন, একটা চেকবক্স নয়। আপনার বিল্ডারের কাছে নিয়ে যাওয়ার মতো পাঁচটা নির্দিষ্ট অনুরোধ এখানে দেওয়া হলো:
-
খসড়া স্থানীয়ভাবে সংরক্ষণ করুন: “কেউ যখন কোনো ফর্ম বা নোট পূরণ করে, সেটা তার ফোনে/ব্রাউজারে সংরক্ষণ করুন। সে পেজ রিফ্রেশ করলেও ফর্মটা যেন ভরাই থাকে।” পরীক্ষা করুন এভাবে: কিছু একটা লিখুন, ব্রাউজার ট্যাব বন্ধ করুন, আবার খুলুন—দেখুন ফর্মটা তখনও সেখানে আছে কিনা।
-
অফলাইনে কাজ করুন: “ইন্টারনেট না থাকলে, অ্যাপে যা ডেটা আছে সেটা দেখান, ব্যবহারকারীকে সেটা পড়তে ও পরিবর্তন করতে দিন, আর ইন্টারনেট ফিরলে সিঙ্কের জন্য পরিবর্তনগুলো সারিবদ্ধ করে রাখুন।” পরীক্ষা করুন এভাবে: আপনার WiFi বন্ধ করুন, কাজের মতো কিছু একটা করার চেষ্টা করুন, তারপর WiFi আবার চালু করে দেখুন ডেটা সিঙ্ক হচ্ছে কিনা।
-
নিঃশব্দে সিঙ্ক করুন: “পরিবর্তন সিঙ্ক হওয়ার সময় বড়সড় কোনো ডায়ালগ দেখাবেন না। ওপরে একটা ছোট্ট ইন্ডিকেটর দেখান, যেমন ‘সংরক্ষণ হচ্ছে…’, আর কাজ শেষ হলে সেটা মিলিয়ে যাক। সংরক্ষণ ব্যর্থ হলে, পরিবর্তনটা স্থানীয়ভাবে রেখে দিন আর পরে আবার চেষ্টা করুন।”
-
সত্যিটা দেখান: “ব্যবহারকারীকে জানান কোন ডেটা তাজা (সার্ভার থেকে সবে সিঙ্ক হয়েছে) আর কোনটা শুধু স্থানীয় (এখনো সিঙ্ক হয়নি)। একটা ছোট ইন্ডিকেটর বা লেবেল ব্যবহার করুন—ভয় দেখানোর দরকার নেই, শুধু সৎ থাকুন।”
-
একটা মূল কাজ, আগে স্থানীয়ভাবে: “ব্যবহারকারী যে মূল কাজটার জন্য আসেন (বুকিং দেখা, নোট লেখা, সময় ট্র্যাক করা) সেটা অফলাইনে কাজ করা উচিত। থাকলে ভালো এমন জিনিসগুলোর (সব পুরনো রেকর্ড খোঁজা, লাইভ প্রাইসিং টানা) জন্য ইন্টারনেট লাগতেই পারে।“
বাস্তব গল্প
বিয়ের প্ল্যানার RSVP ব্যবস্থাপনার জন্য একটা অ্যাপ বানিয়েছিলেন। তিনি লিস্ট প্রিন্ট করতেন, অনুষ্ঠানস্থলে ঘুরে ঘুরে জবাব চেক করতেন। কিন্তু ভেন্যুর WiFi ছিল ভয়াবহ। তিনি অফলাইন-ফার্স্ট চাইলেন: চেকলিস্ট স্থানীয়ভাবে সংরক্ষণ, বাড়ি ফিরে সিঙ্ক। এখন এটাই তার প্রধান হাতিয়ার—ফোনে সিগন্যাল থাকলেও, ডেটার জন্য অপেক্ষা না করেই অ্যাপ কাজ করে। তিনি এটা খুব পছন্দ করেন।
স্কুলের শিক্ষিকা ছাত্রছাত্রীদের অগ্রগতি ট্র্যাক করতে একটা অ্যাপ ব্যবহার করতেন। ছাড়া-ছাড়া কভারেজ থাকা ক্লাসরুম থেকে ক্লাসরুমে যাওয়ার সময় তার এডিট বারবার হারিয়ে যেত। অফলাইন মোড মানে তিনি নির্ভয়ে কাজ করতে পারতেন, পরে সিঙ্ক করতে পারতেন, আর তাকে বেছে নিতে হতো না তার ফোন আর কাজের মধ্যে। একটামাত্র পরিবর্তন, কিন্তু আস্থায় বিশাল লাফ।
বীমার অ্যাডজাস্টার ঘটনাস্থলেই ক্ষতির রিপোর্ট পূরণ করতেন (কিছু গ্রামীণ এলাকায় সিগন্যালই নেই)। আগের অ্যাপে সাবমিট করতে ইন্টারনেট লাগত। আমরা অফলাইন খসড়া যোগ করলাম। এখন তিনি ফর্ম পূরণ করেন, অফলাইনেই সাবমিট করেন, আর ফেরার পথে গাড়িতে বসে সিঙ্ক হয়ে যায়। আর কখনো বলতে হয় না “বাড়ি না পৌঁছানো পর্যন্ত আমি কিছুই সাবমিট করতে পারি না।”
এই তিনটাই “শুধু ভালো WiFi জোগাড় করুন” বলে সমাধান করা যেত, কিন্তু বাস্তব দুনিয়া অমন করে চলে না। ভালো সিঙ্কের চেয়েও অফলাইন-ফার্স্ট এনে দিয়েছিল আস্থার এক বড় পরিবর্তন।
অফলাইন-ফার্স্ট কি আপনার অ্যাপকে দ্রুততর করে?
হ্যাঁ—অফলাইন-ফার্স্ট অ্যাপ দ্রুততর মনে হয় কারণ সার্ভারের জন্য অপেক্ষা করতে হয় না। আপনি টাইপ করেন, অ্যাপ সেটা স্থানীয়ভাবে সংরক্ষণ করে (তাৎক্ষণিক), আর পেছনে পেছনে সিঙ্ক হতে থাকে। কোনো স্পিনার নেই, কোনো অপেক্ষা নেই। ইন্টারনেট থাকলেও অভিজ্ঞতাটা আরও ঝরঝরে, কারণ সার্ভার পথে দাঁড়িয়ে থাকে না।
শুধু-অনলাইনে-চলা অ্যাপকে প্রতিটা পরিবর্তন নিশ্চিত করার জন্য সার্ভারের জন্য অপেক্ষা করতেই হয়। একটা কি-স্ট্রোক → নেটওয়ার্ক রিকোয়েস্ট → সার্ভার ভ্যালিডেশন → রেসপন্স → ব্যবহারকারীকে দেখানো। এটা সাধারণত ঠিকঠাকই চলে, কিন্তু ধীর নেটওয়ার্কে (বা ধীর সার্ভারসহ মোবাইলে), প্রতিটা ইন্টার্যাকশন আটকে যায়।
অফলাইন-ফার্স্ট বানাতে খরচ কেমন?
অফলাইন-ফার্স্টের জন্য শুরুতেই কিছুটা ইঞ্জিনিয়ারিং সময় খরচ হয়। আপনার বিল্ডারকে ভাবতে হবে:
- স্থানীয় স্টোরেজ: ফোনে/ব্রাউজারে ডেটা কীভাবে সংরক্ষণ করা যায় যাতে অ্যাপ ক্র্যাশ করলেও সেটা মুছে না যায়। কঠিন নয়, তবে সচেতনভাবে করতে হয়।
- কনফ্লিক্ট রেজোলিউশন: ব্যবহারকারী অফলাইনে একটা ফিল্ড পরিবর্তন করলেন, তারপর অন্য কেউ (বা অন্য একটা ডিভাইস) সিঙ্কের আগেই একই ফিল্ড বদলে ফেললেন—কোনটা জিতবে? সাধারণত যেটা অনলাইনে হয়েছে সেটাই (কারণ সেটা বেশি তাজা), তবে ব্যবহারকারীকে সতর্ক করা উচিত, চমকে দেওয়া নয়। বাস্তব উদাহরণ: দুটো ফোন একই নোট অফলাইনে এডিট করছে, দুটোই অনলাইনে এলো—যেটা দ্বিতীয়বার সিঙ্ক হয় সেটাই জেতে, প্রথম ব্যবহারকারী দেখেন “আপনার সংস্করণটা পুরনো ছিল, এই যে বর্তমান সংস্করণ।”
- পুরনো ডেটা: ব্যবহারকারী যদি তিন দিন অফলাইনে থাকেন, সংযোগ ফিরলে অ্যাপ কি চুপচাপ সব রিফ্রেশ করে দেবে, নাকি আগে জিজ্ঞেস করবে? জিজ্ঞেস করাটাই নিরাপদ—পুরনো ডেটার সাথে হয়তো সংরক্ষণ না হওয়া কোনো পরিবর্তন জড়িয়ে থাকতে পারে।
এসব নিয়ে ভাবাটা বিনামূল্যে নয়, তবে আপনি যতটা কঠিন ভাবছেন, ততটা কঠিন নয়।
এর ফল: মানুষ যে অ্যাপে ভরসা করে। অফলাইন-ফার্স্ট অ্যাপ কোনো অজুহাত দেয় না (“এটা ব্যবহার করতে ইন্টারনেট লাগবে”) আর আপনার কাজ হারায় না। এটাই বিশাল ব্যাপার।
আপনার অ্যাপ অফলাইনে কাজ করে কিনা কীভাবে পরীক্ষা করবেন?
এটা পরীক্ষা করতে বিমানে চড়ার দরকার নেই—আপনার ফোনের এয়ারপ্লেন মোডই আপনার পরীক্ষাগার। এভাবে করুন:
- কিছু খুলুন আর পূরণ করুন: স্বাভাবিক কিছু একটা করুন (একটা ফর্ম পূরণ করুন, একটা নোট যোগ করুন)।
- অফলাইনে যান: এয়ারপ্লেন মোড চালু করুন বা WiFi বন্ধ করে দিন।
- কাজ চালিয়ে যান: আবার একই কাজ করার চেষ্টা করুন। অ্যাপ যদি আপত্তি করে, বুঝবেন অফলাইন-ফার্স্ট এখনো নেই। অ্যাপ কাজ করলে, ভালো। যদি বিভ্রান্তিকর মনে হয়, আপনার বিল্ডারের কাছে একটা স্পষ্ট “আপনি অফলাইনে আছেন” ইন্ডিকেটর চান।
- আবার অনলাইনে ফিরুন: এয়ারপ্লেন মোড বন্ধ করে দিন।
- সিঙ্ক পরীক্ষা করুন: আপনার পরিবর্তনগুলো কি নিজে থেকেই সিঙ্ক হয়ে গেল? যদি “সিঙ্ক” বাটনে চাপতে হয় বা রিফ্রেশ করতে হয়, বুঝবেন এখনো পুরোপুরি ঠিক হয়নি।
সেরা অফলাইন অ্যাপগুলো এতটাই স্বাভাবিক লাগে যে আপনি খেয়ালই করেন না সেগুলো অফলাইনে চলছে—আপনি শুধু খেয়াল করেন অ্যাপটা তখনও কাজ করছে।
আপনার বানানো অ্যাপের কি সত্যিই অফলাইনে কাজ করার দরকার আছে? যদি উত্তর হয় “আমার ব্যবহারকারীদের ইন্টারনেট মাঝেমধ্যে থাকে-থাকে না, বা তারা সিগন্যালহীন জায়গায় কাজ করেন,” তাহলে হ্যাঁ। যদি হয় “তারা সবসময় স্থিতিশীল WiFi-তে থাকে,” তাহলে আপাতত এটা বাদ দিতে পারেন। কিন্তু যেই মুহূর্তে কেউ বলবে “আমার কাজ হারিয়ে গেছে,” তখনই মনে হবে, ইশ, আগেই এটা চাইলে ভালো হতো।