Əminəm ki, zolaqlar haqqında eşitmisiniz və ya bir tətbiqdən istifadə etmisiniz. Bəs heç düşünmüsünüz ki, niyə zolaqlar bu qədər populyar və güclüdür? Tətbiqlərin diqqətinizi mümkün qədər çox istəməsi açıq-aydındır, lakin bundan başqa, bilirdinizmi ki, məşhur öyrənmə proqramı Duolingo zolaqları göstərmək üçün iOS vidjetlərini təqdim edəndə istifadəçi öhdəliyi 60% artıb. Altmış faiz davranışda böyük dəyişiklikdir və nişanlanmanı artırmaq və istifadəni sürətləndirmək üçün “zolaq” nümunələrinin necə istifadə oluna biləcəyini nümayiş etdirir. Ən əsası, zolaq istifadəçinin müəyyən bir fəaliyyəti tamamladığı ardıcıl günlərin sayıdır. Bəzi insanlar bunu "oyunlaşdırılmış" vərdiş və ya ardıcıl istifadəni təşviq etmək üçün hazırlanmış bir metrik olaraq da təyin edirlər. Lakin zolaqlar tətbiqdə metrik və ya rekord olmaqdan kənara çıxır; ondan daha psixolojidir. İnsan instinktlərinə düzgün amillərlə təsir etmək asandır. Bu üç amilə baxın: tərəqqi, qürur və əldən vermək qorxusu (ümumiyyətlə FOMO adlanır). Bütün bunların ortaq cəhəti nədir? Səy. Bir şeyə nə qədər çox səy göstərsəniz, o, şəxsiyyətinizi bir o qədər çox formalaşdırır və davranış psixologiyası dünyasına beləcə zolaqlar keçir. İndi böyük güclə böyük məsuliyyət gəlir və buna görə də zolaqların qaranlıq tərəfi var. Bu yazıda biz effektiv zolaq sistemi qurmağın arxasında duran psixologiya, UX və dizayn prinsiplərinə keçəcəyik. Biz (1) beynimizin niyə demək olar ki, instinktiv olaraq zolaq fəaliyyətinə reaksiya verdiyini, (2) istifadəçilərə həqiqətən kömək edəcək şəkildə zolaqları necə tərtib etməyi və (3) zolaq modelinin qurulmasında iştirak edən texniki işə baxacağıq. Çizgilərin Arxasındakı Psixologiya Effektiv bir zolaq sistemini layihələndirmək və qurmaq üçün onun beynimizin necə bağlandığı ilə necə uyğunlaşdığını başa düşməliyik. Məsələ bu qədər təsirli edən nədir ki, biz öz cizgilərimizi qorumaq üçün bu qədər ciddi fədakarlıq hiss edirik? Üç maraqlı, yaxşı sənədləşdirilmiş psixologiya prinsipləri var ki, bu, zolaqları bu qədər güclü və asılılıq yaradır. Zərərdən imtina Bu, yəqin ki, zolaqların arxasında duran ən güclü qüvvədir. Bunu ona görə deyirəm ki, çox vaxt həyatda demək olar ki, bundan qaça bilmirsən. Bunu belə düşünün: bir dost sizə 100 dollar versə, xoşbəxt olarsınız. Ancaq cüzdanınızdan 100 dollar itirsəniz, bu, daha çox zərər verər. Bu vəziyyətlərin emosional çəkisi bərabər deyil. Zərər qazancdan daha çox zərər verir. Gəlin daha da irəli gedək və deyək ki, mən sizə 100 dollar verirəm və sizdən qumar oynamağınızı xahiş edirəm. Daha 100 dollar qazanmağınızın 50% və orijinal 100 dolları itirməyin 50% şansı var. Siz götürərdiniz? etməzdim. Çoxları etməzdi. Bu, itkidən çəkinməkdir. Fikir versəniz, məntiqlidir, başa düşüləndir, insandır. İtirməkdən çəkinmə anlayışı ondan ibarətdir ki, biz bir şeyi itirməyin ağrısını bərabər dəyərli bir şey əldə etməkdən iki qat daha çox hiss edirik. Psixoloji baxımdan itki qazancdan daha çox uzanır. Yəqin ki, bunun zolaqlarla necə əlaqəli olduğunu görürsünüz. Gözə çarpan bir zolaq yaratmaq üçün səy tələb olunur; zolaq böyüdükcə, onun arxasındakı motivasiya azalmağa başlayır; daha doğrusu ikinci dərəcəli olmağa başlayır. Budur bir misal: Dostunuzun Apple Watch-da “Move Rings”ini bağlayan üç günlük zolağı olduğunu söyləyin. Məqsədlərinə çatmaq və ardıcıl olmaq istəməkdən başqa itirəcəkləri demək olar ki, heç nələri yoxdur. Eyni zamanda, 219 günlük təsirli bir zolağınız var. Çox güman ki, onu itirmək qorxusu ilə tələyə düşmüsünüz. Çox güman ki, bu nöqtədə nailiyyət haqqında düşünmürsünüz; bu, daha çox sərmayə qoyduğunuz səyləri qorumaqdır və bu, itkidən çəkinməkdir. Duolingo, itkilərdən çəkinmənin istifadəçinin hətta ən tənbəl günlərində belə uzun bir zolağı qırmaq istəməməsinə necə kömək etdiyini izah edir. Müəyyən bir şəkildə, itkidən ikrah hissi yerləşdikdə bir zolaq vərdişə çevrilə bilər. Dumanlı Davranış Modeli (B = MAP) İndi biz daha uzun zolaqlara sərf olunan səyləri itirmək qorxusunu başa düşdükdən sonra başqa bir sual yaranır: bizi ilk növbədə, gündən-günə, hətta zolağın böyüməsindən əvvəl etməyə vadar edən nədir? Fogg Davranış Modeli budur. Bu nisbətən sadədir. Davranış (B) yalnız üç amil - Motivasiya (M), Bacarıq (A) və Tələb (P) eyni anda uyğunlaşdıqda baş verir. Beləliklə, B=MAP tənliyi. Bu amillərdən hər hansı biri, hətta biri də yoxdursa, davranış baş verməyəcək. Beləliklə, bir zolaq sisteminin səmərəli və təkrarlanan olması üçün hər üç amil mövcud olmalıdır: Motivasiya Bu kövrəkdir və davamlı olaraq mövcud olan bir şey deyil. Olduğun günlər varİspan dilini öyrənməyə can atırsınız və günlərdir ki, dili öyrənmək üçün zərrə qədər iradə belə hiss etmirsiniz. Öz-özünə vərdiş yaratmaq üçün motivasiya etibarsızdır və ilk gündən məğlubiyyətlə mübarizə aparır. Bacarıq Motivasiyanın məhdudiyyətlərini kompensasiya etmək üçün bacarıq vacibdir. Bu kontekstdə qabiliyyət hərəkətin asanlığı deməkdir, yəni səy o qədər asandır ki, bunun mümkün olmadığını söyləmək qeyri-realdır. Əksər proqramlar bundan qəsdən istifadə edirlər. Apple Fitness-ə Stand hədəfinizə çatmaq üçün bir saat ərzində bir dəqiqə ayaqda durmağınız kifayətdir. Duolingo-ya yalnız bir tamamlanmış dərs lazımdır. Bu vəzifələr o qədər də çox səy tələb etmir. Baryer o qədər aşağıdır ki, ən pis günlərində belə bunu edə bilərsən. Ancaq davam edən bir seriyanın birgə səyi bu seriyanı itirmək ideyasının başladığı yerdir. PromptTənliyi tamamlayan budur. İnsanlar təbii olaraq unutqandırlar, buna görə bəli, qabiliyyət bizi 90% oraya çatdıra bilər. Ancaq bir xəbərdarlıq bizə hərəkət etməyi xatırladır. Çizgilər dizaynla davamlıdır, ona görə də istifadəçilərə daim hərəkət etmələri barədə xatırlatmaq lazımdır. Bildirişin nə qədər güclü ola biləcəyini görmək üçün Duolingo tətbiqin ikonasında kiçik qırmızı nişanın ardıcıl istifadəni artırıb artırmadığını yoxlamaq üçün A/B testi keçirdi. Gündəlik aktiv istifadəçilərin sayı 6% artıb. Sadəcə qırmızı nişan. Model Məhdudiyyətləri Bütün bunlar deyildikdə, Fogg modelində bir məhdudiyyət var ki, tənqidçilər və müasir tədqiqatlar aqressiv bildirişlər kimi göstərişlərə çox əsaslanan dizaynın zehni yorğunluq riski yaratdığını qeyd ediblər. Daimi bildirişlər və iş vaxtı istifadəçilərin narazılığına səbəb ola bilər. Beləliklə, buna diqqət yetirin. Zeigarnik effekti Layihənin tapşırığını yarımçıq tərk edəndə özünüzü necə hiss edirsiniz? Bu, bir çox insanı qıcıqlandırır, çünki tamamlanmamış vəzifələr tamamladığımız işlərdən daha çox zehni yer tutur. Bir şey bitdikdə və getdikdə, biz onu unuduruq. Bir şey yarımçıq qalanda, ağlımıza ağır gəlir. Məhz buna görə rəqəmsal məhsullar istifadəçiyə profilinin yalnız “60% tamamlandığını” bildirmək üçün Upwork-un profil tamamlama çubuğu kimi süni irəliləyiş göstəricilərindən istifadə edir. Bu, istifadəçini başladıqları işi bitirmək üçün dürtələyir.
Başqa bir misala baxaq. Görüləcək işlər siyahısı proqramında beş tapşırığınız var və günün sonunda onlardan yalnız dördünün tamamlandığını yoxlayırsınız. Bir çoxumuz bu yarımçıq iş ucbatından özümüzü tamamlanmamış hiss edəcəyik. Bu, Zeigarnik effektidir. Zeigarnik effekti o, psixoloq Bluma Zeigarnik tərəfindən nümayiş etdirilib, o, bizim yarımçıq işlərimizi tamamlanmış işlərdən daha uzun müddət yaddaşımızda aktiv saxlamağa meylli olduğumuzu təsvir edib. UX dizaynında bir zolaq nümunəsi təbii olaraq buna toxunur. Deyək ki, öyrənmə seriyasının 63-cü günündəsiniz. Bu nöqtədə, siz yarımçıq işlərin davam edən modelindəsiniz. Beyninizin arxasında oturduğu üçün beyniniz bunu nadir hallarda unudurdu. Bu zaman beyniniz sizə bildirişlər göndərən olur. Bu psixoloji qüvvələri bir araya gətirəndə, cızıqların niyə sadəcə adi proqram funksiyası olmadığını həqiqətən anlamağa başlayırsınız; onlar insan davranışını yenidən formalaşdırmağa qadirdirlər. Ancaq xəttin bir yerində - hər kəs üçün fərqli olduğu üçün dəqiq nə vaxt deyə bilmərəm - işlər elə bir nöqtəyə çatır ki, bir xətt "əyləncəli" dən itirə bilməyəcəyinizi hiss etdiyiniz bir şeyə keçir. 58 günlük zəhmətin boşa getməsini istəmirsiniz, elə deyilmi? Streak sistemini təsirli edən budur. Düzgün edilərsə, zolaqlar istifadəçilərə məqsədə çatan heyrətamiz vərdişlər yaratmağa kömək edir. Bu, gündəlik oxumaq və ya davamlı olaraq idman salonuna getmək ola bilər. Bu təkrarlanan hərəkətlər (bəzən kiçik) zaman keçdikcə mürəkkəbləşir və gündəlik həyatımızda aydın olur. Amma hər sikkənin iki tərəfi var. Vərdişlə Məcburiyyət Arasındakı İncə Xətt Əgər izləyirsinizsə, artıq sistemlərin xətaların qaranlıq tərəfinin olduğunu deyə bilərsiniz. Vərdişin formalaşması təkrarlanan məqsədlə ardıcıllıqdan ibarətdir. Məcburiyyət isə artıq ehtiyac duyulmayan, lakin qorxu və ya təzyiq nəticəsində əldə edilən məqsəd üzərində işləməyin ardıcıllığıdır. Bu ülgüc kimi nazik bir xəttdir. Hər səhər düşünmədən dişlərinizi fırçalayırsınız; yaxşı nəfəs almaq üçün aydın bir məqsədi olan avtomatik və instinktivdir. Bu, yaxşı vərdiş yaradan bir zolaqdır. Etik xətt sistemi istifadəçilərə nəfəs almaq üçün yer verir. Əgər nədənsə səhərlər fırçalamırsınızsa, günorta saatlarında fırçalaya bilərsiniz. Qüsursuzluğa uzun bir səy itirmək qorxusu olmadan icazə verilir. Məcburiyyət əks istiqamətdə gedir, bununla da sizi narahat edir, özünüzü günahkar hiss edirsiniz və ya hətta yorğun hiss edirsiniz və bəzən elə olur ki, bütün səylərinizə baxmayaraq heç nəyə nail ola bilmirsiniz.iş. İstədiyiniz üçün deyil, tərəqqinizin sıfıra sıfırlandığını görməkdən bilinçaltı olaraq qorxduğunuz üçün hərəkət edirsiniz. Hətta kimsə bunu mükəmməl şəkildə təsvir etdi: "Mən özümü aldatdığımı hiss etdim, amma sadəcə vecinə almadım. Mən heç bir şey deyiləm". Bu, bir insanda həddindən artıq tutma zolaqlarının ola biləcəyini göstərir. O dərəcədə ki, istifadəçilər öz dəyərlərini ilkin məqsəd və ya səbəblə deyil, ixtiyari ölçüyə bağlamağa başlayırlar. Zolaq yalnız etdiklərinə deyil, kim olduqlarına çevrilir. Yaxşı dizayn edilmiş etik xətt sistemi istifadəçiyə təzyiq və ya öhdəlik kimi deyil, həvəsləndirmə kimi hiss etməlidir. Bu, daxili və xarici motivasiya balansına aiddir. Xarici motivasiya (xarici mükafatlar, cəzadan yayınma) istifadəçilərin işə başlamasına səbəb ola bilər, lakin daxili motivasiya (sevilən birinizlə həqiqətən ünsiyyət qurmaq istədiyiniz üçün ispan dilini öyrənmək kimi şəxsi məqsəd üçün tapşırığı yerinə yetirmək) uzunmüddətli nişan üçün daha güclüdür. Yaxşı bir sistem xarici elementlərdən ehtiyatla istifadə etməklə daxili motivasiyaya yönəlməlidir, yəni istifadəçilərə nə qədər irəlilədiklərini xatırlatmalı, onları itirə biləcəkləri ilə təhdid etməməlidir. Yenə də incə bir xəttdir. Bir zolaq sistemi dizayn edərkən sadə bir sınaq, əslində bir az vaxt almaq və məhsulunuzun yaratdığı narahatlığa həll yollarını sataraq məhsullarınızın pul qazanıb qazanmadığını düşünməkdir. Əgər belədirsə, istifadəçiləri istismar etmək şansınız yüksəkdir. Beləliklə, növbəti sual belə olur: Əgər mən zolaqdan istifadə etməyi seçsəm, onu istifadəçilərə məqsədlərinə çatmağa həqiqətən kömək edəcək şəkildə necə tərtib edə bilərəm? Yaxşı Streak Sistemi Dizaynının UX İnanıram ki, əksər layihələr ya effektiv zolaq sistemini dırnaq edir, ya da onu tamamilə qarışdırır. Yaxşı bir zolaq dizaynının bəzi UX prinsiplərini nəzərdən keçirək. Zəhmətsiz saxlayın Yəqin ki, bunu əvvəllər, bəlkə də Atom vərdişləri kimi kitablardan eşitmisiniz, lakin qeyd etmək lazımdır ki, vərdişləri formalaşdırmağın ən asan yollarından biri hərəkəti kiçik və asan etməkdir. Bu, Fogg Davranış Modelindən bəhs etdiyimiz qabiliyyət amilinə bənzəyir. Hər hansı bir zolaq dizaynının ilk qaydası, irəliləyiş əldə edərkən tələb olunan hərəkəti mümkün qədər kiçik etməkdir. Gündəlik bir hərəkətin tamamlanması üçün iradə tələb olunursa, bu hərəkət beş günü keçməyəcək. Niyə? Ardıcıl beş gün motivasiya ola bilməzsiniz. Nöqteyi-nəzərdən bir nümunə: Əgər meditasiya proqramı işlədirsinizsə, ardıcıllığı qorumaq üçün istifadəçiləri 20 dəqiqəlik seansdan keçməyə məcbur etmək lazım deyil. Bunun əvəzinə bir dəqiqə, bəlkə də otuz saniyə kimi kiçik bir şey cəhd edin. Necə deyərlər, kiçik su damlaları qüdrətli okean yaradır). Kiçik səylər zamanla böyük nailiyyətlərə çevrilir. Məqsəd bu olmalıdır: xüsusilə çətin anlarda sürtünməni aradan qaldırın. İstifadəçilər stresli olduqda və ya həddən artıq sıxılanda onlara bildirin ki, sadəcə olaraq, hətta bir neçə saniyəlik də görünməyin zəhmət kimi sayılacaq. Aydın Vizual Əlaqə təmin edin İnsanlar təbiətcə vizualdır. Çox vaxt inanmaq üçün bir şey görməliyik; Onları daha yaxşı başa düşmək və hər şeyi perspektivə qoymaq üçün şeyləri vizuallaşdırmaq lazımdır. Buna görə də zolaq nümunələri səyləri vizuallaşdırmaq üçün tez-tez qrafiklər, işarələr, tərəqqi halqaları və torlar kimi vizual elementlərdən istifadə edir. GitHub-ın töhfə qrafikinə baxın. Bu, tutarlılığın sadə vizualizasiyasıdır. Bununla belə, tərtibatçılar onu oksigen kimi nəfəs alırlar.
Əsas odur ki, zolaq sistemini mücərrəd hiss etdirməyin. Bu, real və qazanılmış hiss edilməlidir. Məsələn, Duolingo və Apple-ın Fitness fəaliyyət üzükləri bir zolağın tamamlanmasından sonra təmiz animasiya dizaynlarından istifadə edir və GitHub zamanla istifadəçinin ardıcıllığının tarixi məlumatlarını göstərir.
Yaxşı Zamanlamadan istifadə edin Mən əvvəllər qeyd etdim ki, insanlar təbiətcə ümumiyyətlə unutqandırlar və göstərişlər irəliləmə sürətini qorumağa kömək edə bilər. Bildirişlər olmadan, əksər yeni istifadəçilər davam etməyi unudurlar. Həyat məşğul ola bilər, motivasiya yox olur və hadisələr baş verir. Hətta uzun müddətdir ki, istifadəçilər də göstərişlərdən faydalanır, baxmayaraq ki, əksər hallarda onlar artıq vərdiş döngəsinin içərisində kilidlənirlər. Buna baxmayaraq, hətta ən sadiq insan da təsadüfən bir günü qaçıra bilər. Zolaq sisteminizin mütləq xatırlatmalara ehtiyacı var. Ən çox istifadə edilən xəbərdarlıq xatırlatmaları push bildirişləridir. Push bildirişləri ilə işləyərkən vaxt həqiqətən vacibdir. Proqramın növü də vacibdir. Səhər saat 9-da “Bu gün məşq etməmisiniz” deyərək bildiriş göndərmək öyrənmə proqramı üçün sadəcə qəribədir, çünki bir çoxlarının dərsi başa vurmağı düşünməmişdən bir gün əvvəl etməli olduğu işlər var. Bir fitness proqramından danışırıqsa, buağlabatandır və bəlkə də günün əvvəlində xatırladılması gözlənilir. Push bildirişləri proqram kateqoriyasına görə əhəmiyyətli dərəcədə dəyişir. Məsələn, fitnes tətbiqləri səhər erkən bildirişlərlə (7-8 AM) daha yüksək əlaqə görür, məhsuldarlıq tətbiqləri isə günorta saatlarında daha yaxşı çıxış edə bilər. Əsas odur ki, hər şeyin hamıya uyğun olduğunu düşünməkdənsə, A/B tətbiqinizin vaxtını istifadəçilərinizin davranışlarına əsaslanaraq yoxlayın. Meditasiya proqramı üçün işləyən kodlaşdırma izləyicisi üçün işləməyə bilər. Digər operativ üsullar tətbiq simvolunda qırmızı nöqtələr və hətta proqram vidjetləridir. Tədqiqatlar dəyişir, lakin orta hesabla bir insan gündə 50-150 dəfə cihazını açır (PDF). İstifadəçi hər dəfə telefonunun kilidini açanda cari zolağı göstərən proqramda və ya vidcetdə qırmızı nöqtə görürsə, bu, öhdəliyi artırır. Sadəcə onu aşmayın; istək nag yox, xatırlatma kimi xidmət etməlidir. Mərhələləri qeyd edin Bir zolaq sistemi emosiyaları yenidən alovlandırmaq üçün mərhələləri qeyd etməyə çalışmalıdır, xüsusən də zolağa daxil olan istifadəçilər üçün. Bir istifadəçi 7-ci gün, 30-cu gün, 50-ci gün, 100-cü gün, 365-ci günləri vurduqda, siz bundan böyük bir iş görməlisiniz. Nailiyyətləri etiraf edin - xüsusilə uzun müddət istifadəçilər üçün.
Daha əvvəl gördüyümüz kimi, Duolingo bunu anladı və konfeti ilə mərhələləri qeyd edən animasiya qrafiki tətbiq etdi. Bəzi platformalar hətta istifadəçilərin səylərini təsdiqləyən əhəmiyyətli bonus mükafatları verir. Və bu, tətbiqlər üçün faydalı ola bilər ki, istifadəçilər öz mərhələlərini sosial mediada açıq şəkildə paylaşmağa meyllidirlər. Başqa bir fayda, mərhələlərə çatmazdan əvvəl gələn gözləmədir. Bu, yalnız zolağı sonsuza qədər canlı saxlamaq deyil; istifadəçilərin səbirsizliklə gözlədiyi bir şey var. Grace Mexanizmlərindən istifadə edin Həyat gözlənilməzdir. İnsanların diqqəti dağılır. İstənilən yaxşı zolaq sistemi qüsurları gözləməlidir. Zolaq sistemi üçün ən böyük psixoloji təhdidlərdən biri buraxılmış bir gündən sonra sıfıra sıfırlanmasıdır. "Etik" bir xətt sistemi istifadəçiyə bir az boşluq verməlidir. Tutaq ki, 90 günlük şahmat öyrənmə seriyanız var. Üç yaxşı ay ərzində ardıcıl olmusunuz və bir gün səyahət edərkən telefonunuz ölür və eynilə 90 0 olur - hər şey, bütün bu səylər silinir və irəliləyiş yox olur. İstifadəçi tamamilə məhv ola bilər. Onu sıfırdan yenidən qurmaq fikri o qədər ruhdan salır ki, bu səyə dəyməz. Ən pis halda, istifadəçi uğursuzluq hiss etdikdən sonra proqramı tərk edə bilər. Zolaq sisteminizə "lütf" mexanizmi əlavə etməyi düşünün:
Streak Freezeİstifadəçilərə cəzasız bir günü qəsdən buraxmağa icazə verin. Əlavə Vaxt Sıfırlamağa başlamazdan əvvəl adi son tarixdən bir neçə saat (2-3) keçməsinə icazə verin. Çürümə Modelləri Sərt sıfırlama əvəzinə zolaq kiçik bir miqdar azalır, məsələn, buraxılmış günə 10 gün zolaqdan çıxılır.
Həvəsləndirici Tondan istifadə edin Bir zolaq kəsildikdə istifadəçilərə göstərilən iki mesajı müqayisə edək:
"42 günlük seriyanızı itirdiniz. Yenidən başlayın." "42 gün ardıcıl olaraq gəldiniz. Bu, inanılmaz irəliləyişdir! Yenidən cəhd etmək istəyirsiniz?"
Hər ikisi eyni məlumatı çatdırır, lakin emosional təsir fərqlidir. İlk mesaj, çox güman ki, istifadəçinin ruhdan düşməsinə səbəb olacaq və onun işdən çıxmasına səbəb olacaq. İkinci mesaj artıq əldə edilənləri qeyd edir və istifadəçini yenidən cəhd etməyə həvəsləndirir. Streak Systems Design Challenges Bir zolaq sisteminin qurulmasının texniki xüsusiyyətlərinə keçməzdən əvvəl, qarşılaşa biləcəyiniz çətinliklərdən xəbərdar olmalısınız. Gözlədiyiniz kimi işlər mürəkkəbləşə bilər. Saat qurşağının idarə edilməsi Vaxt və tarixlə işləməyin tərtibatçıların məşğul olduğu ən çətin anlayışlar arasında olmasının bir səbəbi var. Formatlaşdırma, beynəlmiləlləşdirmə və daha çox şey nəzərə alınmalıdır. İcazə verin sizdən soruşum: Bir gün nə sayılır? Dünyanın müxtəlif saat qurşağında işlədiyini bilirik və bu kifayət deyil, bəzi bölgələrdə ildə iki dəfə baş verən Yaz Saatına (DST) malikdir. Bu kənar işlərə haradan başlayırsınız? Sabahın "başlanğıcı" nə hesab olunur? Bəzi tərtibatçılar UTC kimi bir mərkəzi saat qurşağından istifadə edərək bunun qarşısını almağa çalışırlar. Bəzi istifadəçilər üçün bu düzgün nəticələr verə bilər, lakin bəziləri üçün bir saat, iki saat və ya daha çox sönə bilər. Bu uyğunsuzluq istifadəçi təcrübəsini pozur. İstifadəçilər pərdə arxasında vaxtı necə idarə etdiyinizə az əhəmiyyət verirlər; gözlədikləri tək şey budur ki, əgər onlar saat 23:40-da ardı-arası hərəkət etsələr, o zaman onların kontekstində həmin vaxt qeydiyyatdan keçməlidir. Siz server vaxtına deyil, istifadəçinin yerli saat qurşağına əsasən “bir gün” təyin etməlisiniz. Əlbətdə ki, asan yoldan keçə bilərsinizUTC gecə yarısı bütün istifadəçilər üçün qlobal miqyasda zolaqları marşrutlaşdırın və sıfırlayın, lakin siz çox ədalətsizlik yaradırsınız. Kaliforniyada kiminsə Londonda yaşayan birindən daha çox tapşırığını yerinə yetirmək üçün həmişə səkkiz əlavə saatı olur. Bu, müəyyən istifadəçiləri yerlərinə görə cəzalandıran ədalətsiz dizayn qüsurudur. Bəs əgər həmin şəxs Londonda yalnız ziyarət edirsə, tapşırığı yerinə yetirirsə, sonra başqa vaxt qurşağına qayıdırsa? Bütün bunların effektiv həlli istifadəçilərdən təyyarəyə daxil olma zamanı (tercihen ilk autentifikasiyadan sonra) öz vaxt qurşağını açıq şəkildə təyin etmələrini xahiş etməkdir. Vaxt qurşağı məlumatının təqdim edilməsinin şəxsi müəyyən edilə bilən məlumat kimi istifadə edilməkdənsə, yalnız tərəqqini dəqiq izləmək üçün tətbiq üçün istifadə edildiyinə dair incə bir qeyd əlavə etmək yaxşı bir fikirdir. Və bunu dəyişən bir parametr etmək başqa yaxşı fikirdir. Hər kəsə proqramda saat qurşağı məntiqini birbaşa idarə etməkdən çəkinməyi təklif edirəm. Moment.js və ya pytz (Python) və s. kimi sınaqdan keçirilmiş və doğru tarix kitabxanalarından istifadə edin. Bu kimi mürəkkəb bir şey üçün təkəri yenidən kəşf etməyə ehtiyac yoxdur. Buraxılmış Günlər və Edge Cases Narahat olmanız lazım olan başqa bir problem, istifadəçilərin həddindən artıq yatması, serverin işləməməsi, gecikmə, şəbəkə uğursuzluqları və s. kimi idarəolunmaz kənar hallardır. Əvvəllər müzakirə etdiyimiz kimi lütf mexanizmləri ideyasından istifadə kömək edə bilər. İki saatlıq lütf pəncərəsi həm istifadəçiyə, həm də tərtibatçıya kömək edə bilər, o mənada ki, istifadəçilər idarə olunmayan həyat şəraitinə görə sərt şəkildə cəzalandırılmırlar. Tərtibatçılar üçün lütf pəncərələri gecənin ortasında serverin işə düşdüyü idarəolunmaz anlarda faydalıdır. Hər şeydən əvvəl, heç vaxt müştəriyə etibar etməyin. Həmişə server tərəfində doğrulayın. Server yeganə həqiqət mənbəyi olmalıdır. Aldatmanın qarşısının alınması Yenə də bunu kifayət qədər vurğulaya bilmərəm: server tərəfində olan hər şeyi doğruladığınızdan əmin olun. İstifadəçilər insanlardır və insanlar fürsət verilsə, aldada bilərlər. Bu qaçılmazdır. Siz cəhd edə bilərsiniz:
Bütün hərəkətlərin UTC vaxt damğaları ilə saxlanması. Müştəri öz yerli vaxtını göndərə bilər, lakin server onu dərhal UTC-yə çevirə və server vaxtı ilə uyğunlaşdıra bilər. Beləliklə, müştərinin vaxt möhürü şübhəli şəkildə uzaqdırsa, sistem onu xəta kimi rədd edə bilər və UI buna uyğun cavab verə bilər. Hadisəyə əsaslanan izləmədən istifadə etməklə. Başqa sözlə, istifadəçinin ID-si, yerinə yetirilən fəaliyyət növü, vaxt ştampı və saat qurşağı kimi məlumatlar daxil olmaqla, metadata ilə hər bir fəaliyyətin qeydini saxlayın. Bu təsdiqləməyə kömək edir.
Streak Sistemi Mühərrikinin qurulması Bu kod təlimatı deyil, ona görə də sizə bir dəstə kod atmaqdan çəkinəcəyəm. Mən bunu praktik olaraq saxlayacağam və işlərin arxitektura, axın və etibarlılıq baxımından ümumiyyətlə zolaqlı sistem mühərrikini necə işlətdiyini təsvir edəcəyəm. Əsas Memarlıq Bir neçə dəfə dediyim kimi, serveri ardıcıl məlumatlar üçün yeganə həqiqət mənbəyi edin. Arxitektura serverdə belə bir şeyə gedə bilər:
Hər bir istifadəçinin məlumatlarını verilənlər bazasında saxlayın. Cari zolaq anbarını (defolt olaraq 0) tam ədəd kimi saxlayın. Saat qurşağına üstünlük verin, məsələn, IANA Saat qurşağı sətirini (ya birbaşa yerli vaxt möhüründən və ya istifadəçidən öz saat qurşağını seçməsini xahiş etməklə) saxlayın. Məsələn, "Amerika/New_York". İstifadəçinin yerli saat qurşağına nisbətən vaxt qurşağı yoxlanışı ilə zolağın davam edib-etmədiyini və ya kəsildiyini müəyyən etmək üçün bütün məntiqi idarə edin.
Eyni zamanda, müştəri tərəfində:
Adətən serverdən alınan cari zolağı göstərin. İstifadəçinin faktiki olaraq uyğunluq zolağı hərəkətini tamamlayıb-başlamadığını yoxlamaq üçün metadata şəklində yerinə yetirilən əməliyyatı serverə göndərin. Server cavablarına əsasən vizual rəy təmin edin.
Beləliklə, qısaca desək, beyin serverdədir, müştəri isə nümayiş etdirmək və hadisələri təqdim etmək üçündür. Bu, bir çox uğursuzluqları və kənar halları xilas edir, həmçinin yeniləmələri və düzəlişləri asanlaşdırır. Məntiqi axın İstifadəçi hər hansı bir hərəkəti tamamlayanda minimal effektiv sistem mühərrikinin necə keçəcəyini təqlid edək:
İstifadəçi seçmə zolağı hərəkətini tamamlayır. Müştəri bir hadisəni serverə metadata kimi göndərir. Bu, "X istifadəçisi Z vaxt damğasında Y əməliyyatını tamamladı" ola bilər. Server bu hadisəni qəbul edir və əsas yoxlama aparır. Bu real istifadəçidir? Onlar təsdiqlənibmi? Aksiya etibarlıdırmı? Saat qurşağı uyğundurmu? Bu keçərsə, server verilənlər bazasından istifadəçinin zolağı məlumatlarını alır. Sonra, qəbul edilmiş fəaliyyət vaxt damğasını istifadəçinin yerli saat qurşağına çevirin. Serverə istifadəçinin yerli saat qurşağındakı təqvim tarixlərini (vaxt damğaları deyil) müqayisə etməyə icazə verin: Əgər həmin gündürsə, o zaman hərəkət lazımsızdır və heç bir dəyişiklik yoxdurzolaq. Növbəti gündürsə, zolaq uzanır və 1 artır. Bir gündən çox boşluq varsa, zolaq pozulur. Bununla belə, lütf mexanikasını tətbiq edə biləcəyiniz yer budur. Əgər lütf mexanizmi buraxılıbsa, zolağı 1-ə sıfırlayın.
Əgər mərhələ nailiyyətləri üçün tarixi datanı yadda saxlamağı seçsəniz, o zaman “ən uzun ardıcıllıq” və ya “ümumi aktiv günlər” kimi dəyişənləri yeniləyin. Bundan sonra server verilənlər bazasını yeniləyir və müştəriyə cavab verir. Bu kimi bir şey:
{ "cari_streak": 48, "ən uzun_zolaq": 50, "cəmi_aktiv_günlər": 120, "streak_extended": doğru, }
Əlavə bir tədbir olaraq, server ya yenidən cəhd etməli, ya da rədd etməli və proses zamanı hər hansı bir uğursuzluq olduqda müştərini xəbərdar etməlidir. Dözümlülük üçün Bina Daha əvvəl qeyd edildiyi kimi, istifadəçilər səhvlər və ya serverin dayanması səbəbindən bir sıra itirənlər dəhşətli UX-dir və istifadəçilər bunun üçün düşməyi gözləmirlər. Beləliklə, zolaq sisteminizdə bu ssenarilər üçün qorunmalar olmalıdır. Əgər server texniki xidmət üçün (və ya hər hansı səbəbdən) işləməyibsə, onu düzəltmək üçün əlavə saatların müvəqqəti pəncərəsinə icazə verin ki, hərəkətlər gec təqdim olunsun və hələ də sayıla bilsin. Siz həmçinin istifadəçiləri xəbərdar etməyi seçə bilərsiniz, xüsusən də vəziyyət davam edən zolağa təsir edə bilərsə. Qeyd: Məlumatların əl ilə bərpa oluna biləcəyi idarəçi arxa qapısı yaradın. Səhvlər qaçınılmazdır və bəzi istifadəçilər proqramınıza zəng edər və ya nəzarət edə bilmədikləri səbəbə görə zolağının qırılmasına dəstək olmaq üçün müraciət edərdilər. Əgər araşdırmadan sonra istifadəçi haqlıdırsa, siz zolaqları əl ilə bərpa edə bilməlisiniz. Nəticə Bir şey aydın olaraq qalır: Streaks həqiqətən güclüdür, çünki insan psixologiyası fundamental səviyyədə necə işləyir. Orada ən yaxşı zolaq sistemi istifadəçilərin şüurlu şəkildə düşünmədiyi sistemdir. Bu, müntəzəm vərdiş halına gələn dişləri fırçalamaq kimi dərhal nəticələr və ya görünən tərəqqi üçün bir rutin halına gəldi. Mən sadəcə olaraq deyəcəyəm: Bütün məhsullar bir zolaq sisteminə ehtiyac duymur. Gündəlik aktiv istifadəçiləri istədiyiniz üçün həqiqətən ardıcıllığı məcbur etməlisiniz? Cavab çox yaxşı "yox" ola bilər.