룸톤 Roomtone TIL 18
내가 써 보고 괜찮았는데 남들은 낯설어했다
둘러보기의 계절·분위기·장르를 고르는 휠을 만들 때, 폰에서는 가로로 돌리고 태블릿에서는 세로로 돌리게 하자고 내가 정했다. 폰은 세로가 좁으니 가로가 맞을 것 같았다. 폰에 깔아 한 손으로도 돌려 봤고 쓸 만했다.
그런데 테스트해 준 사람들이 세로로 돌리는 쪽이 익숙하다고 했다. 폰에서 목록을 넘길 때 위아래로 미는 게 손에 익어 있으니, 가로로 도는 칸은 되는데도 낯설다는 것이다.
폰도 태블릿과 같은 모습으로 되돌렸다. 여기서 남는 건 「세로가 낫다」가 아니다. 내가 직접 써 보고 괜찮은 것과 처음 보는 사람에게 익숙한 것은 다르다는 것이다. 되는지 안 되는지는 내가 확인할 수 있지만, 익숙한지는 확인할 수 없다. 익숙함은 기능이 아니라 그 사람이 다른 앱에서 쌓아 온 습관이라서다.
앞선 TIL 10에서 「제품이 놓일 자리를 먼저 묻는다」를 적었다. 그때는 기기가 달라서(마우스 없는 태블릿) 생긴 문제였고, 이번엔 기기도 맞고 동작도 되는데 습관이 달랐다. 자리를 맞춘 다음에도 남는 축이 하나 더 있는 셈이다.
되돌릴 때는 길을 지워 둔다
되돌리면서 가로로 눕히던 코드를 지웠다. 앞선 TIL 10에서 「되돌린 이유를 남긴다」고 정했는데, 이번엔 한 걸음 더 갔다. 이유만 적어 두면 몇 달 뒤에 「폰은 가로가 낫지 않나」가 또 떠오르고, 코드가 남아 있으면 되살리기 쉽다.
그래서 코드를 지우고 문서에 「되살리지 말 것」을 이유와 함께 적었다. 남겨 두는 것과 지우는 것의 차이는 다음 사람이 얼마나 쉽게 같은 길로 돌아가느냐다.
같은 편집을 두 곳에 둘 뻔했다
앱에서 결제 없이 넘어가는 웹 화면을 만들었다. 거기서 매장 이름·업종·비밀번호를 고칠 수 있게 하고 나니, 이상한 게 눈에 띄었다. 업종은 앱에서도 고칠 수 있는데 매장 이름은 웹에서만 된다. 같은 일을 하러 두 군데를 가야 한다.
그래서 물었다. 나중에 웹에서도 재생하게 만들 거라면 둘 다 필요한 건가.
답은 아니었다. 웹에서 듣는 판을 만들면 지금 앱 화면을 그대로 웹으로 빌드하는 거라, 앱 설정 화면이 웹에서도 그대로 뜬다. 즉 편집을 앱에 두면 웹 플레이어가 생기는 날 웹에서도 저절로 된다. 웹 페이지에 같은 편집을 또 두면 그날부터 같은 일을 두 벌 관리하게 된다.
그래서 편집은 앱을 주 화면으로 하고, 웹 페이지는 기능을 더 늘리지 않기로 했다. 앱을 아직 안 깐 사람, 비밀번호를 잊어 앱에 못 들어가는 사람, 스토어 심사에 보여 줄 자리로만 남긴다.
무언가를 두 곳에 두려 할 때 물을 것은 「둘 다 필요한가」가 아니다. 「나중에 하나가 다른 하나를 덮게 되나」다. 덮게 된다면 지금 늘리는 건 그때 지울 일을 미리 만드는 셈이다.
결제 버튼을 둘 수 없는 자리가 있다
그 웹 화면에는 결제로 가는 링크를 하나도 두지 않았다. 앱에서 여는 화면에 결제를 안내하면 스토어 정책에 걸리기 때문이다. 앞선 TIL 6에서 결제는 앱 안이 아니라 기기 브라우저에서 하기로 정했는데, 이번엔 그 브라우저로 나가는 길 자체에 제약이 붙었다.
정리하면 이렇다. 스토어에 올린 앱은 「밖으로 나가는 문」을 만들 수는 있지만, 그 문 너머에 결제가 보이면 안 된다. 그래서 웹에 두 장이 필요해졌다. 요금과 구독 버튼이 있는 판매 페이지, 그리고 그것들이 하나도 없는 계정 관리 페이지다.
플랫폼 규칙은 기능을 막는 게 아니라 화면을 쪼개게 만든다. 규칙을 읽을 때 「무엇을 못 하나」만 보면, 그 때문에 화면이 몇 장으로 갈리는지는 안 보인다.
미루는 일에 날짜 대신 조건을 묶었다
웹 결제(Creem) 확인이 남은 일 목록에 계속 있었다. 이게 지금 급한지 물었더니 아니었다. 앱 안 결제는 이미 확인했고, 판매 페이지는 아직 검색에 안 잡히게 막아 둬서 그 버튼으로 들어올 사람이 없다.
다만 그냥 미루면 위험한 자리였다. 출시하면서 그 페이지를 검색에 열어 주는 순간, 한 번도 돌려 본 적 없는 결제 버튼이 아무나 누를 수 있게 된다.
그래서 「판매 페이지를 공개하기 직전에」로 묶었다. 앞선 TIL 2에서 「미루는 일에는 날짜가 아니라 조건을 붙인다」고 적었는데, 그때는 미룬 일이 필요해지는 순간에 알아서 걸리게 하려는 것이었다. 이번엔 이유가 하나 더 있다. 미루는 게 위험해지는 순간이 언제인지를 같이 적어 두는 것이다.
조건을 붙일 때 두 가지를 본다. 이 일이 필요해지는 때가 언제인가, 그리고 미룬 채로 두면 위험해지는 때가 언제인가. 둘이 다르면 뒤엣것을 적어야 한다.
화면이 옛 이름을 계속 보여 줬다
설정에서 매장 이름을 바꿨는데 홈에 옛 이름이 그대로 있었다. 저장이 안 된 줄 알았는데, 서버에는 새 이름이 들어가 있었다.
원인은 홈이 이름을 한 번 읽고 들고 있었던 것이다. 매번 물으면 요청이 느니까 아껴 둔 것인데, 그 아낌에는 「이 값은 안 바뀐다」는 가정이 숨어 있었다. 이름은 바뀐다.
값을 들고 있기로 할 때는 「이게 언제 바뀌나, 바뀌면 누가 알려 주나」를 같이 정해야 한다. 앞선 TIL 2에서 통계에 그때의 값을 박아 둔 것과는 반대 방향이다. 그때는 바뀌면 안 되는 값이라 박아 뒀고, 이번엔 바뀌는 값이라 들고 있으면 안 됐다. 같은 「값을 어디에 둘까」인데 결론이 갈린다.
작은 화면에서 내린 세 가지 판단
폰에 깔아 보고 짚은 것들인데, 셋 다 「글자를 어디에 둘까」였다.
첫째, 휠 타일의 이름이 「그루비」가 아니라 「그…」로 보였다. 칸이 좁으니 줄여 쓰는 게 기본 동작인데, 분위기 이름은 줄이면 뜻이 사라진다. 말줄임표 대신 두 줄로 줄바꿈하고, 타일 구석의 자켓 그림 위로 글자가 넘어가도 괜찮다고 정했다. 그림은 장식이고 이름은 정보라서다.
둘째, 「정시 컷」이라는 설정의 설명이 말하다 만 것처럼 읽혔다. 설정 이름 밑에 까는 한 줄짜리 자리에 켰을 때와 껐을 때를 다 적으려니 잘린 것이다. 이름 옆에 ?를 두고 눌렀을 때 문단으로 보여 주게 바꿨다. 설명이 자리에 안 맞으면 설명을 줄일 게 아니라 설명의 자리를 옮긴다.
셋째, 시간대 목록에서 30분 단위 항목에 도시 이름이 비어 있었다. 빠뜨린 줄 알았는데, 30분·45분 단위를 실제로 쓰는 지역이 몇 곳뿐이라 대부분 비는 게 맞았다. 빠진 여섯 곳만 채웠다. 비어 있는 게 전부 버그는 아니고, 채워야 할 자리인지 원래 비는 자리인지를 먼저 봐야 한다.
이미 끝난 일을 다시 돌릴 뻔했다
남은 일 목록에 「끝잘림 검사 한 바퀴」가 있어서 돌렸다. 724곡 중 21곡만 검사됐다. 나머지는 어제 음량을 다시 구운 뒤에 이미 검사해 둔 것이었다.
목록은 어제 로그를 쓰던 시점의 상태다. 그 뒤에 한 일은 목록에 반영되지 않는다. 도구가 「이 곡은 검사했다」를 기록해 두고 있었으니, 그걸 먼저 봤으면 돌릴 이유가 없다는 게 바로 보였다.
할 일 목록은 무엇을 할지 고르는 데 쓰고, 그게 아직 남았는지는 실제 상태에서 확인한다. 목록만 믿으면 끝난 일을 다시 하고, 실제 상태만 보면 해야 할 일을 잊는다. 둘 다 있어야 한다.
정리할 게 하나뿐이었다
출시 전에 코드에 지저분한 게 없는지 보자고 했다. 나온 것은 경고 0개, 안 쓰는 파일 없음, 임시로 적어 둔 메모 없음이었다. 정리할 것은 딱 하나, 내가 그날 만든 중복이었다. 이름을 묻는 입력 창이 이미 공용으로 있었는데 설정에 같은 창을 또 만들었던 것이다.
나머지 후보(긴 화면 쪼개기 같은 것)는 지금 고장 난 것도 아니고 자주 고치는 자리도 아니라 출시 뒤로 미뤘다.
여기서 가져갈 건 두 가지다. 하나는 정리할 것을 찾을 때 오래된 코드보다 오늘 만든 코드를 먼저 본다는 것이다. 어제까지 멀쩡하던 곳에 중복이 생기는 건 대개 오늘 손댄 자리다. 다른 하나는 정리의 범위를 미리 자르는 것이다. 「목록을 보고 하나만」이라고 정하지 않으면, 고칠 것이 없는데도 고칠 거리를 만들어 낸다.
요약
- 내가 써 보고 되는 것과 처음 보는 사람에게 익숙한 것은 다르다. 익숙함은 기능이 아니라 습관이라 내가 검증할 수 없다.
- 되돌릴 때는 이유를 적는 데서 그치지 말고 되돌아갈 길을 지워 둔다.
- 같은 것을 두 곳에 두려 할 때 물을 것은 「둘 다 필요한가」가 아니라 「나중에 하나가 다른 하나를 덮나」다.
- 플랫폼 규칙은 기능을 막는 게 아니라 화면을 쪼개게 만든다.
- 미루는 일에는 필요해지는 때와 미룬 채로 두면 위험해지는 때를 같이 본다. 다르면 뒤엣것을 조건으로 적는다.
- 값을 들고 있기로 할 때는 그 값이 언제 바뀌고 바뀌면 누가 알려 주는지를 같이 정한다.
- 설명이 자리에 안 맞으면 설명을 줄이지 말고 자리를 옮긴다. 이름은 줄이면 뜻이 사라지니 줄바꿈한다.
- 비어 있는 게 전부 빠뜨린 건 아니다. 채울 자리인지 원래 비는 자리인지 먼저 본다.
- 할 일 목록은 무엇을 할지 고르는 데 쓰고, 남았는지는 실제 상태로 확인한다.
- 정리할 것은 오래된 코드보다 오늘 만든 코드에서 먼저 나온다. 범위를 미리 자르지 않으면 고칠 거리를 만들어 낸다.