줄무늬에 대해 들어보셨거나 줄무늬가 있는 앱을 사용해 보셨을 것입니다. 하지만 연속 행진이 왜 그토록 인기 있고 강력한지 궁금한 적이 있습니까? 글쎄, 앱이 가능한 한 많은 관심을 원한다는 분명한 사실이 있지만, 그 외에도 인기 학습 앱인 Duolingo가 연속 표시를 위해 iOS 위젯을 도입했을 때 사용자 참여도가 60%나 급증했다는 사실을 알고 계셨습니까? 60%는 행동의 엄청난 변화이며 "연속" 패턴을 사용하여 참여도를 높이고 사용량을 늘릴 수 있는 방법을 보여줍니다. 가장 기본적으로 연속은 사용자가 특정 활동을 완료한 연속 일수입니다. 어떤 사람들은 이를 "게임화된" 습관이나 일관된 사용을 장려하기 위해 고안된 측정 기준으로 정의하기도 합니다. 하지만 연속 기록은 앱의 측정항목이나 기록을 넘어서는 것입니다. 그보다 심리적인 것이 더 큽니다. 인간의 본능은 올바른 요인에 의해 영향을 받기 쉽습니다. 발전, 자부심, 누락에 대한 두려움(흔히 FOMO라고 함)이라는 세 가지 요소를 살펴보세요. 이 모든 것의 공통점은 무엇입니까? 노력. 무언가에 더 많은 노력을 쏟을수록 그것이 당신의 정체성을 더욱 형성하게 되며, 이것이 바로 행동 심리학의 세계에 줄무늬가 교차하는 방식입니다. 이제 큰 힘에는 큰 책임이 따르기 때문에 연승에는 어두운 면도 있습니다. 이 글에서는 효과적인 연속 시스템을 구축하는 데 필요한 심리학, UX 및 디자인 원칙을 살펴보겠습니다. (1) 우리의 두뇌가 연속 활동에 거의 본능적으로 반응하는 이유, (2) 사용자에게 진정으로 도움이 되는 방식으로 연속을 디자인하는 방법, (3) 연속 패턴 구축과 관련된 기술 작업을 살펴보겠습니다. 줄무늬 뒤에 숨은 심리학 효과적인 연속 연속 시스템을 설계하고 구축하려면 그것이 뇌의 연결 방식과 어떻게 일치하는지 이해해야 합니다. 예를 들어, 연속 기록을 보호하기 위해 그토록 강렬한 헌신을 느낄 만큼 효과적인 이유는 무엇일까요? 줄무늬를 강력하고 중독성있게 만드는 세 가지 흥미롭고 잘 문서화된 심리학 원리가 있습니다. 손실 회피 이것이 아마도 연속극의 가장 강력한 힘일 것입니다. 제가 이렇게 말하는 이유는 대부분의 경우 인생에서 이것을 피할 수 없기 때문입니다. 이렇게 생각해보세요. 친구가 당신에게 100달러를 주면 당신은 기뻐할 것입니다. 하지만 지갑에서 100달러를 잃어버리면 훨씬 더 큰 상처를 입을 것입니다. 그러한 상황의 감정적 무게는 동일하지 않습니다. 이득이 좋다고 느끼는 것보다 손실이 훨씬 더 상처를 줍니다. 더 나아가 내가 당신에게 100달러를 주고 도박을 하자고 하자. 100달러를 더 얻을 확률이 50%이고 원래 100달러를 잃을 확률도 50%입니다. 가져가시겠어요? 나는하지 않을 것이다. 대부분의 사람들은 그렇지 않습니다. 그것은 손실 회피입니다. 생각해 보면 그것은 논리적이고, 이해할 수 있고, 인간적이다. 손실 회피의 개념은 동일한 가치를 지닌 것을 얻는 기쁨보다 무언가를 잃는 고통을 두 배 더 느낀다는 것입니다. 심리학적으로 보면 이득보다 손실이 더 오래 지속됩니다. 아마도 이것이 줄무늬와 어떤 관련이 있는지 알 것입니다. 눈에 띄는 연속 기록을 세우려면 노력이 필요합니다. 연속 기록이 늘어나면 그 뒤에 숨은 동기가 사라지기 시작합니다. 더 정확하게는 부차적인 것이 되기 시작합니다. 예를 들면 다음과 같습니다. 친구가 Apple Watch에서 3일 연속으로 '무브 링'을 닫았다고 가정해 보겠습니다. 그들은 목표를 달성하고 일관성을 유지하려는 것 외에 잃을 것이 거의 없습니다. 동시에, 당신은 인상적인 219일 연속 기록을 이어가고 있습니다. 잃을 수도 있다는 두려움에 사로잡혀 있을 가능성이 높습니다. 이 시점에서는 성취에 대해 생각하지 않을 가능성이 높습니다. 투자한 노력을 보호하는 것이 더 중요하며 이는 손실 회피입니다. 듀오링고는 손실 회피가 가장 게으른 날에도 사용자가 긴 연속 기록을 깨는 것을 꺼리는 데 어떻게 영향을 미치는지 설명합니다. 어떤 의미에서 손실 회피가 정착되면 연속적인 습관이 습관으로 바뀔 수 있습니다. 포그 행동 모델(B = MAP) 이제 우리는 더 긴 연속 기록에 투자한 노력을 잃을 수도 있다는 두려움을 이해했습니다. 또 다른 질문은 다음과 같습니다. 연속 기록이 커지기 전에도 매일매일 우리가 그 일을 하게 만드는 이유는 무엇입니까? 이것이 포그 행동 모델의 내용입니다. 비교적 간단합니다. 행동(B)은 동기(M), 능력(A), 프롬프트(P)의 세 가지 요소가 동시에 정렬될 때만 발생합니다. 따라서 방정식 B=MAP입니다. 그 순간 이러한 요소 중 하나라도 누락되면 해당 동작이 발생하지 않습니다. 따라서 연속 시스템이 효율적이고 반복되려면 다음 세 가지 요소가 모두 존재해야 합니다. 동기 부여이것은 취약하며 지속적으로 존재하는 것이 아닙니다. 당신이 그런 날이 있습니다스페인어를 배우고 싶은 마음이 생기고, 언어를 배우려는 의지력조차 전혀 느껴지지 않는 날이 있습니다. 습관을 형성하려는 동기 자체는 신뢰할 수 없으며 첫날부터 패배하는 싸움입니다. 능력동기의 한계를 보완하기 위해서는 능력이 중요합니다. 이러한 맥락에서 능력은 행동의 용이성을 의미합니다. 즉, 노력이 너무 쉬워서 불가능하다고 말하는 것이 비현실적입니다. 대부분의 앱은 의도적으로 이를 사용합니다. Apple Fitness에서는 일어서기 목표를 달성하기 위해 한 시간에 1분만 서 있으면 됩니다. 듀오링고는 단 한 번의 수업만 완료하면 됩니다. 이러한 작업에는 그다지 많은 노력이 필요하지 않습니다. 장벽이 너무 낮아서 최악의 날에도 할 수 있습니다. 그러나 계속되는 연속 기록의 결합된 노력은 그 연속 기록을 잃는 아이디어가 시작되는 곳입니다. 프롬프트이것이 방정식을 완성하는 것입니다. 인간은 선천적으로 건망증이 있습니다. 그렇습니다. 능력은 우리를 90% 건망증에 이르게 할 수 있습니다. 그러나 프롬프트는 우리에게 행동을 취하도록 상기시켜 줍니다. 연속 표시는 의도적으로 지속되므로 사용자에게 조치를 취하도록 지속적으로 상기시켜야 합니다. 프롬프트가 얼마나 강력한지 확인하기 위해 Duolingo는 앱 아이콘에 있는 작은 빨간색 배지가 지속적인 사용을 증가시키는지 확인하기 위해 A/B 테스트를 수행했습니다. 일일 활성 사용자 수가 6% 증가했습니다. 그냥 빨간 뱃지. 모델 제한 즉, Fogg 모델에는 공격적인 알림과 같은 프롬프트에 너무 크게 의존하는 디자인이 정신적 피로를 유발할 위험이 있다는 사실을 비평가와 현대 연구에서 발견한 한계가 있습니다. 지속적인 알림과 초과 근무로 인해 사용자 이탈이 발생할 수 있습니다. 그러니 조심하세요. 자이가르닉 효과 프로젝트를 반쯤 끝낸 기분이 어떤가요? 완료되지 않은 작업이 완료한 작업보다 더 많은 정신적 공간을 차지하기 때문에 이는 많은 사람들을 짜증나게 합니다. 어떤 일이 끝나고 사라지면 우리는 그것을 잊어버리는 경향이 있습니다. 어떤 일을 하지 않고 방치하면 그것이 우리 마음을 짓누르는 경향이 있습니다. 이것이 바로 디지털 제품이 Upwork의 프로필 완료 표시줄과 같은 인위적인 진행률 표시기를 사용하여 사용자에게 프로필이 "60% 완료"되었음을 알리는 이유입니다. 사용자가 시작한 일을 끝내도록 유도합니다.

또 다른 예를 살펴보겠습니다. 할 일 목록 앱에는 5개의 작업이 있고 하루가 끝날 때 그 중 4개만 완료되었는지 확인합니다. 우리 중 많은 사람들은 끝나지 않은 일 때문에 성취감이 없다고 느낄 것입니다. 바로 이것이 자이가르닉 효과(Zeigarnik effect)입니다. 자이가르닉 효과(Zeigarnik effect)는 심리학자 블루마 자이가르닉(Bluma Zeigarnik)이 입증했는데, 그는 우리가 완료된 작업보다 불완전한 작업을 기억에 더 오래 활성 상태로 유지하는 경향이 있다고 설명했습니다. 줄무늬 패턴은 UX 디자인에서 이를 자연스럽게 활용합니다. 당신이 연속 학습의 63일째에 있다고 가정해 봅시다. 그 시점에서 당신은 끝나지 않은 사업의 지속적인 패턴에 빠져 있습니다. 당신의 두뇌는 마음 한구석에 자리잡고 있기 때문에 그 사실을 거의 잊지 않을 것입니다. 이 시점에서 당신의 두뇌는 당신에게 알림을 보내는 곳이 됩니다. 이러한 심리적 힘을 종합하면 줄무늬가 단순한 앱 기능이 아닌 이유를 진정으로 이해하기 시작합니다. 그들은 인간의 행동을 바꿀 수 있습니다. 그러나 어느 시점에서(사람마다 다르기 때문에 정확히 언제인지는 말할 수 없음), 연속해서 "재미"에서 잃을 수 없는 것으로 바뀌는 지점에 도달합니다. 58일간의 노력이 낭비되는 것을 원하지 않습니까? 이것이 연속 시스템을 효과적으로 만드는 이유입니다. 올바르게 수행하면 연속 표시는 사용자가 목표를 달성하는 놀라운 습관을 형성하는 데 도움이 됩니다. 매일 책을 읽거나 체육관에 꾸준히 운동하는 것이 될 수 있습니다. 이러한 반복적인 행동(때로는 작은)은 시간이 지남에 따라 복합화되고 우리의 일상생활에서 분명하게 나타납니다. 그러나 모든 동전에는 양면이 있습니다. 습관과 강박 사이의 얇은 선 계속해서 따라오셨다면 이미 연속 시스템에 어두운 면이 있다는 것을 알 수 있을 것입니다. 습관 형성은 반복되는 목표와의 일관성에 관한 것입니다. 그러나 강박은 더 이상 필요하지 않지만 두려움이나 압박 때문에 붙잡고 있는 목표를 향해 지속적으로 노력하는 것입니다. 면도칼처럼 얇은 선입니다. 당신은 매일 아침 아무 생각 없이 이를 닦습니다. 그것은 좋은 호흡을 하겠다는 분명한 목표를 가지고 자동적이고 본능적입니다. 그것은 좋은 습관을 형성하는 연속입니다. 윤리적 연속 시스템은 사용자에게 숨을 쉴 수 있는 공간을 제공합니다. 어떤 이유로 아침에 양치질을 하지 않는다면 정오에 양치를 해도 됩니다. 오랜 노력을 잃을 염려 없이 불완전함이 허용됩니다. 강박은 정반대의 경로를 취합니다. 연속해서 불안을 느끼고, 죄책감을 느끼거나 심지어 지치게 되며 때로는 모든 노력에도 불구하고 아무것도 성취하지 못한 것처럼 느껴집니다.일하다. 당신은 원해서 행동하는 것이 아니라, 진행 상황이 0으로 재설정되는 것을 무의식적으로 두려워하기 때문에 행동합니다. 어떤 사람은 이것을 완벽하게 설명하기도 했습니다: "나는 내가 바람을 피우고 있다고 느꼈지만 전혀 신경 쓰지 않았습니다. 연속 기록이 없으면 나는 아무것도 아닙니다." 이는 개인이 극단적인 홀드 연속을 가질 수 있음을 보여줍니다. 사용자가 애초에 연속 기록을 시작한 이유나 원래 목표가 아닌 임의의 측정 항목에 자신의 가치를 묶기 시작하는 정도입니다. 연속은 그들이 하는 일뿐만 아니라 그 사람이 되는 것입니다. 잘 설계된 윤리적 연속 시스템은 사용자에게 압력이나 의무가 아닌 격려처럼 느껴져야 합니다. 이는 내적 동기와 외적 동기의 균형과 관련이 있습니다. 외적 동기(외적 보상, 처벌 회피)는 사용자가 시작하도록 유도할 수 있지만 내적 동기(사랑하는 사람과 진심으로 소통하고 싶어서 스페인어를 배우는 것과 같은 개인적인 목표를 위해 작업을 수행하는 것)는 장기적인 참여에 더 강력합니다. 좋은 시스템은 외부 요소를 주의 깊게 사용하여 내재적 동기를 부여해야 합니다. 즉, 사용자에게 그들이 얼마나 멀리 왔는지 상기시켜 주고 그들이 잃을 수도 있는 것을 위협하지 않아야 합니다. 다시 말하지만, 그것은 미세한 선입니다. 연속 시스템을 설계할 때 간단한 테스트는 실제로 시간을 들여 제품이 야기한 불안에 대한 솔루션을 판매하여 제품이 돈을 벌 수 있는지 생각해 보는 것입니다. 그렇다면 사용자를 악용할 가능성이 높습니다. 따라서 다음 질문은 '연속 사용을 선택했다면 사용자가 목표를 달성하는 데 진정으로 도움이 되는 방식으로 어떻게 디자인해야 합니까?'입니다. Good Streak 시스템 디자인의 UX 나는 이것이 대부분의 프로젝트가 효과적인 연속 시스템을 달성하거나 완전히 엉망으로 만드는 지점이라고 생각합니다. 좋은 연속 디자인의 몇 가지 UX 원칙을 살펴보겠습니다. 간편하게 유지하세요 당신은 아마도 이전에 Atomic Habits와 같은 책에서 이것을 들어봤을 것입니다. 그러나 습관이 형성될 수 있는 가장 쉬운 방법 중 하나는 행동을 작고 쉽게 만드는 것이라는 점을 언급할 가치가 있습니다. 이는 Fogg 행동 모델에서 논의한 능력 요소와 유사합니다. 연속 디자인의 첫 번째 규칙은 계속 진행하면서 필요한 작업을 인간이 가능한 한 작게 만드는 것입니다. 매일의 행동을 완료하기 위해 의지력이 필요한 경우, 그 행동은 5일을 넘기지 못할 것입니다. 왜? 5일 연속으로 동기를 부여받을 수는 없습니다. 적절한 사례: 명상 앱을 실행하는 경우 연속 유지를 위해 사용자에게 20분 세션을 거치게 할 필요는 없습니다. 대신 1분, 어쩌면 30초 정도의 짧은 시간을 시도해 보세요. 작은 물방울이 거대한 바다를 만든다는 속담처럼요. 작은 노력이 시간이 지나면 큰 성과로 이어집니다. 그것이 목표여야 합니다. 특히 어려운 순간에 마찰을 제거하는 것입니다. 사용자가 스트레스를 받거나 압도당할 때, 단지 몇 초라도 나타나는 것만으로도 노력으로 간주된다는 점을 알려주십시오. 명확한 시각적 피드백 제공 인간은 본질적으로 시각적이다. 대부분의 경우 우리는 믿을 수 있는 것을 보아야 합니다. 사물을 더 잘 이해하고 관점을 고려하기 위해 사물을 시각화할 필요가 있습니다. 이것이 바로 연속 패턴이 노력을 시각화하기 위해 그래프, 확인 표시, 진행률 링, 그리드와 같은 시각적 요소를 사용하는 이유입니다. GitHub의 기여 그래프를 살펴보세요. 이는 일관성을 간단하게 시각화한 것입니다. 그러나 개발자들은 그것을 산소처럼 들이마십니다.

핵심은 연속 시스템을 추상적인 느낌으로 만들지 않는 것입니다. 그것은 현실적이고 얻은 느낌이어야 합니다. 예를 들어 Duolingo와 Apple의 피트니스 활동 링은 연속 활동 완료 시 깔끔한 애니메이션 디자인을 사용하고 GitHub는 시간 경과에 따른 사용자 일관성에 대한 기록 데이터를 보여줍니다.

좋은 타이밍을 활용하라 인간은 일반적으로 천성적으로 건망증이 있으며, 프롬프트는 추진력을 유지하는 데 도움이 될 수 있다고 앞서 언급했습니다. 메시지가 없으면 대부분의 신규 사용자는 계속 진행하는 것을 잊어버립니다. 삶은 바빠지고, 동기는 사라지고, 일이 일어날 수 있습니다. 장기간 사용자라도 프롬프트의 이점을 누릴 수 있지만 대부분의 경우 이미 습관 루프에 갇혀 있습니다. 그럼에도 불구하고, 가장 헌신적인 사람이라도 실수로 하루를 놓칠 수 있습니다. 연속 시스템에는 반드시 알림이 필요합니다. 가장 많이 사용되는 프롬프트 알림은 푸시 알림입니다. 푸시 알림을 사용할 때는 타이밍이 정말 중요합니다. 앱 유형도 중요합니다. 오전 9시에 "오늘 연습을 안 했어"라는 알림을 보내는 것은 학습 앱으로서는 이상한 일입니다. 왜냐하면 많은 사람들이 수업을 끝내야 한다는 생각도 하기 전에 하루에 해야 할 일이 있기 때문입니다. 하지만 피트니스 앱에 관해 이야기하고 있다면합리적이며 아마도 하루 일찍 알림을 받을 것으로 예상될 수도 있습니다. 푸시 알림은 앱 카테고리에 따라 크게 다릅니다. 예를 들어 피트니스 앱은 이른 아침 알림(오전 7~8시)을 통해 참여도가 더 높은 반면, 생산성 앱은 이른 정오에 더 나은 성능을 보일 수 있습니다. 핵심은 모든 것이 일률적으로 적용된다고 가정하기보다는 사용자의 행동을 기반으로 앱의 타이밍을 A/B 테스트하는 것입니다. 명상 앱에 작동하는 것이 코딩 추적기에는 작동하지 않을 수도 있습니다. 다른 프롬프트 방법은 앱 아이콘과 앱 위젯의 빨간색 점입니다. 연구는 다양하지만 평균적으로 사람은 하루에 50~150회 장치를 잠금 해제합니다(PDF). 사용자가 휴대폰을 잠금 해제할 때마다 현재 연속 기록을 나타내는 빨간색 점을 앱이나 위젯에서 보면 몰입도가 높아집니다. 과용하지 마세요. 프롬프트는 잔소리가 아닌 알림 역할을 해야 합니다. 중요한 기록을 축하하세요 연속 기록 시스템은 특히 연속 기록에 깊이 빠진 사용자의 경우 감정을 다시 불러일으키기 위해 이정표를 축하해야 합니다. 사용자가 7일, 30일, 50일, 100일, 365일에 도달하면 이를 통해 큰 성과를 내야 합니다. 업적을 인정하세요. 특히 장기간 사용자의 경우 더욱 그렇습니다.

앞서 본 것처럼 듀오링고는 이를 파악하고 색종이 조각으로 중요한 순간을 기념하는 애니메이션 그래픽을 구현했습니다. 일부 플랫폼은 사용자의 노력을 검증하는 상당한 보너스 보상도 제공합니다. 그리고 이는 사용자가 자신의 이정표를 소셜 미디어에 공개적으로 공유하는 경향이 있으므로 앱에 도움이 될 수 있습니다. 또 다른 이점은 이정표에 도달하기 전에 오는 기대감입니다. 연속 행진을 끝없이 유지하는 것이 아닙니다. 사용자는 기대할 것이 있습니다. 그레이스 메커니즘 사용 인생은 예측할 수 없습니다. 사람들은 주의가 산만해집니다. 좋은 연승 시스템이라면 불완전할 것으로 예상됩니다. 연속 기록 시스템에 대한 가장 큰 심리적 위협 중 하나는 단 하루를 놓친 후 0으로 강제 재설정되는 것입니다. "윤리적" 연속 시스템은 사용자에게 약간의 여유를 제공해야 합니다. 당신이 90일 연속 체스 학습을 했다고 가정해 봅시다. 좋은 3개월 동안 꾸준히 일해오던 어느 날, 여행 중에 휴대폰이 꺼지고, 그렇게 90이 0이 됩니다. 모든 것, 그 모든 노력이 지워지고 진행 상황도 사라집니다. 사용자는 완전히 황폐해질 수 있습니다. 처음부터 다시 재건한다는 생각은 사기를 너무 저하시켜 노력할 가치가 없습니다. 최악의 경우 사용자가 실패했다고 느낀 후 앱을 포기할 수도 있습니다. 연속 시스템에 "은혜" 메커니즘을 추가하는 것을 고려해보세요:

Streak FreezeAllow 사용자는 의도적으로 페널티 없이 하루를 놓칠 수 있습니다. 추가 시간재설정을 실행하기 전에 일반적인 기한보다 몇 시간(2~3) 정도 더 소요됩니다. 감쇠 모델하드 리셋 대신 연속 횟수가 조금씩 감소합니다. 예를 들어 놓친 날당 연속 횟수에서 10일이 차감됩니다.

격려적인 어조를 사용하십시오 연속 기록이 깨졌을 때 사용자에게 표시되는 두 가지 메시지를 비교해 보겠습니다.

"42일 연속 기록을 잃었습니다. 다시 시작하세요." "42일 연속으로 나타나셨어요. 정말 놀라운 발전이군요! 한 번 더 시도해 보시겠어요?"

둘 다 동일한 정보를 전달하지만 정서적 영향은 다릅니다. 첫 번째 메시지는 사용자의 사기를 저하시키고 종료하게 만들 가능성이 높습니다. 두 번째 메시지는 이미 달성한 것을 축하하고 사용자가 다시 시도하도록 부드럽게 격려합니다. Streak 시스템 설계 과제 연속 시스템 구축에 대한 기술적인 세부 사항을 살펴보기 전에 직면할 수 있는 과제에 대해 알고 있어야 합니다. 예상대로 상황이 복잡해질 수 있습니다. 시간대 처리 시간과 날짜를 처리하는 것이 개발자가 다루는 가장 어려운 개념 중 하나인 이유가 있습니다. 형식화, 국제화 등 고려해야 할 사항이 많이 있습니다. 이것을 물어보겠습니다. 하루로 간주되는 것은 무엇입니까? 우리는 세계가 서로 다른 시간대에 걸쳐 운영된다는 것을 알고 있으며, 그것이 충분하지 않은 것처럼 일부 지역에서는 일 년에 두 번 일광 절약 시간(DST)이 발생합니다. 이러한 극단적인 경우를 어디에서 처리하기 시작합니까? 내일의 "시작"은 무엇입니까? 일부 개발자는 UTC와 같은 하나의 중앙 시간대를 사용하여 이를 방지하려고 합니다. 일부 사용자의 경우 이는 올바른 결과를 얻을 수 있지만 일부의 경우 1시간, 2시간 또는 그 이상 차이가 날 수 있습니다. 이러한 불일치는 사용자 경험을 망칩니다. 사용자는 뒤에서 시간을 처리하는 방법에 관심이 없습니다. 그들이 기대하는 것은 오후 11시 40분에 연속 작업을 수행하면 해당 컨텍스트에서 정확한 시간에 등록되어야 한다는 것입니다. 서버 시간이 아닌 사용자의 현지 시간대를 기준으로 “1일”을 정의해야 합니다. 물론이죠, 편하게 지내셔도 돼요UTC 자정에 모든 사용자에 대해 전 세계적으로 연속 경로를 라우팅하고 재설정하지만 매우 불공평함을 초래하고 있습니다. 캘리포니아에 있는 사람은 런던에 사는 사람보다 작업을 완료하는 데 항상 8시간이 더 걸립니다. 이는 위치 때문에 특정 사용자를 처벌하는 부당한 설계 결함입니다. 그리고 런던에 있는 사람이 방문만 하고 작업을 완료한 다음 다른 시간대로 돌아간다면 어떻게 될까요? 이 모든 것에 대한 효과적인 해결책 중 하나는 사용자에게 온보딩 중에(바람직하게는 첫 번째 인증 이후) 시간대를 명시적으로 설정하도록 요청하는 것입니다. 시간대 정보 제공은 개인 식별 데이터로 사용되지 않고 앱에서 진행 상황을 정확하게 추적하는 데만 사용된다는 미묘한 메모를 포함하는 것이 좋습니다. 그리고 이를 변경 가능한 설정으로 만드는 것도 좋은 생각입니다. 누구든지 앱에서 시간대 논리를 직접 처리하지 않는 것이 좋습니다. Moment.js 또는 pytz(Python) 등과 같이 검증된 날짜 라이브러리를 사용하세요. 이렇게 복잡한 것을 위해 바퀴를 다시 만들 필요가 없습니다. 누락된 날짜 및 극단적인 경우 걱정해야 할 또 다른 과제는 사용자의 늦잠, 서버 가동 중지 시간, 지연, 네트워크 오류 등과 같은 통제할 수 없는 극단적인 경우입니다. 앞서 논의한 것과 같은 은혜 메커니즘의 개념을 사용하면 도움이 될 수 있습니다. 2시간의 유예 기간은 사용자가 통제할 수 없는 생활 환경에 대해 엄격한 처벌을 받지 않는다는 점에서 사용자와 개발자 모두에게 도움이 될 수 있습니다. 개발자의 경우 유예 기간은 한밤중에 서버가 다운되는 제어할 수 없는 순간에 도움이 됩니다. 무엇보다도 고객을 절대 신뢰하지 마십시오. 항상 서버 측에서 유효성을 검사하십시오. 서버는 단일 정보 소스여야 합니다. 부정행위 예방 다시 한 번 강조하지만, 서버측에서 모든 것을 검증해야 합니다. 사용자는 인간이고 기회가 주어지면 인간은 부정행위를 할 수도 있습니다. 그것은 불가피하다. 다음을 시도해 볼 수도 있습니다.

모든 작업을 UTC 타임스탬프로 저장합니다. 클라이언트는 현지 시간을 보낼 수 있지만 서버는 이를 즉시 UTC로 변환하고 서버 시간과 비교하여 유효성을 검사할 수 있습니다. 이렇게 하면 클라이언트의 타임스탬프가 의심스러울 정도로 먼 경우 시스템이 이를 오류로 거부하고 UI가 이에 따라 응답할 수 있습니다. 이벤트 기반 추적을 사용합니다. 즉, 사용자 ID, 수행된 작업 유형, 타임스탬프 및 시간대와 같은 정보를 포함하는 메타데이터와 함께 각 작업의 기록을 저장합니다. 이는 검증에 도움이 됩니다.

Streak 시스템 엔진 구축 이것은 코드 튜토리얼이 아니므로 여러분에게 많은 코드를 덤핑하는 것을 방지하겠습니다. 나는 이것을 실용적으로 유지하고 아키텍처, 흐름 및 안정성에 이르기까지 일반적으로 연속 시스템 엔진을 작동하는 방법을 설명할 것입니다. 핵심 아키텍처 여러 번 말했듯이 서버를 연속 데이터에 대한 단일 정보 소스로 만드십시오. 아키텍처는 서버에서 다음과 같이 진행될 수 있습니다.

각 사용자의 데이터를 데이터베이스에 저장합니다. 현재 연속 저장소(기본값은 0)를 정수로 저장합니다. 시간대 기본 설정(예: IANA 시간대 문자열)을 저장합니다(현지 타임스탬프에서 암시적으로 또는 사용자에게 시간대를 선택하도록 명시적으로 요청하여). 예를 들어 '미국/뉴욕'입니다. 사용자의 현지 시간대를 기준으로 시간대 확인을 통해 연속 표시가 계속되는지 또는 중단되는지 확인하는 모든 로직을 처리합니다.

한편 클라이언트 측에서는 다음을 수행합니다.

일반적으로 서버에서 가져온 현재 연속을 표시합니다. 사용자가 실제로 적격한 연속 작업을 완료했는지 확인하기 위해 수행된 작업을 메타데이터 형식으로 서버에 보냅니다. 서버 응답을 기반으로 시각적 피드백을 제공합니다.

즉, 두뇌는 서버에 있고 클라이언트는 표시 및 이벤트 제출을 위한 것입니다. 이렇게 하면 많은 실패와 극단적인 경우를 줄일 수 있을 뿐만 아니라 업데이트와 수정도 더 쉬워집니다. 논리적 흐름 사용자가 작업을 완료할 때 최소 효율적인 연속 시스템 엔진이 어떻게 작동하는지에 대한 연습을 시뮬레이션해 보겠습니다.

사용자가 적격한 연속 작업을 완료했습니다. 클라이언트는 이벤트를 메타데이터로 서버에 보냅니다. 이는 "사용자 X가 타임스탬프 Z에서 Y 작업을 완료했습니다"일 수 있습니다. 서버는 이 이벤트를 수신하고 기본 유효성 검사를 수행합니다. 이 사람이 실제 사용자인가요? 인증되었나요? 조치가 유효합니까? 시간대가 일관성이 있나요? 이것이 통과되면 서버는 데이터베이스에서 사용자의 연속 데이터를 검색합니다. 그런 다음 수신된 작업 타임스탬프를 사용자의 현지 시간대로 변환합니다. 서버가 사용자의 현지 시간대에서 달력 날짜(타임스탬프가 아님)를 비교하도록 합니다. 같은 날이면 작업이 중복되고 날짜에는 변화가 없습니다.줄. 다음 날인 경우 연속 기록이 1씩 연장됩니다. 하루 이상 공백이 있으면 연속이 끊어집니다. 그러나 여기에 은혜 메커니즘을 적용할 수 있습니다. 유예 메커니즘이 누락된 경우 연속 기록을 1로 재설정합니다.

마일스톤 달성에 대한 기록 데이터를 저장하도록 선택한 경우 "최장 연속" 또는 "총 활동 일수"와 같은 변수를 업데이트하세요. 그런 다음 서버는 데이터베이스를 업데이트하고 클라이언트에 응답합니다. 다음과 같은 것 :

{ "현재_연속": 48, "가장 긴 연속": 50, "total_active_days": 120, "streak_extended": 사실, }

추가 조치로 서버는 프로세스 중에 실패할 경우 재시도하거나 거부하고 클라이언트에 알려야 합니다. 탄력성을 위한 구축 앞서 언급했듯이 버그나 서버 다운타임으로 인해 사용자가 연승을 잃는 것은 끔찍한 UX이며 사용자는 이로 인해 하락할 것이라고 기대하지 않습니다. 따라서 연속 시스템에는 이러한 시나리오에 대한 보호 장치가 있어야 합니다. 유지 관리(또는 어떤 이유로든)로 인해 서버가 다운된 경우 작업을 늦게 제출해도 계속 계산될 수 있도록 추가 시간을 임시로 허용하여 문제를 해결하는 것이 좋습니다. 특히 상황이 지속적인 연속에 영향을 미칠 수 있는 경우 사용자에게 알리도록 선택할 수도 있습니다. 참고: 데이터를 수동으로 복원할 수 있는 관리자 백도어를 설정하세요. 버그는 피할 수 없으며 일부 사용자는 제어할 수 없는 이유로 연속 중단이 발생했다고 앱에 전화를 걸거나 지원을 요청합니다. 조사 후 사용자가 옳다면 줄무늬를 수동으로 복원할 수 있어야 합니다. 결론 한 가지 분명한 사실은 인간의 심리학이 근본적인 수준에서 작동하는 방식 때문에 줄무늬가 정말 강력하다는 것입니다. 최고의 연속 시스템은 사용자가 의식적으로 생각하지 않는 시스템입니다. 이를 닦는 것처럼 즉각적인 결과나 눈에 보이는 진전이 있는 일상이 되었고, 이는 규칙적인 습관이 되었습니다. 그리고 나는 단지 그것을 말할 것입니다: 모든 제품에 연속 시스템이 필요한 것은 아닙니다. 단지 일일 활성 사용자를 원한다는 이유만으로 일관성을 강요해야 할까요? 대답은 "아니요"일 수도 있습니다.

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