আপনার AI-নির্মিত অ্যাপ কেন স্লো মনে হয় (আসলে না হলেও): অপেক্ষার সময়ের এক বিভ্রম

একটি অ্যাপ স্লো মনে হয় যখন অপেক্ষার সময় ব্যবহারকারী কোনো ফিডব্যাক পান না, লোড হতে বেশি সময় লাগে বলে নয়। ১০০ মিলিসেকেন্ডের মধ্যে ফিডব্যাক, ফাঁকা স্ক্রিনের বদলে স্কেলিটন প্লেসহোল্ডার, আর তিন সেকেন্ডের বেশি অপেক্ষার জন্য প্রোগ্রেস ইন্ডিকেটর দিয়ে এটা ঠিক করুন।

আপনার অ্যাপ ডেটা আনতে সময় নেয় ১.২ সেকেন্ড। একজন মানুষ ১০০ মিলিসেকেন্ড অনুভব করতে পারে। আপনি মানুষের অনুভূতির চেয়ে ১২ গুণ দ্রুত, তারপরও এটা স্লো মনে হয়। কেন?

পার্সিভড লেটেন্সি — অ্যাপ ব্যবহারকারীর কাছে কতটা স্লো মনে হয় — এর সাথে প্রকৃত লোড টাইমের তেমন কোনো সম্পর্ক নেই। আসল বিষয় হলো, অপেক্ষার সময় কী ঘটছে সেটা ব্যবহারকারী বুঝতে পারছেন কিনা। স্লো আর ফাস্ট মিথ্যা কথা; ফিডব্যাকই আসল সত্যি।

আমার অ্যাপ ফাস্ট হওয়া সত্ত্বেও কেন স্লো মনে হয়?

একটা অ্যাপ স্লো মনে হয় অপেক্ষার সময় কী ঘটছে তার কারণে, অপেক্ষাটা আসলে কতক্ষণ স্থায়ী তার কারণে নয়। তিনটি নির্দিষ্ট ফাঁক এর কারণ: কিছু লোড হওয়ার সময় কোনো ফিডব্যাক না থাকা, দৃশ্যমান লেআউটের বদলে ফাঁকা স্ক্রিন, আর দীর্ঘ অপারেশনে অগ্রগতির কোনো আভাস না থাকা।

১. অপেক্ষার সময় কোনো ফিডব্যাক নেই।

একটা ফর্ম সাবমিট হয়। বাটনটা নিষ্ক্রিয় হয়ে যায় (এটা স্ট্যান্ডার্ড প্র্যাকটিস, ডাবল-ক্লিক ঠেকায়)। আর কিছুই হয় না। এক সেকেন্ড পার হয়। দুই সেকেন্ড। ব্যবহারকারী জানেন না এটা প্রসেস হচ্ছে, আটকে গেছে, ইন্টারনেট চলে গেছে, নাকি ক্র্যাশ করেছে। দুই সেকেন্ডের নীরবতার পর একজন মানুষের মস্তিষ্ক ট্যাব বন্ধ করার কথা ভাবতে শুরু করে।

এই কারণেই ১.২ সেকেন্ড একটা প্রকৃত হিসাবের জন্য যুক্তিসঙ্গত সময় হওয়া সত্ত্বেও স্লো মনে হয়। ব্যবহারকারীর দুশ্চিন্তাই নীরবতাটা পূরণ করে দেয়।

২. ফাঁকা স্ক্রিন।

একটা পেজ লোড হয়। হেডলাইন রেন্ডার হয়। তারপর ৮০০ মিলিসেকেন্ড কিছুই না, যখন অ্যাপ নিচের লিস্টটা আনতে থাকে। পেজটা ভাঙা মনে হয় — অসম্পূর্ণ লেআউট, কোনো প্লেসহোল্ডার নেই, শুধু… লোডিং। ৮০০ মিলিসেকেন্ডের অপেক্ষা পরিণত হয় ৫ সেকেন্ডের অনুভূত বিরতিতে, কারণ ব্যবহারকারীর চোখ অসম্পূর্ণতাকে ব্যর্থতা হিসেবে দেখে।

৩. অগ্রগতির কোনো আভাস নেই।

একটা দীর্ঘ অপারেশন শুরু হয়। “লোড হচ্ছে…” দেখা যায়। তারপর কী? এটা কি ১০% নাকি ৯০%-এ আছে? ব্যবহারকারীর কি এক কাপ কফি খাওয়ার সময় আছে, নাকি তিন সেকেন্ডেই শেষ হয়ে যাবে? প্রোগ্রেসের অনুপস্থিতি দুশ্চিন্তা তৈরি করে। দ্রুত + রহস্যময় = ধীর + স্বচ্ছর চেয়েও বেশি স্লো মনে হয়।

যে অ্যাপ স্লো মনে হচ্ছে, সেটা কীভাবে ঠিক করবেন?

উপরের তিনটা কারণের জন্য তিনটা সমাধান আছে: ব্যবহারকারী কিছু করার সাথে সাথেই ফিডব্যাক দেখান, ডেটা লোড হওয়ার সময় ফাঁকা জায়গা প্লেসহোল্ডার দিয়ে ভরে দিন, আর কয়েক সেকেন্ডের বেশি সময় নেয় এমন যেকোনো কিছুর জন্য আসল প্রোগ্রেস দেখান।

সমাধান ১ — সাথে সাথে কিছু একটা দেখান

ডেটা আনার আগেই একটা লোডিং স্টেট বসিয়ে দিন। একটা স্কেলিটন স্ক্রিন, একটা স্পিনার, একটা “ভাবছি…” মেসেজ। যেকোনো কিছু যা বলে “আমি তোমার ট্যাপ পেয়েছি, কাজ করছি।”

উদাহরণ: একটা বুকিং ফর্ম সাবমিট হয়। সাথে সাথেই বাটনের টেক্সট বদলে যায় “উপলব্ধতা চেক করা হচ্ছে…”-এ আর একটা ছোট স্পিনার দেখায়। তারপরই ডেটা আনা শুরু হয়। প্রকৃত কাজটা ১.২ সেকেন্ড সময় নিলেও ব্যবহারকারী তাদের অ্যাকশনের প্রতিক্রিয়া দেখেন সাথে সাথে। এই তাৎক্ষণিক ফিডব্যাক অপেক্ষাটাকে ছোট মনে করায়।

বিল্ডারকে যা বলবেন: ব্যবহারকারী মূল বাটনে ক্লিক করার পর, রিকোয়েস্ট পাঠানোর আগে বাটনের টেক্সট বদলে দিন আর একটা লোডিং স্টেট যোগ করুন। এটা একটা মাত্র নির্দেশ।

পরীক্ষা: আপনার ফোনে, অ্যাকশনটা ট্রিগার করুন। ফিডব্যাক ১০০ মিলিসেকেন্ডের মধ্যে দেখা যাওয়া উচিত। লোডিং স্টেট আসার আগে যদি ৫০০ মিলিসেকেন্ড নীরবতা দেখেন, ব্যবহারকারী অ্যাপকেই দোষ দেবেন।

সমাধান ২ — ফাঁকা জায়গা ভরে দিন

কোণায় “লোড হচ্ছে…” লেখা সাদা স্ক্রিনের বদলে, যা আসছে তার আকৃতি দেখান।

বাস্তব ঘটনা: একটা বিয়ে-প্ল্যানিং অ্যাপ উপলব্ধ তারিখের লিস্ট আনছিল। ফাঁকা পেজের বদলে, প্লেসহোল্ডার সারি দেখান — পাঁচটা ধূসর আয়তক্ষেত্র যেখানে তারিখগুলো বসবে। আসল তারিখ লোড হলে, সেগুলো বদলে যায়। ব্যবহারকারীর মস্তিষ্ক এটাকে “তাৎক্ষণিক” মনে করে, কারণ পেজটা কখনোই অসম্পূর্ণ ছিল না।

বিল্ডারকে যা বলবেন: আসল ডেটা আনার আগে লিস্ট বা টেবিলের একটা প্লেসহোল্ডার (স্কেলিটন) ভার্সন যোগ করুন। ডেটা এসে পৌঁছালে, স্কেলিটনের জায়গায় আসল কনটেন্ট বসিয়ে দিন। হ্যাঁ, এটা বানাতে আরেকটু বেশি কাজ। তবে এটা করার মূল্য আছে, কারণ এতে অনুভূত অপেক্ষার সময় অর্ধেক কমে যায়।

পরীক্ষা: স্লো কানেকশনে (মোবাইল, 4G-তে থ্রটল করা) পেজটা লোড করুন। আপনি কি ফাঁকা পেজ দেখছেন, নাকি একটা আকৃতি? আকৃতিটাই জেতে।

সমাধান ৩ — অগ্রগতি দেখান

তিন সেকেন্ডের বেশি সময় নেয় এমন অপারেশনের জন্য, আপনি কতদূর এগিয়েছেন সেটা দেখান।

বাস্তব ঘটনা: একটা ফর্ম ৫০০টা সারির ডেটা একটা স্প্রেডশিটে এক্সপোর্ট করে। এতে ৪ সেকেন্ড লাগে। প্রোগ্রেস ছাড়া: “এক্সপোর্ট হচ্ছে…” (মনে হয় ১৫ সেকেন্ড, ব্যবহারকারী বাতিল করে দেয়)। প্রোগ্রেস সহ: “সারি ৫০০-এর মধ্যে ১২৭ এক্সপোর্ট হচ্ছে” (প্রতি ২০০ মিলিসেকেন্ডে আপডেট হয়, মনে হয় ২ সেকেন্ড, যদিও প্রকৃত কাজটা একই আছে)।

সৎ সতর্কতা: যদি আপনি সত্যিই না জানেন এতে কতক্ষণ লাগবে, প্রোগ্রেস বার নকল করবেন না। ৬৭%-এ থেমে থাকা একটা নকল বার সৎ “কাজ চলছে” ফিডব্যাকের চেয়েও বেশি বিশ্বাস ভাঙে। আসল প্রোগ্রেস (যদি আপনি হিসাব করতে পারেন) সবসময় নকল প্রোগ্রেসের চেয়ে ভালো।

বিল্ডারকে যা বলবেন: ২ সেকেন্ডের বেশি সময় নেয় এমন যেকোনো অপারেশনের জন্য, প্রোগ্রেস আপডেট পাঠান। ফাইল আপলোডের জন্য, কত MB পাঠানো হয়েছে সেটা দেখান। লিস্ট আনার জন্য, “৫০টা আইটেম লোড হয়েছে, আরও আনা হচ্ছে…” দেখান। মোট সংখ্যা না জানলেও, কিছু একটা ঘটছে জানাটাই ধারণা বদলে দেয়।

পরীক্ষা: আপনার নেটওয়ার্ক 3G-তে ধীর করে দেখুন। এটা কি আটকে আছে মনে হয়, নাকি এগিয়ে যাচ্ছে মনে হয়?


আপনার অ্যাপ স্লো মনে হচ্ছে কিনা কীভাবে পরীক্ষা করবেন?

স্ট্রেঞ্জার টেস্ট চালান: আপনার অ্যাপটা অন্য কারো ফোনে লোড করুন, আপনার সাহায্য ছাড়া তাকে মূল অ্যাকশনটা ট্যাপ করতে দিন, আর জিজ্ঞেস করুন এটা ফাস্ট মনে হলো নাকি স্লো।

তারা যদি বলে স্লো, তিনটা জিনিস দেখুন:

১. তারা কি ১০০ মিলিসেকেন্ডের মধ্যে ফিডব্যাক দেখেছে? (টেক্সট বদল, স্পিনার, স্টেট চেঞ্জ) ২. তারা কি অপেক্ষার সময় পেজের আকৃতি দেখেছে? (স্কেলিটন, প্লেসহোল্ডার, কিছু একটা) ৩. তারা কি জানত এটা কতদূর এগিয়েছে? (৩ সেকেন্ডের বেশি অপেক্ষার জন্য)

এর কোনোটার উত্তর যদি “না” হয়, প্রথমে সেই একটা জিনিস ঠিক করুন।


গতি কোনো সংখ্যা নয়। শূন্য ফিডব্যাকসহ একটা ১.২ সেকেন্ডের API কল, প্রতি আধা সেকেন্ডে প্রোগ্রেস দেখা যায় এমন একটা ৩ সেকেন্ডের অপারেশনের চেয়েও বেশি স্লো মনে হয়। পার্থক্যটা অ্যাপে নেই — এটা অ্যাপ আর যে ব্যবহার করছে তার মধ্যেকার কথোপকথনে।

ফিডব্যাকটা ঠিক করুন। কী ঘটছে সেটা বুঝলে মানুষ আর স্লো বলে দোষ দেয় না।