2부 사회 활동으로 보는 프로그래밍
프로그래머는 보통 고립된 상태에서 일하지 않는다. … 그러나 다른 프로그래머와 함께 일할 때에도 그들 간에는 다양한 관계가 존재할 수 있다. 그 관계를 연구하고자 우리는 프로그래머의 집단을 그룹과 팀, 프로젝트, 이렇게 세가지로 구별할 것이다. 간략하게 정의하면, 그룹은 같은 장소에서 일하는 프로그래머 집단이다. … 반면에 프로그래밍 팀은 한 프로그램을 개발하기 위해 함께 일하는 프로그래머 집단이다. … 프로젝트는 프로그래머 그룹에 하나로 통합된 시스템(또는 적어도 긴밀하게 짜인 프로그램들)을 만들어 내는 지원 활동을 더한 것이다. 프로젝트에는 보통 전용 기계가 있고, 더불어 시스템 작업, 표준화, 문서화 등의 부차 기능을 담당하는 특별 팀들이 포함된다. 그리고 보통 프로젝트 관리자와 관료주의적인 정규 조직도(흡사 군대 같은) 추가된다.
2부에 보태는 글:
이제는 프로그래밍 팀이란 더 나은 제품들을 만들기 위해 함께 일하는 프로그래머들의 모임이라 하겠다. 달리 말하자면, 팀은 제품을 만들기 위해 구성원들이 함께 일한다는 점에서 그룹과 차별된다(이때 제품이란 프로그래머가 각자 따로 일해서는 만들 수 없거나 또는 팀을 이룰 때만큼 효율적으로 만들 수 없는 수준의 것을 의미한다). 어떤 그룹이 제품 하나를 개발하는 데 참여한다고 해서 팀이라 볼 수 있는 것은 아니다. 또, 구성원 각자가 별도의 제품을 만든다 해도(흔한 경우는 아니지만) 팀은 팀인 반면에, 그룹은 같은 장소에서 일하며 같은 관리자 밑에 있다는 점만 제외하고는 구성원들이 서로 공유하는 바가 없다.
그러나 결국 팀과 그룹의 차별성은 구성원들의 배우는 방식에 있다. … 팀에게는 항상 공통의 목표 즉, 구성원이 서로 가르치고 배워 각자 더 나은 능력을 가질 수 있도록 한다는 목표가 있다. 제품과는 상관없이 말이다.
“그렇다면 기업에서 제품 개발을 위해 그룹보다는 팀을 만들도록 돕는 데 이 기준이 쓰일 수 있을까요? 그리고 무엇을 배우게 될까요? 더 나은 프로그램을 만드는 방법? 더 잘 듣는 방법? 의사소통을 더 잘하는 방법? 자신에 대해 더 좋은 감정을 느끼는 방법? 저는 이 질문들에 관한 답이 모두 ‘네’라고 생각합니다.
제가 고객들에게 팀의 일원으로 가장 좋았던 경험을 물을 때 가장 자주 듣는 대답은 가족 같았다는 말입니다. 추수감사절 즈음의 가족 말이죠. 모두 뭔가를 만들어 식탁에 내어 놓습니다. 그리고 서로 나누며 축하하죠. 저는 건전한 팀에게 있는 또 하나의 특징은 스스로 영속시키는 데 있다고 봅니다. 그런 팀의 구성원 중 하나가 또 다른 팀을 만들어 원래 팀에서 배웠던 가치와 관습을 이어가는 것이죠.”
-> 가족같은 팀. 스스로 영속되고 싶어하는 팀. 내가 만들 팀!