אני בטוח ששמעת על פסים או השתמשת באפליקציה עם אחד. אבל תהיתם פעם למה פסים כל כך פופולריים וחזקים? ובכן, יש את הדבר הברור שאפליקציות רוצות כמה שיותר תשומת לב שלך, אבל חוץ מזה, האם ידעת שכאשר אפליקציית הלמידה הפופולרית Duolingo הציגה ווידג'טים של iOS להצגת פסים, מחויבות המשתמש עלתה ב-60%. שישים אחוזים הם שינוי מסיבי בהתנהגות ומדגים כיצד ניתן להשתמש בדפוסי "רצף" כדי להגביר את המעורבות ולהניע את השימוש. באופן הבסיסי ביותר, רצף הוא מספר הימים הרצופים שמשתמש משלים פעילות ספציפית. יש אנשים שמגדירים את זה גם כהרגל "משחק" או מדד שנועד לעודד שימוש עקבי. אבל פסים מתעלים מעבר להיותם מדד או שיא באפליקציה; זה יותר פסיכולוגי מזה. קל להשפיע על האינסטינקטים האנושיים עם הגורמים הנכונים. הסתכלו על שלושת הגורמים הללו: התקדמות, גאווה ופחד להחמיץ (נקרא בדרך כלל FOMO). מה משותף לכל אלה? מַאֲמָץ. ככל שתשקיעו יותר מאמץ במשהו, כך הוא מעצב את הזהות שלכם, וכך חוצים פסים לעולם הפסיכולוגיה ההתנהגותית. עכשיו, עם כוח גדול באה אחריות גדולה, ובגלל זה, יש צד אפל לפסים. במאמר זה, ניכנס לעקרונות הפסיכולוגיה, ה-UX ועקרונות העיצוב מאחורי בניית מערכת פסים יעילה. נבחן (1) מדוע המוח שלנו מגיב באופן כמעט אינסטינקטיבי לפעילות פסים, (2) כיצד לעצב פסים בדרכים שבאמת עוזרות למשתמשים, ו-3) העבודה הטכנית הכרוכה בבניית דפוס פסים. הפסיכולוגיה שמאחורי פסים כדי לעצב ולבנות מערכת פסים יעילה, עלינו להבין כיצד היא מתיישרת עם האופן שבו המוח שלנו מחווט. כאילו, מה עושה את זה כל כך יעיל עד כדי כך שאנחנו מרגישים כל כך הרבה מסירות אינטנסיבית להגן על הפסים שלנו? ישנם שלושה עקרונות פסיכולוגיים מעניינים ומתועדים היטב התומכים במה שהופך את הפסים לעוצמתיים וממכרים כל כך. סלידה מהפסד זה כנראה הכוח החזק ביותר מאחורי פסים. אני אומר את זה כי רוב הפעמים, אתה כמעט לא יכול להימנע מזה בחיים. תחשוב על זה כך: אם חבר נותן לך 100 דולר, אתה תהיה שמח. אבל אם הפסדת 100 דולר מהארנק שלך, זה יפגע הרבה יותר. המשקל הרגשי של המצבים הללו אינו שווה. הפסד כואב הרבה יותר משהרווח מרגיש טוב. בוא ניקח את זה הלאה ונאמר שאני נותן לך 100$ ומבקש ממך לשחק הימור. יש סיכוי של 50% שתזכה בעוד $100 וסיכוי של 50% שתפסיד את $100 המקורי. היית לוקח את זה? לא הייתי עושה זאת. רוב האנשים לא היו. זו סלידה מהפסד. אם חושבים על זה, זה הגיוני, זה מובן, זה אנושי. הרעיון מאחורי סלידה מאובדן הוא שאנו חשים את הכאב של לאבד משהו כפול מההנאה לזכות במשהו שווה ערך. במונחים פסיכולוגיים, ההפסד נמשך יותר מאשר הרווחים. אתה בטח רואה איך זה קשור לפסים. כדי לבנות רצף בולט, זה דורש מאמץ; ככל שרצף גדל, המוטיבציה מאחוריו מתחילה לדעוך; או יותר נכון, זה מתחיל להיות משני. הנה דוגמה: נניח שלחבר שלך יש רצף של שלושה ימים שסוגר את "טבעות הזז" שלו ב-Apple Watch שלו. אין להם כמעט מה להפסיד מעבר לרצון להשיג את מטרתם ולהיות עקביים. יחד עם זאת, יש לך רצף מרשים של 219 ימים. רוב הסיכויים שאתה לכוד על ידי הפחד לאבד אותו. סביר להניח שאתה לא חושב על ההישג בשלב זה; זה יותר על הגנה על המאמץ המושקע שלך, וזו סלידה מהפסד. Duolingo מסביר כיצד רתיעה מהפסד תורמת לחוסר הרצון של המשתמש לשבור רצף ארוך, אפילו בימים העצלים ביותר שלהם. במובן מסוים, רצף יכול להפוך להרגל כאשר רתיעה מהפסד מתמקמת. מודל ההתנהגות של Fogg (B = MAP) עכשיו, כשאנחנו מבינים את החשש לאבד את המאמץ שהושקע ברצפים ארוכים יותר, שאלה נוספת היא: מה גורם לנו לעשות את הדבר מלכתחילה, יום אחרי יום, עוד לפני שהרצף גדל? על זה עוסק מודל ההתנהגות של פוג. זה יחסית פשוט. התנהגות (B) מתרחשת רק כאשר שלושה גורמים - מוטיבציה (M), יכולת (A) והנחיה (P) - מתיישרים באותו רגע. לפיכך, המשוואה B=MAP. אם אחד מהגורמים הללו, אפילו אחד, חסר באותו רגע, ההתנהגות לא תתרחש. לכן, כדי שמערכת פסים תהיה יעילה וחוזרת על עצמה, כל שלושת הגורמים חייבים להיות נוכחים: מוטיבציה זה שביר ולא משהו שקיים באופן עקבי. יש ימים שבהם אתהשאבו ללמוד ספרדית, וימים שאתה אפילו לא מרגיש שמץ של כוח רצון ללמוד את השפה. מוטיבציה כשלעצמה לבנות הרגל אינה אמינה וקרב אבוד מהיום הראשון. יכולת כדי לפצות על מגבלות המוטיבציה, היכולת היא קריטית. בהקשר זה, יכולת פירושה קלות הפעולה, כלומר, המאמץ כל כך קל שזה לא ריאלי לומר שזה לא אפשרי. רוב האפליקציות משתמשות בזה בכוונה. אפל פיטנס רק צריך שתעמוד דקה אחת בשעה כדי להרוויח סימון לקראת יעד העמדה שלך. Duolingo צריך רק שיעור אחד שהושלם. משימות אלו אינן דורשות כל כך הרבה מאמץ. המחסום כל כך נמוך שאפילו בימים הגרועים ביותר שלך, אתה יכול לעשות את זה. אבל המאמץ המשולב של רצף מתמשך הוא המקום שבו מתחיל הרעיון להפסיד את הרצף הזה. Promptזה מה שמשלים את המשוואה. בני אדם הם שכחנים באופן טבעי, אז כן, יכולת יכולה להביא אותנו לשם ב-90%. אבל הנחיה מזכירה לנו לפעול. פסים הם מתמשכים בעיצובם, כך שמשתמשים צריכים לקבל תזכורת כל הזמן לפעול. כדי לראות כמה חזקה יכולה להיות הנחיה, Duolingo ערך בדיקת A/B כדי לראות אם תג אדום קטן על סמל האפליקציה מגדיל את השימוש העקבי. זה הניב עלייה של 6% במשתמשים הפעילים היומי. רק תג אדום. מגבלות דגם כל זה נאמר, יש מגבלה למודל Fogg לפיו מבקרים ומחקר מודרני שמו לב שעיצוב שמסתמך יותר מדי על הנחיות, כמו התראות אגרסיביות, מסתכן ביצירת עייפות נפשית. הודעות קבועות ושעות נוספות עלולות לגרום למשתמשים להתנתק. אז תיזהר מזה. אפקט זייגרניק איך אתה מרגיש כשאתה עוזב משימה של פרויקט שהושלם למחצה? זה מעצבן אנשים רבים כי משימות לא גמורות תופסות יותר מקום נפשי מהדברים שאנו משלימים. כשמשהו נעשה ונעלם, אנחנו נוטים לשכוח אותו. כשמשהו לא נעשה, הוא נוטה להכביד על מוחנו. זו בדיוק הסיבה לכך שמוצרים דיגיטליים משתמשים במחווני התקדמות מלאכותיים, כמו סרגל השלמת הפרופיל של Upwork, כדי ליידע את המשתמש שהפרופיל שלו רק "60% הושלם". זה דוחף את המשתמש לסיים את מה שהוא התחיל.

בואו נסתכל על דוגמה נוספת. יש לך חמש משימות באפליקציית רשימת מטלות, ובסופו של יום, אתה בודק רק ארבע מהן שהושלמו. רבים מאיתנו ירגישו לא מושלמים בגלל אותה משימה לא גמורה. זה, בדיוק שם, הוא אפקט זייגרניק. השפעת זייגרניק הודגמה על ידי הפסיכולוגית בלומה זייגרניק, שתיארה שאנו נוטים לשמור על משימות לא שלמות פעילות בזיכרון שלנו יותר מאשר משימות שהושלמו. דפוס פסים נוגע לזה באופן טבעי בעיצוב UX. נניח שאתה ביום 63 של רצף למידה. בשלב זה, אתה נמצא בדפוס מתמשך של עסק לא גמור. המוח שלך ישכח את זה רק לעתים רחוקות כיוון שהוא יושב לך בחלק האחורי של המוח. בשלב זה, המוח שלך הופך להיות זה ששולח לך התראות. כשאתה מחבר את הכוחות הפסיכולוגיים האלה ביחד, אתה מתחיל להבין באמת מדוע פסים הם לא רק תכונה רגילה של אפליקציה; הם מסוגלים לעצב מחדש התנהגות אנושית. אבל איפשהו לאורך הקו - אני לא יכול לומר בדיוק מתי, שכן זה שונה עבור כולם - הדברים מגיעים לנקודה שבה רצף עובר מ"כיף" למשהו שאתה מרגיש שאתה לא יכול להרשות לעצמו להפסיד. אתה לא רוצה ש-58 ימים של מאמץ ילכו לפח, נכון? זה מה שהופך את מערכת הפסים ליעילה. אם עושים זאת נכון, פסים עוזרים למשתמשים לבנות הרגלים מדהימים שמשיגים מטרה. זה יכול להיות קריאה יומית או ללכת לחדר כושר באופן עקבי. פעולות חוזרות ונשנות אלו (לעיתים קטנות) מתגבשות עם הזמן ומתבטאות בחיי היומיום שלנו. אבל לכל מטבע יש שני צדדים. הגבול הדק בין הרגל לכפייה אם עקבת אחריך, אתה כבר יכול לדעת שיש צד אפל למערכות הפסים. יצירת הרגלים היא עקביות עם מטרה חוזרת ונשנית. קומפולסיה, לעומת זאת, היא העקביות של עבודה על מטרה שאינה נחוצה עוד, אלא היא נמשכת מתוך פחד או לחץ. זהו קו דק כתער. אתה מצחצח שיניים כל בוקר בלי לחשוב; זה אוטומטי ואינסטינקטיבי, עם מטרה ברורה של נשימה טובה. זה רצף שיוצר הרגל טוב. מערכת פסים אתית נותנת למשתמשים מרחב לנשום. אם, מסיבה כלשהי, אתה לא מצחצח בבוקר, אתה יכול לצחצח בצהריים. חוסר שלמות מותרת ללא חשש לאבד מאמץ ארוך. הכפייה לוקחת את המסלול ההפוך, לפיו רצף גורם לך לחרדות, אתה מרגיש אשם או אפילו מותש, ולפעמים, זה מרגיש כאילו לא השגת כלום, למרות כלעֲבוֹדָה. אתה פועל לא בגלל שאתה רוצה, אלא בגלל שאתה מפחד באופן לא מודע לראות את ההתקדמות שלך מתאפסת לאפס. מישהו אפילו תיאר את זה בצורה מושלמת, "הרגשתי שאני בוגד, אבל פשוט לא היה אכפת לי. אני כלום בלי הרצף שלי". זה מראה את פסי ההחזקה הקיצוניים שיכולים להיות על אדם. במידה שמשתמשים מתחילים לקשור את הערך העצמי שלהם למדד שרירותי ולא למטרה או לסיבה המקורית שהם התחילו את הרצף מלכתחילה. הרצף הופך למי שהם, לא רק למה שהם עושים. מערכת רצף אתית מעוצבת היטב צריכה להרגיש כמו עידוד למשתמש, לא לחץ או חובה. זה קשור לאיזון בין מוטיבציה פנימית וחיצונית. מוטיבציה חיצונית (תגמולים חיצוניים, הימנעות מעונש) עשויה לגרום למשתמשים להתחיל, אבל מוטיבציה פנימית (ביצוע המשימה למען מטרה אישית כמו לימוד ספרדית כי אתה באמת רוצה לתקשר עם אדם אהוב) חזקה יותר למעורבות ארוכת טווח. מערכת טובה צריכה להימשך למוטיבציה פנימית תוך שימוש זהיר באלמנטים חיצוניים, כלומר להזכיר למשתמשים כמה רחוק הם הגיעו, לא לאיים עליהם במה שהם עלולים להפסיד. שוב, זה קו דק. מבחן פשוט בעת תכנון מערכת פסים הוא למעשה לקחת קצת זמן ולחשוב אם המוצרים שלך מרוויחים כסף על ידי מכירת פתרונות לחרדה שהמוצר שלך יצר. אם כן, יש סיכוי גבוה שאתה מנצל משתמשים. אז השאלה הבאה הופכת, אם אני בוחר להשתמש ב-streak, איך אני מעצב אותו בצורה שבאמת עוזרת למשתמשים להשיג את המטרות שלהם? ה-UX של Good Streak System Design אני מאמין שזה המקום שבו רוב הפרויקטים או מסמרים מערכת פסים יעילה או לבלבל אותה לחלוטין. בואו נעבור על כמה עקרונות UX של עיצוב פסים טוב. שמור את זה ללא מאמץ בטח שמעתם את זה בעבר, אולי מספרים כמו Atomic Habits, אבל כדאי להזכיר שאחת הדרכים הקלות ביותר שבהן ניתן ליצור הרגלים היא על ידי הפיכת הפעולה לקטנה וקלה. זה דומה לגורם היכולת שדנו במודל ההתנהגות של Fogg. הכלל הראשון של כל עיצוב פס צריך להיות הפיכת הפעולה הנדרשת לקטנה ככל האפשר מבחינה אנושית תוך השגת התקדמות. אם פעולה יומית דורשת כוח רצון כדי להשלים, הפעולה הזו לא תעבור את חמישה הימים. מַדוּעַ? אתה לא יכול לקבל מוטיבציה חמישה ימים ברציפות. מקרה לדוגמא: אם אתה מפעיל אפליקציית מדיטציה, אינך צריך לגרום למשתמשים לעבור סשן של 20 דקות רק כדי לשמור על הרצף. נסה דקה בודדת, אולי אפילו משהו קטן כמו שלושים שניות, במקום זאת. כפי שנאמר, טיפות קטנות של מים עושות את האוקיינוס ​​האדיר). מאמצים קטנים מתגבשים להישגים גדולים עם הזמן. זו צריכה להיות המטרה: להסיר חיכוכים, במיוחד כאשר הרגע עשוי להיות קשה. כאשר המשתמשים לחוצים או המומים, הודע להם שפשוט להופיע, אפילו לכמה שניות, נחשב כמאמץ. ספק משוב ויזואלי ברור בני אדם הם חזותיים מטבעם. ברוב הפעמים, אנחנו צריכים לראות משהו כדי להאמין; יש צורך לדמיין דברים כדי להבין אותם טוב יותר ולהעמיד דברים בפרספקטיבה. זו הסיבה שדפוסי פסים משתמשים לעתים קרובות באלמנטים חזותיים, כמו גרפים, סימני ביקורת, טבעות התקדמות ורשתות, כדי לדמיין מאמץ. תסתכל על גרף התרומות של GitHub. זוהי הדמיה פשוטה של ​​עקביות. עם זאת מפתחים נושמים אותו כמו חמצן.

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

השתמש בתזמון טוב הזכרתי קודם שבני אדם הם בדרך כלל שוכחים מטבעם, ושהנחיות יכולות לעזור לשמור על מומנטום קדימה. ללא הנחיות, רוב המשתמשים החדשים שוכחים להמשיך. החיים יכולים להיות עמוסים, המוטיבציה נעלמת ודברים קורים. אפילו משתמשים ותיקים נהנים מהנחיות, אם כי ברוב הפעמים, הם כבר נעולים בתוך לולאת ההרגל. עם זאת, אפילו האדם המחויב ביותר יכול להחמיץ יום בטעות. מערכת הפסים שלך בהחלט זקוקה לתזכורות. התזכורות הנחוצות הנפוצות ביותר הן הודעות דחיפה. התזמון באמת חשוב כשעובדים עם הודעות דחיפה. גם סוג האפליקציה משנה. שליחת הודעה בשעה 9 בבוקר האומרת "לא התאמנת היום" היא פשוט מוזרה עבור אפליקציית למידה כי לרבים יש דברים לעשות ביום לפני שהם בכלל חושבים על השלמת שיעור. אבל אם אנחנו מדברים על אפליקציית כושר, זהסביר ואולי אפילו צפוי להזכיר מוקדם יותר באותו היום. התראות דחיפה משתנות באופן משמעותי לפי קטגוריית האפליקציה. אפליקציות כושר, למשל, רואות מעורבות גבוהה יותר עם התראות בשעות הבוקר המוקדמות (7-8 בבוקר), בעוד שאפליקציות פרודוקטיביות עשויות לתפקד טוב יותר בשעות הצהריים המוקדמות. המפתח הוא לבחון A/B את התזמון של האפליקציה שלך בהתבסס על התנהגויות המשתמשים שלך במקום להניח שהדברים הם חד-משמעיים. מה שעובד עבור אפליקציית מדיטציה אולי לא יעבוד עבור מעקב קידוד. שיטות הנחיה אחרות הן נקודות אדומות על סמל האפליקציה ואפילו ווידג'טים של אפליקציה. המחקרים משתנים, אבל אדם ממוצע פותח את המכשיר שלו בין 50-150 פעמים ביום (PDF). אם משתמש רואה נקודה אדומה באפליקציה או ווידג'ט שמציינת רצף נוכחי בכל פעם שהוא פותח את הטלפון שלו, זה מגביר את המחויבות. רק אל תגזימו; ההנחיה צריכה לשמש כתזכורת, לא נדנוד. לחגוג אבני דרך מערכת רצף צריכה לנסות לחגוג אבני דרך כדי להצית מחדש רגשות, במיוחד עבור משתמשים עמוק בתוך רצף. כאשר משתמש מגיע ליום 7, יום 30, יום 50, יום 100, יום 365, אתה צריך לעשות מזה עניין גדול. הכירו בהישגים - במיוחד עבור משתמשים ותיקים.

כפי שראינו קודם לכן, Duolingo הבין זאת והטמיע גרפיקה מונפשת שחוגגת אבני דרך עם קונפטי. חלק מהפלטפורמות אפילו מעניקות תגמולים משמעותיים שמאמתים את מאמצי המשתמשים. וזה יכול להיות מועיל לאפליקציות, כך שמשתמשים נוטים לשתף את אבני הדרך שלהם בפומבי במדיה החברתית. יתרון נוסף הוא הציפייה שמגיעה לפני הגעה לאבני דרך. זה לא רק שמירה על הרצף בחיים בלי סוף; למשתמשים יש למה לצפות. השתמש במנגנוני חסד החיים בלתי צפויים. אנשים מוסחים. כל מערכת פסים טובה צריכה לצפות לחוסר שלמות. אחד האיומים הפסיכולוגיים הגדולים ביותר על מערכת רצף הוא האיפוס הקשה לאפס לאחר יום אחד בלבד שהוחמצ. מערכת פסים "אתית" צריכה לספק למשתמש קצת רפיון. נניח שיש לך רצף לימוד שחמט של 90 יום. היית עקבי במשך שלושה חודשים טובים, ויום אחד, הטלפון שלך מת בזמן נסיעה, ובדיוק ככה, 90 הופך ל-0 - הכל, כל המאמץ הזה, נמחק, וההתקדמות נעלמת. המשתמש עלול להיות הרוס לחלוטין. המחשבה על לבנות אותו מחדש מאפס כל כך מעוררת עצבות שהמאמץ לא שווה את זה. במקרה הגרוע, משתמש עלול לנטוש את האפליקציה לאחר שהרגיש כמו כישלון. שקול להוסיף מנגנון "חסד" למערכת הפסים שלך:

Streak Freeze אפשר למשתמשים להחמיץ יום בכוונה ללא עונשים. זמן נוסף אפשר כמה שעות (2-3) אחרי המועד הרגיל לפני הפעלת איפוס. מודלים של דעיכה במקום איפוס קשיח, הרצף פוחת בכמות קטנה, למשל, 10 ימים מנוכים מהרצף לכל יום שהוחמצ.

השתמש בטון מעודד הבה נשווה שתי הודעות המוצגות למשתמשים כאשר רצף נשבר:

"איבדת את רצף 42 הימים שלך. התחל מחדש." "הופעת במשך 42 ימים רצופים. זו התקדמות מדהימה! רוצה לנסות שוב?"

שניהם מעבירים את אותו מידע, אבל ההשפעה הרגשית שונה. סביר להניח שההודעה הראשונה תגרום למשתמש להרגיש מדוכא ותגרום לו להפסיק. ההודעה השנייה חוגגת את מה שכבר הושג ומעודדת בעדינות את המשתמש לנסות שוב. אתגרי עיצוב מערכות פס לפני שניכנס לפרטים הטכניים של בניית מערכת פסים, אתה צריך להיות מודע לאתגרים שאתה עלול להתמודד איתם. דברים יכולים להסתבך, כפי שניתן לצפות. טיפול באזורי זמן יש סיבה לכך שהטיפול בזמן ובתאריך הוא בין המושגים הקשים ביותר שמפתחים מתמודדים איתם. יש עיצוב, בינאום והרבה יותר שצריך לקחת בחשבון. הרשו לי לשאול אתכם את זה: מה נחשב ליום? אנחנו יודעים שהעולם פועל על אזורי זמן שונים, וכאילו זה לא מספיק, בחלק מהאזורים יש שעון קיץ (DST) שמתרחש פעמיים בשנה. מאיפה בכלל מתחילים לטפל בתיקי הקצה האלה? מה נחשב כ"התחלה" של המחר? חלק מהמפתחים מנסים להימנע מכך על ידי שימוש באזור זמן מרכזי אחד, כמו UTC. עבור חלק מהמשתמשים, זה יניב תוצאות נכונות, אבל עבור חלק זה יכול להיות כבוי בשעה, שעתיים או יותר. חוסר עקביות זה הורס את חווית המשתמש. למשתמשים פחות אכפת איך אתה מתמודד עם הזמן מאחורי הקלעים; כל מה שהם מצפים הוא שאם הם יבצעו פעולת רצף ב-23:40, אז היא צריכה להירשם באותו זמן בדיוק, בהקשר שלהם. עליך להגדיר "יום אחד" בהתבסס על אזור הזמן המקומי של המשתמש, לא על זמן השרת. בטח, אתה יכול לקחת את זה בקלותנתב ואפס פסים ברחבי העולם עבור כל המשתמשים בחצות UTC, אבל אתה מאוד יוצר חוסר הוגנות. למישהו בקליפורניה יש תמיד שמונה שעות נוספות להשלים את המשימה שלו מאשר למישהו שגר בלונדון. זה פגם עיצובי לא צודק שמעניש משתמשים מסוימים בגלל מיקומם. ומה אם אותו אדם בלונדון רק מבקר, ישלים משימה ואז יחזור לאזור זמן אחר? אחד הפתרונות היעילים לכל אלה הוא לבקש מהמשתמשים להגדיר במפורש את אזור הזמן שלהם במהלך ההטמעה (רצוי לאחר אימות ראשון). מומלץ לכלול הערה עדינה לפיה מתן מידע על אזור זמן משמש רק עבור האפליקציה כדי לעקוב אחר ההתקדמות במדויק, במקום לשמש כנתונים אישיים מזהים. וזה עוד רעיון טוב להפוך את זה לסביבה ניתנת לשינוי. אני מציע לכל אחד להימנע מטיפול ישיר בלוגיקה של אזור זמן באפליקציה. השתמש בספריות תאריכים בדוקות, כמו Moment.js או pytz (Python) וכו'. אין צורך להמציא מחדש את הגלגל למשהו מורכב כמו זה. ימים שהוחמצו ומקרי קצה אתגר נוסף שאתה צריך לדאוג לגביו הוא מקרי קצה בלתי ניתנים לשליטה כמו משתמשים שישנים יתר על המידה, השבתת שרת, פיגור, כשלים ברשת וכן הלאה. שימוש ברעיון של מנגנוני חסד, כמו אלה שדנו בהם קודם, יכול לעזור. חלון חסד של שעתיים עשוי לעזור הן למשתמש והן למפתח, במובן זה שהמשתמשים אינם נענשים בחומרה על נסיבות חיים בלתי נשלטות. למפתחים, חלונות חסד מועילים באותם רגעים בלתי נשלטים שבהם השרת נופל באמצע הלילה. מעל לכל, לעולם אל תסמוך על הלקוח. תאמת תמיד בצד השרת. השרת צריך להיות מקור האמת היחיד. מניעת בגידה שוב, אני לא יכול להדגיש את זה מספיק: הקפד לאמת הכל בצד השרת. משתמשים הם בני אדם, ובני אדם עלולים לבגוד אם תינתן להם ההזדמנות. זה בלתי נמנע. אולי תנסה:

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

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

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

בינתיים, בצד הלקוח:

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

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

המשתמש משלים פעולת רצף כשירה. הלקוח שולח אירוע לשרת כמטא נתונים. זה יכול להיות "משתמש X השלים פעולה Y בחותמת זמן Z". השרת מקבל את האירוע הזה ועושה אימות בסיסי. האם זה משתמש אמיתי? האם הם מאומתים? האם הפעולה תקפה? האם אזור הזמן עקבי? אם זה עובר, השרת מאחזר את נתוני הרצף של המשתמש ממסד הנתונים. לאחר מכן, המר את חותמת הזמן של הפעולה שהתקבלה לאזור הזמן המקומי של המשתמש. אפשר לשרת להשוות את תאריכי לוח השנה (לא חותמות זמן) באזור הזמן המקומי של המשתמש: אם זה באותו יום, אז הפעולה מיותרת ואין שינוי ב-פַּס. אם זה למחרת, הרצף מתארך ומתגבר ב-1. אם יש פער של יותר מיום אחד, הרצף נשבר. עם זאת, זה המקום שבו תוכל ליישם מכניקת חסד. אם מנגנון החסד מתפספס, אפס את הרצף ל-1.

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

{ "current_streak": 48, "הרצף הארוך ביותר": 50, "סך הימים_פעילים": 120, "streak_extended": נכון, }

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

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free