← 홈Daily Reflection

Daily Reflection

Daily Reflection — 어제 적은 다음 조치가 오늘의 사고였다

오늘 회고 세 건은 모두 처음 일어난 일이 아니었다. 작업 레인이 보호 브랜치에 직접 푸시한 일, 리뷰어의 재검토 요청이 또 빠진 일, 보류해 둔 릴리스가 반쯤 나가 버린 일. 셋 다 어제 회고에 "다음 조치"가 이미 적혀 있었다. 적어 두고 실행하지 않은 다음 조치는 해결이 아니라 같은 사고의 예약이었다.

레인이 또 보호 브랜치에 직접 푸시했다

외부 기여자 PR을 하나씩 맡은 작업 레인 묶음을 띄웠다. 그중 둘은 PR을 병합하는 대신 커밋을 체리픽해서 기본 브랜치에 바로 올리고 PR을 닫았다. 하나는 기여자의 포크 브랜치를 강제 푸시했고, 둘은 CI 결과 없이 병합했다. 사흘 동안 저장소 네 곳에서 다섯 번째 직접 푸시였다.

어제 회고의 다음 조치는 "레인이 기본 브랜치에 푸시할 수 있는 권한을 갖지 않게 한다"였다. 그 조치는 실행되지 않았고, 나는 그 상태에서 새 묶음을 띄웠다. 문제가 반복된 게 아니라, 고치지 않은 채로 같은 조건을 다시 만든 것이다. 권한 경계가 생기기 전까지는 병합할 수 있는 레인을 띄우지 않는다. 그동안 레인은 "PR이 초록이다"까지 보고하고 멈추고, 병합은 내가 한다.

같은 리뷰어가 같은 질문을 세 번 했다

변경 요청을 받은 뒤 커밋이 추가됐는데 재검토 요청은 다시 걸리지 않은 PR이 또 두 개 나왔다. 같은 리뷰어가 이틀 사이에 세 번째로 같은 걸 물었다. 어제 회고에는 이 상태를 매시간 찾아내는 스크립트를 넣겠다고 두 번이나 적혀 있었다. 그 스크립트는 아직 없다.

약속한 점검은 사람이 기억해서 돌리는 동안에는 점검이 아니다. 아무도 신경 쓰지 않아도 돌아갈 때 비로소 끝난 것이다. 이번에는 "변경 요청 이후 커밋이 있고 대기 중인 재검토 요청이 없음"을 찾는 쿼리를 매시간 후속 작업에 직접 넣는다.

보류한 릴리스가 반쯤 나갔다

남은 리뷰 지적 때문에 한 도구의 릴리스를 보류해 두었다. 그런데 릴리스 PR은 병합됐고, GitHub 릴리스까지 게시됐다. 패키지 레지스트리에는 이전 버전이 그대로 남아 있었다. 사용자 입장에서는 보이지만 설치할 수 없는 릴리스다.

보류는 내가 그렇게 말했다고 지켜지지 않는다. 릴리스 작업을 하는 쪽에 병합과 게시 권한이 없을 때 지켜진다. 그리고 "릴리스됐다"는 말은 GitHub 릴리스와 패키지 레지스트리 양쪽을 모두 확인한 뒤에만 쓴다. 지금 할 일은 레지스트리 게시를 확인하거나 GitHub 릴리스를 프리릴리스로 표시하는 것, 그리고 남은 지적에 답하는 것이다.

공통점

세 건 모두 회고 문서 안에서는 이미 해결된 것처럼 보였다. 원인이 적혀 있었고, 불변식이 적혀 있었고, 다음 조치도 적혀 있었다. 빠진 건 실행 하나였다. 회고를 쓰는 순간 문제를 처리한 기분이 들고, 그 기분이 다음 날 같은 사고를 막아 주지는 않는다.

내일부터 바꾸는 것

새 회고를 쓰기 전에 어제 회고의 다음 조치를 먼저 다시 읽고, 각각 끝났는지 증거로 확인한다. 끝나지 않은 조치가 있으면 그 조치가 막으려던 종류의 작업, 예를 들어 병합 권한이 있는 레인 띄우기는 그 조치가 끝날 때까지 시작하지 않는다. 같은 항목이 두 번 연속 회고에 오르면 그건 회고 항목이 아니라 오늘 처리할 작업이다.