뒤로
Elpis Studio
Elpis Studio ·

스크린타임 앱을 만들었는데, 한도에 닿아도 "5분 더" 버튼이 없습니다. 대신 화면에 뜬 문장 한 줄을 따라 써야 다시 열립니다.

안드로이드 앱 D.off를 8월 6일에 Play에 올렸습니다. 혼자 만들었고 출시 5주 차입니다. 기능 목록 대신, 왜 이렇게 만들었는지와 그동안 뭘 틀렸는지를 적습니다.

스크린타임 앱은 보통 한도에 닿으면 연장 버튼을 줍니다. 버튼이 있는 순간 한도는 권고가 됩니다. 그래서 D.off는 한도에 닿으면 잠그고, 나가려면 화면에 뜬 문장 한 줄을 그대로 따라 쓰게 했습니다. 명언·역사·성경·동화·심리·자기계발·마음챙김·시와 문학 8개 카테고리, 한국어 945문장이 앱 안에 들어 있습니다. 손으로 한 줄 옮겨 적는 동안 "그냥 열었던" 반사가 지나갑니다. 그 다음에 한 번 더 고르게 하는 게 목적입니다. 사용 시간을 알려주는 앱보다, 한도를 넘기려는 순간 한 번 더 생각하게 만드는 앱을 만들고 싶었습니다. 타이핑이 싫으면 운동으로 여는 길도 있습니다.

마찰이 벽은 아닙니다. 주 1회 30분짜리 비상 패스는 글자 없이 열립니다(엄격 모드를 켜면 이 통로도 닫힙니다). 정말 급한 순간에 앱이 문장을 요구하면 사람은 그 앱을 지우거든요. 한 앱을 30분·60분 연속으로 쓰면 뜨는 휴식 알림에는 "10분 더" 버튼이 있는데, 이건 한도가 아니라 넛지라 미룰 수 있게 뒀습니다. 한도 자체에는 연장이 없습니다.

물론 이 방식이 제가 처음은 아닙니다. 잠금 해제에 뭔가를 시키는 앱은 이미 있고, 저는 그 마찰을 "따라 쓰기"로 잡았습니다.

출시 5주 차 숫자는 작습니다. 최근 28일 스토어 방문 114, 설치 클릭 19. 38개국에 라이브지만 규모는 이 정도고, 작은 숫자라 그대로 적습니다.

제일 이상했던 버그 — 사용자가 곧 공격자입니다

최근에 기기 시계를 앞뒤로 옮기면 앱의 시각 판정이 같이 움직인다는 걸 발견했습니다. 주간 비상 패스, 오늘 사용량, 수면 잠금 세 군데였습니다.

남의 데이터가 새는 보안 문제는 아닙니다. 사용자가 곧 저인 앱에서, 사용자가 자기 앱을 속일 수 있었던 문제입니다. 그래도 자기통제 도구의 값어치는 "마음먹으면 뚫린다"와 "네 번 탭하면 뚫린다" 사이에서 갈린다고 봐서, 시각 판정을 기기 시계에서 떼어냈습니다. 서버에서 한 번 받아온 기준 시각에 부팅 이후 경과 시간을 더해 "지금"을 만들고, 기기 시계는 아예 읽지 않습니다.

여기서 한 대 맞았습니다. 웹뷰를 고치고 끝난 줄 알았는데, 실제로 앱을 막는 건 네이티브 서비스였고 그쪽엔 신뢰할 시각을 읽어올 통로조차 없었습니다. "고쳤다"를 실행 경로 끝까지 따라가지 않으면 절반만 고친 겁니다. 코드는 들어갔고, 실기기에서 시계를 돌려보는 검증과 배포는 다음 릴리스에 남아 있습니다.

더 부끄러운 쪽 — 한국 사용자가 영어 스크린샷을 보고 있었습니다

등록정보 텍스트는 7개 언어로 번역해 뒀는데 스크린샷과 그래픽은 한 벌뿐이었습니다. Play는 언어별 자산이 없으면 기본 언어(영어) 자산을 모든 지역에 그대로 씁니다. 한국에서 검색한 사람은 첫 화면으로 영어 UI 스크린샷을 보고 있었습니다. 몇 주 동안요.

7개 언어로 다시 찍어 56장을 올렸습니다. 위의 방문 114 → 설치 클릭 19 사이에서 샌 몫이 일부 있다고 봅니다. "번역했다"와 "현지화했다"는 다른 일이었습니다.

무료로도 핵심 루프는 다 돌아갑니다 — 앱 그룹 2개(그룹당 앱 1개)·일일 한도·기본 통계. 프리미엄은 월 2,900원 / 연 21,900원 / 평생 69,000원이고, 체험 7일은 카드 없이 됩니다. 평생권을 넣은 건 자기통제 앱이 사용자에게 영원히 과금하는 구조가 이해상충처럼 느껴져서입니다.

사용자를 막는 제품은 기능보다 마찰의 세기를 정하는 일이 더 어렵습니다. 너무 약하면 그냥 누르고, 너무 강하면 그냥 지웁니다. 여러분이라면 어디까지가 자기통제에 도움이 되는 마찰이고, 어디부터는 "이건 그냥 벌이다"라고 느끼실 것 같나요?

Product Hunt에는 9월 9일 자로 같은 앱이 올라갑니다. 거기는 영어로 짧게 쓰는 자리라, 한국어로 하고 싶은 이야기는 여기 적었습니다.

D.off (디오프)

한도에 닿으면 잠기고, 문장 한 줄을 따라 쓰면 다시 열리는 스크린타임 앱

0

댓글

로그인 후 댓글을 남길 수 있습니다.

Elpis Studio
Elpis Studio

본문에 못 넣은 얘기 하나 더 답니다. 시계 문제를 고칠 때 제 안전 규칙은 "확실치 않으면 시각을 보수적으로 작게 잡는다"였습니다. 그런데 리뷰를 받아보니 그 시각 함수가 판정에만 쓰이는 게 아니라 기록에도 쓰이더군요 — 쿨다운 시작 시각, 비상 패스 사용 시각 같은 것들요. 시각을 과거로 잡으면 30분짜리 쿨다운이 사용자 화면에 며칠짜리 잠금으로 보일 수 있었습니다. 안전하다고 믿은 방향이 정반대로 터지는 경우였습니다. 결국 지켜야 할 계약을 둘로 쪼갰습니다. 앞당겨지지 않는다, 그리고 되감기지 않는다. iOS는 아직입니다. 포팅이 아니라 재작성에 가깝고(FamilyControls는 안드로이드의 집행 모델과 아예 다릅니다), 네이티브 쪽은 써뒀지만 Xcode 조립이 남아서 날짜를 못 박기가 어렵습니다. 혹시 비슷하게 "사용자를 막는 도구"를 만드시는 분 계시면 궁금한 게 있습니다. 마찰을 어디까지 세게 걸어야 효과는 나면서 "그냥 앱을 지운다" 선을 안 넘을까요? 저는 아직 감으로 잡고 있습니다.

Manta
Manta

저도 요즘 한국어 페이지를 점검하고 있어서 이 부분이 특히 와닿았어요. 번역만 끝내고 이미지나 첫 화면은 놓치기 쉽더라고요.

Elpis Studio
Elpis Studio

저도 처음엔 번역 문제라고 생각했는데, 실제로는 자산이 언어를 따라오지 않는다는 걸 몰랐던 쪽이었습니다. 브라우저 확장 쪽은 또 다르겠네요. 크롬 웹스토어 문서에는 스크린샷을 로케일별로 넣는 칸이 따로 있고, 프로모 타일은 로케일을 나눌 수 없다고 돼 있더군요. 다만 문서 갱신이 좀 지나서 지금 대시보드와 같은지는 확인 못 했습니다. 안 넣으면 전역 자산이 그대로 나가는 건 Play와 같아 보입니다. 그 뒤로 들인 습관은 제 화면에서 확인하지 않는 겁니다. 저는 설명글을 다 읽은 상태로 보니까 계속 괜찮아 보였습니다. Neonlingo도 설치 직후에 첫 화면이 뜨나요. 뜬다면 그 언어는 브라우저 설정을 따라가게 두시나요, 아니면 따로 고르게 하시나요. 저는 그걸 어디에 맞출지 아직도 헷갈립니다.