چرا اپلیکیشن ساخته‌شده با هوش مصنوعی شما کند به نظر می‌رسد (حتی وقتی که کند نیست): توهم زمان انتظار

یک اپلیکیشن زمانی کند به نظر می‌رسد که کاربران در حین انتظار هیچ بازخوردی دریافت نمی‌کنند، نه به این دلیل که خود بارگذاری طولانی است. راه‌حل: بازخورد در کمتر از ۱۰۰ میلی‌ثانیه، جای‌نگه‌دارهای اسکلتی به‌جای صفحه‌های خالی، و نشانگرهای پیشرفت برای انتظارهایی بیش از سه ثانیه.

اپلیکیشن شما داده‌ها را در ۱.۲ ثانیه واکشی می‌کند. یک انسان می‌تواند ۱۰۰ میلی‌ثانیه را درک کند. شما ۱۲ برابر سریع‌تر از ادراک انسانی هستید و بازهم کند به نظر می‌رسد. چرا؟

تأخیر ادراکی — یعنی اینکه یک اپلیکیشن چقدر کند به نظر کاربر می‌رسد — ارتباط چندانی با زمان واقعی بارگذاری ندارد. آنچه اهمیت دارد این است که آیا کاربر می‌فهمد در حین انتظار چه اتفاقی در حال رخ دادن است یا نه. کند و سریع بودن دروغ‌اند؛ آنچه واقعی است بازخورد است.

چرا اپلیکیشن من حتی وقتی سریع است کند به نظر می‌رسد؟

یک اپلیکیشن به این دلیل کند به نظر می‌رسد که چه اتفاقی در حین انتظار می‌افتد، نه به این دلیل که خودِ انتظار واقعاً چقدر طول می‌کشد. سه شکاف مشخص باعث این حس می‌شوند: نبود بازخورد در حین بارگذاری، صفحه‌ای خالی به‌جای چیدمانی قابل‌مشاهده، و نبود حس پیشرفت در عملیات‌های طولانی.

۱. نبود بازخورد در حین انتظار.

یک فرم ارسال می‌شود. دکمه غیرفعال می‌شود (این یک رویه‌ی استاندارد است که از کلیک دوباره جلوگیری می‌کند). هیچ اتفاق دیگری نمی‌افتد. یک ثانیه می‌گذرد. دو ثانیه. کاربر نمی‌داند آیا در حال پردازش است، گیر کرده، اینترنتش قطع شده یا کرش کرده. بعد از دو ثانیه سکوت، مغز انسان به بستن تب فکر می‌کند.

به همین دلیل است که کند به نظر می‌رسد، در حالی که ۱.۲ ثانیه برای یک محاسبه‌ی واقعی زمان معقولی است. اضطراب کاربر است که سکوت را پر می‌کند.

۲. صفحه‌های خالی.

یک صفحه بارگذاری می‌شود. تیتر رندر می‌شود. بعد هیچ اتفاقی برای ۸۰۰ میلی‌ثانیه نمی‌افتد، درحالی‌که اپلیکیشن فهرست زیر آن را واکشی می‌کند. صفحه خراب به نظر می‌رسد — چیدمانی ناقص، بدون جای‌نگه‌دار، فقط… در حال بارگذاری. یک انتظار ۸۰۰ میلی‌ثانیه‌ای در ادراک کاربر به یک مکث ۵ ثانیه‌ای تبدیل می‌شود، چون چشم کاربر ناقص‌بودن را به‌عنوان شکست می‌بیند.

۳. نبود حس پیشرفت.

یک عملیات طولانی شروع می‌شود. «در حال بارگذاری…» ظاهر می‌شود. بعد چی؟ آیا در ۱۰ درصد است یا ۹۰ درصد؟ آیا کاربر وقت دارد یک قهوه بخورد یا کار در سه ثانیه تمام می‌شود؟ نبود پیشرفت اضطراب ایجاد می‌کند. سریع + مبهم = کندتر از کند + شفاف به نظر می‌رسد.

چطور اپلیکیشنی را که کند به نظر می‌رسد درست کنیم؟

سه راه‌حل، سه علت بالا را برطرف می‌کنند: نمایش بازخورد در همان لحظه‌ای که کاربر عملی انجام می‌دهد، پر کردن فضای خالی با جای‌نگه‌دار در حین بارگذاری داده‌ها، و نمایش پیشرفت واقعی برای هر کاری که بیش از چند ثانیه طول می‌کشد.

راه‌حل ۱ — چیزی را فوراً نشان بده

یک حالت بارگذاری را پیش از واکشی داده قرار بده. یک صفحه‌ی اسکلتی، یک اسپینر، یا پیامی مثل «در حال فکر کردن…». هر چیزی که بگوید «لمس تو را دریافت کردم، دارم کار می‌کنم».

مثال: فرم رزرو ارسال می‌شود. بلافاصله، متن دکمه به «در حال بررسی موجودی…» تغییر می‌کند و یک اسپینر کوچک نشان می‌دهد. تازه بعد از آن واکشی شروع می‌شود. کاربر فوراً پاسخی به عملش می‌بیند، هرچند کار واقعی ۱.۲ ثانیه طول می‌کشد. همین بازخورد آنی باعث می‌شود انتظار کوتاه به نظر برسد.

درخواست از بیلدر: بعد از اینکه کاربر روی دکمه‌ی اصلی کلیک کرد، متن دکمه را تغییر بده و پیش از ارسال درخواست، یک حالت بارگذاری اضافه کن. این فقط یک دستور است.

آزمایش: روی گوشی‌ات، عمل را فعال کن. بازخورد باید در کمتر از ۱۰۰ میلی‌ثانیه ظاهر شود. اگر ۵۰۰ میلی‌ثانیه سکوت پیش از حالت بارگذاری ببینی، کاربر اپلیکیشن را مقصر می‌داند.

راه‌حل ۲ — فضای خالی را پر کن

به‌جای یک صفحه‌ی سفید با «در حال بارگذاری…» در گوشه، شکل چیزی را که قرار است بیاید نشان بده.

داستان واقعی: اپلیکیشن رزرو یک برنامه‌ریز عروسی، فهرست تاریخ‌های در دسترس را واکشی می‌کرد. به‌جای یک صفحه‌ی خالی، ردیف‌های جای‌نگه‌دار نشان بده — پنج مستطیل خاکستری در جایی که تاریخ‌ها قرار خواهند گرفت. وقتی تاریخ‌های واقعی بارگذاری می‌شوند، جایگزین آن‌ها می‌شوند. مغز کاربر این را «آنی» درک می‌کند، چون صفحه هرگز ناقص به نظر نرسیده.

درخواست از بیلدر: پیش از واکشی داده‌ی واقعی، یک نسخه‌ی جای‌نگه‌دار (اسکلتی) از فهرست یا جدول اضافه کن. وقتی داده می‌رسد، اسکلت را با محتوای واقعی جایگزین کن. بله، این یک بخش دیگر است که باید ساخته شود. اما ارزشش را دارد، چون زمان انتظار ادراک‌شده را نصف می‌کند.

آزمایش: صفحه را روی یک اتصال کند بارگذاری کن (موبایل، محدودشده به ۴G). یک صفحه‌ی خالی می‌بینی یا یک شکل؟ شکل برنده است.

راه‌حل ۳ — پیشرفت را نشان بده

برای عملیات‌هایی که بیش از سه ثانیه طول می‌کشند، نشان بده تا کجا پیش رفته‌ای.

داستان واقعی: یک فرم، ۵۰۰ ردیف داده را در یک صفحه‌گسترده خروجی می‌گیرد. این کار ۴ ثانیه طول می‌کشد. بدون نشان دادن پیشرفت: «در حال خروجی گرفتن…» (حس ۱۵ ثانیه می‌دهد، کاربر لغو می‌کند). با نشان دادن پیشرفت: «در حال خروجی گرفتن ردیف ۱۲۷ از ۵۰۰» (هر ۲۰۰ میلی‌ثانیه به‌روزرسانی می‌شود، حس ۲ ثانیه می‌دهد، هرچند کار واقعی تغییری نکرده).

نکته‌ی صادقانه: اگر واقعاً نمی‌دانی چقدر طول می‌کشد، نوار پیشرفت را جعل نکن. نواری تقلبی که روی ۶۷ درصد می‌ماند، بیشتر از یک بازخورد صادقانه‌ی «در حال کار» به اعتماد کاربر آسیب می‌زند. پیشرفت واقعی (اگر بتوانی محاسبه‌اش کنی) همیشه بر پیشرفت تقلبی برتری دارد.

درخواست از بیلدر: برای هر عملیاتی که بیش از ۲ ثانیه طول می‌کشد، به‌روزرسانی‌های پیشرفت ارسال کن. برای آپلود فایل، نشان بده چند مگابایت ارسال شده. برای واکشی یک فهرست، «۵۰ مورد بارگذاری شد، در حال دریافت بیشتر…» نشان بده. حتی اگر مجموع را ندانی، دانستن اینکه اتفاقی در حال رخ دادن است ادراک را تغییر می‌دهد.

آزمایش: شبکه‌ات را به ۳G کند کن و تماشا کن. حس گیر کردن می‌دهد یا حس پیشرفت؟


چطور بسنجیم اپلیکیشن‌مان کند به نظر می‌رسد یا نه؟

آزمایش غریبه را انجام بده: اپلیکیشن را روی گوشی یک نفر دیگر بارگذاری کن، بگذار بدون کمک تو روی عمل اصلی لمس کند، و بپرس که آیا سریع بود یا کند.

اگر گفت کند بود، سه چیز را بررسی کن:

  1. آیا در کمتر از ۱۰۰ میلی‌ثانیه بازخوردی دید؟ (تغییر متن، اسپینر، تغییر حالت)
  2. آیا در حین انتظار شکل صفحه را دید؟ (اسکلت، جای‌نگه‌دار، چیزی)
  3. آیا می‌دانست کار تا کجا پیش رفته؟ (برای انتظارهای بیش از ۳ ثانیه)

اگر پاسخ هر کدام «نه» بود، اول همان یکی را درست کن.


سرعت یک عدد نیست. یک فراخوانی API که ۱.۲ ثانیه طول می‌کشد ولی هیچ بازخوردی ندارد، کندتر از یک عملیات ۳ ثانیه‌ای به نظر می‌رسد که در آن هر نیم‌ثانیه پیشرفتی می‌بینی. تفاوت در خود اپلیکیشن نیست — در گفتگویی است که میان اپلیکیشن و کسی که از آن استفاده می‌کند شکل می‌گیرد.

بازخورد را درست کن. وقتی مردم بفهمند چه اتفاقی در حال رخ دادن است، دیگر اپلیکیشن را مقصرِ کندی نمی‌دانند.