Sigurado akong narinig mo na ang mga streak o gumamit ng app na may isa. Ngunit kailanman naisip kung bakit ang mga streak ay napakapopular at makapangyarihan? Buweno, nariyan ang halatang gusto ng mga app ng mas maraming atensyon hangga't maaari, ngunit bukod doon, alam mo ba na noong ipinakilala ng sikat na learning app na Duolingo ang mga widget ng iOS upang magpakita ng mga streak, ang commitment ng user ay tumaas ng 60%. Ang animnapung porsyento ay isang malaking pagbabago sa pag-uugali at nagpapakita kung paano magagamit ang mga pattern ng "streak" upang mapataas ang pakikipag-ugnayan at humimok ng paggamit. Sa pinaka-basic nito, ang isang streak ay ang bilang ng magkakasunod na araw na nakumpleto ng isang user ang isang partikular na aktibidad. Tinutukoy din ito ng ilang tao bilang isang “gamified” na gawi o isang sukatan na idinisenyo upang hikayatin ang pare-parehong paggamit. Ngunit ang mga streak ay higit pa sa pagiging sukatan o talaan sa isang app; ito ay mas sikolohikal kaysa doon. Ang instinct ng tao ay madaling maimpluwensyahan ng mga tamang salik. Tingnan ang tatlong salik na ito: pag-unlad, pagmamalaki, at takot na mawala (karaniwang tinatawag na FOMO). Ano ang pagkakatulad ng lahat ng ito? Pagsisikap. Ang mas maraming pagsisikap na inilalagay mo sa isang bagay, mas hinuhubog nito ang iyong pagkakakilanlan, at iyon ay kung paano tumatawid ang mga guhit sa mundo ng sikolohiya ng pag-uugali. Ngayon, na may malaking kapangyarihan ay may malaking responsibilidad, at dahil doon, mayroong isang madilim na bahagi sa mga streak. Sa artikulong ito, tatalakayin natin ang sikolohiya, UX, at mga prinsipyo sa disenyo sa likod ng pagbuo ng isang epektibong streak system. Titingnan natin ang (1) kung bakit halos likas na tumutugon ang ating utak sa streak na aktibidad, (2) kung paano magdisenyo ng mga streak sa mga paraang tunay na nakakatulong sa mga user, at (3) ang teknikal na gawaing kasangkot sa pagbuo ng streak pattern. Ang Psychology Behind Streaks Upang magdisenyo at bumuo ng isang epektibong streak system, kailangan nating maunawaan kung paano ito nakaayon sa kung paano naka-wire ang ating mga utak. Tulad ng, ano ang ginagawang napakabisa nito hanggang sa maramdaman natin ang matinding dedikasyon upang protektahan ang ating mga streak? May tatlong kawili-wili, mahusay na dokumentado na mga prinsipyo ng sikolohiya na sumusuporta sa kung bakit ang mga streak ay napakalakas at nakakahumaling. Pagkawala ng Pag-iwas Ito marahil ang pinakamalakas na puwersa sa likod ng mga streak. Sinasabi ko ito dahil kadalasan, halos hindi mo ito maiiwasan sa buhay. Isipin ito sa ganitong paraan: Kung bibigyan ka ng isang kaibigan ng $100, magiging masaya ka. Ngunit kung nawalan ka ng $100 mula sa iyong wallet, mas masakit iyon. Ang emosyonal na bigat ng mga sitwasyong iyon ay hindi pantay. Ang pagkatalo ay mas masakit kaysa pakinabang sa pakiramdam. Dagdagan pa natin ito at sabihin na binibigyan kita ng $100 at hinihiling na maglaro ng sugal. Mayroong 50% na pagkakataong manalo ka ng isa pang $100 at isang 50% na pagkakataong matalo mo ang orihinal na $100. Kukunin mo ba? hindi ko gagawin. Karamihan sa mga tao ay hindi. Iyon ay pag-iwas sa pagkawala. Kung iisipin, ito ay lohikal, ito ay naiintindihan, ito ay tao. Ang konsepto sa likod ng pag-ayaw sa pagkawala ay nararamdaman natin ang sakit ng pagkawala ng isang bagay nang dalawang beses kaysa sa kasiyahan ng pagkakaroon ng isang bagay na may katumbas na halaga. Sa sikolohikal na mga termino, ang pagkawala ay nananatili nang higit pa kaysa sa mga pakinabang. Malamang na nakikita mo kung paano ito nauugnay sa mga streak. Upang makabuo ng isang kapansin-pansin na guhitan, nangangailangan ito ng pagsisikap; habang lumalaki ang isang streak, ang motibasyon sa likod nito ay nagsisimulang kumupas; o mas tumpak, nagsisimula itong maging pangalawa. Narito ang isang halimbawa: Sabihin na ang iyong kaibigan ay may tatlong araw na sunod-sunod na pagsasara ng kanilang "Move Rings" sa kanilang Apple Watch. Halos walang mawawala sa kanila maliban sa pagnanais na makamit ang kanilang layunin at maging pare-pareho. Kasabay nito, mayroon kang kahanga-hangang 219-araw na sunod-sunod na takbo. Malamang na nakulong ka sa takot na mawala ito. Malamang na hindi mo iniisip ang tagumpay sa puntong ito; ito ay higit pa tungkol sa pagprotekta sa iyong namuhunan na pagsisikap, at iyon ay pag-iwas sa pagkawala. Ipinapaliwanag ni Duolingo kung paano nakakatulong ang pag-iwas sa pagkawala sa pag-aatubili ng isang user na maputol ang isang mahabang streak, kahit na sa kanilang mga pinakatamad na araw. Sa isang paraan, ang isang streak ay maaaring maging isang ugali kapag nawala ang pag-iwas sa pagkawala. The Fogg Behavior Model (B = MAP) Ngayong naiintindihan na natin ang takot na mawala ang pagsisikap na namuhunan sa mas mahabang streak, ang isa pang tanong ay: Ano ang dahilan kung bakit natin ginagawa ang bagay sa unang lugar, araw-araw, bago pa man lumaki ang streak? Iyan ang tungkol sa Fogg Behavior Model. Ito ay medyo simple. Ang isang pag-uugali (B) ay nangyayari lamang kapag ang tatlong salik — Pagganyak (M), Kakayahan (A), at Prompt (P) — ay magkatugma sa parehong sandali. Kaya, ang equation B=MAP. Kung ang alinman sa mga salik na ito, kahit isa, ay nawawala sa sandaling iyon, ang pag-uugali ay hindi mangyayari. Kaya, para maging mahusay at umuulit ang isang streak system, dapat na naroroon ang lahat ng tatlong salik: PagganyakIto ay marupok at hindi isang bagay na palagiang naroroon. May mga araw na ikaw aymasiglang matuto ng Espanyol, at mga araw na hindi mo naramdaman ang kahit katiting na lakas ng loob para matutunan ang wika. Ang pagganyak sa sarili na bumuo ng isang ugali ay hindi mapagkakatiwalaan at isang talo na labanan mula sa unang araw. Kakayahang mabayaran ang mga limitasyon ng pagganyak, ang kakayahan ay kritikal. Sa kontekstong ito, ang kakayahan ay nangangahulugan ng kadalian ng pagkilos, ibig sabihin, ang pagsisikap ay napakadali na hindi makatotohanang sabihin na hindi ito posible. Karamihan sa mga app ay sadyang ginagamit ito. Kailangan lang ng Apple Fitness na tumayo ka ng isang minuto sa isang oras upang makakuha ng marka patungo sa iyong layunin sa Stand. Kailangan lang ng Duolingo ng isang natapos na aralin. Ang mga gawaing ito ay hindi nangangailangan ng lahat ng labis na pagsisikap. Napakababa ng hadlang na kahit sa pinakamasama mong araw, magagawa mo ito. Ngunit ang pinagsamang pagsisikap ng isang patuloy na streak ay kung saan nagsisimula ang ideya ng pagkawala ng streak na iyon. PromptIto ang kumukumpleto sa equation. Ang mga tao ay likas na makakalimutin, kaya oo, ang kakayahan ay makakakuha sa atin ng 90% doon. Ngunit ang isang prompt ay nagpapaalala sa atin na kumilos. Ang mga streak ay paulit-ulit ayon sa disenyo, kaya ang mga user ay kailangang palaging paalalahanan na kumilos. Para makita kung gaano kalakas ang isang prompt, gumawa si Duolingo ng A/B test para makita kung ang isang maliit na pulang badge sa icon ng app ay nagpapataas ng pare-parehong paggamit. Nagdulot ito ng 6% na pagtaas sa pang-araw-araw na aktibong user. Isang pulang badge lang. Mga Limitasyon ng Modelo Ang lahat ng ito ay sinabi, mayroong isang limitasyon sa modelo ng Fogg kung saan napansin ng mga kritiko at modernong pananaliksik na ang isang disenyo na masyadong umaasa sa mga senyas, tulad ng mga agresibong notification, ay may panganib na lumikha ng pagkapagod sa pag-iisip. Ang patuloy na mga abiso at overtime ay maaaring maging sanhi ng pag-churn ng mga user. Kaya, ingatan mo yan. Ang Zeigarnik Effect Ano ang pakiramdam mo kapag iniwan mo ang isang gawain ng proyekto na kalahating tapos na? Nakakainis iyan sa maraming tao dahil ang mga hindi natapos na gawain ay sumasakop sa mas maraming espasyo sa pag-iisip kaysa sa mga bagay na nakumpleto natin. Kapag tapos na ang isang bagay at wala na, nakakalimutan na natin ito. Kapag ang isang bagay ay naiwang bawiin, ito ay may posibilidad na mabigat sa ating isipan. Ito ang eksaktong dahilan kung bakit gumagamit ang mga digital na produkto ng mga artificial progress indicator, tulad ng profile completion bar ng Upwork, upang ipaalam sa isang user na ang kanilang profile ay "60% na kumpleto" lang. Hinihikayat nito ang gumagamit na tapusin ang kanilang nasimulan.
Tingnan natin ang isa pang halimbawa. Mayroon kang limang gawain sa isang to-do list app, at sa pagtatapos ng araw, apat lang sa kanila ang susuriin mo bilang nakumpleto. Marami sa atin ang mararamdaman na hindi natapos dahil sa isang hindi natapos na gawain. Iyon, doon, ay ang epekto ng Zeigarnik. Ang epekto ng Zeigarnik ay ipinakita ng psychologist na si Bluma Zeigarnik, na inilarawan na madalas nating panatilihing aktibo sa ating memorya ang mga hindi kumpletong gawain kaysa sa mga natapos na gawain. Ang isang streak pattern ay natural na nag-tap dito sa UX na disenyo. Sabihin nating nasa ika-63 araw ka ng isang sunod-sunod na pag-aaral. Sa puntong iyon, ikaw ay nasa isang patuloy na pattern ng hindi natapos na negosyo. Ang iyong utak ay bihirang makakalimutan ang tungkol dito habang ito ay nasa likod ng iyong isip. Sa puntong ito, ang iyong utak ang nagpapadala sa iyo ng mga abiso. Kapag pinagsama-sama mo ang mga sikolohikal na puwersang ito, magsisimula kang tunay na maunawaan kung bakit ang mga streak ay hindi lamang isang regular na feature ng app; kaya nilang baguhin ang pag-uugali ng tao. Ngunit sa isang lugar sa kahabaan ng linya - hindi ko masasabi nang eksakto kung kailan, dahil ito ay naiiba para sa lahat - ang mga bagay ay umabot sa isang punto kung saan ang isang streak ay nagbabago mula sa "katuwaan" sa isang bagay na sa tingin mo ay hindi mo kayang mawala. Hindi mo nais na masayang ang 58 araw na pagsisikap, hindi ba? Iyan ang dahilan kung bakit epektibo ang isang streak system. Kung gagawin nang tama, ang mga streak ay nakakatulong sa mga user na bumuo ng mga kamangha-manghang gawi na makakamit ang isang layunin. Maaaring ito ay pagbabasa araw-araw o palagiang pagpindot sa gym. Ang mga paulit-ulit na pagkilos na ito (kung minsan ay maliit) ay pinagsama sa paglipas ng panahon at nagiging maliwanag sa ating pang-araw-araw na buhay. Ngunit mayroong dalawang panig sa bawat barya. Ang Manipis na Linya sa Pagitan ng Ugali At Pagpipilitan Kung sinusundan mo na, masasabi mo na na may madilim na bahagi sa mga streak system. Ang pagbuo ng ugali ay tungkol sa pagkakapare-pareho sa isang paulit-ulit na layunin. Ang pagpilit, gayunpaman, ay ang pagkakapare-pareho ng pagtatrabaho sa isang layunin na hindi na kailangan ngunit pinanghahawakan dahil sa takot o panggigipit. Isa itong linyang manipis na labaha. Nagsipilyo ka tuwing umaga nang hindi nag-iisip; ito ay awtomatiko at likas, na may malinaw na layunin ng pagkakaroon ng magandang hininga. Iyon ay isang streak na bumubuo ng isang magandang ugali. Ang isang etikal na streak system ay nagbibigay sa mga user ng espasyo upang huminga. Kung, sa ilang kadahilanan, hindi ka magsipilyo sa umaga, maaari kang magsipilyo sa tanghali. Ang di-kasakdalan ay pinapayagan nang walang takot na mawalan ng mahabang pagsisikap. Kabaligtaran ang tinatahak ng pamimilit, kung saan ang isang sunod-sunod na guhit ay nagdudulot sa iyo ng pagkabalisa, nakakaramdam ka ng pagkakasala o kahit na pagod, at kung minsan, parang wala kang nagawa, sa kabila ng lahat ng iyongtrabaho. Kumilos ka hindi dahil gusto mo, ngunit dahil hindi mo namamalayan na natatakot kang makitang na-reset sa zero ang iyong pag-unlad. May isang taong inilarawan ito nang perpekto, "Naramdaman ko na ako ay nanloloko, ngunit wala akong pakialam. Wala akong saysay kung wala ang aking streak". Ipinapakita nito ang matinding hold streak na maaaring magkaroon sa isang indibidwal. Sa lawak na sinimulan ng mga user na itali ang kanilang pagpapahalaga sa sarili sa isang di-makatwirang sukatan sa halip na ang orihinal na layunin o dahilan kung bakit sila nagsimula sa streak sa unang lugar. Ang streak ay nagiging kung sino sila, hindi lamang kung ano ang kanilang ginagawa. Ang isang mahusay na idinisenyong etikal na sistema ng streak ay dapat na parang pampatibay-loob sa gumagamit, hindi panggigipit o obligasyon. Ito ay nauugnay sa balanse ng intrinsic at extrinsic motivation. Ang panlabas na pagganyak (mga panlabas na gantimpala, pag-iwas sa parusa) ay maaaring makapagsimula sa mga user, ngunit ang intrinsic na pagganyak (ginagawa ang gawain para sa isang personal na layunin tulad ng pag-aaral ng Espanyol dahil talagang gusto mong makipag-ugnayan sa isang mahal sa buhay) ay mas malakas para sa pangmatagalang pakikipag-ugnayan. Ang isang mahusay na sistema ay dapat na mahilig sa intrinsic na pagganyak na may maingat na paggamit ng mga extrinsic na elemento, ibig sabihin, paalalahanan ang mga gumagamit kung gaano kalayo na sila, hindi banta sa kanila kung ano ang maaaring mawala sa kanila. Muli, ito ay isang pinong linya. Ang isang simpleng pagsubok kapag nagdidisenyo ng isang streak system ay ang aktwal na maglaan ng ilang oras at isipin kung kumikita ba ang iyong mga produkto sa pamamagitan ng pagbebenta ng mga solusyon sa pagkabalisa na nilikha ng iyong produkto. Kung oo, malaki ang posibilidad na pinagsasamantalahan mo ang mga user. Kaya ang susunod na tanong ay, Kung pipiliin kong gumamit ng streak, paano ko ito ididisenyo sa paraang tunay na nakakatulong sa mga user na makamit ang kanilang mga layunin? Ang UX ng Good Streak System Design Naniniwala ako na ito ay kung saan karamihan sa mga proyekto ay nagpapako ng isang epektibong sistema ng streak o ganap na guluhin ito. Suriin natin ang ilang mga prinsipyo ng UX ng isang magandang streak na disenyo. Panatilihin itong Walang Kahirap-hirap Marahil ay narinig mo na ito dati, marahil mula sa mga aklat tulad ng Atomic Habits, ngunit ito ay nagkakahalaga ng pagbanggit na ang isa sa mga pinakamadaling paraan ng mga gawi ay maaaring mabuo ay sa pamamagitan ng paggawa ng aksyon na maliit at madali. Ito ay katulad ng ability factor na aming tinalakay mula sa Fogg Behavior Model. Ang unang tuntunin ng anumang streak na disenyo ay dapat na gawin ang kinakailangang aksyon bilang maliit hangga't maaari sa tao habang nakakamit pa rin ang pag-unlad. Kung ang isang pang-araw-araw na pagkilos ay nangangailangan ng lakas ng loob upang makumpleto, ang pagkilos na iyon ay hindi lalampas sa limang araw. Bakit? Hindi ka ma-motivate sa limang araw na magkakasunod. Halimbawa: Kung nagpapatakbo ka ng meditation app, hindi mo kailangang ipasa ang mga user sa isang 20 minutong session para lang mapanatili ang streak. Subukan ang isang minuto, marahil kahit isang bagay na kasing liit ng tatlumpung segundo, sa halip. Gaya ng kasabihan, ang maliliit na patak ng tubig ay gumagawa ng makapangyarihang karagatan). Ang maliliit na pagsisikap ay nagsasama-sama sa malalaking tagumpay sa paglipas ng panahon. Iyon ang dapat na layunin: alisin ang alitan, lalo na kapag ang sandali ay maaaring mahirap. Kapag na-stress o na-overwhelm ang mga user, ipaalam sa kanila na ang simpleng pagpapakita, kahit sa loob ng ilang segundo, ay binibilang bilang pagsisikap. Magbigay ng Malinaw na Visual Feedback Ang mga tao ay likas na nakikita. Kadalasan, kailangan nating makakita ng isang bagay na paniwalaan; may ganitong pangangailangan upang mailarawan ang mga bagay upang mas maunawaan ang mga ito at mailagay ang mga bagay sa pananaw. Ito ang dahilan kung bakit ang mga streak pattern ay madalas na gumagamit ng mga visual na elemento, tulad ng mga graph, checkmark, progress ring, at grids, upang mailarawan ang pagsisikap. Tingnan ang graph ng kontribusyon ng GitHub. Ito ay isang simpleng visualization ng consistency. Ngunit ang mga developer ay humihinga nito tulad ng oxygen.
Ang susi ay hindi gawing abstract ang isang streak system. Dapat itong pakiramdam na totoo at kinita. Halimbawa, ang Duolingo at ang Fitness ring ng aktibidad ng Apple ay gumagamit ng malinis na mga disenyo ng animation sa pagkumpleto ng isang streak, at ipinapakita ng GitHub ang makasaysayang data ng pagkakapare-pareho ng isang user sa paglipas ng panahon.
Gumamit ng Magandang Timing Nabanggit ko kanina na ang mga tao sa pangkalahatan ay likas na makakalimutin, at ang mga senyas na iyon ay makakatulong na mapanatili ang pasulong na momentum. Nang walang mga prompt, karamihan sa mga bagong user ay nakakalimutang magpatuloy. Maaaring maging abala ang buhay, nawawala ang motibasyon, at nangyayari ang mga bagay. Kahit na ang mga matagal nang gumagamit ay nakikinabang mula sa mga senyas, kahit na kadalasan, naka-lock na sila sa loob ng loop ng ugali. Gayunpaman, kahit na ang pinaka-nakatuon na tao ay maaaring hindi sinasadyang makaligtaan ng isang araw. Ang iyong streak system ay talagang nangangailangan ng mga paalala. Ang pinakaginagamit na prompt na mga paalala ay mga push notification. Talagang mahalaga ang timing kapag nagtatrabaho sa mga push notification. Mahalaga rin ang uri ng app. Ang pagpapadala ng abiso sa 9 a.m. na nagsasabing "Hindi ka nagpraktis ngayon" ay kakaiba lamang para sa isang app sa pag-aaral dahil marami ang may mga bagay na dapat gawin sa isang araw bago nila naisip na tapusin ang isang aralin. Kung pinag-uusapan natin ang tungkol sa isang fitness app, gayunpaman, itoay makatwiran at marahil ay inaasahang paalalahanan nang mas maaga sa araw. Malaki ang pagkakaiba ng mga push notification ayon sa kategorya ng app. Ang mga fitness app, halimbawa, ay nakakakita ng mas mataas na pakikipag-ugnayan sa mga notification sa umaga (7–8 AM), habang ang mga productivity app ay maaaring gumanap nang mas mahusay sa maagang tanghali. Ang susi ay ang A/B na subukan ang timing ng iyong app batay sa mga gawi ng iyong mga user sa halip na ipagpalagay na ang mga bagay ay one-size-fits-all. Ang gumagana para sa isang meditation app ay maaaring hindi gumana para sa isang coding tracker. Ang iba pang paraan ng pag-prompt ay mga pulang tuldok sa icon ng app at maging sa mga widget ng app. Iba-iba ang mga pag-aaral, ngunit ina-unlock ng karaniwang tao ang kanilang device sa pagitan ng 50-150 beses sa isang araw (PDF). Kung nakakakita ang isang user ng pulang tuldok sa isang app o isang widget na nagsasaad ng kasalukuyang streak sa tuwing ia-unlock nila ang kanilang telepono, pinapataas nito ang commitment. Huwag lamang itong labis; ang prompt ay dapat magsilbi bilang isang paalala, hindi isang gulo. Ipagdiwang ang Milestones Dapat subukan ng isang streak system na ipagdiwang ang mga milestone upang muling pag-ibayuhin ang mga emosyon, lalo na para sa mga user na malalim sa isang streak. Kapag naabot ng user ang Day 7, Day 30, Day 50, Day 100, Day 365, dapat kang gumawa ng malaking deal dito. Kilalanin ang mga nagawa — lalo na para sa mga matagal nang gumagamit.
Gaya ng nakita natin kanina, naisip ito ni Duolingo at nagpatupad ng animated na graphic na nagdiriwang ng mga milestone gamit ang confetti. Ang ilang platform ay nagbibigay pa nga ng malaking bonus na reward na nagpapatunay sa mga pagsisikap ng mga user. At ito ay maaaring maging kapaki-pakinabang sa mga app, kung saan ang mga user ay may posibilidad na ibahagi ang kanilang mga milestone sa publiko sa social media. Ang isa pang benepisyo ay ang pag-asa na darating bago maabot ang mga milestone. Ito ay hindi lamang pinapanatili ang streak na walang katapusang buhay; ang mga gumagamit ay may isang bagay na inaasahan. Gumamit ng Grace Mechanisms Ang buhay ay hindi mahuhulaan. Nakakagambala ang mga tao. Anumang magandang streak system ay dapat asahan ang di-kasakdalan. Ang isa sa pinakamalaking sikolohikal na banta sa isang streak system ay ang hard reset sa zero pagkatapos lamang ng isang araw na hindi nakuha. Ang isang "etikal" na sistema ng streak ay dapat magbigay sa gumagamit ng ilang malubay. Sabihin nating mayroon kang 90-araw na sunod-sunod na pag-aaral ng chess. Naging pare-pareho ka sa loob ng tatlong magagandang buwan, at isang araw, namatay ang iyong telepono habang naglalakbay, at ganoon din, ang 90 ay naging 0 — lahat, lahat ng pagsisikap na iyon, ay nabubura, at ang pag-unlad ay naglalaho. Maaaring ganap na mapahamak ang gumagamit. Ang pag-iisip na muling itayo ito mula sa simula ay napakababa ng moralidad na ang pagsisikap ay hindi katumbas ng halaga. Sa pinakamasama, maaaring abandunahin ng isang user ang app pagkatapos makaramdam ng pagkabigo. Pag-isipang magdagdag ng mekanismong "grace" sa iyong streak system:
Streak FreezePayagan ang mga user na sadyang makaligtaan ang isang araw nang walang mga parusa. Dagdag na OrasMagbigay ng ilang oras (2–3) na lampas sa karaniwang takdang panahon bago mag-trigger ng pag-reset. Decay ModelsSa halip na isang hard reset, ang streak ay nababawasan ng maliit na halaga, hal., 10 araw ay ibabawas mula sa streak sa bawat napalampas na araw.
Gumamit ng Nakaka-engganyo na Tono Paghambingin natin ang dalawang mensaheng ipinapakita sa mga user kapag naputol ang isang streak:
"Nawala mo ang iyong 42-day streak. Magsimula muli." "Nagpakita ka sa loob ng 42 araw na sunod-sunod. Iyan ay hindi kapani-paniwalang pag-unlad! Gusto mo bang subukan muli?"
Parehong naghahatid ng parehong impormasyon, ngunit ang emosyonal na epekto ay naiiba. Ang unang mensahe ay malamang na magpapadama sa isang gumagamit na mawalan ng moralidad at magdudulot sa kanila na huminto. Ipinagdiriwang ng pangalawang mensahe kung ano ang nakamit na at malumanay na hinihikayat ang user na subukang muli. Mga Hamon sa Disenyo ng Streak Systems Bago tayo pumunta sa mga teknikal na detalye ng pagbuo ng isang streak system, dapat mong malaman ang mga hamon na maaari mong harapin. Maaaring maging kumplikado ang mga bagay, gaya ng inaasahan mo. Pangangasiwa sa mga Timezone May isang dahilan kung bakit ang paghawak ng oras at petsa ay kabilang sa pinakamahirap na konseptong hinarap ng mga developer. Mayroong pag-format, internasyonalisasyon, at marami pang dapat isaalang-alang. Hayaan mong itanong ko sa iyo ito: Ano ang binibilang bilang isang araw? Alam nating tumatakbo ang mundo sa iba't ibang time zone, at parang hindi sapat iyon, may ilang rehiyon na may Daylight Saving Time (DST) na nangyayari dalawang beses sa isang taon. Saan ka magsisimulang pangasiwaan ang mga edge case na ito? Ano ang binibilang bilang "simula" ng bukas? Sinusubukan ng ilang developer na iwasan ito sa pamamagitan ng paggamit ng isang gitnang timezone, tulad ng UTC. Para sa ilang mga user, magbubunga ito ng mga tamang resulta, ngunit para sa ilan, maaari itong mag-off nang isang oras, dalawang oras, o higit pa. Ang hindi pagkakapare-parehong ito ay sumisira sa karanasan ng user. Walang pakialam ang mga user kung paano mo pinangangasiwaan ang oras sa likod ng mga eksena; Ang inaasahan lang nila ay kung magsasagawa sila ng sunod-sunod na pagkilos sa 11:40 p.m., dapat itong magparehistro sa eksaktong oras na iyon, sa kanilang konteksto. Dapat mong tukuyin ang "isang araw" batay sa lokal na timezone ng user, hindi sa oras ng server. Sigurado, maaari kang magmadaliruta at pag-reset ng mga streak sa buong mundo para sa lahat ng mga user sa hatinggabi UTC, ngunit ikaw ay gumagawa ng hindi patas. Ang isang tao sa California ay laging may walong dagdag na oras para tapusin ang kanilang gawain kaysa sa isang taong nakatira sa London. Iyon ay isang hindi makatarungang depekto sa disenyo na nagpaparusa sa ilang partikular na user dahil sa kanilang lokasyon. At paano kung bumibisita lang ang taong iyon sa London, nakatapos ng isang gawain, pagkatapos ay bumalik sa ibang timezone? Ang isang epektibong solusyon sa lahat ng ito ay ang hilingin sa mga user na tahasang itakda ang kanilang timezone sa panahon ng onboarding (mas mabuti pagkatapos ng unang pagpapatotoo). Magandang ideya na magsama ng banayad na tala na ang pagbibigay ng impormasyon sa timezone ay ginagamit lamang para sa app upang tumpak na masubaybayan ang pag-unlad, sa halip na gamitin bilang personal na nakakapagpakilalang data. At isa pang magandang ideya na gawin iyon na isang nababagong setting. Iminumungkahi ko na iwasan ng sinuman ang direktang paghawak ng timezone logic sa isang app. Gumamit ng tried-and-true na mga library ng petsa, tulad ng Moment.js o pytz (Python), atbp. Hindi na kailangang muling likhain ang gulong para sa isang bagay na kasing kumplikado nito. Mga Hindi Nasagot na Araw At Mga Edge Case Ang isa pang hamon na dapat mong alalahanin ay ang hindi nakokontrol na mga kaso sa gilid tulad ng labis na pagtulog ng mga user, downtime ng server, lag, pagkabigo sa network, at iba pa. Ang paggamit ng ideya ng mga mekanismo ng biyaya, tulad ng mga tinalakay natin kanina, ay makakatulong. Ang palugit na palugit na dalawang oras ay maaaring makatulong sa user at developer, sa kahulugan na ang mga user ay hindi mahigpit na pinarurusahan para sa hindi makontrol na mga pangyayari sa buhay. Para sa mga developer, nakakatulong ang mga grace window sa mga hindi nakokontrol na sandali kapag bumaba ang server sa kalagitnaan ng gabi. Higit sa lahat, huwag magtiwala sa kliyente. Palaging i-validate sa server-side. Ang server ay dapat ang nag-iisang pinagmumulan ng katotohanan. Pag-iwas sa pagdaraya Muli, hindi ko ma-stress ito nang sapat: Siguraduhing i-validate ang lahat ng server-side. Ang mga gumagamit ay mga tao, at ang mga tao ay maaaring mandaya kung bibigyan ng pagkakataon. Ito ay hindi maiiwasan. Maaari mong subukan:
Pag-iimbak ng lahat ng pagkilos gamit ang mga timestamp ng UTC. Maaaring ipadala ng kliyente ang kanilang lokal na oras, ngunit maaaring agad na i-convert iyon ng server sa UTC at ma-validate ito laban sa oras ng server. Sa ganoong paraan, kung kahina-hinalang malayo ang timestamp ng kliyente, maaaring tanggihan ito ng system bilang isang error, at maaaring tumugon ang UI nang naaayon. Gamit ang pagsubaybay na nakabatay sa kaganapan. Sa madaling salita, mag-imbak ng talaan ng bawat pagkilos na may metadata kasama ang impormasyon tulad ng ID ng user, ang uri ng pagkilos na ginawa, at timestamp at timezone. Nakakatulong ito sa pagpapatunay.
Pagbuo ng isang Streak System Engine Hindi ito isang tutorial na code, kaya iiwasan kong maglagay ng isang grupo ng code sa iyo. Pananatilihin ko itong praktikal at ilalarawan kung paano karaniwang pinapagana ng mga bagay ang isang streak system engine hanggang sa arkitektura, daloy, at pagiging maaasahan. Pangunahing Arkitektura Gaya ng ilang beses ko nang sinabi, gawin ang server na pinagmumulan ng katotohanan para sa streak data. Ang arkitektura ay maaaring maging ganito sa server:
I-store ang data ng bawat user sa isang database. I-store ang kasalukuyang streak store (default bilang 0) bilang integer. I-imbak ang kagustuhan sa timezone, ibig sabihin, IANA Timezone string (alinman sa tahasang mula sa lokal na timestamp o tahasan sa pamamagitan ng paghiling sa user na piliin ang kanilang timezone). Halimbawa, "America/New_York". Pangasiwaan ang lahat ng lohika upang matukoy kung magpapatuloy o masira ang streak, na may pagsusuri sa timezone na nauugnay sa lokal na timezone ng user.
Samantala, sa panig ng kliyente:
Ipakita ang kasalukuyang streak, na karaniwang kinukuha mula sa server. Magpadala ng aksyon na ginawa sa anyo ng metadata sa server upang patunayan kung aktwal na nakumpleto ng user ang isang qualifying streak na aksyon. Magbigay ng visual na feedback batay sa mga tugon ng server.
Kaya, sa madaling salita, ang utak ay nasa server, at ang kliyente ay para sa mga layunin ng pagpapakita at pagsusumite ng mga kaganapan. Ito ay nakakatipid sa iyo ng maraming mga pagkabigo at mga edge na kaso, at ginagawang mas madali ang mga update at pag-aayos. Ang Lohikal na Daloy Gayahin natin ang isang walkthrough kung paano mapupunta ang isang minimal na mahusay na streak system engine kapag nakumpleto ng isang user ang isang aksyon:
Kinukumpleto ng user ang isang qualifying streak na aksyon. Nagpapadala ang kliyente ng kaganapan sa server bilang metadata. Ito ay maaaring "Nakumpleto ng User X ang pagkilos Y sa timestamp Z." Natanggap ng server ang kaganapang ito at ginagawa ang pangunahing pagpapatunay. Ito ba ay isang tunay na gumagamit? Authenticated ba sila? Wasto ba ang aksyon? Pare-pareho ba ang timezone? Kung pumasa ito, kukunin ng server ang streak data ng user mula sa database. Pagkatapos, i-convert ang natanggap na timestamp ng pagkilos sa lokal na timezone ng user. Hayaang ihambing ng server ang mga petsa sa kalendaryo (hindi mga timestamp) sa lokal na timezone ng user: Kung ito ay parehong araw, kung gayon ang aksyon ay kalabisan at walang pagbabago saguhit. Kung ito ay sa susunod na araw, pagkatapos ay ang streak ay umaabot at dagdagan ng 1. Kung mayroong agwat ng higit sa isang araw, maputol ang streak. Gayunpaman, dito ka maaaring mag-apply ng grace mechanics. Kung napalampas ang mekanismo ng grasya, i-reset ang streak sa 1.
Kung pipiliin mong i-save ang makasaysayang data para sa mga nakamit na milestone, pagkatapos ay i-update ang mga variable tulad ng "pinaka mahabang sunod-sunod na" o "kabuuang mga aktibong araw." Pagkatapos ay ina-update ng server ang database at tumugon sa kliyente. Isang bagay na tulad nito:
{ "current_streak": 48, "pinaka mahabang_streak": 50, "total_active_days": 120, "streak_extended": totoo, }
Bilang karagdagang panukala, ang server ay dapat subukang muli o tanggihan at abisuhan ang kliyente kapag may nabigo sa panahon ng proseso. Building Para sa Katatagan Tulad ng nabanggit dati, ang mga user na nawawalan ng isang streak dahil sa mga bug o server downtime ay kahila-hilakbot na UX, at hindi inaasahan ng mga user na mahuhulog ito. Kaya, ang iyong streak system ay dapat may mga pananggalang para sa mga sitwasyong iyon. Kung ang server ay down para sa pagpapanatili (o anumang dahilan), isaalang-alang ang payagan ang isang pansamantalang palugit ng mga karagdagang oras upang ayusin ito upang ang mga aksyon ay maisumite nang huli at mabibilang pa rin. Maaari mo ring piliing abisuhan ang mga user, lalo na kung ang sitwasyon ay may kakayahang makaapekto sa isang patuloy na streak. Tandaan: Magtatag ng admin backdoor kung saan manu-manong maibabalik ang data. Hindi maiiwasan ang mga bug, at tatawagan ng ilang user ang iyong app o makikipag-ugnayan para suportahan na naputol ang kanilang streak sa kadahilanang hindi nila makontrol. Dapat mong manual na maibalik ang mga streak kung, pagkatapos ng pagsisiyasat, tama ang user. Konklusyon Isang bagay ang nananatiling malinaw: Ang mga streak ay talagang makapangyarihan dahil sa kung paano gumagana ang sikolohiya ng tao sa isang pangunahing antas. Ang pinakamahusay na sistema ng streak out doon ay ang isa na hindi sinasadya ng mga gumagamit. Ito ay naging isang gawain ng agarang resulta o nakikitang pag-unlad, tulad ng pagsisipilyo ng ngipin, na nagiging isang regular na ugali. At sasabihin ko lang: Hindi lahat ng produkto ay nangangailangan ng streak system. Dapat mo ba talagang pilitin ang pagkakapare-pareho dahil lang gusto mo ang mga pang-araw-araw na aktibong user? Ang sagot ay maaaring "hindi".