레거시 코드를 밀어내는 일
2월 끝에 "3월은 레거시 코드 마이그레이션이 메인이 될 것"이라고 적었는데, 정확히 그렇게 됐다.
플러터웹으로 만들어진 기존 서비스를 새 스택으로 옮기는 작업을 3월 내내 했다. 내 작업은 로그인 기능과 지도 기능이 중심이었고, feature flag를 환경변수로 사용하여 문제 발생 시 롤백할 수 있도록 안전장치를 마련했다. 글을 쓰고 있는 시점에는 QA를 완료하고 배포를 남겨두고 있는 상태다.
feature flag에 대해서는 동료도 처음에는 생소해 했지만, 작업 마무리쯤에는 "유용했다"는 피드백을 받았다.
이번에도 어김없이 AI의 도움을 받았다. QA 후 생긴 이슈나 버그리포트를 GitHub issue에 정리해서 올리고 명령을 내리면 worktree를 분리해서 병렬로 처리 후 결과만 직접 확인하였다. 기능 구현에서는 공통 모듈에 대한 의존도가 있어서 병렬 처리가 어려웠는데, QA 이후 동시다발적으로 생기는 이슈에 대해서는 병렬 처리 경험이 좋았다.
팀에서 부딪히고 배운 것
3월 20일에 큰 충돌이 있었다.
QA 준비를 같이 진행하기로 한 상황에서, 다른 작업을 하고 있는 동료를 보고 부정적인 피드백이 오갔다. 나는 QA 준비가 당연히 최우선이라고 생각했고, 동료는 일정만 맞추면 되는 거 아니냐는 입장이었다. 둘 다 틀린 말은 아닌데, 문제는 이 우선순위를 사전에 명시적으로 합의하지 않았다는 거였다.
돌이켜보면 세 가지가 잘못됐다. 첫째, 우선순위를 내가 당연하게 여기고 말로 꺼내지 않았다. 둘째, "왜 다른 거 하고 있어?"라는 피드백은 상황이 아니라 사람을 겨냥한다. 셋째, 감정이 올라간 상태에서 결론을 내리려 했다. 이 부분은 이전에도 그런 경험이 있어서 고쳐야겠다고 생각했기에 가장 후회되는 부분이다.
근원에는 내가 너무 급했다는 생각이 든다. 이 마이그레이션을 기간 내 끝내는 것이 목표였기 때문에 모든 계획을 나 자신의 기준으로 정해 놓고 판단했다. 실제로 속도가 잘 나왔기 때문에 일정 안에 마무리할 수 있었던 거라, 더욱 내가 맞고 동료가 알아서 따라와야 한다고 판단했었다. 변명을 하자면 나라면 그랬을 거였기 때문에 역지사지는 의미가 없어졌다.
물론 이후에 추가적인 대화를 통해서 다시 원만하게 작업을 이어 나갈 수 있었지만, 나 자신에 대한 고민이 많아졌다.
보통 혼자하는 작업을 선호하기도 하고, 스스로 "좋은 리더"보다 "좋은 조력자"가 적합하다고 기준을 정해두고 있었다. 그래서 그랬을까. 언젠가는 나도 누군가를 이끌어 나갈 때가 오지 않을까. 우선 "좋은 협업"의 원칙을 차곡차곡 모아보려고 한다. 지금의 경험과 생각이 그때의 나에게 좋은 양분이 되었으면 좋겠다.
마치며
3월은 제동이 한번 걸렸던 달인 것 같다. 성과는 분명히 가져갔지만 팀에서의 충돌은 예상 밖이었다. 하지만 그 과정에서 조금 더 발전할 수 있었다.
이후에 나는 어떤 선택을 할 것인가. 겁이 많아서 이런 상황을 피하기 위해 혼자하는 작업만 하고 싶다는 마음이 없다면 거짓말이다. 하지만 피한다고 사라지는 문제가 아니라는 것도 안다. 부딪히고, 기록하고, 원칙을 쌓아가는 수밖에.
"고통 + 성찰 = 진보"
— 레이 달리오, 《원칙》