이벤트 참석자 명단은 계속 움직인다. 대기자가 자리를 원하고 확정자가 취소하고 누가 대신 신청한다.

이걸 처리하는 봇을 만들면서 승인 단계를 넣었다. 봇이 요청을 감지하면 나에게 알림이 오고 내가 눌러야 실행된다. 자동으로 명단이 바뀌는 게 무서웠다.

하루에 열아홉 번

어느 날 알림을 세봤다. 같은 요청 알림이 하루에 열아홉 번 왔다. 다섯 사람 요청이었는데 한 사람 것은 아홉 번 반복됐다.

명단에 없는 사람이 취소하겠다고 쓴 경우가 있었다. 이미 취소했거나 애초에 신청을 안 했거나. 처리할 게 없는 요청이다. 그런데 처리할 게 없다는 판정이 승인을 눌러야만 실행되는 단계에 있었다. 내가 안 누르는 동안 봇은 계속 미처리로 보고 다시 알렸다.

승인이 안전장치가 아니라 막힌 배수구였다.

거슬러 올라가 보니 더 이상한 게 있었다. 참석 추가와 취소는 승인 없이 처리하기로 원래 합의했던 일이었다. 코드가 그 합의를 안 따르고 있었을 뿐이다. 만들 때 불안해서 일단 걸어둔 임시 조치가 그대로 굳은 것이다.

다 걷어내진 않았다

취소만 두 갈래로 나눴다. 참석 취소합니다, 불참하게 되었습니다처럼 분명하게 밝힌 문장은 자동으로 처리한다. 못 가면 어떻게 되나요, 자리 양도 되나요 같은 문장은 자동으로 처리하지 않는다. 이건 질문이지 취소가 아니다.

이 구분이 왜 필요했냐면, 취소 관련 단어를 넓게 잡아 자동 처리하면 질문한 사람이 명단에서 빠지기 때문이다. 물어보기만 했는데 자리가 없어지는 것보다 나쁜 경험은 별로 없다.

그래서 애매한 문장은 나에게 한 번만 알린다. 알림에 취소 처리와 무시 버튼이 붙어 있고 내가 판단해서 누른다. 한 번 알린 뒤엔 다시 알리지 않는다. 앞의 열아홉 번을 안 되풀이하려고.

남이 다른 사람을 대신 넣는 경우도 남겼다. 대상자 본인에게 확인을 받는다. 동의 없이 명단에 넣지 않는다.

승인을 붙일 데는 되돌리기 어려운 일과 판단이 필요한 일이다. 그 둘이 아닌데 승인을 붙이면 안전장치가 아니라 대기열이 된다. 그리고 대기열 길이는 내가 얼마나 바쁜지로 정해진다. 1인 운영에서는 이 시간이 길다.

따라 해보기

내가 승인해야 진행되는 일을 목록으로 써보면 된다. 각각에 대해 되돌릴 수 있는지, 판단이 들어가는지 두 칸을 표시한다. 둘 다 아니오인 줄은 승인을 떼도 되는 일이다.