기능을 만들 때는 화면을 생각합니다. 쓰는 사람은 일을 합니다.
그 차이는 대개 작지만, 어떤 지점에서는 설계를 되돌려야 할 만큼 큽니다. 그런 게 세 번 있었습니다. 공통점이 하나 있는데, 셋 다 기능을 더한 게 아니라 우리가 먼저 정해둔 규칙을 바꾼 일이었습니다.
1. 길게 쓴 코멘트가 사라졌습니다
면접 평가에 코멘트를 길게 적는 중이었습니다. 그 사이 알림이 오거나 세션이 갱신되면서 화면이 새로 그려졌고, 쓰던 내용이 없어졌습니다.
처음 생각한 답은 "서버에 초안을 저장한다"였습니다. 그런데 그렇게 하면 문제가 하나 생깁니다. 미완성 코멘트가 목록에 남습니다. 다른 평가자가 보게 되고, 등록한 것과 쓰다 만 것이 섞입니다. 평가 기록은 나중에 되짚어보는 자료라 이게 꽤 나쁩니다.
그래서 서버가 아니라 브라우저에 잠깐 담아두기로 했습니다. 다시 열면 복원되고, 등록하면 지워집니다. 값이 비면 저장 키까지 지웁니다 — 빈 초안이 쌓이면 다음에 열 때 이상한 걸 복원하니까요. 오래된 초안은 복원하지 않고 버립니다.
기능으로 보면 사소합니다. 그런데 이 지점을 안 고치면 평가를 성실하게 길게 쓰는 사람이 가장 자주 손해를 봅니다.
2. 자동 로그아웃이 작업을 끊었습니다
보안 정책으로 세션 만료를 넣었습니다. 처음에는 로그인 시점부터 일정 시간이 지나면 끊는 방식이었습니다. 계산이 간단하고 정책으로 설명하기도 쉽습니다.
실제로는 이렇게 됩니다. 평가자가 지원자 열 명의 이력서를 차례로 읽습니다. 한 명에 오 분씩 걸립니다. 계속 화면을 보고 있고 계속 입력하고 있는데, 로그인한 지 오래됐다는 이유로 끊깁니다.
보안이 지키려던 상황과 실제로 끊긴 상황이 다릅니다. 자리를 비운 사람의 화면이 열려 있는 걸 막으려던 것이었는데, 정작 끊긴 사람은 계속 일하고 있었습니다.
그래서 기준을 시간에서 조작으로 바꿨습니다. 마우스·키보드 조작이 있으면 만료 시각이 밀리고, 아무 조작이 없으면 그때부터 셉니다. 절대 만료는 버렸습니다. 정책 문서로 설명하기는 조금 더 복잡해졌지만, 지키려던 것을 실제로 지킵니다.
3. 왜 떨어졌는지가 안 남았습니다
탈락 처리는 원래 버튼 하나였습니다. 빠른 게 좋다고 생각했습니다.
몇 달 뒤 문제가 나타나는 방식은 이렇습니다. 누군가 "이 사람 왜 떨어졌어요?"라고 묻습니다. 답할 수 있는 사람이 없습니다. 처리한 사람도 기억하지 못합니다.
그리고 이건 편의 문제가 아닙니다. 탈락 사유가 남지 않으면 다음 채용에서 기준을 고칠 수 없고, 차별 문제가 제기됐을 때 회사가 제시할 것도 없습니다. 그때 필요한 것은 선의가 아니라 기록입니다.
그래서 사유 입력을 필수로 바꿨습니다. 입력 단계를 늘리는 결정이라 오래 고민했습니다. 결론은 이랬습니다 — 여기서 아낀 10초가 반년 뒤에 답할 수 없는 질문을 만든다면, 그 10초는 아끼는 게 아닙니다.
화면에서 막는 것으로 끝내지 않고 서버에서도 사유 없는 탈락을 거부하도록 했습니다. 화면만 막으면 언젠가 다른 경로로 들어옵니다.
세 번 다 같은 모양이었습니다
셋 다 처음 설계가 틀렸던 게 아닙니다. 각자 합리적이었는데, 사람이 실제로 하는 일의 리듬과 안 맞았습니다.
코멘트는 짧게 쓸 거라고 봤고, 실제로는 길게 씁니다. 세션은 로그인 시점부터 재면 된다고 봤고, 실제로는 한 번 앉아서 오래 봅니다. 탈락은 빠를수록 좋다고 봤고, 실제로는 나중에 설명해야 합니다.
그래서 지금은 새 기능을 만들 때 질문을 하나 더 합니다. "이 화면에서 사람이 몇 분 동안 무엇을 하고 있나." 초 단위로 끝나는 조작과 십 분씩 붙어 있는 작업은 다르게 만들어야 합니다.
아직 안 고친 것도 있습니다
같은 종류의 어긋남이 하나 남아 있습니다. 임원 면접 라운드로 넘어가는 링크가 화면 안에 없어서, 주소를 직접 넣지 않으면 그 화면에 도달할 수 없습니다. 기능은 있는데 가는 길이 없는 상태입니다.
이런 건 대개 "만든 사람은 주소를 알고 있어서" 생깁니다. 발견하는 방법은 하나뿐이었습니다 — 안 만든 사람이 써보는 것.