소리꽃 KeyBloom TIL 31
코드는 안 건드리고 결정만 정리한 날. 어디까지 만들지, 남에게 무엇을 넘길지, 무엇이 아직 안 나갔는지를 정했다.
맛보기를 보고 다음 단계를 접었다
건반이 밋밋해 보여서 입체감을 넣기로 했다. 두 단계로 잡았다. 1단계는 아래 모서리 라운드, 흰 건반 사이 틈, 검은 건반 명암. 2단계는 검은 건반 측면, 흰 건반이 검은 건반 사이로 파고드는 실제 폭, 눌림 표현.
1단계만 먼저 맛보기로 만들어 보고 화면을 봤다. 이미 괜찮았다. 2단계는 안 하기로 했다.
계획에 적힌 단계는 「여기까지 하면 좋겠다」는 예상이지 「여기까지 해야 한다」는 약속이 아니다. 예상은 만들기 전에 세운 것이라 실물을 보면 틀릴 수 있고, 이번엔 좋은 쪽으로 틀렸다.
접을 수 있었던 건 맛보기를 먼저 봤기 때문이다. 두 단계를 다 만들어 놓고 봤으면 이미 쓴 시간이 아까워서 「기왕 만들었으니 넣자」가 됐을 것이다. 단계를 나눠 앞쪽만 먼저 보는 건 시간을 아끼는 방법이기도 하지만, 그보다 멈출 기회를 만드는 방법이다.
접은 단계는 목록에서 지우지 않고 「안 하기로 했다」로 남겼다. 지워 버리면 나중에 같은 걸 또 계획하게 된다.
설명만 넘겼더니 상대가 다시 만들었다
새 모션 「파동」을 넣고 로그스톤 샵 제품 페이지에 반영해 달라고 알렸다. 그 페이지에는 모션마다 움직이는 데모 그림이 있는데, 그게 앱 화면을 가져다 쓰는 게 아니라 샵이 자기 렌더러(그림을 그려 내는 프로그램)로 따로 그린다는 걸 그때 알았다.
넘긴 건 「수면에 물방울이 퍼지듯 위쪽 반원 고리가 번진다」는 문장 하나였다. 샵은 그 문장만 보고 물리를 새로 짜 넣었고, 「앱과 인상이 다르면 알려 달라, 앱 값을 주면 그걸로 대체하겠다」고 회신했다.
말로 넘긴 사양은 상대가 다시 만든다. 다시 만든 것은 원본과 다르다. 상대가 틀려서가 아니라, 문장에 없던 값을 상대가 스스로 채워야 하기 때문이다. 「고리가 번진다」에는 이런 게 안 들어 있다.
- 얼마나 빨리 퍼지는가
- 퍼지면서 느려지는가, 같은 속도로 계속 퍼지는가
- 고리가 다 같이 옅어지는가, 하나씩 사라지는가
- 고리가 정원인가, 눌린 타원인가
이 넷 중 하나만 달라도 물결이 아니라 그냥 원이 커지는 그림이 된다. 그래서 앱이 쓰는 실제 값을 전부 넘겼다. 퍼지는 속도, 항력(공기 저항처럼 속도를 깎는 값), 수명, 각도를 어떻게 나누는지, 화면 비율에 맞춘 가로세로 보정까지.
같아야 하는 것이면 값을 준다. 비슷하면 되는 것이면 설명으로 충분하다. 제품 페이지 데모는 「사면 이렇게 보인다」를 파는 그림이라 같아야 하는 쪽이다.
만든 것과 나간 것이 달라졌다
0.1.7을 내보낸 뒤에 건반 입체감을 개발선에 넣었다. 출시용 브랜치는 따로 두기 때문에 이 변경은 아직 사용자에게 안 나간 상태다.
이대로 두면 다음 릴리스 노트를 쓸 때 빠진다. 노트는 「지난 버전 이후 뭘 했지」를 떠올려 쓰는데, 릴리스 직후에 들어간 변경일수록 그 사이 다른 일에 밀려 기억에서 먼저 사라진다. 그래서 할 일 목록 맨 위에 「이건 아직 안 나갔다」를 경고로 올려 뒀다.
개발선과 출시선을 갈라 두는 것 자체는 맞다. 안 그러면 다듬는 중인 것이 사용자에게 그대로 나간다. 대신 「만든 것」과 「나간 것」이 벌어지고, 그 차이는 저절로 보이지 않는다. 갈라 두기로 했으면 안 나간 목록을 유지하는 값을 같이 치러야 한다.
요약
- 계획에 적힌 다음 단계는 예상이지 약속이 아니다. 실물을 보고 충분하면 접는다. 접은 건 지우지 말고 「안 하기로 했다」로 남긴다
- 맛보기를 먼저 보는 건 시간을 아끼는 방법이기도 하지만, 그보다 멈출 기회를 만드는 방법이다
- 말로 넘긴 사양은 상대가 다시 만들고, 다시 만든 것은 원본과 다르다. 같아야 하면 값을 주고, 비슷하면 되면 설명으로 충분하다
- 개발선과 출시선을 가르면 만든 것과 나간 것이 벌어진다. 갈라 두기로 했으면 안 나간 목록을 유지하는 값을 같이 치른다