기타

[Pair Programming] 페어프로그래밍 알아보기(3)

강씨아저씨 2021. 4. 4. 23:12

 이번 포스팅은 조금의 페어 프로그래밍 경험과 여러 포스팅 내용을 읽고 이해하고 공감한 것들을 잊지 않기 위해 정리한 글입니다. 정리할 내용이 많기 때문에 시리즈로 작성될 예정입니다. 

 

 이전 포스팅에서는 코드작성 외의 페어링을 할 수 있는 부분들에 대해서 알아봤습니다. 이번에는 페어프로그래밍을 통해서 얻을수 있는 이점과 실무에 적용할때 경험할 수 있는 문제상황들에 대해 알아보고, 이를 잘 해결하기 위한 팁에 대해 알아보겠습니다. 

 

페어 프로그래밍을 통해 얻을수 있는 이점 

  • 지식공유
    •  팀내의 두사람이 같은 코드에 대해 페어링 작업을 한다면 이것만으로도 팀내에 도메인지식과 기술이 전파되고 있다는 것이고, 이는 knowledge silos 를 방지할 수 있다는 뜻입니다. 또한 두 사람이 문제를 이해하고 토론한다는것은 다른 경험과 관점으로 대안을 고려하는것이기 때문에 더 좋은 해결책을 찾을 가능성이 높아진다는것을 뜻합니다.
      • 실무에 적용하기 위한 팁
         관련 기술이나 도메인에 대해 전혀 알지 못하는 경우라도 페어링을 주저하지 마세요. 만약 여러분이 편안하다고 느끼는 분야에서만 계속 일한다면 새로운 것을 배우는 기회를 놓칠치는 것이고, 팀내의 지식전파에 기여 할 수 있는 기회를 놓치는 것입니다.
  • 이해도 드러내기(노출시키기)
    •  페어링은 문제해결을 위한 방법을 머릿속에서만 생각하는게 아니라 논의 하도록 강요합니다. 소리를 내어 말하고 설명하는것은 우리가 진정으로 올바르게 이해하는지, 혹은 정말로 좋은 해결책을 가지고 있는지를 드러내도록 강요합니다.
      • 실무에 적용하기 위한 팁
         두 사람이 이해되지 않는 부분에 대해서도 터놓고 이야기할 수 있는 신뢰가 필요합니다. 자유롭게 질문할 수 있는 분위기를 조성하고, 정기적인 1:1 및 피드백 세션을 위한 시간을 통해 팀 내의 신뢰관계를 구축하는것이 중요합니다.
  • 목표에 집중
    •  두명이 페어링을 할때는 각자 자신이 어떤 생각으로 이 작업을 하고있는지를 분명히 전달해야 하기때문에 목표에 집중 할 수 있습니다. 혼자 작업할때는 페어링을 할때보다 훨씬 더 산만해 질 수 있습니다. 예를 들어, 다른방법을 생각하지 않고 '그냥 빨리' 처리하기 위한 방법들을 선택했다가 한참 후 잘못된 접근임을 깨닫고 코드를 롤백하거나 토끼굴(rabbit hole) 에 빠져 몇시간을 허비 할 수도 있습니다.
      * 토끼굴: 처음에는 목표를 해결하기 위해 시작했지만 점점더 목표가 아닌것에 공부하는데 시간을 허비하는 상황
      • 실무에 적용하기 위한 팁
        함께 계획을 세우세요! 당면한 과제에 대해 논의하고 목표에 도달하기 위해 어떤 단계를 수행해야 하는지 생각해 보세요.
  • 실시간 코드리뷰
    •  페어링을 할때는 작업을 끝낸후가 아니라 작업중에 크고 작은 오류들을 잡아낼 수 있습니다. 예를들어 옆에 누군가가 있을때 문제접근 방식이나 변수이름 지정에 대해 논의 할 수 있기 때문에 코드를 개선하기가 더 쉽습니다.
      • 실무에 적용하기 위한 팁
         서로 질문하세요. 질문은 여러분이 무엇을 하고 있는지 이해하고 더 나은 해결책을 찾을 수 있는 가장 강력한 도구입니다.
  • 두개의 관점에서 접근하기
    •  이전 포스팅에서 언급했듯이 페어링은 코드에 대한 다른 과점을 가질 수 있게 해줍니다. Driver 는 작은목표를 해결하는데 집중하고 있으며 상세한 코드 한줄 한줄을 생각힙니다. 한편 Navigator 는 더 넓은 시야로 설계,구조에 대한 문제와 버그를 파악하는데 집중합니다. 한 사람이 작업중 이 두가지 사고방식을 결합해서 할 수 있을까요? 아마 힘들거라고 생각합니다. 두가지 관점을 결합하면 세부 사항에 주의를 기울이는 동시에 더 큰 그림을 염두에 둘 수 있기 때문에 코드 품질이 향상됩니다.
      • 실무에 적용하기 위한 팁
         키보드와 역할을 정기적으로 전환해야 합니다. 이것은 여러분의 기분을 전환시키고 지루해하지도 않게하고 두가지 사고방식을 모두 연습하도록 도와줍니다.
  • 집단의 코드 소유권
    •  집단의 코드 소유권은 코드에 대한 개인의 소유개념을 포기하게 합니다. 코드는 팀 전체의 소유이며, 누구나 어디서든 변경 할 수 있습니다. 페어를 통해 모든 코드는 두명 이상이 수정 할 수 있습니다. 이는 팀에 있는 모든 사람이 거의 모든곳의 코드를 바꾸는 것을 편안하게 느낄 가능성을 증가시킵니다.
      • 실무에 적용하기 위한 팁
         Pair Roations 을 활용하면 더 많은 사람들이 집단의 코드 소유권을 이해하는데 도움이 됩니다. 
  • 새로운 구성원의 빠른 온보딩
    •  페어를 구성하면 지식공유가 용이하므로 새로운 구성원의 온보딩에 도움이 됩니다. 새로운 구성원은 페어링을 통해 프로젝트, 도메인 및 조직에 대해 알 수 있습니다.
      • 실무에 적용하기 위한 팁
         단순히 새로운 구성원을 페어링에 포함시키는것만으로는 충분하지 않습니다. 첫 번째 페어링 전에 큰 그림과 컨텍스트를 제공하고, 추가 시간을 할애하여 온보딩하십시오. 이렇게 하면 페어링 중에 더 쉽게 따라하고 기여할 수 있습니다. 페어링할 때는 항상 새로운 구성원의 컴퓨터를 사용하여 구성원이 스스로 일할수 있도록 설정되어 있는지 확인하세요.

페어 프로그래밍을 적용하다 만날수 있는 문제상황들 

  • 페어링을 하다 지칠 수 있습니다.
    •  혼자 일할때는 원할때마다 잠시 멈추거나 휴식을 취할 수 있지만, 페어링은 여러분이 더 긴 시간동안 집중하도록 강요합니다. 집중도가 증가한다는것은 페어링의 이점 중 하나이지만, 여러분을 상당히 지치게 만들수도 있습니다.
      • 문제상황을 해결하기 위한 팁
         정기적으로 휴식시간을 갖도록 노력하세요. 만약 정기적으로 휴식시간을 갖는것을 자주 잊는다면 이전에 설명한 뽀모도로기법과 같은 시간관리 기술을 적용해보세요.
  • 다른이와 긴밀하게 협업하는건 힘이듭니다.
    •  긴 시간동안 다른 사람과 끊임없이 소통하면서 긴밀하게 일하는것은 높은 공감능력과 대인관계 능력을 필요로 합니다. 기술에 대한 지식, 성격 또는 문제해결을 위한 접근방법에서 차이가 있을 수 있고, 이를 맞춰가는 과정이 순조롭지 않을수도 있습니다.
      • 문제상황을 해결하기 위한 팁
         페어링 시작시 "어떻게 함께 작업할까요?", "어떻게 페어링할까요?" 와 같은 질문을 통해 서로의 스타일 차이를 이해하고 계획을 세울수 있는 시간을 확보하세요. 또한 하루의 페어링이 끝나면 서로에 대한 짧은 피드백이나 회고를 나눕니다. "무엇이 당신을 피곤하게 했나요?", "오늘의 목표를 달성했나요?", "다음에 해보고 싶은게 있어요?" 등의 피드백을 주는것을 일상화하고 피드백을 주고받는것을 연습합니다.
  • 미팅에 의한 방해
    •  회의로 가득찬 하루를 보내고, 아무것도 하지 않고 있다는 느낌을 받은적 있습니까? 미팅은 문제를 해결하기위해 토론하고, 계획하고, 합의하기 위해 필요하지만, 다른 한편으로는 문제 해결을 위한 실행을 방해합니다. 팀이 페어링을 연습할때 너무 많은 미팅은 페어링에 방해가 되고, 만약 각 파트너들이 서로 다른시간대에 미팅이 있는경우 이러한 방해시간은 더욱 증가합니다.
      • 문제상황을 해결하기 위한 팁
         페어링 구성원들끼리 페어링 핵심시간을 정의하거나 "오후에는 회의없음"과 같은 규칙을 적용하여 회의가 발생하는 시간을 제한합니다.
  • 기술 숙련도의 차이
    •  경험수준이 다른 두 사람이 하나의 과제를 위해 페어링을 했을때 종종 자신의 능력에 대한 자심감을 잃을수 있습니다. 
      • 문제상황을 해결하기 위한 팁
         주제에 대한 경험이 적은경우 해결책에 별로 기여할 수 없다고 생각하지 마세요. 당신은 페어링 내내 꼼짝못하고 있을수도 있지만 다른 관점의 더 나은 해결책을 찾도록 도움을 줄 수도 있습니다. 또한 이해한것에 대해 적극적으로 설명하세요. 개념을 설명해야 하는것은 여러분이 정말로 그것을 이해하고 있는지 확인 할 수 있는 좋은 기회라는것을 기억하세요.
  • 모르는 분야에 대한 페어링
    •  두 사람이 모두 문제를 해결하는 방법을 알지 못하는 상황일때 일반적인 페어링 스타일은 제대로 작동하지 않는 경우가 많습니다. 처음으로 기술을 적용하거나 새로운 접근방식을 시도해야 할때는 페어링을 통해 함께 연구하고 실험하는것이 가능하긴 하지만 효과적이지 않습니다.
      • 문제상황을 해결하기 위한 팁
         작업을 시작하기전에 주제에 대해 조사하고, 기술을 배우기 위해 별도의 시간을 할애하세요. 이러한 작업은 이전 포스팅에 언급한 [조사하기] 를 참고하세요.
  • 관리자 및 동료설득
    •  페어 프로그래밍을 지지하는 사람들은 종종 관리자나 동료들에게 페어링을 팀의 일상적인 문화중 하나로 만들도록 설득하기 위해 고군분투합니다.
      • 문제상황을 해결하기 위한 팁
         간단한 방법은 없습니다. 핵심은 항상 페어 프로그래밍이 무엇인지 먼저 말하고, 구성원들이 같은 이해를 갖도록 노력하는 것입니다. 한쌍의 페어링부터 시도해보고, 다음에는 한쌍의 페어링이 다른 페어링과 경험을 공유하는 것으로 점차 확장하세요. 결국 여러분은 이것이 효과가 있다는것을 관리자 및 동료에게 보여줘야하고 그렇게하는 유일한 방법은 시도하는 것 입니다.

오늘은 여기까지~!

 

누군가에게 도움이 되었길 바라면서 오늘의 포스팅 끝~