Jag är säker på att du har hört talas om streaks eller använt en app med en. Men någonsin undrat varför ränder är så populära och kraftfulla? Tja, det finns det uppenbara att appar vill ha så mycket av din uppmärksamhet som möjligt, men bortsett från det, visste du att när den populära inlärningsappen Duolingo introducerade iOS-widgets för att visa streck, ökade användarens engagemang med 60 %. Sextio procent är en massiv förändring i beteende och visar hur "streak"-mönster kan användas för att öka engagemanget och öka användningen. Som mest grundläggande är en streak antalet dagar i följd som en användare slutför en specifik aktivitet. Vissa människor definierar det också som en "gamifierad" vana eller ett mått utformat för att uppmuntra konsekvent användning. Men streck överskrider bortom att vara ett mått eller ett rekord i en app; det är mer psykologiskt än så. Mänskliga instinkter är lätta att påverka med rätt faktorer. Titta på dessa tre faktorer: framsteg, stolthet och rädsla för att missa något (vanligen kallat FOMO). Vad har alla dessa gemensamt? Ansträngning. Ju mer ansträngning du lägger på något, desto mer formar det din identitet, och det är så ränder passerar in i beteendepsykologins värld. Nu, med stor makt kommer stort ansvar, och på grund av det finns det en mörk sida av ränder. I den här artikeln kommer vi att gå in på psykologi, UX och designprinciper bakom att bygga ett effektivt streaksystem. Vi ska titta på (1) varför våra hjärnor nästan instinktivt reagerar på streak-aktivitet, (2) hur man designar streaks på ett sätt som verkligen hjälper användarna, och (3) det tekniska arbetet som ingår i att bygga ett streak-mönster. Psykologin bakom streck För att designa och bygga ett effektivt streaksystem måste vi förstå hur det överensstämmer med hur våra hjärnor är kopplade. Som, vad gör det så effektivt att vi känner så mycket intensivt engagemang för att skydda våra ränder? Det finns tre intressanta, väldokumenterade psykologiprinciper som stödjer det som gör ränder så kraftfulla och beroendeframkallande. Förlustaversion Detta är förmodligen den starkaste kraften bakom streaks. Jag säger detta för att man oftast inte kan undvika detta i livet. Tänk på det så här: Om en vän ger dig 100 $, skulle du vara glad. Men om du förlorade $100 från din plånbok, skulle det skada mycket mer. Den känslomässiga vikten av dessa situationer är inte lika. Förlust gör mycket mer ont än att vinna känns bra. Låt oss ta det längre och säga att jag ger dig $100 och ber dig att spela en chansning. Det finns en 50% chans att du vinner ytterligare 100 $ och en 50% chans att du förlorar de ursprungliga $100. Skulle du ta det? Jag skulle inte. De flesta människor skulle inte. Det är förlustaversion. Om man tänker efter så är det logiskt, det är förståeligt, det är mänskligt. Konceptet bakom förlustaversion är att vi känner smärtan av att förlora något dubbelt så mycket som nöjet att vinna något av lika värde. I psykologiska termer dröjer förlusten kvar mer än vinster gör. Du ser förmodligen hur detta relaterar till ränder. För att bygga en märkbar strimma krävs ansträngning; när en strimma växer, börjar motivationen bakom det att blekna; eller rättare sagt, det börjar bli sekundärt. Här är ett exempel: Säg att din vän har en tredagarsserie som stänger sina "Move Rings" på sin Apple Watch. De har nästan ingenting att förlora utöver att vilja uppnå sitt mål och vara konsekventa. Samtidigt har du en imponerande 219-dagarsserie på gång. Chansen är stor att du är fångad av rädslan att förlora den. Du tänker troligen inte på prestationen vid det här laget; det handlar mer om att skydda din investerade ansträngning, och det är förlustaversion. Duolingo förklarar hur förlustaversion bidrar till en användares ovilja att bryta en lång rad, även på deras slappaste dagar. På sätt och vis kan en streak förvandlas till en vana när förlustaversionen sätter sig. Foggs beteendemodell (B = MAP) Nu när vi förstår rädslan för att förlora den ansträngning som investeras i längre streak, är en annan fråga: Vad får oss att göra saken i första hand, dag efter dag, även innan streaken blir stor? Det är vad Foggs beteendemodell handlar om. Det är relativt enkelt. Ett beteende (B) uppstår bara när tre faktorer – Motivation (M), Förmåga (A) och Uppmaning (P) – stämmer överens i samma ögonblick. Således är ekvationen B=MAP. Om någon av dessa faktorer, även en, saknas i det ögonblicket, kommer beteendet inte att hända. Så för att ett streaksystem ska vara effektivt och återkommande måste alla tre faktorerna vara närvarande: Motivation Detta är bräckligt och inte något som är konsekvent närvarande. Det finns dagar när du ärpumpad för att lära sig spanska, och dagar du inte ens känner ett jota av viljestyrka att lära dig språket. Motivation i sig att bygga upp en vana är opålitlig och en förlorad kamp från dag ett. FörmågaFörmågan är avgörande för att kompensera för motivationens begränsningar. I detta sammanhang betyder förmåga att det är lätt att agera, det vill säga ansträngningen är så lätt att det är orealistiskt att säga att det inte är möjligt. De flesta appar använder detta avsiktligt. Apple Fitness behöver bara att du står i en minut på en timme för att få en bock mot ditt Stand-mål. Duolingo behöver bara en avslutad lektion. Dessa uppgifter kräver inte så mycket ansträngning. Barriären är så låg att även på dina värsta dagar kan du göra det. Men den kombinerade ansträngningen av en pågående serie är där tanken på att förlora den streak slår in. PromptDetta är vad som kompletterar ekvationen. Människor är naturligt glömska, så ja, förmåga kan ta oss dit till 90%. Men en uppmaning påminner oss om att agera. Sträckor är beständiga till sin design, så användarna måste ständigt påminnas om att agera. För att se hur kraftfull en prompt kan vara, gjorde Duolingo ett A/B-test för att se om ett litet rött märke på appens ikon ökade konsekvent användning. Det gav en ökning med 6 % av antalet dagliga aktiva användare. Just a red badge. Model Limitations Med detta sagt finns det en begränsning för Fogg-modellen där kritiker och modern forskning har märkt att en design som för mycket bygger på uppmaningar, som aggressiva meddelanden, riskerar att skapa mental trötthet. Ständiga aviseringar och övertid kan få användare att tappa. So, watch out for that. The Zeigarnik Effect Hur känner du dig när du lämnar ett projekt halvklart? Det irriterar många människor eftersom oavslutade uppgifter upptar mer mentalt utrymme än de saker vi slutför. När något är gjort och borta, tenderar vi att glömma det. När något lämnas ogjort, tenderar det att tynga våra sinnen. Det är precis därför digitala produkter använder artificiella framstegsindikatorer, som Upworks profilkompletteringsfält, för att låta en användare veta att deras profil bara är "60% komplett". Det knuffar användaren att avsluta det de påbörjade.

Låt oss titta på ett annat exempel. Du har fem uppgifter i en att göra-lista-app, och i slutet av dagen kontrollerar du bara fyra av dem som slutförda. Många av oss kommer att känna oss oavslutade på grund av den där oavslutade uppgiften. Det där är Zeigarnik-effekten. Zeigarnik-effekten demonstrerades av psykologen Bluma Zeigarnik, som beskrev att vi tenderar att hålla ofullständiga uppgifter aktiva i vårt minne längre än slutförda uppgifter. Ett streckmönster slår naturligt in i detta i UX-design. Låt oss säga att du är på dag 63 av en inlärningsserie. Vid den tidpunkten befinner du dig i ett pågående mönster av oavslutade affärer. Din hjärna skulle sällan glömma det eftersom det sitter i bakhuvudet. Vid det här laget blir din hjärna den som skickar meddelanden till dig. När du sätter ihop dessa psykologiska krafter börjar du verkligen förstå varför streaks inte bara är en vanlig appfunktion; de är kapabla att omforma mänskligt beteende. Men någonstans längs linjen - jag kan inte säga exakt när, eftersom det skiljer sig för alla - når saker till en punkt där en rad skiftar från "roligt" till något du känner att du inte har råd att förlora. Du vill inte att 58 dagars ansträngning ska gå till spillo, eller hur? Det är det som gör ett streaksystem effektivt. Om det görs rätt hjälper streck användarna att bygga upp häpnadsväckande vanor som uppnår ett mål. Det kan vara att läsa dagligen eller träna konsekvent på gymmet. Dessa upprepade handlingar (ibland små) förvärras med tiden och blir tydliga i vårt dagliga liv. Men det finns två sidor av varje mynt. Den tunna gränsen mellan vana och tvång Om du har följt med kan du redan se att det finns en mörk sida med streak-system. Vanebildning handlar om konsekvens med ett upprepat mål. Tvång är dock konsekvensen av att arbeta med ett mål som inte längre behövs utan som hålls fast av rädsla eller press. It is a razor-thin line. Du borstar tänderna varje morgon utan att tänka; den är automatisk och instinktiv, med ett tydligt mål att ha bra andetag. Det är en strimma som bildar en god vana. Ett etiskt streaksystem ger användarna utrymme att andas. Om du av någon anledning inte borstar på morgonen kan du borsta vid middagstid. Ofullkomlighet är tillåten utan rädsla för att förlora en lång ansträngning. Tvång tar den motsatta vägen, där en strimma gör dig orolig, du känner dig skyldig eller till och med utmattad, och ibland känns det som att du inte har åstadkommit någonting, trots alla dinaarbete. Du agerar inte för att du vill, utan för att du undermedvetet är livrädd för att se dina framsteg återställas till noll. Någon beskrev till och med detta perfekt, "Jag kände att jag fuskade, men jag brydde mig helt enkelt inte. Jag är ingenting utan min streak". Detta visar de extrema hållningsränderna kan ha på en individ. I den utsträckning som användare börjar knyta sitt självvärde till ett godtyckligt mått snarare än det ursprungliga målet eller anledningen till att de startade streaken i första hand. Striden blir vem de är, inte bara vad de gör. Ett väldesignat etiskt streak-system ska kännas som uppmuntran för användaren, inte press eller skyldighet. Detta relaterar till balansen mellan inre och yttre motivation. Yttre motivation (externa belöningar, undvika bestraffning) kan få användare igång, men inneboende motivation (att göra uppgiften för ett personligt mål som att lära sig spanska för att du verkligen vill kommunicera med en älskad) är starkare för långsiktigt engagemang. Ett bra system bör dras mot inre motivation med noggrann användning av yttre element, d.v.s. påminna användarna om hur långt de har kommit, inte hota dem med vad de kan förlora. Återigen, det är en fin linje. Ett enkelt test när du designar ett streak-system är att faktiskt ta lite tid och fundera på om dina produkter tjänar pengar på att sälja lösningar på ångest som din produkt skapade. Om ja, det finns en stor chans att du utnyttjar användare. Så nästa fråga blir, om jag väljer att använda streak, hur designar jag det på ett sätt som verkligen hjälper användarna att nå sina mål? UX för Good Streak System Design Jag tror att det är här de flesta projekt antingen spikar ett effektivt streaksystem eller förstör det fullständigt. Låt oss gå igenom några UX-principer för en bra streakdesign. Håll det enkelt Du har säkert hört detta förut, kanske från böcker som Atomic Habits, men det är värt att nämna att ett av de enklaste sätten att skapa vanor på är att göra handlingen liten och enkel. Detta liknar förmågasfaktorn vi diskuterade från Foggs beteendemodell. Den första regeln för en streakdesign bör vara att göra den nödvändiga åtgärden så liten som mänskligt möjligt samtidigt som man gör framsteg. Om en daglig åtgärd kräver viljestyrka för att slutföra, kommer den åtgärden inte att klara fem dagar. Varför? Du kan inte vara motiverad fem dagar i rad. Exempel: Om du kör en meditationsapp behöver du inte tvinga användarna att gå igenom en 20-minuterssession bara för att behålla streaken. Prova en enda minut, kanske till och med något så litet som trettio sekunder, istället. Som ordspråket säger, små droppar vatten gör det mäktiga havet). Små ansträngningar sammanställs till stora prestationer med tiden. Det borde vara målet: ta bort friktion, särskilt när ögonblicket kan vara svårt. När användare är stressade eller överväldigade, låt dem veta att bara att dyka upp, även för några sekunder, räknas som ansträngning. Ge tydlig visuell feedback Människor är visuella av naturen. Oftast behöver vi se något för att tro; det finns ett behov av att visualisera saker för att förstå dem bättre och sätta saker i perspektiv. Det är därför som streckmönster ofta använder visuella element, som grafer, bockar, framstegsringar och rutnät, för att visualisera ansträngning. Titta på GitHubs bidragsdiagram. Det är en enkel visualisering av konsekvens. Ändå andas utvecklarna in det som syre.

Nyckeln är inte att få ett streaksystem att kännas abstrakt. Det ska kännas verkligt och förtjänat. Till exempel använder Duolingo och Apples Fitness-aktivitetsringar rena animationsdesigner när en rad har slutförts, och GitHub visar historiska data om en användares konsistens över tid.

Använd bra timing Jag nämnde tidigare att människor i allmänhet är glömska av naturen och att uppmaningar kan hjälpa till att upprätthålla farten framåt. Utan uppmaningar glömmer de flesta nya användare att fortsätta. Livet kan bli hektiskt, motivationen försvinner och saker händer. Även långvariga användare drar nytta av uppmaningar, men de flesta gånger är de redan låsta i vaneslingan. Ändå kan även den mest engagerade personen missa en dag av misstag. Ditt streaksystem behöver definitivt påminnelser. De mest använda promptpåminnelserna är push-meddelanden. Timing spelar verkligen roll när du arbetar med push-meddelanden. Typen av app spelar också roll. Att skicka ett meddelande kl. 09.00 och säga "Du har inte tränat i dag" är bara konstigt för en inlärningsapp eftersom många har saker att göra under dagen innan de ens tänker på att slutföra en lektion. Om vi ​​pratar om en träningsapp, men detär rimligt och kanske till och med förväntas bli påmind tidigare under dagen. Push-meddelanden varierar avsevärt beroende på appkategori. Fitnessappar, till exempel, ser högre engagemang med tidiga morgonaviseringar (7–8 AM), medan produktivitetsappar kan prestera bättre tidigt på dagen. Nyckeln är att A/B-testa appens timing baserat på dina användares beteenden snarare än att anta att saker och ting passar alla. Det som fungerar för en meditationsapp kanske inte fungerar för en kodningsspårare. Andra snabbmetoder är röda prickar på appikonen och till och med appwidgets. Studier varierar, men den genomsnittliga personen låser upp sin enhet mellan 50-150 gånger om dagen (PDF). Om en användare ser en röd prick på en app eller en widget som indikerar en aktuell streak varje gång de låser upp sin telefon, ökar det engagemanget. Just don’t overdo it; uppmaningen ska fungera som en påminnelse, inte ett tjat. Fira milstolpar Ett streaksystem bör försöka fira milstolpar för att återuppväcka känslor, särskilt för användare som är djupt inne i en streak. När en användare når dag 7, dag 30, dag 50, dag 100, dag 365 bör du göra en stor grej av det. Erkänn prestationer - särskilt för långtidsanvändare.

Som vi såg tidigare kom Duolingo på detta och implementerade en animerad grafik som firar milstolpar med konfetti. Some platforms even give substantial bonus rewards that validate users’ efforts. Och detta kan vara fördelaktigt för appar, så att användare tenderar att dela sina milstolpar offentligt på sociala medier. En annan fördel är förväntan som kommer innan man når milstolpar. Det är inte bara att hålla streaken vid liv i det oändliga; användare har något att se fram emot. Använd nådmekanismer Livet är oförutsägbart. Folk blir distraherade. Alla bra streaksystem bör förvänta sig ofullkomlighet. Ett av de största psykologiska hoten mot ett streaksystem är den hårda återställningen till noll efter bara en enda missad dag. Ett "etiskt" streaksystem bör ge användaren lite slack. Let’s say you have a 90-day chess learning streak. Du har varit konsekvent i tre bra månader, och en dag dör din telefon när du reser, och precis som det blir 90 0 - allt, alla ansträngningar, raderas och framsteg försvinner. Användaren kan vara helt förstörd. Tanken på att bygga om den från grunden är så demoraliserande att ansträngningen inte är värt det. I värsta fall kan en användare överge appen efter att ha känt sig misslyckad. Överväg att lägga till en "grace"-mekanism till ditt streaksystem:

Streak Freeze Tillåt användare att avsiktligt missa en dag utan straff. Extra TimeTillåt några timmar (2–3) efter den vanliga deadline innan en återställning utlöses. Decay ModelsIstället för en hård återställning minskar streaken med en liten mängd, t.ex. dras 10 dagar från streaken per missad dag.

Använd en uppmuntrande ton Låt oss jämföra två meddelanden som visas för användare när en rad bryter:

"Du förlorade din 42-dagarsserie. Börja om." "Du dök upp i 42 dagar i sträck. Det är otroliga framsteg! Vill du ge det ett nytt försök?"

Båda förmedlar samma information, men den känslomässiga påverkan är olika. Det första meddelandet skulle med största sannolikhet få en användare att känna sig demoraliserad och få dem att sluta. Det andra meddelandet hyllar det som redan har uppnåtts och uppmuntrar försiktigt användaren att försöka igen. Streak Systems Design utmaningar Innan vi går in på de tekniska detaljerna för att bygga ett streaksystem bör du vara medveten om de utmaningar som du kan möta. Saker och ting kan bli komplicerade, som du kanske förväntar dig. Hantera tidszoner Det finns en anledning till att hantering av tid och datum är bland de svåraste koncepten som utvecklare hanterar. Det finns formatering, internationalisering och mycket mer att tänka på. Låt mig fråga dig detta: Vad räknas som en dag? Vi vet att världen körs på olika tidszoner, och som om det inte räcker, har vissa regioner sommartid (DST) som händer två gånger om året. Var börjar man ens hantera dessa kantfall? Vad räknas som "starten" på morgondagen? Vissa utvecklare försöker undvika detta genom att använda en central tidszon, som UTC. För vissa användare skulle detta ge korrekta resultat, men för vissa kan det vara avstängt med en timme, två timmar eller mer. Denna inkonsekvens förstör användarupplevelsen. Användarna bryr sig mindre om hur du hanterar tiden bakom kulisserna; allt de förväntar sig är att om de utför en streak-handling klockan 23:40, så ska den registreras vid den exakta tiden, i deras sammanhang. Du bör definiera "en dag" baserat på användarens lokala tidszon, inte servertiden. Visst, du kan ta det lugnarutt och återställ streck globalt för alla användare vid midnatt UTC, men du skapar mycket orättvisa. Någon i Kalifornien har alltid åtta timmar extra på sig att slutföra sin uppgift än någon som bor i London. Det är ett orättvist designfel som straffar vissa användare på grund av deras plats. Och vad händer om den personen i London bara är på besök, slutför en uppgift och sedan återvänder till en annan tidszon? En effektiv lösning på allt detta är att be användarna att uttryckligen ställa in sin tidszon under onboarding (helst efter första autentisering). Det är en bra idé att inkludera en subtil notering om att tillhandahållande av tidszonsinformation endast används för att appen ska kunna spåra framstegen, snarare än att användas som personligt identifierbar data. Och det är en annan bra idé att göra det till en föränderlig miljö. Jag föreslår att alla undviker att direkt hantera tidszonslogik i en app. Använd beprövade datumbibliotek, som Moment.js eller pytz (Python), etc. Det finns ingen anledning att uppfinna hjulet på nytt för något så komplext som detta. Missade dagar och kantfodral En annan utmaning du bör oroa dig för är okontrollerbara kantfall som användare som sover för mycket, serveravbrott, fördröjning, nätverksfel och så vidare. Att använda idén om nådemekanismer, som de vi diskuterade tidigare, kan hjälpa. Ett grace-fönster på två timmar kan hjälpa både användare och utvecklare, i den meningen att användare inte straffas hårt för okontrollerbara livsförhållanden. För utvecklare är grace-fönster till hjälp i de okontrollerbara ögonblicken när servern går ner mitt i natten. Framför allt lita aldrig på kunden. Validera alltid på serversidan. Servern bör vara den enda källan till sanning. Fuskförebyggande Återigen, jag kan inte betona detta tillräckligt: Se till att validera allt på serversidan. Användare är människor, och människor kan fuska om de ges möjlighet. Det är oundvikligt. Du kan prova:

Lagrar alla åtgärder med UTC-tidsstämplar. Klienten kan skicka sin lokala tid, men servern kan omedelbart konvertera den till UTC och validera mot servertiden. På så sätt, om klientens tidsstämpel är misstänkt långt borta, kan systemet avvisa det som ett fel, och användargränssnittet kan svara därefter. Använd händelsebaserad spårning. Med andra ord, lagra en post för varje åtgärd med metadata inklusive information som användarens ID, typen av utförd åtgärd och tidsstämpeln och tidszonen. Detta hjälper till med validering.

Bygga en Streak System Engine Det här är inte en kodhandledning, så jag kommer att undvika att dumpa en massa kod på dig. Jag kommer att hålla det här praktiskt och beskriva hur saker i allmänhet driver en streak-systemmotor när det gäller arkitektur, flöde och tillförlitlighet. Kärnarkitektur Som jag har sagt flera gånger, gör servern till den enda sanningskällan för streakdata. Arkitekturen kan se ut ungefär så här på servern:

Lagra varje användares data i en databas. Lagra det aktuella streaklagret (standard som 0) som ett heltal. Lagra inställningen för tidszon, d.v.s. IANA-tidszonsträng (antingen implicit från lokal tidsstämpel eller uttryckligen genom att be användaren att välja sin tidszon). Till exempel "America/New_York". Hantera all logik för att avgöra om streaken fortsätter eller avbryts, med en tidszonskontroll som är relativ till användarens lokala tidszon.

Under tiden, på klientsidan:

Visa den aktuella streaken, som normalt hämtas från servern. Skicka åtgärd gjord i form av metadata till servern för att validera om användaren faktiskt genomförde en kvalificerande streak-åtgärd. Ge visuell feedback baserat på serverns svar.

Så, kort sagt, hjärnan är på servern, och klienten är för visningsändamål och skickar in händelser. Detta sparar dig många misslyckanden och edge-fall, plus gör uppdateringar och korrigeringar enklare. Det logiska flödet Låt oss simulera en genomgång av hur en minimalt effektiv streak-systemmotor skulle gå när en användare slutför en åtgärd:

Användaren slutför en kvalificerande streak-åtgärd. Klienten skickar en händelse till servern som metadata. Detta kan vara "Användare X genomförde åtgärd Y vid tidsstämpel Z". Servern tar emot denna händelse och utför grundläggande validering. Är detta en riktig användare? Är de autentiserade? Är åtgärden giltig? Är tidszonen konsekvent? Om detta går igenom hämtar servern användarens streakdata från databasen. Konvertera sedan den mottagna åtgärdens tidsstämpel till användarens lokala tidszon. Låt servern jämföra kalenderdatum (inte tidsstämplar) i användarens lokala tidszon: Om det är samma dag är åtgärden överflödig och det finns ingen förändring istrimma. Om det är nästa dag förlängs raden och ökar med 1. Om det finns ett mellanrum på mer än en dag, bryts raden. Men det är här du kan tillämpa nådmekanik. Om nådmekanismen missas, återställ sedan streak till 1.

Om du väljer att spara historisk data för milstolpeprestationer uppdaterar du variabler som "längsta streak" eller "totalt antal aktiva dagar". Servern uppdaterar sedan databasen och svarar på klienten. Något så här:

{ "current_streak": 48, "longest_streak": 50, "total_active_days": 120, "streak_extended": sant, }

Som en ytterligare åtgärd bör servern antingen försöka igen eller avvisa och meddela klienten när något misslyckas under processen. Byggnad för motståndskraft Som nämnts tidigare är användare som förlorar en rad på grund av buggar eller serveravbrott hemsk UX, och användare förväntar sig inte att ta fallen för det. Därför bör ditt streaksystem ha skydd för dessa scenarier. Om servern är nere på grund av underhåll (eller någon anledning), överväg att tillåta ett tillfälligt fönster med ytterligare timmar för att fixa det så att åtgärder kan skickas för sent och fortfarande räknas. Du kan också välja att meddela användare, särskilt om situationen kan påverka en pågående rad. Obs: Etablera en admin-bakdörr där data kan återställas manuellt. Buggar är oundvikliga, och vissa användare skulle ringa din app eller kontakta för att stödja att deras streak bröts av en anledning som de inte kunde kontrollera. Du bör kunna återställa ränderna manuellt om användaren efter undersökning har rätt. Slutsats En sak är fortfarande klar: Streaks är verkligen kraftfulla på grund av hur mänsklig psykologi fungerar på en grundläggande nivå. Det bästa streaksystemet där ute är det som användare inte tänker på medvetet. Det har blivit en rutin med omedelbara resultat eller synliga framsteg, som att borsta tänderna, vilket blir en vanlig vana. Och jag ska bara säga det: Alla produkter behöver inte ett streaksystem. Ska du verkligen tvinga fram konsekvens bara för att du vill ha dagliga aktiva användare? Svaret kan mycket väl vara "nej".

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