‘협업의 기술 (Team Geek A Software Developer’s Guide to Working Well with Others)’

게시자: aro2jongwonlee

지은이: 브라이언 피츠패트릭 (Brian W. Fitzpatrick), 벤 콜린스-서스먼 (Ben Collins-Sussman)

옮긴이: 장현희

출판사: 제이펍 (jpub)

이 책은 소프트웨어 개발자들간의 협업에 대한 이야기를 다룬다. 내용을 보면 개발 팀 관리에서 사용자 관리(?)까지 이 책에서 다루고 있다. 두 지은이가 꽤 오랜시간동안 경험해 온 이야기들을 잘 정리하여 여러 컨퍼런스 및 실전에서 써먹기까지 한 이야기들이라 현실적이라 말하고 있고, 내 생각에도 꽤 적용할 만한 내용들이 많다.

아쉽다면 번역이 잘된 편이기는 하지만 군데군데 내용 전개가 자연스럽지 못한 곳이 좀 있고, 그러다보니 내용이 잘 이해가 안되는 곳이 있다. 두 번 정도 읽으니 그런 곳도 이해가 되기는 한다. 그리고 외국 사례이고, 그것도 주로 구글과 SVN 개발 관련 사례다보니 우리의 현실과는 좀 다른 것도 있다. 그런 내용은 각자가 알아서 각자의 현실에 맞게 적당히 적용하는 것으로…


그룹프로젝트

차례

  1. 천재 프로그래머의 전설
    • 내 코드를 숨길 수 있게 도와주세요
    • 천재의 전설

      아직 마무리하지 못한 일을 다른 사람이 본다는 건 아주 불안한 일이죠. 다른 사람들이 진지하게 나를 판단하고 나를 바보라고 생각하는 것만큼이요.

    • 숨긴다는 것은 해로운 것이다
    • 결국은 팀이다

      소프트웨어 개발은 팀 스포츠이다.

    • 세 개의 기둥
      • 겸손(Humility)
          당신은 우주의 중심이 아니다. 또한, 전지전능하지도 않으며 항상 성공하는 것도 아니다. 자기 개선에 대해 항상 열려 있어야 한다.
      • 존중(Respect)
          당신은 함께 일하는 사람을 진심으로 존중할 수이썽야 한다. 그들을 인간으로 대하고, 그들의 능력과 업적에 감사해야 한다.
      • 신뢰(Trust)
          함께 일하는 사람들은 숙련된 인력이며, 항상 옳은 일을 할 것이라 믿고 적절하게 그들을 운영할 수 있어야 한다.

      모든 사회적 충돌은 대부분 겸손과 존중, 신뢰의 부족으로 인해 발생한다

    • HRT 실습
      • 자존심 버리기

        ‘겸손해진다는 것’은 누군가에게 당하기만 하는 것과는 다르다. 자신감을 갖는 것은 잘못된 것은 아니다. 단지 아는 체하는 행동을 삼가라는 뜻이다. 당신 자신이 현명한지 아닌지에 대해 걱정하는 것보다는 팀의 목표를 설정하고 조직의 자부심을 높일 수 있도록 ‘집단적’ 자부심에 대해 고려하는 것이 훨씬 낫다.

      • 베푸는 방법과 비판을 받아 들이는 방법 모두 배우기

        무엇보다 가장 중요한 것은 존중이 묻어나야 한다. 건설적인 비판을 하는 사람들은 진정 다른 사람을 위하며, 그 대상이나 대상이 하는 일이 향상되기를 원한다. 당신의 동료를 존중하고 건설적인 비판을 하되, 예의를 갖추는 법을 배워야 한다. 누군가를 진정으로 배려하는 마음이 있다면 요령껏 유용한 표현을 선택하게 될 것이다. 하지만 이 기술은 많은 연습을 거쳐야 얻을 수 있다.

        “이봐, 나는 이 부분의 흐름 제어가 약간 혼란스러운 것 같아. 여기에 xyzzy 코드 패턴을 적용하면 좀 더 명확하고 유지보수가 쉬워지지 않을까?”

      • 빨리 실패하라, 그것에서 배워라, 그리고 반복하라
      • 학습을 위한 시간을 아끼지 마라
      • 인내하라
      • 주변으로부터 영향을 받아들여라
    • 다음장에서는
  2. 환상적인 팀 문화는 어떻게 만들까
    • 문화란 무엇인가?

      당신의 팀 문화는 좋은 사워도우 덩어리와 같다. 당신이 배양한 씨균(당신의 종자)이 당신의 도우(즉, 새로운 구성원)에게 주입되어 이스트균과 박테리아(당신의 팀 구성원)와 함께 성장함에 따라, 마침내 훌륭한 빵 덩어리(당신의 팀)가 탄생하게 되는 것이다.

    • 왜 당신이 관심을 가져야 하는가?

      팀 문화에 있어 흥미로운 점은, 매우 강력하게 정의된 문화를 구축한다면 그 문화가 스스로 선택을 하게 될 것이라는 점이다. 오픈 소스 세계에서 HRT원칙을 근간으로 깔끔하고, 고급스러우며, 유지보수가 쉬운 코드를 작성하는 것을 중시하는 프로젝트는 그들이 존경하고, 신뢰하며, 깔끔하고, 고급스러우며, 유지보수가 쉬운 코드를 작성하는 사람들과 일하고 싶어 하는 엔지니어들을 매료시킨다.

    • 문화와 사람

      소프트웨어의 세계에서는 제품을 구현하는 엔지니어에게는 뛰어난 창의성을 요구하며, 훌륭한 엔지니어를 원한다면(그리고 그들이 계속해서 업무를 수행하게 하려면), 그들을 위한 문화를 만들고 그들이 안전하게 아이디어를 공유하고 의사 결정에 참여할 수 있도록 해야 한다. 만일 팀 단위 업무를 잘 수행하는 뛰어난 엔지니어를 원한다면, 훌륭한 엔지니어들을 고용하는 것부터 시작해야 한다. 우리가 알고 있는 많은 훌륭한 엔지니어들은 거대한 산업 분야에서 자신들이 뭔가를 더 배울 수 있는 팀에 매력을 느낀다.

    • 성공적인 문화의 의사소통 패턴
    • 높은 수준의 동기화
      • 사명
      • 능률적인 회의
      • ‘지리적으로 협업이 어려운’ 팀에서 일하기
      • 디자인 문서
    • 일상적인 논의
      • 메일링 리스트
      • 온라인 채팅
      • 이슈 추적기 사용하기
    • 엔지니어링의 일부로서의 의사소통
      • 코드 주석
      • 소스 코드에 자신의 이름 넣기(‘작성자 태그’ 이슈)
      • 모든 커밋에 대해 코드 리뷰 요구하기
      • 실제 테스트와 릴리즈 프로세스 수립하기
    • 결국은 코드에 대한 것이다
  3. 모든 배에는 선장이 필요하다
    • 공백에 대한 본질적인 혐오감
    • @비난받는 관리자
      • 리더‘는 새로운 ‘관리자‘이다

        전통적인 관리자들은 일을 어떻게 할 것인지를 고민하는 반면, 리더는 무엇을 할 것이지를 고민한다. 그리고 그 일을 해낼 방법을 찾기 위해 그들의 팀을 신뢰한다.

      • 유일하게 무서운 것은… 글쎄, 모든것
    • 헌신적인 리더

      관리자의 가장 중요한 역할이 가정의 건강과 행복을 추가하는 집사처럼 팀에 봉사하는 것이며, 우리가 ‘헌신적인 리더십‘이라고 부르는 덕목을 적극 수용하는 것이다. 헌신적인 리더로서 당신은 겸손과 존중, 그리고 신뢰가 공존하는 분위기 형성에 주력해야 한다. 이는 엔지니어 스스로는 버릴 수 없는 관료주의적 장애물을 제거하고, 팀이 합의를 이끌어 내는 데 도움을 주거나, 심지어는 늦은 시간까지 일하는 팀을 위해 저녁을 사는 것을의미할 수도 있다. 헌신적인 리더는 팀의 균열을 방지할 뿐 아니라 필요한 때 조언을 하기도 하지만, 자신의 손을 더럽히는 것을 두려워하지도 않는다. 헌신적인 리더가 수행하는 유일한 관리한 팀의 기술적, 사회적 건전함을 관리하는 것이다.

    • 안티패턴
      • 안티패턴: 무능력한 구성원의 고용
      • 안티패턴: 저성과자들에 대한 무시
      • 안티패턴: 사람사이의 이슈에 대한 무시
      • 안티패턴: 모든 이들의 친구되기
      • 안티패턴: 고용 기준과 타협하기
      • 안티패턴: 팀을 아이 취급하기
    • 리더십 패턴
      • 자존심을 버려라
      • 선사가 되어라

        당신에게 조언을 구하는 엔지니어는 당신이 그의 문제를 해결해 주는 것을 원하는 게 아니라 그가 문제를 해결할 수 있도록 도와주기를 원하는 것이며, 그가 원하는 도움을 주는 가장 쉬운 방법은 그에게 질문을 하는 것이다.

      • 촉매가 되어라
      • 스승이자 멘토가 되어라
      • 명확한 목표를 설정하라
      • 정직하라
      • 행복을 관찰하라
      • 그 외의 팁과 요령

        최고의 엔지니어들을 (그들의 바람과는 반대로) 관리자 역할로 밀어 넣는 회사들을 볼 때마다 우리 필자들은 항상 놀라곤 한다. 대부분은 그 결과로, 팀은 유능한 엔지니어를 잃는 대신에 수준 이하의 관리자를 얻게 된다.

        새로운 물결을 일으킬 때를 알아야 한다.

        기다린다는 것은 프로세스에 필연적으로 발생할 엄청난 피해를 잠시 연기시키는 것 빡에 되지 않는다. 따라서 행동해야 하며, 그것도 빨리 행동해야 한다.

    • 사람은 식물과 같다

      서로 다른 엔지니어를 키우기 위해서는 서로 다른 것들이 필요하다.

      • 내적 동기부여와 외적 동기부여
    • 최종 의견
  4. 유해한 사람들과 협업하기
    • ‘유해함’의 정의
    • 팀 강화하기
    • 위협 감지하기
      • 다른 사람의 시간을 존중하지 않기
      • 자존심
      • 과도한 특권의식
      • 어수룩한 또는 혼란스러운 커뮤니케이션
      • 피해망상
      • 완벽주의
    • 유해함 무찌르기
      • 완벽주의자의 에너지를 다른 곳으로 돌리기
      • 에너지를 좀먹는 녀석들한테는 먹이를 주면 안된다
      • 너무 감성적이 되지 말 것
      • 분노 속에 담긴 진실을 주목하라
      • 친절함으로 괴물들을 물리쳐라
      • 포기할 때를 알아야 한다
      • 멀리 내다보라
    • 최종 의견

      어리석음으로 충분히 설명될 수 있는 일을 악의의 탓으로 돌리지 마라 – Robert J. Hanlon

  5. 조직 관리 기술
    • 장점과 단점, 그리고 전략
    • 이상: 팀이 회사 내에서 어떤 기능을 해야 하는가?
      • 이상적인 관리자와 함께하는 삶

        만일 당신의 관리자가 HRT 원칙을 이해하는 헌신적인 리더이며 당신의 성공을 돕는 것에 관심이 있는 사람이라면 몇 가지 간단한 일을 통해 당신의 관리자가 자신의 역할을 쉽게 수행할 수 있도록 도울 수 있으며, 그 덕분에 당신 자신이 더욱 생산적이고 가치있는 팀 구성원이 될 수 있다. 일을 처리할 때 더 많은 책임감을 갖자. 위험을 감수하고 실패를 두려워하지 말자. 성인으로서 행동하자. 당신이 확신하지 못하는 일에 대해서는 질문을 하자.

    • 현실: 당신의 주변 상황이 당신의 성공에 방해가 될 때

      행복한 가정은 대부분 비슷하다. 모든 불행한 가정은 각자 나름대로 불행하다. – Leo Tolstoy, Anna Karenina

      • 좋지 않은 관리자와 함께하는 삶
      • 조직 내에서 정치를 일삼는 사람들
      • 좋지 않은 조직
    • 조직 관리하기
      • 권한보다는 용서를 구하는 것이 쉽다
      • 길을 얻을 수 없다면 길을 만들자
      • 관리 역량 향상을 위해 학습하자
      • 행운과 호의의 경제학
      • 안전한 위치까지 승진하기
      • 힘 있는 친구를 찾을 것
      • 바쁜 임원에게 부탁할 때는 메일을 사용하자
    • 두 번째 계획: 퇴사하기
      • 옳은 일을 하고 해고될 때를 기다리자
    • 전혀 희망이 없는 것은 아니다
  6. 사용자도 사람이다
    • 대중적 인지도 관리하기
      • 첫 인상에 주목하라
      • 적게 약속하고 더 많이 주자
      • 업계의 분석가들을 존중하며 일하자
      • 당신의 소프트웨어의 사용성은 어느 정도인가?
      • 대상을 선택하라
      • 진입 장벽에 대해 고민하자
      • 사용자가 아니라 사용성을 측정하자
      • 속도의 문제
      • 모든 것을 제공하려고 하지 말자
      • 게을러지지 말자
      • 복잡함을 숨기자
    • 사용자와의 관계 관리하기

      사용자들은 무엇보다도 자신들의 말을 들어주기를 원한다

      • 잘난 체하지 말자
      • 인내심을 갖자
      • 신뢰와 즐거움을 만들자
      • 사용자를 기억하자

        마케팅: 사람들이 당신의 소프트웨어를 어떻게 인식하고 있는지 알고 있으며, 사람들이 인지할 수 있도록 개입 여부를 결정한다.

        사용성: 소프트웨어는 사용하기 쉽고, 빠르고, 친숙하며, 접근이 쉬워야 한다. 그렇지못하면 사용자들은 떠나게 될 것이다.

        고객 서비스: 장기 고객들과의 적극적인 교류는 소프트웨어의 혁신과 사용자 확보에 영향을 끼친다.

Advertisements