스테이 운영자가 물었다. "점심에 들어온 예약이 왜 저녁까지 콘솔에 안 보여요?"
맞는 지적이었다. 09:00 발송 뒤 자정까지 예약 피드를 다시 읽는 게 없었다. 점심에 들어온 예약은 다음 날 저녁 초안 때까지 보이지 않았다.
첫 버전
smb-msg-refresh-daily를 만들어 11시부터 21시까지 두 시간마다 기존 초안 작업을 다시 돌렸다. 여기까진 좋았다. 문제는 그 다음에 붙인 것이다.
"다시 읽었는데 아침에 보낸 것과 다르면, 직원에게 바뀐 내용을 문자로 알려주자."
그럴듯했다. 그리고 바로 그날, 추가침구 필드가 정오에 배포됐다. 모든 메시지가 다르게 재조립됐고, 세 명의 직원 전부에게 "예약 내용이 바뀌었어요"가 갔다. 아무것도 바뀌지 않은 날에.
고치지 않고 잘라냈다
배포를 변경으로 오탐하지 않게 diff를 정교하게 만들 수도 있었다. 하지만 그건 "무엇이 뉴스인가"를 크론이 판단하게 두는 일이고, 그 판단은 계속 틀릴 것이다. 필드가 하나 더 붙을 때마다.
그래서 기능을 잘라냈다.
- 아침 발송 뒤에 들어온 예약은, 운영자가 콘솔에서 지금 보내기를 누를 때 청소 담당자에게 간다. 사람이 뉴스인지 판단한다.
- 크론의 일은 하나다. 운영자가 콘솔을 열었을 때 화면이 낡아 있지 않게 하는 것. 다시 읽고, 다시 넣고, 다시 초안을 쓴다. 절대 보내지 않는다.
취소도 같은 날 고쳤다
예약 피드에서 사라진 건을 "취소"로 처리하는 것도 함정이 있었다. 피드는 약 일주일 창이고, 숙박이 시작되면 그 건을 바로 떨어뜨린다. "피드에 없으면 삭제"로 짰다면 앞으로의 예약 대부분과 지금 자고 있는 손님까지 지웠을 것이다.
그래서 부재를 신뢰하는 범위를 피드의 마지막 체크인 날짜보다 엄격히 이전으로 제한하고, 재실 건은 개별 조회로 확인한다. 취소된 행은 지우지 않고 취소로 표시한다. 수기로 넣은 예약은 건드리지 않는다.
이 둘이 같은 교훈이다. 자동화가 "이건 의미 있는 변화다"라고 스스로 판단하는 지점을 최소화하고, 그 판단은 사람 앞에 초안으로 놓는다. Read, Draft까지가 기계의 몫이고, Act는 사람이 누른다.