FastingWorks 배지 시스템, 어디까지 확장할 것인가 — 인과 DAG 기반 의사결정
작성일: 2026-06-13 KST 방법론: taeho-health Causal Decision Framework (Lyft식 decision DAG + edge evidence + 시나리오 점수)를 수동 적용 근거: deep research 적대적 검증 결과 (103개 클레임 추출 → 17개 생존, 8개 기각), PR #1673 출시 상태
한 줄 결론
지금 결론은 "풀 빌드"도 "보류"도 아닙니다. P0(streak grace + 개인 기록 트랙)는 즉시 진행하고, P1 이후는 PostHog 측정값이 쌓인 뒤 이 문서의 리뷰 조건으로 다시 결정합니다. P0가 우선인 이유는 확장이어서가 아니라, 이미 배포된 임박 알림이 streak 집착을 강화하는 구조여서 가장 잘 문서화된 부정 edge(streak 상실 → 이탈)의 완화책이 먼저 필요하기 때문입니다.
의사결정 질문
향후 4–6주 안에 FastingWorks 배지 시스템(현재 13종, PR #1673로 출시, feature flag 게이팅)을 어디까지 확장하는가?
판정 시계: 2026-07-25 리뷰 (출시 후 약 6주, D30 코호트 1개 이상 확보 시점)
선택지 비교
- A. 측정만 — 현 13종 유지 (62/100): 개발 비용 0. PostHog로 기준선만 쌓습니다. 주의점: streak 배지 + 임박 알림이 이미 streak 집착을 키우는 상태에서 grace 메커닉 없이 방치하는 것 자체가 리스크 노출입니다. "아무것도 안 하기"가 중립이 아닙니다.
- B. P0만 — streak grace/repair + 개인 기록 트랙 (84/100): 가장 잘 문서화된 부정 edge를 완화하고, 첫날부터 달성 가능한 진입점(개인 기록)을 추가합니다. 개발 1–2주. 근거 정합성이 가장 높고 되돌리기 쉽습니다.
- C. P0 + P1 — 상위 티어 확장 + 챌린지 트랙 분리 (73/100): Zero·Fastic의 검증된 2트랙 패턴과 오픈엔디드 사다리를 따라갑니다. 주의점: 챌린지 트랙은 신규 IA·운영 콘텐츠가 필요한 큰 빌드인데, 배지 고유 효과가 'trivial' 수준이라는 메타분석 앞에서 측정 없이 선투자하는 셈입니다.
- D. 풀 빌드 — C + 프리미엄 배지 연계 (51/100): 배지↔구독 연결은 검증된 근거가 전무합니다(Fastic 사례만 존재, 효과 데이터 없음). 측정 없이 가장 비싼 베팅을 하는 선택입니다.
의사결정 DAG
개입(선택지) → 행동 대리 지표 → lagging 결과의 흐름이고, edge마다 deep research에서 살아남은 근거 품질을 라벨로 붙였습니다.
| Edge | 근거 품질 | 근거 |
|---|---|---|
| 게임화 번들 → 이탈률 감소 | high (RCT) | eQuoo 3-arm RCT, 이탈 10% vs 30.5% (단, COI 있음, 번들 효과) |
| 게임화 고유 기여 → 행동 변화 | high, 크기 trivial | 36 RCT 메타분석, +489보/일 상당, 'trivial' 분류 |
| 게임화 효과 → 장기 지속(6개월+) | high | 2개 메타분석, novelty effect 아님, 다만 감쇠 (g 0.42→0.15) |
| streak 집착 → 상실 시 이탈 | high (정성) | Duolingo 9년 데이터 연구, "110일 streak 상실 → 계정 포기" 문서화 |
| 임박 알림 → streak 집착 강화 | 구조적 추론 | 우리가 이미 배포한 기능. 위 edge의 노출을 키우는 방향 |
| 균등 보상 → 파밍/저가치 행동 | high (정성) | 같은 연구, "난이도 비례 보상" 의견 170회 |
| 난이도 높은 배지 → 리텐션 | low | Trophy 벤더 데이터 32%→74%, 선택 편향 유력, 방향성 참고만 |
| 첫날 달성 배지 → 리텐션 | 기각됨 | "33% vs 20%" 수치는 적대적 검증에서 기각. 인용 금지 |
| 배지/streak freeze 정량 효과 | 기각됨 | "17일 vs 12일" 등 기각. grace 권고는 정성 근거에만 기반 |
| 배지 → 구독 전환/유지 | 근거 없음 | 직접 근거 부재. 자체 A/B로만 확인 가능 |
핵심 함의: 배지 → 우리 앱 리텐션 edge는 외부 근거로 식별되지 않습니다. 그래서 이 결정의 절반은 "무엇을 만들까"가 아니라 "어떻게 측정 가능하게 만들까"입니다.
DOT source
digraph BadgeDecision { rankdir="LR"; node [shape=box, fontname="Apple SD Gothic Neo"]; subgraph cluster_decision { label="개입 (선택)"; choice [label="배지 확장 범위\nA/B/C/D", shape=diamond]; } subgraph cluster_proxy { label="행동 대리 지표 (PostHog, 일 단위)"; trophy [label="트로피 룸 방문\nachievements_viewed"]; unlock [label="배지 획득\nachievement_unlocked"]; streakcont [label="streak 지속률"]; notif [label="알림 opt-in/opt-out"]; fastrate [label="단식 완료율"]; } subgraph cluster_outcome { label="lagging 결과"; d7 [label="D7 리텐션"]; d30 [label="D30 리텐션"]; renew [label="구독 갱신율"]; } subgraph cluster_confounder { label="교란 (통제 필요)"; cohort [label="신규 코호트 구성", style=dashed]; season [label="시즌성(여름 다이어트)", style=dashed]; other [label="동시 출시 기능", style=dashed]; } choice -> trophy; choice -> unlock; choice -> notif; unlock -> streakcont [label="집착 강화\n(양날)", color=red]; streakcont -> fastrate; trophy -> d7; unlock -> d7; fastrate -> d30; d7 -> d30; d30 -> renew; streakcont -> d30 [label="상실 시 이탈", color=red, style=bold]; cohort -> d7; cohort -> d30; season -> fastrate; other -> d30; }
목표 가중치 (시나리오 objectives)
| 목표 | 가중치 | 비고 |
|---|---|---|
| D30 리텐션 / 구독 유지 | 1.0 | 이 기능의 존재 이유 (#1654) |
| streak 이탈 역효과 회피 | 0.9 | 가장 잘 문서화된 부정 edge |
| 개발 비용 (주 단위) | 0.7 | 1인 개발, 기회비용 큼 |
| 학습 가치 (측정 가능성) | 0.8 | 배지→리텐션 edge가 미식별이므로 높게 |
| 매출 직접 연결 | 0.3 | 근거 부재 영역, 현 시점 가중치 낮춤 |
반드시 확인할 조건 (guardrails)
- streak 상실 직후 7일 비활성률이 streak 유지 사용자 대비 유의하게 높은가 — 높다면 grace 메커닉의 우선순위가 더 올라가고, P0의 가설이 우리 데이터로 확인되는 것
- 임박 알림(
achievement_imminent)의 opt-out률이 다른 알림 채널보다 높지 않은가 — 높다면 알림 톤/빈도 재설계 - 트로피 룸 방문(
achievements_viewed)이 첫 획득 후 재방문으로 이어지는가 — 안 이어지면 카탈로그 확장(P1)의 기대 효과 하향 - 짧은 단식 반복으로 누적/횟수 배지를 파밍하는 패턴이 보이는가 — 보이면 P2(최소 단식 시간 조건)를 앞당김
- 배지 확장이 단식 완료율 자체를 올리는가 — 대리 지표가 안 움직이면 lagging 지표 개선도 기대 불가
실험 정의 (PostHog)
- 가설: 배지 시스템(13종 + P0)은 노출 코호트의 D30 리텐션을 비노출 대비 개선한다. 기대 효과 크기는 작음(메타분석 'trivial~small' 기준).
- 개입:
achievement-badge-systemflag를 100% → 50/50 rollout으로 전환해 노출/비노출 코호트 생성. 단, 이미 기능을 본 기존 사용자에게서 기능을 회수하면 역효과(loss aversion)가 있으므로 신규 설치 코호트에만 50/50 적용을 검토. - 사전 조건: SDK 자동 exposure(
sendFeatureFlagEvent)는 계속 끄고, 홈 헤더 surface에서$feature_flag_called를 수동으로 1회 기록해 실험 inclusion을 정의. - 판정 지표: D7/D30 리텐션 (1차), 단식 완료율·streak 지속률 (대리), 구독 갱신율 (장기).
- 판정 기준: D30 상대 개선이 신뢰구간에서 0을 배제하면 P1 진행. 0 포함이고 대리 지표도 무반응이면 P1 보류, 카탈로그는 현상 유지.
- 리뷰 날짜: 2026-07-25 (이 문서 갱신 + decision record 추가).
결정 기록
| 날짜 | 결정 | 근거 | 리뷰 |
|---|---|---|---|
| 2026-06-13 | (제안) B 채택: P0 즉시, P1 측정 후, D 보류 | 본 문서 | 07-25 |
| 2026-06-13 | B 확정 — P0 구현 착수 (Taeho 승인) | 본 문서 + 대화 | 07-25 |
| 2026-06-13 | P1 중 카탈로그 확장(13→28종)을 앞당김 (Taeho 지시) — 챌린지 트랙·프리미엄 연계는 계속 측정 후 판단 | 대화 (트로피 룸 디자인 개선과 함께) | 07-25 |
참고 자료
- Mazeas et al. 2022, JMIR — 게임화 신체활동 메타분석 (16 RCT)
- Nishi et al. 2024, eClinicalMedicine — 게임화 vs 비게임화 직접 비교 메타분석 (36 RCT)
- Litvin et al. 2020, PLoS ONE — eQuoo 3-arm RCT (이탈률)
- Mogavi et al. 2022, ACM L@S — Duolingo 게임화 부작용 연구
- Zero 공식 — Achievements 구조, 배지 출시 블로그 2019
- Trophy — Duolingo 케이스 스터디 (벤더 블로그, 교차확인됨)
- 기각된 수치 목록과 전체 검증 로그: deep research 세션 산출물 (2026-06-13)