남은 문제의 행선지

· Retrospective

나는 떠오른 생각을 바로 코드로 옮기지는 않는 편이다. 이동 중에 AI와 대화하면서 아이디어를 더 넓혀보기도 하고, 반례나 아직 정하지 못한 부분을 찾아 정리하기도 한다. 실제로 해볼 일이라고 판단하면 GitHub Issue로 옮긴다.

그러다 보면 코드보다 먼저 고쳐야 하는 것이 생길 때가 있다. 일을 어디까지 해야 끝났다고 볼 것인지 같은 것들이다.

닫을 수 없는 Issue

9월 4일, Issue 하나를 닫으려다 문제가 생겼다. 그 Issue에서 하기로 했던 일은 거의 끝나 있었다. 그런데 문서와 다른 Issue들을 살펴보니, 아직 답을 내리지 않은 질문 몇 개에 “이건 나중에 이 Issue에서 정한다”고 적혀 있었다.

Issue를 닫는다고 질문이 없어지는 것은 아니다. 대신 그 질문을 다음에 누가 받아야 하는지가 사라진다.

그래서 답을 더 내는 대신, 남은 질문이 다음에 어디로 가야 할지를 정리했다. 문서와 다른 Issue를 다시 찾아보면서 “나중에 여기서 정한다”고 적어 둔 부분을 하나씩 확인했다. 생각했던 것보다 많았다.

이미 열려 있는 다른 Issue가 이어받을 수 있는 것도 있었고, 마땅한 곳이 없어 새 Issue를 만들어야 하는 것도 있었다. 그 작업을 마친 뒤에야 원래 Issue를 닫을 수 있었다.

당시에는 완료 기준을 이렇게 적었다.

완료는 남아 있는 것이 0이 되는 상태가 아니라, 현재 책임이 끝나고 남은 것이 안전한 행선지를 가진 상태다.

다음 날, 끝나지 않는 PR

9월 5일에는 다른 문제가 있었다. 구현이나 문서 변경을 PR로 만든 뒤에는 바로 합치지 않고 다시 리뷰를 붙인다. 그런데 몇몇 PR은 리뷰 자체가 끝나지 않았다.

그중 심했던 세 PR은 각각 17번, 12번, 18번 리뷰와 수정을 반복했다. 하나를 고치면 다른 참조가 어긋났다. 그것을 고치면 새로운 표현 문제가 생겼다. 다시 고치면 또 다른 지적이 나왔다.

당시에는 수정 뒤 두 리뷰 모두에서 더 이상 새 지적이 없는 상태를 사실상의 종료점으로 삼고 있었다. 그래서 기준을 바꿨다. 현재의 판단을 바꾸는 지적이 더 이상 없다면 모든 지적이 사라질 때까지 기다리지 않기로 했다. 그리고 마지막으로 리뷰한 변경과 실제로 합쳐질 변경이 같다는 것까지 확인하면 현재 PR은 끝낼 수 있다고 보기로 했다.

나머지 지적은 버리지 않았다. 현재 판단을 바꾸지는 않지만 여전히 유효한 문제라면 별도의 Issue로 넘겼다. 기준을 바꾼 뒤에 결과를 다시 봤다. 기준 변경 전후의 PR을 마흔여덟 개씩 같은 방식으로 세어 보니, 리뷰와 수정의 왕복은 중앙값 여섯 번에서 세 번으로 줄어 있었다.

다만 가장 길었던 PR은 기준을 바꾼 뒤에 나왔다. 열아홉 번을 돌았고, 바꾸기 전 가장 길었던 것보다 길다. 같은 시기에 PR을 어디까지 한 덩어리로 만들지도 바뀌었다. 그래서 왕복이 줄어든 것을 완료 기준을 바꾼 덕분이라고만 말할 수는 없다.

9월 4일의 문제를 보고 이 방식을 적용한 것은 아니다. 두 문제는 따로 생겼고, 따로 고쳤다. 나중에 기록을 나란히 놓고서야 공통점이 보였다. 한쪽에서는 남은 질문에 행선지를 만들었고, 다른 한쪽에서는 남은 지적에 행선지를 만들고 있었다.

살아 있는 행선지

행선지를 만들었다고 문제가 바로 해결되는 것은 아니었다. 어떤 문제는 며칠 뒤 다른 PR에서 다시 처리해 닫았고, 어떤 문제는 아직 열려 있다. 먼저 정해야 할 일이 남아 있기 때문이다.

그리고 조금 더 골치 아픈 문제도 있었다. 행선지가 적혀 있기는 한데, 그 Issue가 이미 닫혀 있는 경우였다.

주소는 있는데 아무도 받지 않는 셈이었다.

이런 일이 반복되고 나서 다른 Issue로 문제를 넘길 때는 그 Issue가 실제로 열려 있는지도 확인하게 됐다.

행선지가 있다는 것만으로는 부족했다. 그 행선지가 살아 있어야 했다.

하지만 열려 있다고 계속 살아 있는 것도 아니다. 나에게는 오랫동안 다시 보지 않은 Issue도 사실상 죽은 Issue와 크게 다르지 않다. 그래서 가끔은 구현과 별도로 시간을 잡아 열린 Issue들을 다시 훑는다. 무엇을 기다리고 있었는지, 지금도 남겨둘 이유가 있는지 다시 본다.

행선지를 적어 두는 것만으로는 충분하지 않았다. 가끔은 그 주소로 다시 가봐야 했다.

끝낼 수 있게 된 것과 해결된 것은 같은 말이 아니었다.