여러분의 팀에서 페어 프로그래밍이나 코드 리뷰 상대가 항상 같은 멤버가 되고 있지 않습니까?
엔지니어 팀에서 페어 프로그래밍과 코드 리뷰는 지식 공유와 코드 품질 향상의 핵심입니다. 그러나 조합이 고정화되면 속인화가 진행되고 팀 전체의 성장이 멈춥니다. 이 글에서는 공평하고 효과적인 페어링과 리뷰 담당 배정 방법, 그리고 지식 공유를 촉진하는 베스트 프랙티스를 해설합니다.
베테랑끼리, 사이가 좋은 사람끼리 페어를 이루는 경향이 자연스럽게 생깁니다. "이 사람과는 맞지 않는다"는 이유로 특정 멤버를 피하는 경우도 있습니다. 결과적으로 지식이 편중되고, 신입이 고립되며, 버스 팩터(핵심 인물이 빠지면 돌아가지 않게 되는 리스크)가 낮아집니다.
고정화가 진행되면 특정 모듈이나 서비스를 이해하는 멤버가 한정되어, 그 사람이 휴가나 이동으로 없어지면 팀 전체가 곤란해지는 상황에 빠집니다. 속인화는 제품의 안정적 운영에 있어 큰 리스크입니다.
PR을 올리고 "누가 리뷰 부탁드립니다"라고 던지면, 반응이 빠른 사람이 매번 리뷰를 맡게 됩니다. 베테랑에게 부담이 집중되고, 신입에게는 리뷰 기회가 돌아가지 않습니다. 병목과 번아웃 모두를 초래할 수 있는 패턴입니다.
게다가 리뷰하는 쪽의 스킬도 키워지지 않습니다. 코드 리뷰는 자신이 작성하지 않은 코드를 읽어내는 훈련이며, 설계와 아키텍처에 대한 이해를 깊게 하는 기회이기도 합니다. 특정 멤버만 리뷰를 담당하면 이 학습 기회가 팀 전체에 퍼지지 않습니다.
사무실이라면 옆자리에서 부담 없이 페어 프로그래밍을 시작할 수 있습니다. 원격에서는 "말 걸기 어렵다"고 느끼는 사람이 많아, 결과적으로 같은 상대하고만 페어를 이루게 됩니다. 새로운 조합이 생기지 않고, 팀 내 사일로화가 진행됩니다.
원격 환경에서는 텍스트 채팅 중심의 소통이 되기 쉽습니다. 페어 프로그래밍처럼 긴밀한 커뮤니케이션이 필요한 작업은, 의식적으로 시스템을 만들지 않으면 실시 빈도가 떨어집니다. 도구 정비(VS Code Live Share, Tuple 등)와 페어링 일정의 고정화가 원격 페어 프로그래밍 성공의 열쇠입니다.
매주 페어를 바꿔서 한 달 안에 모든 사람과 짝을 이루는 구조로 만듭니다. 지식이 넓어지고, 다양한 관점을 접할 기회가 늘어납니다. 로테이션 주기는 팀 규모에 따라 조정하며, 5명 이하의 팀이면 매주, 10명 이상이면 2주마다가 현실적입니다.
베테랑과 신입, 프론트엔드와 백엔드 등 다른 전문성의 조합을 의식합니다. 지식의 전파가 일어나고, T자형 스킬(폭넓은 지식과 하나의 깊은 전문성)의 육성으로 이어집니다.
스킬 매트릭스를 작성해 두면 페어링 판단이 원활해집니다. 각 멤버가 잘하는 영역과 키우고 싶은 영역을 일람으로 만들어 페어링 시 참고합니다. 예를 들어 "인프라에 능통한 사람과 인프라를 배우고 싶은 사람"을 조합하면 자연스러운 지식 이전이 일어납니다.
완전히 규칙 기반이면 조합이 예측 가능해집니다. 전체의 약 30% 정도에 랜덤 배정을 넣으면 신선함이 유지되고 예상 밖의 발견이 생기기 쉽습니다. 랜덤 슬롯이 있으면 "이번 주에는 누구와 짝이 될까"라는 기대감이 생겨 페어 프로그래밍에 대한 동기부여가 유지됩니다.
페어링이나 리뷰 담당 규칙을 문서화하여 누구나 확인할 수 있는 상태로 만듭니다. "왜 이 조합인지"를 설명할 수 있으면 멤버들의 납득감이 높아집니다. 규칙을 팀 Wiki나 README에 기재해 두면 새로운 멤버가 합류했을 때도 원활하게 공유할 수 있습니다.
코드 리뷰 횟수를 가시화하고, 특정인에게 집중되지 않도록 월간 목표치를 설정합니다. 병목 해소와 번아웃 방지에 직결됩니다. GitHub Insights나 스프레드시트를 활용하여 각 멤버의 리뷰 건수를 주간으로 돌아보면 효과적입니다.
먼저 팀의 스킬 매트릭스를 확인합니다. 베테랑, 중견, 신입의 인원 비율을 파악한 후 규칙 기반 페어링(전체의 70%)을 결정합니다. 베테랑과 신입의 조합을 기본으로 하고, 고난도 태스크에는 베테랑끼리를 배정합니다.
나머지 30%는 랜덤으로 결정합니다. Amida-san에서 이벤트를 생성하고, 모든 엔지니어가 가로선을 추가한 후 결과를 발표합니다. 랜덤 슬롯이 있어 "이번 주에는 누구와 짝이 될까"라는 즐거움이 생기고, 매너리즘을 방지할 수 있습니다.
결정된 페어링은 Slack이나 Notion에 게시하여 팀 전체에 공유합니다. 주 후반에 일정 변경이 필요해지면 그때마다 채널에서 공지하여 투명성을 유지합니다.
PR 생성 시 리뷰 횟수가 적은 사람을 우선적으로 배정하는 구조(GitHub Actions 등)로 자동화합니다. 자동화가 어려운 경우 스프레드시트로 리뷰 횟수를 기록하고, 배정 참고 자료로 활용합니다.
추가로 주 1회 "랜덤 리뷰"로서, 해당 주의 PR에서 몇 건을 추출하여 평소와는 다른 멤버가 리뷰하는 기회를 마련합니다. 평소 접하지 않는 코드베이스를 읽음으로써 팀 전체의 코드 이해도가 향상됩니다.
리뷰의 최소 인원도 정해 둡니다. 최소 2명의 Approve를 필수로 함으로써, 한 명의 리뷰에서 놓친 부분이 있을 경우의 리스크를 줄일 수 있습니다.
원격으로 페어 프로그래밍을 할 때는 도구 선택과 진행 방식이 중요합니다. VS Code Live Share는 무료로 사용할 수 있으며, 실시간 코드 공유와 터미널 공유가 가능합니다. Tuple은 페어 프로그래밍에 특화된 도구로, 화면 공유 품질이 높고 드라이버와 네비게이터의 전환이 원활합니다.
세션 시간은 25분에서 50분 정도가 적절합니다. 너무 길면 집중력이 끊기고, 너무 짧으면 본론에 들어가기 전에 끝나버립니다. 포모도로 테크닉처럼 25분 페어 프로그래밍 + 5분 휴식의 사이클을 반복하는 것도 효과적입니다.
드라이버(코드를 작성하는 사람)와 네비게이터(지시를 내리는 사람)의 역할을 15분마다 교대하는 규칙을 설정하면, 양쪽 모두 능동적으로 참여할 수 있어 학습 효과가 높아집니다.
페어 조합 수가 늘어나고 코드 리뷰의 편중이 해소됩니다. 신입의 전력화가 빨라지고 버스 팩터도 향상됩니다. 단기적으로는 새로운 페어에 익숙해질 때까지 생산성이 떨어질 수 있지만, 1개월이 지나면 지식 공유의 효과가 나타나기 시작하여 팀 전체의 생산성이 개선 방향으로 향합니다.
페어 프로그래밍의 조합이 늘어나면 팀 내 커뮤니케이션 양도 자연스럽게 증가합니다. 평소 별로 대화하지 않는 멤버끼리 함께 작업함으로써 상호 이해가 깊어지고, 팀의 심리적 안전성 향상에도 기여합니다.
페어 프로그래밍은 하나의 태스크에 두 명의 엔지니어를 배정하므로 얼핏 비효율적으로 보입니다. 그러나 페어 프로그래밍에서는 설계 실수나 구현 실수가 조기에 발견되어, 후공정에서의 버그 수정 비용이 대폭 줄어듭니다. 또한 코드 품질이 향상되고 리뷰 공정도 단축됩니다.
팀에 도입을 제안할 때는 먼저 하나의 스프린트에서 시범 도입하고, 버그 발생률이나 리뷰 시간의 변화를 측정해 봅니다. 데이터를 기반으로 판단하면 멤버들의 이해도 얻기 쉽습니다.
모든 멤버가 페어 프로그래밍을 좋아하는 것은 아닙니다. 집중해서 혼자 작업하고 싶은 사람이나 남 앞에서 코드를 작성하는 것에 거부감이 있는 사람도 있습니다.
강제하지 말고 선택지를 제공합니다. "페어 프로그래밍 주"와 "개인 작업 주"를 교대로 설정하거나, 페어 프로그래밍은 권장이지만 필수는 아니라고 명시하는 방법이 효과적입니다. 페어 프로그래밍 횟수를 적게 시작하여 익숙해지면 점차 늘려가는 접근도 효과적입니다.
5명 이하의 팀에서는 로테이션 조합이 금방 한 바퀴 돕니다. 이 경우 페어 프로그래밍 빈도를 줄이거나, 인접 팀과의 합동 페어 프로그래밍 세션을 마련하는 것도 하나의 방법입니다. 팀 간 페어 프로그래밍은 조직 전체의 지식 공유에도 기여합니다.
현재는 수동 연동입니다. Amida-san에서 페어를 결정하고, 결과를 Slack이나 Notion에 게시하여 GitHub/GitLab의 배정은 수동으로 설정합니다.
강제하지 말고 선택지를 제공합니다. "페어 프로그래밍 주"와 "개인 작업 주"를 교대로 설정하거나, 페어 프로그래밍은 권장이지만 필수는 아니라고 명시하는 방법이 효과적입니다.
리뷰 체크리스트를 작성하고, 최소 2명의 Approve를 필수로 하여 품질을 담보합니다. 경험이 적은 멤버가 리뷰에 참여하는 경우 베테랑의 최종 확인을 조합하면 좋습니다.
VS Code Live Share, Tuple, Zoom 화면 공유가 대표적입니다. VS Code Live Share는 무료로 도입이 쉽고, Tuple은 페어 프로그래밍에 특화된 조작성이 강점입니다. 팀의 예산과 워크플로에 맞춰 선택합니다.
엔지니어 팀의 지식 공유와 속인화 방지는 공평하고 투명한 페어링 시스템에서 시작됩니다. 로테이션으로 모든 사람과 짝을 이루고, 스킬 밸런스를 고려하며, 랜덤 요소로 신선함을 유지합니다. 이 세 가지만 지켜도 팀의 성장 속도는 크게 달라집니다.
먼저 지난 한 달간의 페어 조합과 코드 리뷰 횟수를 가시화하는 것부터 시작해 보세요. 현재 상황의 편중이 보이면 개선 방향이 자연스럽게 정해집니다.
관련 글: