Esu tikras, kad girdėjote apie dryžius arba su juo naudojote programą. Bet kada nors susimąstėte, kodėl juostos yra tokios populiarios ir galingos? Na, yra akivaizdu, kad programos nori kuo daugiau jūsų dėmesio, bet be to, ar žinojote, kad kai populiari mokymosi programa „Duolingo“ pristatė „iOS“ valdiklius, kad būtų rodomi ruožai, vartotojų įsipareigojimas išaugo 60%. Šešiasdešimt procentų yra didžiulis elgsenos pokytis ir parodo, kaip „juodų“ modeliai gali būti naudojami siekiant padidinti įsitraukimą ir paskatinti naudojimą. Paprasčiausiai seka yra dienų, per kurias vartotojas atlieka konkrečią veiklą, skaičius iš eilės. Kai kurie žmonės tai taip pat apibrėžia kaip „žaidybinį“ įprotį arba metriką, skirtą skatinti nuoseklų naudojimą. Tačiau ruožai yra ne tik metrika ar įrašas programoje; tai labiau psichologinis dalykas. Žmogaus instinktus lengva paveikti tinkamais veiksniais. Pažvelkite į šiuos tris veiksnius: pažangą, pasididžiavimą ir baimę praleisti (dažniausiai vadinama FOMO). Ką visi šie turi bendro? Pastangos. Kuo daugiau pastangų įdedate į ką nors, tuo labiau tai formuoja jūsų tapatybę, ir taip į elgesio psichologijos pasaulį kertasi dryžiai. Dabar su didele galia ateina didžiulė atsakomybė ir dėl to yra tamsioji nesėkmių pusė. Šiame straipsnyje mes apžvelgsime psichologiją, UX ir dizaino principus, kurie padeda sukurti veiksmingą serijų sistemą. Išnagrinėsime (1) kodėl mūsų smegenys beveik instinktyviai reaguoja į juostų veiklą, (2) kaip sukurti ruožus taip, kad jie tikrai padėtų vartotojams, ir (3) techninis darbas, susijęs su ruožų modelio kūrimu. Psichologija už dryžių Norėdami sukurti ir sukurti veiksmingą juostų sistemą, turime suprasti, kaip ji suderinama su mūsų smegenų laidais. Pavyzdžiui, kas daro jį tokiu veiksmingu, kad jaučiame tiek daug atsidavimo apsaugoti savo vėžes? Yra trys įdomūs, gerai dokumentuoti psichologijos principai, kurie palaiko tai, kas daro juostas tokias galingas ir sukeliančias priklausomybę. Atsigavimas nuo nuostolių Tai turbūt pati stipriausia jėga už sėkmių. Sakau tai, nes dažniausiai gyvenime to beveik nepavyks išvengti. Pagalvokite apie tai taip: jei draugas jums duos 100 USD, būsite laimingas. Bet jei prarastumėte 100 USD iš savo piniginės, tai pakenktų kur kas labiau. Emocinis šių situacijų svoris nėra lygus. Pralaimėjimas skaudina labiau, nei pelnas jaučiasi gerai. Pažvelkime toliau ir pasakykime, kad duodu jums 100 USD ir prašau jūsų lošti. Yra 50% tikimybė, kad laimėsite dar 100 USD, ir 50% tikimybė, kad prarasite pradinius 100 USD. Ar paimtum? Nenorėčiau. Dauguma žmonių to nedarytų. Tai yra nenoras nuostolių. Jeigu pagalvoji, tai logiška, suprantama, žmogiška. Atsigavimo nuo nuostolių samprata yra ta, kad skausmą ką nors praradę jaučiame dvigubai daugiau nei malonumą įgyti kažką tokio pat vertingo. Psichologiniu požiūriu praradimas išlieka labiau nei pelnas. Tikriausiai matote, kaip tai susiję su dryžiais. Norint sukurti pastebimą ruožą, reikia pastangų; augant ruožui, už jo esanti motyvacija pradeda blėsti; o tiksliau – ima tapti antraeiliais. Štai pavyzdys: tarkime, kad jūsų draugas turi trijų dienų seriją ir uždaro „Move Rings“ savo „Apple Watch“. Jie beveik neturi ko prarasti, išskyrus norą pasiekti savo tikslą ir būti nuoseklūs. Tuo pačiu metu jūsų laukia įspūdinga 219 dienų serija. Tikėtina, kad esate įstrigę baimės jį prarasti. Greičiausiai šiuo metu negalvojate apie pasiekimą; tai daugiau apie jūsų investuotų pastangų apsaugą, o tai yra nenoras nuostolių. „Duolingo“ paaiškina, kaip nenoras dėl nuostolių prisideda prie vartotojo nenoro nutraukti ilgą seriją, net ir tingiausiomis dienomis. Tam tikra prasme, potraukis gali virsti įpročiu, kai įsivyrauja nenoras nuostolių. Foggo elgesio modelis (B = MAP) Dabar, kai suprantame baimę prarasti pastangas, įdėtas į ilgesnes serijas, kitas klausimas yra toks: kas verčia mus iš pradžių tai padaryti, diena po dienos, net prieš tai, kai serija tampa didelė? Būtent apie tai yra Foggo elgesio modelis. Tai gana paprasta. Elgesys (B) atsiranda tik tada, kai trys veiksniai – motyvacija (M), gebėjimai (A) ir raginimas (P) – sutampa tuo pačiu metu. Taigi lygtis B=MAP. Jei tuo metu trūksta kurio nors iš šių veiksnių, net vieno, toks elgesys neįvyks. Taigi, kad ruožų sistema būtų veiksminga ir pasikartotų, turi būti visi trys veiksniai: Motyvacija Tai yra trapi, o ne nuolatinis dalykas. Būna dienų, kai esipumpuojamas mokytis ispanų kalbos, o dienomis net nejauti valios išmokti kalbą. Pati motyvacija susikurti įprotį yra nepatikima ir pralaimėta kova nuo pat pirmos dienos. Gebėjimas Norint kompensuoti motyvacijos apribojimus, gebėjimai yra labai svarbūs. Šiame kontekste gebėjimas reiškia veiksmo lengvumą, t. y. pastangos yra tokios lengvos, kad nerealu sakyti, kad tai neįmanoma. Dauguma programų sąmoningai tai naudoja. „Apple Fitness“ jums tereikia stovėti minutę per valandą, kad užsidirbtumėte varnelę link savo „Stand“ tikslo. Duolingo tereikia vienos baigtos pamokos. Šios užduotys nereikalauja tiek daug pastangų. Kliūtis yra tokia žema, kad net ir blogiausiomis dienomis galite tai padaryti. Tačiau jungtinės nuolatinės serijos pastangos yra ta vieta, kur kyla mintis tą seriją prarasti. PromptŠtai užbaigia lygtį. Žmonės iš prigimties yra užmaršūs, todėl taip, sugebėjimai gali mus pasiekti 90 proc. Tačiau raginimas mums primena, kad reikia veikti. Juostos yra patvarios pagal dizainą, todėl vartotojams reikia nuolat priminti, kad reikia veikti. Norėdami pamatyti, koks gali būti raginimas, „Duolingo“ atliko A/B testą, kad pamatytų, ar mažas raudonas ženklelis programos piktogramoje padidino nuoseklų naudojimą. Dėl to 6 % padidėjo kasdienių aktyvių vartotojų skaičius. Tiesiog raudonas ženklelis. Modelio apribojimai Visa tai pasakius, Fogg modelis turi apribojimų, nes kritikai ir šiuolaikiniai tyrimai pastebėjo, kad dizainas, kuris per daug remiasi raginimais, pavyzdžiui, agresyviais pranešimais, gali sukelti psichinį nuovargį. Nuolatiniai pranešimai ir viršvalandžiai gali priversti vartotojus nusiraminti. Taigi, saugokitės to. Zeigarniko efektas Kaip jaučiatės, kai paliekate projekto užduotį įpusėjusią? Tai erzina daugelį žmonių, nes nebaigtos užduotys užima daugiau protinės erdvės nei dalykai, kuriuos atliekame. Kai kas nors padaroma ir nebėra, mes linkę tai pamiršti. Kai kas nors paliekama nepadaryta, tai linkusi apsunkinti mūsų protus. Būtent todėl skaitmeniniuose produktuose naudojami dirbtiniai pažangos indikatoriai, pvz., „Upwork“ profilio užbaigimo juosta, kad vartotojas žinotų, jog jo profilis yra tik „60 % užbaigtas“. Tai skatina vartotoją užbaigti tai, ką pradėjo.
Pažvelkime į kitą pavyzdį. Turite penkias užduotis užduočių sąrašo programoje, o dienos pabaigoje pažymėsite tik keturias iš jų kaip atliktas. Daugelis iš mūsų jausis neatlikę dėl tos vienos neatliktos užduoties. Štai čia yra Zeigarniko efektas. Zeigarniko efektą įrodė psichologas Bluma Zeigarnik, kuris apibūdino, kad mes linkę išlaikyti neužbaigtas užduotis aktyvias savo atmintyje ilgiau nei atliktas užduotis. Juosčių raštas natūraliai prisiliečia prie UX dizaino. Tarkime, kad esate 63 mokymosi dienos. Tuo metu esate nuolatiniame nebaigtų darbų modelyje. Jūsų smegenys retai pamiršta apie tai, nes tai sėdi jūsų proto gale. Šiuo metu jūsų smegenys tampa tomis, kurios siunčia jums pranešimus. Kai sujungiate šias psichologines jėgas, iš tikrųjų pradedate suprasti, kodėl dryžiai nėra tik įprasta programos funkcija; jie gali pakeisti žmogaus elgesį. Tačiau kažkur išilgai – negaliu tiksliai pasakyti, kada, nes tai skiriasi kiekvienam – viskas pasiekia tašką, kai serija iš „linksmų“ pereina į tai, ko, tavo manymu, negali sau leisti prarasti. Juk nenorite, kad 58 dienų pastangos nueitų perniek? Būtent tai ir daro juostų sistemą veiksmingą. Jei tai daroma teisingai, juostos padeda vartotojams susikurti stulbinančius įpročius, kurie pasiekia tikslą. Tai gali būti skaitymas kasdien arba nuolatinis lankymasis sporto salėje. Šie pasikartojantys veiksmai (kartais nedideli) ilgainiui susilieja ir tampa akivaizdūs mūsų kasdieniame gyvenime. Tačiau kiekviena moneta turi dvi puses. Plona riba tarp įpročio ir prievartos Jei sekėte kartu, jau galite pasakyti, kad yra tamsioji juostų sistemų pusė. Įpročio formavimas yra nuoseklumas siekiant pakartotinio tikslo. Tačiau prievarta yra nuoseklus darbas siekiant tikslo, kuris nebereikalingas, bet laikomas iš baimės ar spaudimo. Tai skustuvo plonumo linija. Kiekvieną rytą negalvodamas išsivalote dantis; jis yra automatinis ir instinktyvus, turintis aiškų tikslą gerai kvėpuoti. Tai yra geras įprotis formuojantis ruožas. Etiška ruožo sistema suteikia vartotojams erdvės kvėpuoti. Jei dėl kokių nors priežasčių ryte nevalysite, galite valytis vidurdienį. Netobulumas leidžiamas, nebijant prarasti ilgų pastangų. Prievarta krypsta priešingu keliu, kai serija verčia nerimauti, jautiesi kaltas ar net išsekęs, o kartais atrodo, kad nieko nepasiekei, nepaisant visų savodirbti. Elgiatės ne todėl, kad to norite, o todėl, kad nesąmoningai bijote, kad jūsų pažanga nustos iki nulio. Kažkas net puikiai tai apibūdino: „Jaučiau, kad apgaudinėju, bet tiesiog man nerūpėjo. Aš esu niekas be savo potraukio“. Tai rodo, kad asmuo gali turėti ekstremalių laikymosi juostų. Tiek, kiek naudotojai pradeda susieti savo savivertę su savavališka metrika, o ne su pradiniu tikslu ar priežastimi, dėl kurios jie pradėjo seriją. Juosta tampa tuo, kas jie yra, o ne tik tuo, ką jie daro. Gerai suplanuota etikos sekimo sistema vartotojui turėtų jaustis kaip padrąsinimas, o ne spaudimas ar įpareigojimas. Tai susiję su vidinės ir išorinės motyvacijos pusiausvyra. Išorinė motyvacija (išorinis atlygis, bausmės išvengimas) gali paskatinti vartotojus pradėti, tačiau vidinė motyvacija (atlikti užduotį siekiant asmeninio tikslo, pavyzdžiui, mokytis ispanų kalbos, nes tikrai norite bendrauti su mylimu žmogumi) yra stipresnė ilgalaikiam įsitraukimui. Gera sistema turėtų orientuotis į vidinę motyvaciją, atsargiai naudojant išorinius elementus, t. y. priminti vartotojams, kiek jie nuėjo, o ne grasinti tuo, ką jie gali prarasti. Vėlgi, tai puiki linija. Paprastas bandymas kuriant juostų sistemą yra iš tikrųjų skirti šiek tiek laiko ir pagalvoti, ar jūsų produktai uždirba pinigų parduodant nerimo sprendimus, kuriuos sukūrė jūsų produktas. Jei taip, yra didelė tikimybė, kad išnaudojate vartotojus. Taigi, kitas klausimas tampa: Jei aš pasirinksiu naudoti juostą, kaip sukurti jį taip, kad tikrai padėtų vartotojams pasiekti savo tikslus? „Good Streak“ sistemos dizaino UX Manau, kad būtent čia dauguma projektų arba primeta veiksmingą eilių sistemą, arba visiškai ją sujaukia. Peržiūrėkime kai kuriuos gero serijos dizaino UX principus. Laikykite tai be pastangų Tikriausiai tai girdėjote anksčiau, galbūt iš tokių knygų kaip „Atominiai įpročiai“, tačiau verta paminėti, kad vienas iš paprasčiausių būdų susiformuoti įpročius yra padaryti veiksmą mažytį ir lengvą. Tai panašu į gebėjimų faktorių, kurį aptarėme iš Fogg elgesio modelio. Pirmoji bet kokio rutulio dizaino taisyklė turėtų būti, kad reikiamas veiksmas būtų kuo mažesnis žmogiškai, tuo pačiu siekiant pažangos. Jei kasdieniniam veiksmui atlikti reikia valios pastangų, šis veiksmas nepraeis penkių dienų. Kodėl? Jūs negalite būti motyvuotas penkias dienas iš eilės. Pavyzdys: jei naudojate meditacijos programą, jums nereikia versti vartotojų atlikti 20 minučių seansą vien tam, kad išlaikytumėte seką. Vietoj to pabandykite vieną minutę, galbūt net trisdešimt sekundžių. Kaip sakoma, maži vandens lašeliai sukuria galingą vandenyną). Mažos pastangos laikui bėgant virsta dideliais pasiekimais. Toks turėtų būti tikslas: pašalinti trintį, ypač kai momentas gali būti sunkus. Kai naudotojai patiria stresą arba pervargę, praneškite jiems, kad tiesiog pasirodymas, net ir kelioms sekundėms, laikomas pastangomis. Pateikite aiškų vaizdinį atsiliepimą Žmonės iš prigimties yra vizualūs. Dažniausiai mums reikia ką nors pamatyti, kad tikėtume; reikia vizualizuoti dalykus, kad juos geriau suprastume ir pažvelgtume į perspektyvą. Štai kodėl ruožų modeliuose dažnai naudojami vaizdiniai elementai, pvz., grafikai, varnelės, eigos žiedai ir tinkleliai, kad būtų galima vizualizuoti pastangas. Pažiūrėkite į „GitHub“ indėlio grafiką. Tai paprastas nuoseklumo vizualizavimas. Tačiau kūrėjai jį įkvepia kaip deguonį.
Svarbiausia, kad ruožų sistema nesijaustų abstrakti. Tai turėtų jaustis tikra ir pelnyta. Pavyzdžiui, „Duolingo“ ir „Apple“ kūno rengybos žiedai naudoja švarų animacijos dizainą užbaigus seriją, o „GitHub“ rodo istorinius vartotojo nuoseklumo duomenis laikui bėgant.
Naudokite gerą laiką Anksčiau minėjau, kad žmonės paprastai yra užmaršūs iš prigimties ir kad raginimai gali padėti išlaikyti pagreitį. Be raginimų dauguma naujų vartotojų pamiršta tęsti. Gyvenimas gali būti užimtas, dingsta motyvacija ir nutinka visko. Net ir ilgą laiką dirbantys vartotojai gauna naudos iš raginimų, nors dažniausiai jie jau yra užrakinti įpročių kilpoje. Nepaisant to, net labiausiai įsipareigojęs žmogus gali netyčia praleisti dieną. Jūsų serijų sistemai tikrai reikia priminimų. Dažniausiai naudojami greitieji priminimai yra tiesioginiai pranešimai. Laikas labai svarbus dirbant su tiesioginiais pranešimais. Programos tipas taip pat svarbus. 9 val. ryto išsiųsti pranešimą, kuriame sakoma: „Šiandien nesitreniravote“, mokymosi programoje yra tiesiog keista, nes daugelis turi ką nuveikti dieną prieš net pagalvodami apie pamokos pabaigą. Tačiau jei kalbame apie kūno rengybos programą, taiyra pagrįsta ir galbūt net tikimasi, kad bus priminta anksčiau tą pačią dieną. Push pranešimai labai skiriasi priklausomai nuo programos kategorijos. Pvz., kūno rengybos programos rodo didesnį įsitraukimą, kai gaunami pranešimai anksti ryte (7–8 val.), o produktyvumo programos gali veikti geriau anksti vidurdienį. Svarbiausia yra A/B išbandyti programos laiką pagal naudotojų elgesį, o ne manyti, kad viskas tinka visiems. Tai, kas tinka meditacijos programai, gali netikti kodavimo stebėjimo priemonei. Kiti raginimo būdai yra raudoni taškai programos piktogramoje ir net programos valdikliai. Tyrimai skiriasi, tačiau vidutinis žmogus savo įrenginį atrakina 50–150 kartų per dieną (PDF). Jei vartotojas mato raudoną tašką programoje ar valdiklyje, nurodantį esamą seką kiekvieną kartą, kai atrakina telefoną, tai padidina įsipareigojimą. Tik nepersistenkite; raginimas turėtų tarnauti kaip priminimas, o ne raginimas. Švęskite etapus Serija turi stengtis švęsti etapus, kad iš naujo sužadintų emocijas, ypač tiems, kurie yra giliai įžengę į seriją. Kai vartotojas pasiekia 7, 30, 50, 100, 365 dieną, turėtumėte tai padaryti daug. Pripažinkite pasiekimus – ypač ilgalaikiams naudotojams.
Kaip matėme anksčiau, „Duolingo“ tai išsiaiškino ir įdiegė animuotą grafiką, kuri pažymi etapus su konfeti. Kai kurios platformos netgi suteikia didelių premijų, kurios patvirtina vartotojų pastangas. Ir tai gali būti naudinga programoms, nes vartotojai linkę viešai bendrinti savo etapus socialinėje žiniasklaidoje. Kitas privalumas – laukimas, kuris ateina prieš pasiekiant etapus. Tai ne tik išlikti gyvas be galo; vartotojai turi ko laukti. Naudokite malonės mechanizmus Gyvenimas nenuspėjamas. Žmonės blaškosi. Bet kokia gera ruožų sistema turėtų tikėtis netobulumo. Viena didžiausių psichologinių grėsmių serijų sistemai yra sunkus atstatymas iki nulio po vienos praleistos dienos. „Etinė“ ruožų sistema turėtų suteikti vartotojui šiek tiek laisvumo. Tarkime, kad turite 90 dienų šachmatų mokymosi seriją. Tris gerus mėnesius buvai nuoseklus, o vieną dieną keliaujant užgęsta tavo telefonas ir kaip tik 90 tampa 0 — viskas, visos pastangos išsitrina, o pažanga dingsta. Vartotojas gali būti visiškai nuniokotas. Mintis atstatyti jį nuo nulio taip demoralizuoja, kad dėti pastangas neverta. Blogiausiu atveju vartotojas gali atsisakyti programos po to, kai pasijunta nesėkmingas. Apsvarstykite galimybę pridėti „malonės“ mechanizmą į savo serijų sistemą:
Streak FreezeLeiskite vartotojams tyčia praleisti dieną be nuobaudų. Papildomas laikas Prieš pradėdami iš naujo nustatyti, leiskite praėjus kelioms valandoms (2–3) po įprasto termino. Decay Models Vietoj sunkaus nustatymo iš naujo, seka sumažėja nedaug, pvz., 10 dienų atimama iš serijos už praleistą dieną.
Naudokite padrąsinantį toną Palyginkime du pranešimus, rodomus vartotojams, kai nutrūksta serija:
"Praradote savo 42 dienų seriją. Pradėkite iš naujo." "Jūs pasirodėte 42 dienas iš eilės. Tai neįtikėtina pažanga! Norite dar kartą pabandyti?"
Abi perteikia tą pačią informaciją, tačiau emocinis poveikis skiriasi. Pirmoji žinutė greičiausiai privers vartotoją pasijusti demoralizuota ir priversti jį mesti darbą. Antroji žinutė švenčia tai, kas jau buvo pasiekta, ir švelniai skatina vartotoją bandyti dar kartą. „Streak Systems“ projektavimo iššūkiai Prieš pradėdami nagrinėti technines juostų sistemos kūrimo specifikas, turėtumėte žinoti, su kokiais iššūkiais galite susidurti. Viskas gali būti sudėtinga, kaip ir galima tikėtis. Laiko juostų tvarkymas Yra priežastis, kodėl laiko ir datos tvarkymas yra viena iš sunkiausių sąvokų, su kuriomis kūrėjai susiduria. Reikia atsižvelgti į formatavimą, internacionalizavimą ir dar daugiau. Leiskite paklausti: kas laikoma diena? Žinome, kad pasaulis veikia skirtingomis laiko juostomis, ir lyg to būtų negana, kai kuriuose regionuose yra vasaros laikas (DST), kuris vyksta du kartus per metus. Kur net pradėti tvarkyti šiuos kraštutinius atvejus? Kas laikoma rytojaus „pradžia“? Kai kurie kūrėjai bando to išvengti naudodami vieną centrinę laiko juostą, pvz., UTC. Kai kuriems naudotojams tai duotų teisingus rezultatus, tačiau kai kuriems tai gali sumažėti valandą, dvi valandas ar daugiau. Šis nenuoseklumas gadina vartotojo patirtį. Vartotojams mažiau rūpi, kaip tvarkote laiką užkulisiuose; viskas, ko jie tikisi, yra tai, kad jei jie atlieka serijos veiksmą 23:40 val., tada jis turėtų būti užregistruotas būtent tuo metu, atsižvelgiant į jų kontekstą. Turėtumėte apibrėžti „vieną dieną“ pagal vartotojo vietinę laiko juostą, o ne serverio laiką. Žinoma, galite pasiimti lengviaumaršrutą ir iš naujo nustatyti serijas visame pasaulyje visiems vartotojams vidurnaktį UTC, bet jūs labai sukuriate nesąžiningumą. Kažkas Kalifornijoje visada turi aštuonias papildomas valandas savo užduočiai atlikti nei tas, kuris gyvena Londone. Tai neteisingas dizaino trūkumas, baudžiantis tam tikrus vartotojus dėl jų buvimo vietos. O kas, jei tas žmogus Londone tik lankosi, atlieka užduotį, o paskui grįžta į kitą laiko juostą? Vienas iš veiksmingų visų šių sprendimų yra paprašyti vartotojų aiškiai nustatyti savo laiko juostą prisijungimo metu (geriausia po pirmojo autentifikavimo). Vertėtų įtraukti subtilią pastabą, kad laiko juostos informacija naudojama tik programai tiksliai sekti pažangą, o ne naudojama kaip asmenį identifikuojantys duomenys. Ir dar viena gera idėja, kad tai būtų keičiama nuostata. Siūlau visiems vengti tiesiogiai tvarkyti laiko juostos logiką programoje. Naudokite išbandytas datų bibliotekas, pvz., Moment.js arba pytz (Python) ir kt. Nereikia išradinėti dviračio tokiam sudėtingam dalykui kaip šis. Praleistų dienų ir krašto atvejai Kitas iššūkis, dėl kurio turėtumėte nerimauti, yra nekontroliuojami kraštiniai atvejai, pvz., vartotojų permiegojimas, serverio prastovos, delsa, tinklo gedimai ir pan. Gali padėti naudoti malonės mechanizmų idėją, kaip ir anksčiau aptartus. Dviejų valandų laikotarpis gali padėti ir vartotojui, ir kūrėjui, nes vartotojai nėra griežtai baudžiami už nekontroliuojamas gyvenimo aplinkybes. Kūrėjams malonės langai yra naudingi tomis nevaldomomis akimirkomis, kai vidury nakties sugenda serveris. Visų pirma, niekada nepasitikėkite klientu. Visada patvirtinkite serverio pusėje. Serveris turėtų būti vienintelis tiesos šaltinis. Apgaulės prevencija Vėlgi, negaliu to pakankamai pabrėžti: būtinai patvirtinkite viską serverio pusėje. Vartotojai yra žmonės, ir žmonės gali sukčiauti, jei jiems bus suteikta galimybė. Tai neišvengiama. Galite pabandyti:
Saugomi visi veiksmai su UTC laiko žymomis. Klientas gali siųsti savo vietinį laiką, tačiau serveris gali iš karto konvertuoti jį į UTC ir patvirtinti pagal serverio laiką. Tokiu būdu, jei kliento laiko žyma yra įtartinai toli, sistema gali ją atmesti kaip klaidą, o vartotojo sąsaja gali atitinkamai reaguoti. Naudojant įvykiais pagrįstą stebėjimą. Kitaip tariant, išsaugokite kiekvieno veiksmo įrašą su metaduomenimis, įskaitant informaciją, pvz., naudotojo ID, atlikto veiksmo tipą ir laiko žymą bei laiko juostą. Tai padeda patvirtinti.
„A Streak System“ variklio kūrimas Tai nėra kodo pamoka, todėl vengsiu jums išmesti daugybę kodų. Išsaugosiu tai praktiškai ir aprašysiu, kaip viskas paprastai veikia ruožų sistemos varikliu, kiek tai susiję su architektūra, srautu ir patikimumu. Pagrindinė architektūra Kaip jau kelis kartus sakiau, paverskite serverį vieninteliu tiesos šaltiniu duomenų srautams. Architektūra serveryje gali atrodyti panašiai:
Saugokite kiekvieno vartotojo duomenis duomenų bazėje. Išsaugokite dabartinę sekų saugyklą (numatytasis 0) kaip sveikąjį skaičių. Išsaugokite laiko juostos nuostatą, t. y. IANA laiko juostos eilutę (netiesiogiai iš vietinės laiko žymos arba aiškiai paprašydami vartotojo pasirinkti laiko juostą). Pavyzdžiui, „Amerika/Niujorkas“. Tvarkykite visą logiką, kad nustatytumėte, ar seka tęsiasi, ar nutrūksta, patikrindami laiko juostą, kuri yra susijusi su naudotojo vietine laiko juosta.
Tuo tarpu kliento pusėje:
Rodyti dabartinį seką, paprastai gaunamą iš serverio. Siųskite veiksmą metaduomenų forma į serverį, kad patikrintumėte, ar vartotojas iš tikrųjų atliko kvalifikacinį serijos veiksmą. Pateikite vaizdinį grįžtamąjį ryšį, pagrįstą serverio atsakymais.
Taigi, trumpai tariant, smegenys yra serveryje, o klientas skirtas rodyti ir pateikti įvykius. Taip išvengsite daugybės gedimų ir klaidų, taip pat palengvinsite atnaujinimus ir pataisymus. Loginis srautas Imituojame, kaip veiktų minimalaus efektyvumo ruožų sistemos variklis, kai vartotojas atlieka veiksmą:
Naudotojas užbaigia kvalifikacinį serijos veiksmą. Klientas siunčia įvykį serveriui kaip metaduomenis. Tai gali būti „Vartotojas X atliko Y veiksmą laiko žyme Z“. Serveris gauna šį įvykį ir atlieka pagrindinį patvirtinimą. Ar tai tikras vartotojas? Ar jie patvirtinti? Ar veiksmas galioja? Ar laiko juosta nuosekli? Jei tai praeina, serveris nuskaito vartotojo sekų duomenis iš duomenų bazės. Tada konvertuokite gautą veiksmo laiko žymą į naudotojo vietinę laiko juostą. Leiskite serveriui palyginti kalendoriaus datas (ne laiko žymes) naudotojo vietinėje laiko juostoje: Jei tai yra ta pati diena, veiksmas yra perteklinis ir nesikeičiaruožas. Jei tai yra kitą dieną, seka pailgėja ir padidėja 1. Jei yra daugiau nei vienos dienos tarpas, serija nutrūksta. Tačiau čia galite pritaikyti malonės mechaniką. Jei praleidžiamas malonės mechanizmas, iš naujo nustatykite seką į 1.
Jei pasirinksite išsaugoti istorinius laimėjimų duomenis, atnaujinkite tokius kintamuosius kaip „ilgiausia serija“ arba „visas aktyvių dienų skaičius“. Tada serveris atnaujina duomenų bazę ir atsako klientui. Kažkas panašaus:
{ "current_streak": 48, "longest_striak": 50, "total_active_days": 120, "streak_extended": tiesa, }
Be to, serveris turėtų bandyti dar kartą arba atmesti ir pranešti klientui, kai proceso metu kas nors nepavyksta. Pastatas atsparumui Kaip minėta anksčiau, dėl klaidų ar serverio prastovos pralaimintys vartotojai yra baisus UX, ir vartotojai nesitiki, kad dėl to nusileis. Taigi, jūsų serijų sistema turėtų turėti apsaugos priemones šiems scenarijams. Jei serveris neveikia dėl priežiūros (ar dėl kokių nors priežasčių), apsvarstykite galimybę leisti laikinai papildomų valandų, kad būtų galima sutvarkyti, kad veiksmai būtų pateikti pavėluotai ir vis tiek būtų skaičiuojami. Taip pat galite pasirinkti informuoti vartotojus, ypač jei situacija gali paveikti vykstančią seriją. Pastaba: sukurkite administratoriaus užpakalines duris, kur duomenis būtų galima atkurti rankiniu būdu. Klaidos yra neišvengiamos, o kai kurie naudotojai skambintų jūsų programai arba palaikytų, kad jų serija nutrūko dėl priežasties, kurios jie negalėjo kontroliuoti. Turėtumėte galėti rankiniu būdu atkurti ruožus, jei po tyrimo vartotojas teisus. Išvada Vienas dalykas lieka aiškus: dryžiai yra tikrai galingi dėl to, kaip žmogaus psichologija veikia pagrindiniame lygmenyje. Geriausia serijų sistema yra ta, apie kurią vartotojai sąmoningai negalvoja. Tai tapo tiesioginių rezultatų ar matomos pažangos rutina, pavyzdžiui, dantų valymas, kuris tampa įprastu įpročiu. Ir aš tiesiog pasakysiu tai: ne visiems produktams reikia dryžių sistemos. Ar tikrai turėtumėte priversti nuoseklumą vien todėl, kad norite kasdienių aktyvių vartotojų? Atsakymas labai gerai gali būti „ne“.