3장 커뮤니케이션

2023.12.18

3.1 협업 팀워크

  • 21세기에는 팀워크라는 단어가 매우 많이 사용되고 있다. 크고 위험한 소프트웨어 프로젝트를 성공적으로 끝내기 위해서는 팀워크가 필요하다. 팀워크는 매일매일 서로에게 동기를 부여하면서 계속 일할 수 있도록 한다. 팀워크는 한 개인의 학습, 한 팀으로서의 학습, 그리 고 팀 간의 학습에도 필요하다.

3.1.1 카메라타의 성공 요인

  • 르네상스의 음악가들과 그레고리 베이트슨의 사이버네틱스 아이디어를 프로그래밍과 연결시킨 제시카 커의 2018년 블로그 게시물 덕분에 프로그래머들 사이에서 카메라타라는 용어가 꽤 유명해졌다. 제시카 커는 소프트웨어 엔지니어링을 성공적인 미래로 이끌기 위해서는 카메라타의 방법을 배워야 한다고 말한다.
  • 카메라타가 하려고 했던 것
    • 해결해야할 문제를 가지고 있었고 이 문제를 서로 공유하고 있었다.
    • 문제뿐만 아니라 모든 개인의 지식도 공유되었다.
    • 살아 있는 시스템이었다. 각 부분은 서로 그리고 환경과 상호 연결되어 있다. ( 끝없는 피드백 루프처럼 )
    • 단순한 피드백뿐만이 아닌 비판적인 피드백을 주고 받았다.
  • 그레고리 베이트슨의 딸인 노라 베이트슨은 시마테시이라는 용어를 도입하였다.
symmathesy = sym(함께) + mathesi(배우다);

3.1.2 드림 팀

  • 카메라타 같은 집단은 더 큰 문제를 더 빨리 파악하고 해결할 뿐만 아니라 정서적 몰입도도 높여 준다.
  • 동료들과 잘 어울릴 뿐만 아니라 창의성이 뛰어난 제품을 지속해서 만들어 내는 팀은 드림 팀이다.
  • 소프트웨어 개발 업계의 다른 베테랑들도 그룹 역동성의 중요성에 대한 더 많은 증거를 제시한다. 애덤 바(Adam Barr, 마이크로소프트), 데이비드 하이네마이어 한손(David Heinemeier Hansson, 루비 온 레일즈 Ruby on Rails, 베이스캠프, BaseCamp), 게르게이 오로츠(Gergely Oros, 우버, 스카이프)는 모두 자신들이 속해 있었던 이전 팀의 성공 사례 인터뷰에서 암묵적으로 또는 명시적으로 자신의 팀을 드림 팀이라고 부릅니다
  • 꼭 과거에 대한 향수가 아니더라도 팀 친화, 방법, 구성, 영향 등에 관한 수많은 학술 논문이 뒷받침하고 있는 만큼 그 이면에 진실이 있다고 가정하는 편이 안전하다고 생각한다.

3.2 집단 지리학

3.2.1 유동적 네트워크

  • 혁신 전문가이자 과학 커뮤니케이터인 스티브 존슨은 아이디어의 탄생, 성공, 소멸을 유동적 네트워크로 요약할 수 있다고 설명한다.
  • 아이디어가 확산하려면 네트워크가 굳어지지 않고 유동적인 상태를 유지해야 한다. 이게 잘 되지 않으면 혁신이 정체되고 최악의 경우 진화가 퇴보로 이어질 수 있기 때문이다.
  • 외부의 아이디어를 수용하되 지나치게 수용하지 않는 것이 창의적인 업적을 이룰 가능성을 높인다.
  • 시간을 들여 아이디어를 요약하거나 결합하려는 노력 없이 거친 아이디어가 쏟아져 나오기만 한다면 허공으로 흩어져 버리고 끝날 가능성이 높다. 반면에 아이디어가 충분하지 않거나 같은 아이디어가 너무 많으면 창의적인 아이디어로 이어지지 않는다. 창의적인 집단을 구성할 때는 이 두 가지 극단 사이에 놓여 있는 유동적인 네트워크여야 한다.
  • 스티븐 존슨에 따르면 사람들이 방문하고, 일하고, 생활하는 장소 역시 고정되거나 유동적인 네트워크일 수 있다. 즉, 지리가 성공적인 창의성을 결정하는 요인이 된다는 것이다. 시골에서 자랐다면 '창의적인 일이 일어나는 곳으로 이사하지 않는 한 창의적인 성공을 거둘 가능성은 희박하다.

3.2.2 창의성은 전염된다

  • 창의적인 동료가 곁에 있는 것만으로도 창의력을 발휘하고 싶은 충동이 높아진다.
  • 인간은 사회적 동물이며 우리의 뇌는 어떤 행동이든 모방하도록 미리 연결되어 있다.
  • 창의적인 프로그래머들과 함께 있으면 ‘그들 중 한 명’이 될 확률이 높아진다. 이는 실용주의 프로그래머인 앤디 헌트와 데이비드 토머스가 프로그래밍 세계에 도입한 깨진 유리창 이론과 매우 흡사하게 들린다.

3.2.3 자극적인 환경으로 전환하기

  • 구글 대변인은 뉴욕 타임스와의 인터뷰에서 자극적인 환경의 매력 때문에 개발자들이 ‘직장의 한계를 뛰어넘는’ 구글 같은 하이테크 캠퍼스로 몰려든다고 말한다. 직원 간의 우연한, 하지만 세심하게 설계된 충돌은 창의성과 생산성을 모두 이끌어 낸다.

3.2.4 천재 클러스터

  • 창의성 클러스터는 특정 지역에 권력이 집중되거나 상실됨에 따라 나타났다가 사라지기도 한다.
  • 와이너라는 사람이 연구한 대부분의 천재는 태어난 곳에서 천재가 된 것이 아니라 이민자가 된 후에야 천재성을 발휘했다. 천재는 태어나지 않고 만들어진다. 조건이 맞으면 천재들은 장 팅겔리처럼 특정 장소에 끌리게 된다.
  • 도시 계획가와 건축가들은 도시학 이론가 리처드 플로리다의 저서 The Rise of the Creative Class에서 다음과 같은 구절을 즐겨 인용한다.

인재풀을 제공하는 것은 기업이 아니라 장소이다.

3.3 시간 내 창의적인 작업

  • 시간은 지리와 더불어 창의성을 촉진하거나 방해하는 또 다른 주요 오소이다.
  • 우리는 빈센트 반 고흐가 화가로서 생계를 꾸려가며 겪었던 불운에 대해 알고 있다. 새로운 기법이나 아이디어는 우스꽝스러운 것으로 간주되어 즉시 거부되는 것이 예술의 전형적인 모습이다.

3.3.1 채택 곡선

  • 새로운 아이디어, 제품, 관행이 널리 퍼지려면 시간이 걸린다. 이러한 사실은 1943년 잡종 옥수수의 확산에 관한 고전적인 연구를 발표한 농업 연구자 브라이스 라이언과 닐 그로스에 의해 널리 알려졌다.
  • 이 연구는 다음과 같은 사실을 밝혀냈다.
    • 새로운 옥수수 품종의 도입은 새로운 것을 시도해 보고자 하는 소수의 농부로부터 시작되었다. 이후 혁신은 다른 농부들에게 이어졌다.
    • 가장 영향력이 큰 요인은 이웃 농부들이었다. 잡종 옥수수를 도입한 농부들을 보고 이야기를 나누면서 그들도 잡종 옥수수를 도입했다.
  • 혁신 곡선은 비지니스와 마케팅에서 신제품이 점진적으로 채택되는 과정을 설명하기 위해 여전히 널리 사용된다. 이론적으로는 혁신가와 얼리 어댑터가 초기 시장 및 후기의 성숙한 시장에서 승리할 수 있도록 돕는다.

3.4 창의적인 흐름이 방해받을 때

3.4.1 사회적 부채

  • 행동 소프트웨어 공학 연구원인 데미안 탐부리는 소프트웨어 개발 팀의 잘못된 커뮤니케이션을 사회적 부채라는 특별한 단어로 표현했다. 이 단어를 본 순간 가장 먼저 떠오르는 단어는 아마도 기술 부채일 것이다.
  • 소프트웨어 개발자로서 우리는 오래된 코드나 레거시 코드로 작업할 때 기술 부채와 그로 인해 발생하는 많은 코드 문제를 잘 알고 있다.
    • 운이 좋으면 코드 스멜의 일부가 결국 기술적인 사용자 스토리로 변환되어 스프린트로 들어가 개선될 것이다.
    • 운이 나쁘다면 코드 스멜은 또 다른 코드 스멜을 생산하고, 어느새 상황은 완전히 통제 불능인 상태로 바뀌어 있을 것이다.

3.4.2 기술적 부채에서 사회적 부채까지

  • 기술적 부채는 코드에 @TechnicalDebt라는 어노테이션을 달 수 있지만, 개발 팀의 사회적 문제는 어떨까?
  • 우리 모두는 이것이 팀 성과에 심각한 영향을 미친다는 것을 알고 있다. 몇 가지 단순한 코드 스멜보다 훨씬 더 심각한 영향을 미치기 때문에 이것을 피하거나, 가능하다면 고쳐야 한다.
  • 또한 코드 스멜과 마찬가지로 커뮤니티 스멜에 대해서도 암묵적으로 알고 있다.
  • 커뮤니티 스멜은 커뮤니티에서 반복적으로 나타나 팀의 창의적인 노력에 부정적인 영향을 미치는 안티 패턴이다.
  • 사회적 부채와 커뮤니티 스멜이라는 용어는 기술 부채 그리고 코드 스멜과 완벽히 어울린다.

3.4.3 커뮤니티 스멜

  • 데미안 탐부리와 그의 팀이 많은 실무자와의 인터뷰를 통해 파악한 커뮤니티 스멜은 다음과 같다.
    • 시간 왜곡: 커뮤니케이션에 필요한 시간을 줄여 주고 조정이 필요하지 않다고 잘못 생각하게 만드는 조직의 재구성. 그 결과 문제는 여전히 해결되지 않고, 코드 스멜이 있으며, 소프트웨어 품질은 저하됨.
    • 인지 차이: 물리적, 기술적, 사회적 수준에서 동료 간에 인지되는 차이로 불신, 오해, 시간 낭비를 유발함.
    • 신규 팀원 무임승차: 신입 팀원을 혼자 남겨 두어 짜증과 높은 업무 부담을 유발하는 현상.
    • 권력 간격: 책임감이 낮은 팀원이 권한을 더 많이 가진 팀원에 대해 인식하고 수용하고 기대하는 간격으로 지식 공유를 방해함.
    • 비관여: 확인되지 않은 가정과 참여 부족으로 인해 제품이 성숙하지 않은데도 출시할 수 있을 만큼 성숙했다고 생각하는 것.
    • 까다로운 구성원 : 팀 내에서 극도로 까다롭고 무의미할 정도로 정확성을 추구하는 사람들로 인해 초래되는 불필요한 지연과 좌절감.
    • 요리책 개발: 요리사가 자신의 요리책에 있는 요리만 만들듯이, 자신의 방식에 갇혀 새로운 기술과 새로 운 아이디어에 적응하기를 거부하는 프로그래머.
    • 제도적 동일성: 서로 다른 팀 간의 프로세스 및 프레임워크를 강제로 동일하게 만들려고 할 때 초래되는 유연성, 사기 진작 협업의 저하를 가져옴.
    • 과잉 커뮤니티: 모든 것이 끊임없이 변화하는 지나치게 불안정한 아이디어 환경으로 인해 버그가 많은 소프트웨어를 생성.
    • 데브옵스 충돌: 개발 팀과 운영 팀의 엄격한 분리, 심지어 지리적으로도 분리되어 있어 문화적으로 충돌하고 신뢰 부족을 초래하는 경우.
    • 비공식 과잉: 프로토콜의 총체적 부재로 인한 과도한 비공식성과 이로 인한 책임감의 저하.
    • 비학습: 오래된 직원들이 새로운 기술을 받아들이지 않아 새로운 지식과 관행이 사라지는 현상.
    • 고독한 늑대: 다른 사람의 의견을 고려하지 않고 독단적으로 행동하는 팀원.
    • 블랙 클라우드: 팀 내 또는 팀 간에 정보를 관리할 명확한 방법이 없는 상황에서 정보 과부하로 인해 잠재적으로 훌륭한 아이디어가 손실되는 경우.
  • 우리는 기술이 아닌 사람과 함께 일한다. 즉 팀에서 프로그래밍할 때는 단순한 코드 스멜보다 커뮤니티 스멜에 더 많은 주의를 기울여야 한다.
  • 팀에 좋은 분위기가 만들어진다는 것은 시스템과 상호 작용하는 모든 사람의 누적된 노력 그리고 모든 사람과 상호 작용하는 시스템의 결과물이다. 그렇기 때문에 비기술 직군을 포함한 팀원 모두가 사회적 부채와 커뮤니티 스멜의 개념에 익숙해져야 한다.

3.4.4 사회적 부채에서 벗어나기

  • 팀에 기인한 문제를 식별하고 최소하는 방법.
    • 책임 공유
    • 페어프로그래밍
  • 책임을 공유하면 인지 차이, 권력 간격, 데브옵스 충돌, 비관여와 같은 커뮤니티 스멜을 최소화할 수 있다.
  • 사회적 부채를 완화하는 또 다른 방법은 페어 프로그래밍을 효과적으로 사용하는 것이다. 페어 프로그래밍을 통해 고독한 늑대, 비학습, 요리책 개발, 신규 팀원 무임승차와 같은 스멜 요소를 효과적으로 피할 수 있다.
  • 페어 프로그래밍은 사회적 부채를 줄이는 데만 도움이 되는 것은 아니다. 장기적으로는 집단 학습을 통해 통찰력을 촉진하고 두 사람이 함께 작업하면서 더 높은 품질의 코드를 작성하며, 숙련된 코더와 소프트웨어 공학 학생 모두에게 작업에 대한 행복감과 자신감을 높이는 효과 등을 기대할 수 있다.
  • 페어프로그래밍이 프로그래머를 행복하게 만든다면, 그 행복감의 결과는 창의력 향상이다.
  • 하지만 고용주가 직원의 행복에 관심을 갖는 유일한 이유는 업무 성과, 즉 복잡한 문제를 해결할 수 있는 창의적인 능력 때문이라는 사실을 잊지 말아라.
  • 행복과 창의성의 관계는 강화된 피드백 루프 기능을 가지며, 창의성이 높아지면 행복도 높아진다.

3.5 요약

  • 집단적 창의성은 개인의 창의적 노력을 크게 높여 준다.
  • 같은 생각을 가진 다양한 사람들과 함께 커뮤니티에 참여하여 자신과 다른 사람들의 작업에 대해 토론하고 개선해라.
  • 이러한 집단은 창의적인 지역 또는 천재 집단으로 유기적으로 모이는 경향이 있다. 천재 클러스터를 인위적으로 설계하기는 매우 어려운 것으로 입증되었다.
  • 시간은 지리와 더불어 잠재적으로 창의성을 촉진하거나 방해하는 또 다른 주요 요인이다. 혁신 곡선은 아이디어가 확산하는 데 시간이 걸린다는 사실을 알려준다.
  • 상호 학습에 참여하는 행동은 단어에서 알 수 있듯이 교육생과 강사 모두에게 유익하다. 상호 학습은 자식을 일방적으로 전달하거나 받는 것보다 훨씬 더 효과적이다.
  • 여러 영역과 그룹에서 아이디어를 주고받도록 노력하자. 자신이 알고 있는 것에만 관심을 두지 마라. 전문가를 찾고, 시야를 넓히자.
  • 창의성은 체계적이다. 창의성은 부분과 전체를 합친 것 이상의 복잡한 (살아 있는) 시스템이다.
  • 반향실 효과를 피하려면 다른 사람의 의견을 무비판적으로 반영하기보다는 비판적 피드백을 진정성 있게 제공하고 이를 환영해야 한다.
  • 일하거나 모임에 참석할 때 자신이 어떤 종류의 네트워크에 속해 있는지 염두에 두자. 아이디어가 정체되어 있나? 빠른 속도로 서로를 쫓아 가느라 정신이 없나? 아니면 효과적으로 확산되고 있나?
  • 소프트웨어 개발 팀의 창의적인 흐름은 사회적 부채로 인해 쉽게 방해받을 수 있다. 소통은 사회적 부채를 줄이기 위한 핵심 요소이다. 커뮤니티 스멜을 식별하고 이름을 붙이는 것부터 시작하면 좋다.