Eminim çizgiler duymuşsunuzdur veya bir uygulama kullanmışsınızdır. Peki serilerin neden bu kadar popüler ve güçlü olduğunu hiç merak ettiniz mi? Uygulamaların mümkün olduğu kadar çok dikkatinizi çekmesi gerektiği açık bir gerçektir, ancak bunun dışında, popüler öğrenme uygulaması Duolingo'nun çizgileri görüntülemek için iOS widget'larını kullanıma sunduğunda kullanıcı bağlılığının %60 arttığını biliyor muydunuz? Yüzde altmış, davranışta büyük bir değişimdir ve katılımı artırmak ve kullanımı teşvik etmek için "çizgi" modellerinin nasıl kullanılabileceğini göstermektedir. En temelde seri, kullanıcının belirli bir etkinliği tamamladığı ardışık günlerin sayısıdır. Bazı insanlar bunu "oyunlaştırılmış" bir alışkanlık veya tutarlı kullanımı teşvik etmek için tasarlanmış bir ölçüm olarak da tanımlıyor. Ancak seriler bir uygulamada bir ölçüm veya rekor olmanın ötesine geçiyor; bundan daha psikolojiktir. İnsan içgüdülerini doğru faktörlerle etkilemek kolaydır. Şu üç faktöre bakın: ilerleme, gurur ve fırsatları kaçırma korkusu (genellikle FOMO olarak adlandırılır). Bütün bunların ortak noktası nedir? Çaba. Bir şeye ne kadar çok çaba harcarsanız, kimliğinizi o kadar şekillendirir ve davranış psikolojisi dünyasına bu şekilde çizgiler girer. Artık büyük güç, büyük sorumluluğu da beraberinde getirir ve bu nedenle galibiyet serilerinin karanlık bir tarafı vardır. Bu makalede etkili bir çizgi sistemi oluşturmanın ardındaki psikoloji, kullanıcı deneyimi ve tasarım ilkelerine gireceğiz. (1) beynimizin neden çizgi aktivitesine neredeyse içgüdüsel olarak tepki verdiğini, (2) çizgileri kullanıcılara gerçekten yardımcı olacak şekilde nasıl tasarlayacağımızı ve (3) bir çizgi deseni oluşturmanın içerdiği teknik çalışmayı inceleyeceğiz. Çizgilerin Arkasındaki Psikoloji Etkili bir çizgi sistemi tasarlamak ve oluşturmak için bunun beynimizdeki bağlantılarla nasıl uyum sağladığını anlamamız gerekir. Peki, çizgilerimizi korumak için bu kadar yoğun bir özveri hissetmemizi sağlayacak kadar etkili kılan şey nedir? Çizgileri bu kadar güçlü ve bağımlılık yapıcı kılan şeyi destekleyen üç ilginç, iyi belgelenmiş psikoloji ilkesi vardır. Kayıptan Kaçınma Bu muhtemelen serilerin ardındaki en güçlü güçtür. Bunu söylüyorum çünkü çoğu zaman hayatta bundan neredeyse kaçınamazsınız. Bunu şu şekilde düşünün: Bir arkadaşınız size 100$ verirse mutlu olursunuz. Ancak cüzdanınızdan 100$ kaybederseniz bu çok daha fazla acı verir. Bu durumların duygusal ağırlığı eşit değildir. Kayıp, kazancın iyi hissettirmesinden çok daha fazla acı verir. Daha da ileri gidelim ve diyelim ki sana 100 dolar veriyorum ve senden kumar oynamanı istiyorum. Başka bir 100$ kazanma şansınız %50, orijinal 100$'ı kaybetme olasılığınız ise %50'dir. Alır mısın? Yapmazdım. Çoğu insan bunu yapmaz. Bu kayıptan kaçınmadır. Düşünürseniz mantıklıdır, anlaşılırdır, insanidir. Kayıptan kaçınmanın ardındaki kavram, bir şeyi kaybetmenin acısını, eşit değerde bir şey kazanmanın zevkinden iki kat daha fazla hissetmemizdir. Psikolojik açıdan, kayıplar kazançlardan daha kalıcıdır. Muhtemelen bunun çizgilerle nasıl ilişkili olduğunu görüyorsunuz. Dikkat çekici bir çizgi oluşturmak çaba gerektirir; Seri büyüdükçe arkasındaki motivasyon kaybolmaya başlar; daha doğrusu ikincilleşmeye başlıyor. İşte bir örnek: Diyelim ki arkadaşınızın Apple Watch'undaki "Hareket Halkalarını" üç günlük bir kapanış serisiyle kapatıyorsunuz. Hedeflerine ulaşmak ve tutarlı olmak dışında kaybedecekleri neredeyse hiçbir şey yok. Aynı zamanda 219 günlük etkileyici bir seriniz var. Muhtemelen onu kaybetme korkusunun tuzağına düşmüşsünüzdür. Büyük olasılıkla bu noktada başarıyı düşünmüyorsunuz; bu daha çok harcadığınız çabayı korumakla ilgilidir ve bu da kayıptan kaçınmadır. Duolingo, kayıptan kaçınmanın, kullanıcının en tembel günlerinde bile uzun bir seriyi kırma konusundaki isteksizliğine nasıl katkıda bulunduğunu açıklıyor. Bir bakıma, kayıptan kaçınma yerleştiğinde galibiyet serisi bir alışkanlığa dönüşebilir. Fogg Davranış Modeli (B = MAP) Artık daha uzun seriler için harcanan çabayı kaybetme korkusunu anladığımıza göre, başka bir soru şu: Seri daha büyümeden, her gün bunu yapmamıza neden olan şey nedir? Fogg Davranış Modeli bununla ilgilidir. Nispeten basittir. Bir davranış (B) yalnızca üç faktör (Motivasyon (M), Yetenek (A) ve İstem (P)) aynı anda hizalandığında ortaya çıkar. Böylece B=MAP denklemi elde edilir. Eğer o anda bu faktörlerden herhangi biri hatta biri bile eksikse davranış gerçekleşmez. Dolayısıyla, bir seri sisteminin verimli ve tekrarlı olması için üç faktörün de mevcut olması gerekir: Motivasyon Bu kırılgandır ve sürekli olarak mevcut olan bir şey değildir. olduğun günler vardırİspanyolca öğrenmek için can atıyorsunuz ve dili öğrenmek için zerre kadar irade bile hissetmiyorsunuz. Bir alışkanlık oluşturma motivasyonu tek başına güvenilmezdir ve ilk günden itibaren kaybedilen bir mücadeledir. Yetenek Motivasyonun sınırlamalarını telafi etmek için yetenek kritik öneme sahiptir. Bu bağlamda yetenek, eylem kolaylığı anlamına gelir, yani çaba o kadar kolaydır ki mümkün olmadığını söylemek gerçekçi değildir. Çoğu uygulama bunu kasıtlı olarak kullanır. Apple Fitness'ın Duruş hedefinize doğru bir puan kazanmanız için saatte bir dakika ayakta durmanız yeterli. Duolingo'nun yalnızca bir tamamlanmış derse ihtiyacı vardır. Bu görevler çok fazla çaba gerektirmez. Engel o kadar düşük ki en kötü günlerinizde bile bunu yapabilirsiniz. Ancak devam eden bir serinin ortak çabası, o seriyi kaybetme fikrinin devreye girdiği yerdir. İstem: Denklemi tamamlayan şey budur. İnsanlar doğal olarak unutkandır, dolayısıyla evet, yetenek bizi %90 oranında bu noktaya getirebilir. Ancak bir uyarı bize harekete geçmemizi hatırlatır. Çizgiler tasarım gereği kalıcı olduğundan, kullanıcılara sürekli olarak harekete geçmeleri hatırlatılmalıdır. Bir istemin ne kadar güçlü olabileceğini görmek için Duolingo, uygulama simgesindeki küçük kırmızı işaretin tutarlı kullanımı artırıp artırmadığını görmek amacıyla bir A/B testi yaptı. Günlük aktif kullanıcı sayısında %6'lık bir artış sağladı. Sadece kırmızı bir rozet. Model Sınırlamaları Bütün bunlar söylendiğinde, Fogg modelinin bir sınırlaması var; eleştirmenler ve modern araştırmalar, agresif bildirimler gibi yönlendirmelere çok fazla dayanan bir tasarımın zihinsel yorgunluk yaratma riski taşıdığını fark etti. Sürekli bildirimler ve fazla mesai, kullanıcıların vazgeçmesine neden olabilir. Yani buna dikkat edin. Zeigarnik Etkisi Bir proje görevini yarım bıraktığınızda nasıl hissedersiniz? Bu birçok insanı rahatsız ediyor çünkü tamamlanmamış işler, tamamladığımız işlerden daha fazla zihinsel alan kaplıyor. Bir şey yapılıp gittiğinde onu unutma eğilimindeyiz. Bir şey yapılmadan bırakıldığında, aklımıza ağırlık verme eğilimindedir. Dijital ürünlerin, Upwork'ün profil tamamlama çubuğu gibi yapay ilerleme göstergelerini kullanarak kullanıcıya profilinin yalnızca "%60 tamamlandığını" bildirmesinin nedeni tam olarak budur. Kullanıcıyı başladığı işi bitirmeye teşvik eder.

Başka bir örneğe bakalım. Yapılacaklar listesi uygulamasında beş göreviniz vardır ve günün sonunda bunlardan yalnızca dördünün tamamlanmış olduğunu kontrol edersiniz. Birçoğumuz bu tamamlanmamış görev yüzünden kendini başarısız hissedecek. İşte tam burada Zeigarnik etkisi var. Zeigarnik etkisi psikolog Bluma Zeigarnik tarafından gösterildi ve tamamlanmamış görevleri tamamlanmış görevlerden daha uzun süre hafızamızda aktif tutma eğiliminde olduğumuzu açıkladı. UX tasarımında çizgi deseni doğal olarak buna katkıda bulunur. Diyelim ki öğrenme serinizin 63. günündesiniz. Bu noktada, bitmemiş bir işin devam eden bir modelinin içindesiniz. Beyniniz, zihninizin arkasında durduğu için bunu nadiren unutur. Bu noktada size bildirim gönderen beyniniz olur. Bu psikolojik güçleri bir araya getirdiğinizde serilerin neden yalnızca sıradan bir uygulama özelliği olmadığını gerçekten anlamaya başlarsınız; insan davranışını yeniden şekillendirme yeteneğine sahiptirler. Ancak yolun bir yerinde - herkese göre değiştiği için tam olarak ne zaman olduğunu söyleyemem - işler öyle bir noktaya gelir ki, seri "eğlenceli" olmaktan çıkıp kaybetmeyi göze alamayacağınızı düşündüğünüz bir şeye dönüşür. 58 günlük emeğin boşa gitmesini istemezsin değil mi? Çizgi sistemini etkili kılan şey budur. Doğru yapılırsa çizgiler, kullanıcıların bir hedefe ulaşmasını sağlayan şaşırtıcı alışkanlıklar geliştirmesine yardımcı olur. Her gün kitap okumak ya da sürekli olarak spor salonuna gitmek olabilir. Bu tekrarlanan eylemler (bazen küçük) zamanla birleşir ve günlük yaşamlarımızda belirgin hale gelir. Ancak her madalyonun iki yüzü vardır. Alışkanlık ile Zorunluluk Arasındaki İnce Çizgi Eğer takip ediyorsanız, çizgi sistemlerinin karanlık bir tarafı olduğunu zaten söyleyebilirsiniz. Alışkanlık oluşumu, tekrarlanan bir hedefin tutarlılığıyla ilgilidir. Ancak zorlama, artık ihtiyaç duyulmayan ancak korku veya baskı nedeniyle tutunulan bir hedef üzerinde çalışmanın tutarlılığıdır. Bu çok ince bir çizgidir. Her sabah düşünmeden dişlerinizi fırçalıyorsunuz; otomatik ve içgüdüseldir ve net bir nefes alma hedefi vardır. Bu iyi bir alışkanlık oluşturan bir çizgi. Etik bir seri sistemi, kullanıcılara nefes alma alanı sağlar. Herhangi bir nedenle sabah dişlerinizi fırçalamıyorsanız öğlen dişlerinizi fırçalayabilirsiniz. Uzun bir çabayı kaybetme korkusu olmadan kusurluluğa izin verilir. Kompulsiyon ise tam tersi bir yol izler; bir çizgi sizi endişelendirir, kendinizi suçlu, hatta bitkin hissedersiniz ve bazen tüm çabanıza rağmen hiçbir şey başaramamışsınız gibi hissedersiniz.iş. İstediğiniz için değil, bilinçaltınızda ilerlemenizin sıfırlandığını görmekten korktuğunuz için hareket edersiniz. Hatta birisi bunu mükemmel bir şekilde tarif etti: "Hile yaptığımı hissettim ama umursamadım. Serim olmadan ben bir hiçim". Bu, bir birey üzerinde aşırı tutunma serilerinin olabileceğini gösterir. Kullanıcılar kendi değerlerini, seriyi ilk etapta başlattıkları orijinal hedef veya neden yerine keyfi bir ölçüme bağlamaya başladıkları ölçüde. Seri, sadece ne yaptıklarına değil, kim olduklarına dönüşür. İyi tasarlanmış bir etik seri sistemi, kullanıcıya baskı veya zorunluluk değil, teşvik hissi vermelidir. Bu içsel ve dışsal motivasyonun dengesiyle ilgilidir. Dışsal motivasyon (dış ödüller, cezadan kaçınmak) kullanıcıların harekete geçmesini sağlayabilir, ancak içsel motivasyon (sevdiğiniz biriyle gerçekten iletişim kurmak istediğiniz için görevi İspanyolca öğrenmek gibi kişisel bir amaç için yapmak) uzun vadeli katılım için daha güçlüdür. İyi bir sistem, dışsal unsurların dikkatli kullanımıyla içsel motivasyona yönelmeli, yani kullanıcılara ne kadar ilerlediklerini hatırlatmalı, onları kaybedebilecekleri şeylerle tehdit etmemelidir. Yine ince bir çizgi. Bir seri sistemi tasarlarken basit bir test, aslında biraz zaman ayırmak ve ürünlerinizin, ürününüzün yarattığı endişeye çözüm satarak para kazanıp kazanmadığını düşünmektir. Cevabınız evet ise, kullanıcıları istismar etme olasılığınız yüksektir. Dolayısıyla bir sonraki soru şu oluyor: Eğer seri kullanmayı seçersem, bunu kullanıcıların hedeflerine ulaşmalarına gerçekten yardımcı olacak şekilde nasıl tasarlarım? İyi Streak Sistem Tasarımının UX'i Çoğu projenin ya etkili bir seri sistemini çivilediği ya da tamamen berbat ettiği noktanın burası olduğuna inanıyorum. İyi bir çizgi tasarımının bazı UX ilkelerini gözden geçirelim. Zahmetsiz Tutun Muhtemelen bunu daha önce duymuşsunuzdur, belki Atomik Alışkanlıklar gibi kitaplardan, ancak şunu belirtmekte fayda var ki, alışkanlıkları oluşturmanın en kolay yollarından biri eylemi küçük ve kolay hale getirmektir. Bu, Fogg Davranış Modelinde tartıştığımız yetenek faktörüne benzer. Herhangi bir seri tasarımının ilk kuralı, bir yandan ilerleme kaydederken, bir yandan da gerekli eylemi insani açıdan mümkün olduğu kadar küçük hale getirmek olmalıdır. Günlük bir eylemin tamamlanması irade gerektiriyorsa, bu eylemin süresi beş günü geçmez. Neden? Beş gün üst üste motive olamazsınız. Konuya ilişkin örnek: Bir meditasyon uygulaması çalıştırıyorsanız, yalnızca seriyi sürdürmek için kullanıcıları 20 dakikalık bir oturuma tabi tutmanıza gerek yoktur. Bunun yerine tek bir dakikayı, hatta belki otuz saniye kadar küçük bir şeyi deneyin. Söylendiği gibi, küçük su damlaları büyük okyanusu oluşturur). Küçük çabalar zamanla büyük başarılara dönüşür. Amaç bu olmalı: Özellikle zor anların yaşandığı anlarda sürtünmeyi ortadan kaldırın. Kullanıcılar stresli veya bunalmış olduklarında, birkaç saniyeliğine de olsa orada bulunmanın çaba sayılacağını onlara bildirin. Net Görsel Geri Bildirim Sağlayın İnsanlar doğası gereği görseldir. Çoğu zaman inanmak için bir şeyler görmemiz gerekir; Olayları daha iyi anlamak ve perspektife koymak için görselleştirmeye ihtiyaç var. Bu nedenle çizgi desenleri, çabayı görselleştirmek için genellikle grafikler, onay işaretleri, ilerleme halkaları ve ızgaralar gibi görsel öğeleri kullanır. GitHub'un katkı grafiğine bakın. Tutarlılığın basit bir görselleştirilmesidir. Ancak geliştiriciler onu oksijen gibi solurlar.

Önemli olan seri sistemini soyut hissettirmemek. Gerçek ve kazanılmış hissetmelidir. Örneğin, Duolingo ve Apple'ın Fitness aktivite halkaları, serinin tamamlanmasıyla ilgili temiz animasyon tasarımları kullanıyor ve GitHub, kullanıcının zaman içindeki tutarlılığına ilişkin geçmiş verileri gösteriyor.

İyi Zamanlama Kullanın Daha önce, insanların doğası gereği genellikle unutkan olduğundan ve teşviklerin ileri ivmenin korunmasına yardımcı olabileceğinden bahsetmiştim. İstemler olmadan çoğu yeni kullanıcı devam etmeyi unutur. Hayat yoğunlaşabilir, motivasyon kaybolabilir ve olaylar meydana gelebilir. Uzun süredir kullanıcılar bile istemlerden yararlanıyor, ancak çoğu zaman zaten alışkanlık döngüsünün içinde kilitlenmiş durumdalar. Bununla birlikte, en kararlı kişi bile yanlışlıkla bir günü kaçırabilir. Seri sisteminizin kesinlikle hatırlatmalara ihtiyacı var. En çok kullanılan istem hatırlatıcıları anlık bildirimlerdir. Anlık bildirimlerle çalışırken zamanlama gerçekten önemlidir. Uygulamanın türü de önemlidir. Sabah 9'da "Bugün pratik yapmadın" şeklinde bir bildirim göndermek bir öğrenme uygulaması için oldukça tuhaf çünkü çoğu kişinin dersi tamamlamayı düşünmeden gün önce yapması gereken işler var. Ancak bir fitness uygulamasından bahsediyorsakmakuldür ve hatta belki günün erken saatlerinde hatırlatılması bile beklenir. Anında bildirimler uygulama kategorisine göre önemli ölçüde farklılık gösterir. Örneğin fitness uygulamaları sabahın erken saatlerinde (07:00-08:00) yapılan bildirimlerle daha fazla etkileşim alırken, üretkenlik uygulamaları öğlen saatlerinde daha iyi performans gösterebilir. Önemli olan, her şeyin herkese uygun olduğunu varsaymak yerine, uygulamanızın zamanlamasını kullanıcılarınızın davranışlarına göre A/B testi yapmaktır. Bir meditasyon uygulamasında işe yarayan şey, bir kodlama izleyicide işe yaramayabilir. Diğer bilgi istemi yöntemleri, uygulama simgesindeki ve hatta uygulama widget'larındaki kırmızı noktalardır. Araştırmalar farklılık gösterse de ortalama bir kişi cihazının kilidini günde 50-150 kez açıyor (PDF). Kullanıcı, bir uygulamada veya widget'ta, telefonunun kilidini her açtığında güncel bir seriyi gösteren kırmızı bir nokta görürse, bu durum bağlılığını artırır. Sadece aşırıya kaçmayın; Bu istem bir dırdır değil, hatırlatma görevi görmelidir. Kilometre Taşlarını Kutlayın Bir seri sistemi, özellikle serinin derinliklerindeki kullanıcılar için duyguları yeniden canlandırmak için dönüm noktalarını kutlamaya çalışmalıdır. Bir kullanıcı 7. Gün, 30. Gün, 50. Gün, 100. Gün, 365. Gün'e ulaştığında, bunu büyük bir olay haline getirmelisiniz. Başarıları takdir edin - özellikle uzun süredir kullananlar için.

Daha önce de gördüğümüz gibi, Duolingo bunu anladı ve kilometre taşlarını konfeti ile kutlayan animasyonlu bir grafik uyguladı. Hatta bazı platformlar, kullanıcıların çabalarını doğrulayan önemli bonus ödülleri bile veriyor. Bu da uygulamalar için faydalı olabilir, öyle ki kullanıcılar dönüm noktalarını sosyal medyada herkese açık olarak paylaşma eğiliminde olur. Diğer bir fayda ise dönüm noktalarına ulaşmadan önce gelen beklentidir. Bu sadece seriyi sonsuza kadar canlı tutmak değil; kullanıcıların sabırsızlıkla bekleyecekleri bir şey var. Grace Mekanizmalarını Kullanın Hayat tahmin edilemez. İnsanların dikkati dağılıyor. Herhangi bir iyi seri sistemi kusurlu olmayı beklemelidir. Seri sisteme yönelik en büyük psikolojik tehditlerden biri, kaçırılan tek bir günün ardından donanımdan sıfırlamadır. "Etik" bir seri sistemi kullanıcıya biraz rahatlık sağlamalıdır. Diyelim ki 90 günlük bir satranç öğrenme seriniz var. Üç ay boyunca istikrarlıydınız ve bir gün, telefonunuz seyahat ederken ölür ve böylece 90 0 olur; her şey, tüm bu çabalar silinir ve ilerleme yok olur. Kullanıcı tamamen harap olabilir. Onu sıfırdan yeniden inşa etme düşüncesi o kadar moral bozucu ki, çabaya değmez. En kötü ihtimalle, kullanıcı başarısız olduğunu hissettikten sonra uygulamayı terk edebilir. Seri sisteminize bir "lütuf" mekanizması eklemeyi düşünün:

Seri DondurmaKullanıcıların ceza almadan bir günü kasıtlı olarak kaçırmasına olanak tanır. Ekstra Zaman Sıfırlamayı tetiklemeden önce olağan sürenin birkaç saat (2-3) geçmesini bekleyin. Çürüme Modelleri Donanımdan sıfırlama yerine seri küçük bir miktar azalır; örneğin kaçırılan gün başına seriden 10 gün düşülür.

Cesaretlendirici Bir Ton Kullanın Seri bozulduğunda kullanıcılara gösterilen iki mesajı karşılaştıralım:

"42 günlük serinizi kaybettiniz. Yeniden başlayın." "42 gün boyunca aralıksız geldin. Bu inanılmaz bir ilerleme! Bir kez daha denemek ister misin?"

Her ikisi de aynı bilgiyi aktarır ancak duygusal etki farklıdır. İlk mesaj büyük olasılıkla kullanıcının moralinin bozulmasına ve işi bırakmasına neden olacaktır. İkinci mesaj, halihazırda başarılmış olanı kutlar ve kullanıcıyı tekrar denemeye nazikçe teşvik eder. Streak Sistemleri Tasarım Zorlukları Seri sistem oluşturmanın teknik özelliklerine girmeden önce karşılaşabileceğiniz zorlukların farkında olmalısınız. Tahmin edebileceğiniz gibi işler karmaşıklaşabilir. Saat Dilimlerini Yönetme Zaman ve tarihin ele alınmasının geliştiricilerin uğraştığı en zor kavramlar arasında olmasının bir nedeni var. Biçimlendirme, uluslararasılaştırma ve dikkate alınması gereken çok daha fazlası var. Size şunu sorayım: Neler bir gün sayılır? Dünyanın farklı saat dilimlerinde çalıştığını biliyoruz ve sanki bu yeterli değilmiş gibi bazı bölgelerde yılda iki kez Yaz Saati Uygulaması (DST) yapılıyor. Bu uç durumlarla ilgilenmeye nereden başlıyorsunuz? Yarının “başlangıcı” olarak sayılan şey nedir? Bazı geliştiriciler UTC gibi tek bir merkezi saat dilimi kullanarak bundan kaçınmaya çalışır. Bazı kullanıcılar için bu doğru sonuçlar verir, ancak bazıları için bir saat, iki saat veya daha fazla gecikme olabilir. Bu tutarsızlık kullanıcı deneyimini bozar. Kullanıcılar, perde arkasında geçen zamanı nasıl idare ettiğinizi daha az önemsiyorlar; Tek bekledikleri, eğer saat 23.40'ta bir seri eylemi gerçekleştirirlerse, bu eylemin kendi bağlamlarında tam olarak o saatte kaydedilmesidir. “Bir gün”ü sunucu saatine göre değil, kullanıcının yerel saat dilimine göre tanımlamanız gerekir. Tabiki kolay olanı tercih edebilirsinUTC gece yarısı tüm kullanıcılar için serileri global olarak yönlendirin ve sıfırlayın, ancak büyük ölçüde adaletsizlik yaratıyorsunuz. Kaliforniya'daki birinin görevini tamamlamak için Londra'da yaşayan birine göre her zaman fazladan sekiz saati vardır. Bu, belirli kullanıcıları konumlarından dolayı cezalandıran adaletsiz bir tasarım hatasıdır. Peki ya Londra'daki bu kişi yalnızca ziyarette bulunuyorsa, bir görevi tamamlıyor ve ardından başka bir saat dilimine dönüyorsa? Tüm bunlara etkili bir çözüm, kullanıcılardan katılım sırasında (tercihen ilk kimlik doğrulamasından sonra) saat dilimlerini açıkça ayarlamalarını istemektir. Saat dilimi bilgilerinin kişisel olarak tanımlanabilir veriler olarak kullanılması yerine yalnızca uygulamanın ilerlemeyi doğru bir şekilde takip etmesi için kullanıldığına dair ince bir not eklemek iyi bir fikirdir. Ve bunu değiştirilebilir bir ayar haline getirmek başka bir iyi fikir. Herkesin bir uygulamada saat dilimi mantığını doğrudan kullanmaktan kaçınmasını öneririm. Moment.js veya pytz (Python) gibi denenmiş ve doğrulanmış tarih kitaplıklarını kullanın. Bu kadar karmaşık bir şey için tekerleği yeniden icat etmeye gerek yok. Kaçırılan Günler ve Son Durumlar Endişelenmeniz gereken diğer bir zorluk da kullanıcıların aşırı uyuması, sunucunun kapalı kalması, gecikme, ağ arızaları vb. gibi kontrol edilemeyen uç durumlardır. Daha önce tartıştığımız gibi lütuf mekanizmaları fikrini kullanmak yardımcı olabilir. İki saatlik bir ek süre, kullanıcıların kontrol edilemeyen yaşam koşulları nedeniyle katı bir şekilde cezalandırılmaması açısından hem kullanıcıya hem de geliştiriciye yardımcı olabilir. Geliştiriciler için ek pencereler, sunucunun gece yarısı çöktüğü kontrol edilemeyen anlarda faydalıdır. Her şeyden önce müşteriye asla güvenmeyin. Her zaman sunucu tarafında doğrulayın. Sunucu gerçeğin tek kaynağı olmalıdır. Hile Önleme Bir kez daha şunu yeterince vurgulayamam: Her şeyi sunucu tarafında doğruladığınızdan emin olun. Kullanıcılar insandır ve fırsat verilirse insanlar hile yapabilir. Bu kaçınılmazdır. Şunları deneyebilirsiniz:

Tüm eylemlerin UTC zaman damgalarıyla saklanması. İstemci yerel saatini gönderebilir, ancak sunucu bunu hemen UTC'ye dönüştürebilir ve sunucu saatine göre doğrulayabilir. Bu şekilde, eğer müşterinin zaman damgası şüpheli derecede uzaksa sistem bunu bir hata olarak reddedebilir ve kullanıcı arayüzü buna göre yanıt verebilir. Etkinliğe dayalı izlemeyi kullanma. Başka bir deyişle, her bir eylemin kaydını, kullanıcının kimliği, gerçekleştirilen eylemin türü, zaman damgası ve saat dilimi gibi bilgileri içeren meta verilerle birlikte saklayın. Bu doğrulamaya yardımcı olur.

Streak Sistem Motoru Oluşturma Bu bir kod eğitimi değil, bu yüzden üzerinize bir sürü kod dökmekten kaçınacağım. Bunu pratik tutacağım ve mimari, akış ve güvenilirlik açısından genel olarak bir seri sistem motorunun nasıl çalıştığını anlatacağım. Çekirdek Mimari Birkaç kez söylediğim gibi, sunucuyu seri veriler için tek gerçek kaynak haline getirin. Mimari sunucuda şöyle bir şeye gidebilir:

Her kullanıcının verilerini bir veritabanında saklayın. Geçerli seri deposunu (varsayılan olarak 0'dır) bir tamsayı olarak saklayın. Saat dilimi tercihini, yani IANA Saat Dilimi dizesini (yerel zaman damgasından dolaylı olarak veya kullanıcıdan kendi saat dilimini seçmesini isteyerek açıkça) saklayın. Örneğin, “Amerika/New_York”. Kullanıcının yerel saat dilimine göre bir saat dilimi kontrolü ile serinin devam edip etmediğini belirlemek için tüm mantığı kullanın.

Bu arada müşteri tarafında:

Normalde sunucudan alınan mevcut seriyi görüntüleyin. Kullanıcının gerçekten uygun bir seri eylemi tamamlayıp tamamlamadığını doğrulamak için yapılan eylemi meta veri biçiminde sunucuya gönderin. Sunucu yanıtlarına göre görsel geri bildirim sağlayın.

Yani kısacası beyin sunucudadır, istemci ise görüntüleme ve olay gönderme amaçlıdır. Bu sizi birçok hatadan ve uç durumlardan kurtarır, ayrıca güncellemeleri ve düzeltmeleri kolaylaştırır. Mantıksal Akış Kullanıcı bir eylemi tamamladığında minimum verimliliğe sahip bir sistem motorunun nasıl çalışacağını gösteren bir örnek analiz yapalım:

Kullanıcı uygun bir seri eylemini tamamlar. İstemci sunucuya meta veri olarak bir olay gönderir. Bu, "X Kullanıcısı Y eylemini Z zaman damgasında tamamladı" olabilir. Sunucu bu olayı alır ve temel doğrulamayı yapar. Bu gerçek bir kullanıcı mı? Kimlikleri doğrulandı mı? İşlem geçerli mi? Saat dilimi tutarlı mı? Bu başarılı olursa, sunucu kullanıcının seri verilerini veritabanından alır. Ardından alınan eylem zaman damgasını kullanıcının yerel saat dilimine dönüştürün. Sunucunun, kullanıcının yerel saat dilimindeki takvim tarihlerini (zaman damgalarını değil) karşılaştırmasına izin verin: Aynı gün ise işlem gereksizdir ve işlemde herhangi bir değişiklik olmaz.rüzgâr gibi geçmek. Ertesi gün ise seri uzar ve 1 artar. Bir günden fazla ara olursa seri bozulur. Ancak zarafet mekaniğini uygulayabileceğiniz yer burasıdır. Grace mekanizması kaçırılırsa seriyi 1'e sıfırlayın.

Dönüm noktası başarılarına ilişkin geçmiş verileri kaydetmeyi seçerseniz "en uzun seri" veya "toplam aktif gün sayısı" gibi değişkenleri güncelleyin. Sunucu daha sonra veritabanını günceller ve istemciye yanıt verir. Bunun gibi bir şey:

{ "current_streak": 48, "en uzun_seri": 50, "total_active_days": 120, "streak_extulated": doğru, }

Ek bir önlem olarak, sunucu ya yeniden denemeli ya da reddetmeli ve işlem sırasında herhangi bir şey başarısız olduğunda istemciye bildirimde bulunmalıdır. Direnç Oluşturmak Daha önce de belirtildiği gibi, hatalar veya sunucu kesintisi nedeniyle kullanıcıların galibiyet serisini kaybetmesi berbat bir kullanıcı deneyimidir ve kullanıcılar bunun sorumluluğunu üstlenmeyi beklemezler. Bu nedenle, seri sisteminizin bu senaryolara yönelik korumaları olmalıdır. Sunucu bakım nedeniyle (veya herhangi bir nedenle) kapalıysa, eylemlerin geç gönderilebilmesi ve yine de sayılabilmesi için, sorunun düzeltilmesi için ek saatlerle geçici bir süre tanımayı düşünün. Özellikle durumun devam eden bir seriyi etkileyebilecek olması durumunda, kullanıcıları bilgilendirmeyi de seçebilirsiniz. Not: Verilerin manuel olarak geri yüklenebileceği bir yönetici arka kapısı oluşturun. Hatalar kaçınılmazdır ve bazı kullanıcılar, kontrol edemeyecekleri bir nedenden dolayı serilerinin bozulduğunu desteklemek için uygulamanızı arar veya iletişime geçer. Araştırmanın ardından kullanıcı haklıysa çizgileri manuel olarak geri yükleyebilmelisiniz. Sonuç Açık olan bir şey var: Çizgiler, insan psikolojisinin temel düzeyde işleyişi nedeniyle gerçekten güçlüdür. Piyasadaki en iyi seri sistemi, kullanıcıların bilinçli olarak düşünmediği sistemdir. Düzenli bir alışkanlık haline gelen diş fırçalama gibi, anında sonuç veren veya gözle görülür ilerleme sağlayan bir rutin haline geldi. Ve şunu söyleyeceğim: Her ürünün çizgi sistemine ihtiyacı yoktur. Sırf günlük aktif kullanıcı istediğiniz için tutarlılığı gerçekten zorlamalı mısınız? Cevap pekala “hayır” olabilir.

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