개발

3weeks — 21일이면 충분하다는 가설을 앱으로 만들었다

2023-11-15·2분 읽기
3weeks — 21일이면 충분하다는 가설을 앱으로 만들었다

습관 앱이 실패하는 이유

시중에 나와 있는 습관 앱은 대부분 비슷합니다. 습관을 등록하고, 매일 체크하고, 스트릭을 쌓는 구조. 그런데 대부분의 사람들이 몇 주 안에 앱을 닫아버립니다.

이유를 생각해봤습니다. 끝이 없기 때문입니다.

습관 앱은 무한 게임입니다. 오늘 체크하면 내일 또 해야 하고, 내년에도 해야 합니다. 목표가 없는 달리기를 시작부터 끝까지 달리는 사람은 없습니다.

3weeks는 이 문제를 21일이라는 마감으로 풀었습니다.

21일의 근거

"습관 형성에 21일이 필요하다"는 말은 1960년대 성형외과 의사 Maxwell Maltz의 관찰에서 비롯됐습니다. 완벽한 과학은 아니지만, 핵심은 이겁니다. 시작에는 끝이 있어야 한다.

21일은 충분히 짧아서 시작하기 어렵지 않고, 충분히 길어서 변화를 느낄 수 있습니다. 3weeks는 이 숫자에 집중했습니다.

챌린지를 등록하는 순간 카운트다운이 시작됩니다. 21일이 지나면 완주 뱃지가 생기고, 그 습관은 다음 사이클로 이어갈지 스스로 결정합니다. 끝이 있는 약속이 더 지키기 쉽습니다.

스트릭의 심리학

3weeks에서 가장 신경 쓴 부분은 스트릭(연속 달성) 디자인입니다.

숫자가 쌓이면 사람은 이상하게 행동합니다. 7일 연속을 달성한 사람은 오늘 하루를 빠뜨리면 0으로 돌아간다는 사실이 강력한 동기가 됩니다. 이걸 게임에서는 "손실 회피"라고 부릅니다.

뱃지 시스템도 같은 원리입니다. 7일 새싹, 21일 불꽃, 60일, 90일 장기 달성자에게는 더 특별한 뱃지가 생깁니다. 소소하지만, 화면에 뭔가가 생기는 경험은 생각보다 강력합니다.

글로벌을 처음부터 고려한 이유

3weeks는 처음부터 다국어를 지원하기로 결정했습니다. 한국어, 영어, 일본어, 중국어, 독일어 — 5개 언어입니다.

인디 앱을 만들면서 느낀 것 중 하나가, 한국 시장만 보면 너무 작다는 겁니다. App Store에서 한국 앱의 비중은 전체의 극히 일부입니다. 처음부터 언어 구조를 잘 잡아두면 나중에 언어를 추가하는 게 어렵지 않습니다.

SwiftUI의 Localization 기능을 활용했고, 번역은 DeepL과 직접 검수를 병행했습니다. 일본어와 독일어는 앱 설명을 현지화하는 데 꽤 시간이 걸렸지만, 이후 해외 다운로드가 생기기 시작했을 때 그 결정이 옳았다는 걸 확인했습니다.

개발하면서 예상 못 했던 문제

스트릭 보호 기능을 구현할 때 생각보다 복잡한 케이스가 많았습니다.

하루를 건너뛴 경우, 자정을 넘겨서 체크인한 경우, 시간대(timezone)가 다른 환경에서 접속한 경우. 이런 엣지 케이스들을 하나씩 처리하다 보니 단순해 보이는 기능이 코드 레벨에서는 꽤 복잡해집니다.

최근 업데이트에서 "하루를 건너뛰었을 때 경고 다이얼로그로 스트릭 보호권을 사용할지 선택"하는 기능을 추가했는데, 이게 생각보다 사용자 반응이 좋았습니다. 실수로 하루 놓쳤을 때 무조건 0으로 돌아가는 것보다 한 번의 기회를 주는 방식이 더 인간적으로 느껴지는 것 같습니다.

지금 되돌아보면

3weeks를 만들면서 배운 가장 큰 교훈은 단순한 아이디어가 얼마나 많은 결정을 요구하는지입니다.

"21일 습관 챌린지"라는 한 문장이 뱃지 디자인, 스트릭 처리 로직, 알림 시스템, 통계 시각화, 다국어 처리로 이어집니다. 앱 하나를 만드는 건 그 아이디어를 수백 가지 작은 결정으로 분해하는 과정입니다.

지금도 꾸준히 쓰는 사람들이 있다는 게, 만든 이유를 계속 기억하게 해줍니다.