מה קורה כשהאפליקציה שלכם מאבדת אינטרנט (ואיך להמשיך לעבוד)

כשהאפליקציה שלכם מאבדת אינטרנט, אפליקציה מסוג offline-first לא קורסת ולא נתקעת - היא נותנת לכם להמשיך לעבוד, שומרת את השינויים שלכם באופן מקומי, ומסנכרנת הכול ברגע שאתם חוזרים לרשת, בין אם זה אחרי שלוש דקות ובין אם אחרי שלושה ימים.

ה-WiFi שלכם קורס. אתם ממלאים טופס באפליקציה - חצי מהשדות מלאים, כבר השקעתם בזה חמש דקות. מה קורה?

אם האפליקציה שלכם מחוברת לרשת בלבד, הנה הסיפור: הדף נטען מחדש. הנתונים שלכם נעלמים. אתם מתחילים מהתחלה. אתם סוגרים את האפליקציה, ולעולם לא חוזרים אליה.

אם האפליקציה שלכם היא מסוג offline-first, הסיפור שונה: אתם ממשיכים להקליד. הנתונים שלכם בטוחים. כשה-WiFi חוזר (אחרי שלוש דקות, או אחרי שלושה ימים), הכול מסתנכרן. זה עיצוב offline-first במשפט אחד: האפליקציה ממשיכה לעבוד גם בלי חיבור לאינטרנט, שומרת את השינויים שלכם באופן מקומי, ומסנכרנת אותם ברגע שאתם חוזרים לרשת.

רוב בוני האפליקציות מדלגים על מצב אופליין כי פשוט יותר לבנות בלעדיו. אבל offline-first זה לא מסובך - זה מכוון. זה ההבדל בין אפליקציה שמישהו חוזר אליה לבין אפליקציה שמוחקים.

מה בעצם קורה כשהאפליקציה שלכם מאבדת אינטרנט?

כשהאפליקציה שלכם מאבדת אינטרנט, היא או ממשיכה לעבוד או שלא - אין מצב ביניים. ואובדן חיבור הוא לא נדיר: משתמש בטיסה אין לו אינטרנט, משתמש במנהרה אין לו קליטה, משתמש באירוע בשטח כפרי מקבל כיסוי לא יציב, משתמש שהראוטר הביתי שלו מתאתחל בשלוש לפנות בוקר נתקע על WiFi מת, משתמש שמחובר לנקודה חמה בטלפון מגיע למכסת הנתונים שלו.

בכל המקרים האלה, האפליקציה שלכם או עובדת או לא.

בנינו אפליקציה למעקב שעות עבור פרילנסרים. היא קרסה כשלא היה חיבור. פרילנסר אחד (שהשתמש בה באתרי בנייה בלי קליטה) הפסיק להשתמש בה - הוא עבר לעפרון ונייר, כי לפחות עפרון עובד בכל מקום. שלושה חודשים אחר כך, אחרי שהוספנו מצב אופליין, הוא חזר ולא עזב יותר.

המנגנון פשוט: לשמור עבודה באופן מקומי כשאין אינטרנט, ולסנכרן אותה כשהחיבור חוזר. זה כל הסיפור.

מהם הסוגים השונים של “אופליין”?

יש שלושה סוגים של אופליין שכדאי לתכנן עבורם: מכוון, מופתע, ואיטי - וכל אחד מהם דורש פתרון שונה.

אופליין מכוון - המשתמש בחר לעבוד בלי חיבור. הוא בטיסה, או שהוא יודע שה-WiFi גרוע. הוא מצפה לסנכרן מאוחר יותר. הכי פשוט לבנות: פשוט לשמור טיוטות באופן מקומי ולדחוף אותן כשהחיבור חוזר.

אופליין מפתיע - האינטרנט נפל בלי אזהרה. המשתמש היה באמצע משהו. אם קטעתם אותו באמצע משפט, הוא כועס. הפתרון זהה (לשמור טיוטות באופן מקומי), אבל חוויית המשתמש נדיבה יותר: הראו לו שהאפליקציה ממשיכה לעבוד, והודיעו לו כשהוא חוזר לרשת.

אופליין איטי - החיבור קיים, אבל הוא כל כך איטי שכמעט ולא קיים. לקוח ממלא טופס, לוחץ על שליחה, ואז מחכה 20 שניות שהשליחה תסתיים. עד אז, הוא חושב שמשהו נשבר, ולוחץ שוב על שליחה (עכשיו יש לכם כפילות). זה הסוג הכי קשה לבדיקה, אבל הפתרון כן: להראות למשתמש שמשהו קורה (אנימציית טעינה), או לתת לו לצאת מהמסך בלי לאבד את הטיוטה.

איך מבקשים מהבונה שלכם מצב אופליין?

מבקשים את זה בחלקים, לא כפיצ’ר גדול אחד - offline-first היא פילוסופיית עיצוב, לא סעיף אחד לסימון. הנה חמש בקשות ספציפיות שאפשר להביא לבונה שלכם:

  1. שמירת טיוטות באופן מקומי: “כשמישהו ממלא טופס או פתק, שמרו אותו על הטלפון/הדפדפן שלו. אם הוא רענן את הדף, הטופס עדיין צריך להיות מלא.” בדקו: מלאו משהו, סגרו את לשונית הדפדפן, פתחו מחדש, והטופס עדיין שם.

  2. עבודה במצב אופליין: “אם אין אינטרנט, האפליקציה צריכה להציג את הנתונים שיש לנו, לאפשר למשתמש לקרוא ולבצע שינויים, ולתור את השינויים לסנכרון כשהאינטרנט יחזור.” בדקו: כבו את ה-WiFi, נסו לעשות משהו שימושי, ואז הפעילו את ה-WiFi מחדש וצפו בנתונים מסתנכרנים.

  3. סנכרון שקט: “כשאנחנו מסנכרנים שינויים, אל תציגו חלון גדול. הראו אינדיקציה קטנה, כמו ‘שומר…’ בחלק העליון, שנעלמת כשזה הסתיים. אם השמירה נכשלת, שמרו את השינוי באופן מקומי ונסו שוב מאוחר יותר.”

  4. הצגת האמת: “ספרו למשתמש אילו נתונים טריים (סונכרנו זה עתה מהשרת) ואילו מקומיים בלבד (עוד לא סונכרנו). השתמשו באינדיקציה או תווית קטנה - אל תהפכו את זה למפחיד, רק כנה.”

  5. תהליך עבודה אחד, מקומי קודם: “הדבר המרכזי שהמשתמש מגיע לעשות (לבדוק הזמנה, לכתוב פתק, לעקוב אחרי זמן) צריך לעבוד גם בלי חיבור. תוספות נחמדות (חיפוש בכל הרשומות ההיסטוריות, שליפת תמחור חי) יכולות לדרוש אינטרנט.”

סיפורים אמיתיים

מתכננת החתונות בנתה אפליקציה לניהול אישורי הגעה. היא הייתה מדפיסה את הרשימה, מסתובבת באירועים, ומסמנת תשובות. אבל ה-WiFi באולמות היה נורא. היא ביקשה offline-first: לשמור את רשימת הביקורת באופן מקומי, לסנכרן כשהיא מגיעה הביתה. עכשיו זה הכלי המרכזי שלה - למרות שיש לה קליטה בטלפון, האפליקציה עובדת בלי לחכות לנתונים. היא אוהבת את זה.

מורת הכיתה השתמשה באפליקציה למעקב אחרי התקדמות תלמידים. היא הייתה מאבדת עריכות כשהיא עברה בין חדרים עם כיסוי לא יציב. מצב אופליין נתן לה לעבוד בחופשיות, לסנכרן מאוחר יותר, ולא צריך היה לבחור בין הטלפון שלה לעבודה שלה. שינוי אחד, עלייה ענקית באמון.

שמאי הביטוח מילא דוחות נזק בשטח (בלי קליטה באזורים כפריים מסוימים). האפליקציה המקורית דרשה אינטרנט כדי לשלוח. הוספנו טיוטות אופליין. עכשיו הוא ממלא את הטופס, שולח במצב אופליין, והסנכרון קורה כשהוא נוסע חזרה. אין יותר “אני לא יכול לשלוח כלום עד שאני מגיע הביתה.”

את כל שלושת המקרים אפשר היה “לפתור” עם “פשוט תשיגו WiFi טוב יותר”, אבל ככה העולם האמיתי לא עובד. offline-first היה שינוי אמון גדול הרבה יותר מסנכרון טוב יותר.

האם offline-first הופך את האפליקציה שלכם למהירה יותר?

כן - אפליקציות offline-first מרגישות מהירות יותר כי אתם לא מחכים לשרת. אתם מקלידים, האפליקציה שומרת באופן מקומי (מיידי), ומסנכרנת ברקע. בלי אנימציית טעינה, בלי המתנה. גם עם אינטרנט, החוויה זריזה יותר כי השרת לא עומד בדרך.

אפליקציה שמחוברת לרשת בלבד חייבת לחכות שהשרת יאשר כל שינוי. הקשה על מקלדת → בקשת רשת → אימות בשרת → תגובה → הצגה למשתמש. בדרך כלל זה בסדר, אבל ברשתות איטיות (או בנייד עם שרת איטי), כל אינטראקציה נתקעת.

כמה עולה לבנות offline-first?

offline-first עולה זמן פיתוח מראש. הבונה שלכם צריך לחשוב על:

  • אחסון מקומי: איך לשמור נתונים על הטלפון/הדפדפן כך שהם לא ייעלמו אם האפליקציה קורסת. לא קשה, אבל צריך לעשות את זה במכוון.
  • פתרון קונפליקטים: אם המשתמש משנה שדה במצב אופליין, ואז מישהו אחר (או מכשיר אחר) משנה את אותו שדה לפני הסנכרון, מי מנצח? בדרך כלל הגרסה המקוונת (היא הטרייה יותר), אבל צריך להזהיר את המשתמש, לא להפתיע אותו. דוגמה אמיתית: שני טלפונים עורכים את אותו פתק במצב אופליין, שניהם מתחברים - השני להתחבר מנצח, המשתמש הראשון רואה “הגרסה שלך הייתה ישנה יותר, הנה הגרסה הנוכחית.”
  • נתונים לא עדכניים: אם המשתמש היה במצב אופליין שלושה ימים, האם האפליקציה צריכה לרענן הכול בשקט כשהוא מתחבר מחדש, או לשאול אותו קודם? לשאול בטוח יותר - לנתונים הישנים אולי מחוברים שינויים שלא נשמרו.

אלה לא דברים שחושבים עליהם בחינם, אבל הם פשוטים יותר משנדמה.

התמורה: אפליקציות שאנשים סומכים עליהן. אפליקציית offline-first לא מתרצת (“אתה צריך אינטרנט כדי להשתמש בזה”) ולא מאבדת את העבודה שלכם. זה עצום.

איך בודקים אם האפליקציה שלכם עובדת במצב אופליין?

לא צריך לטוס כדי לבדוק את זה - מצב טיסה בטלפון שלכם הוא שדה הבדיקה שלכם. הנה איך:

  1. פתחו ומלאו משהו: עשו משהו רגיל (מלאו טופס, הוסיפו פתק).
  2. עברו למצב אופליין: הפעילו מצב טיסה או כבו את ה-WiFi.
  3. המשיכו לעבוד: נסו לעשות את אותו הדבר שוב. אם האפליקציה מסרבת, offline-first לא קיים שם. אם האפליקציה עובדת, מצוין. אם זה מבלבל, בקשו מהבונה שלכם אינדיקציה ברורה של “אתה במצב אופליין”.
  4. חזרו לרשת: כבו את מצב הטיסה.
  5. בדקו סנכרון: האם השינויים שלכם סונכרנו אוטומטית? אם היה עליכם ללחוץ על כפתור “סנכרן” או לרענן, זה עוד לא שם לגמרי.

אפליקציות offline-first הטובות ביותר מרגישות כל כך רגילות שאתם לא שמים לב שהן במצב אופליין - אתם רק שמים לב שהאפליקציה עדיין עובדת.


האם האפליקציה שבניתם באמת צריכה לעבוד במצב אופליין? אם התשובה היא “למשתמשים שלי יש אינטרנט לא יציב, או שהם עובדים במקומות בלי קליטה”, אז כן. אם זה “הם תמיד מחוברים ל-WiFi יציב”, אז אפשר לדלג על זה לעת עתה. אבל ברגע שמישהו יגיד “איבדתי את העבודה שלי”, תתחרטו שלא ביקשתם את זה קודם.