© 2015 under the Creative Commons BY-NC-SA 3.0 License

Photo by Nick Fewings
This book is available in multiple forms at debuggingteams.com.
It’s also available for purchase in physical hardcopy from O'Reilly Media in a variety of international translations.
Dedication
From Ben
희망과 즐거움을 가져오는, 내게 말과 사람을 읽는 법을 가르쳐주신 부모님께
From Fitz
Alvin 'Nick' Fitzpatrick, 내게 말하는 법을, 그리고 듣는 법을 가르쳐 주신 할아버지께
Mission Statement
이 책의 목적은 사람들이 협력하는 능력을 키움으로 더 많은 시간을 창조에 쓰고, 더 적은 시간을 다투는 데 쓰는 데에 있습니다.
Acknowledgments
표지에는 두 사람의 이름만 올라가 있지만, 이 책은 우리 삶과 커리어 전반에 걸쳐 수백, 아니 수천 명의 사람들과 나눈 대화의 산물입니다. 여기 잠시나마 이 책의 많은 유익한 부분에 책임이 있는 분들께 감사 인사를 전합니다. (늘 그렇듯, 실수는 전적으로 우리의 몫입니다.)
오라일리 미디어의 동료들에게 감사드립니다. 더 넓은 독자를 향해 쓰도록 격려해 준 Mike Loukides, 그리고 두 분의 두려움 없는 편집자 Brian Anderson, Mary Treseler—특히 Mary의 격려와 인내, 때로는 다그침이 없었다면 이 책은 존재하지 못했을 것입니다.
http://sunnibrown.com의 Sunni Brown과 Amber Lewis에게도 감사드립니다. 뛰어난 일러스트로 책에 생명을 불어넣어 주셨습니다. 여러분과 함께 일하는 일은 진정한 기쁨이었습니다.
수많은 제안과 아이디어, 수정으로 책을 단단하게 만들어 준 기술 검토자들에게 감사드립니다. Dustin Boswell, Trevor Foucher, Michael Hunger, Jonathan LeBlanc, Piaw Na, Jack Welch. 원고를 미리 읽고 우리의 뻔뻔한 실수들을 잡아준 친구와 동료들에게도 감사드립니다. Dave Baum, Matt Cutts, Will Robinson, Bill Duane. 그리고 늘 조언을 아끼지 않는 멋진 친구들: Karl Fogel, Jim Blandy, Matt Braithwaite, Danny Berlin, Chris DiBona. 아이디어와 제안을 주신 Linda Stone, DeWitt Clinton, Bruce Johnson, Roland McGrath, Amit Patel께도 감사드립니다.
구글—특히 구글 시카고 엔지니어링 팀—에게도 감사드립니다. 매일 함께 일하는 것 자체가 환상적이었습니다. 여러분의 지원과 아이디어, 제안 덕분입니다.
특별히 우리의 멘토이자 스승인 분들께 감사드립니다. Bill Coughran, Steve Vinter, Alan Eustace, Stu Feldman, Eric Schmidt. 그분들의 지혜 중 작은 일부라도 이 페이지에 담으려 했습니다.
Brian Robinson과 Yvonne Ellison-Sandler에게도 특별한 감사의 마음을 전합니다. 멘토링과 조언, 가르침 덕분입니다.
아파치 소프트웨어 재단(ASF)에도 감사드립니다. 우리를 맞아 주셨을 뿐 아니라, 커뮤니티와 협업에 집중하는 태도 자체가 큰 본보기가 되었습니다.
가까운 모든 친구들에게도 감사합니다. 여러분 덕에 우리는 정말 풍요로운 사람들이 되었습니다. 그렇게 쳐다보지 마세요—본인들이 누군지 알잖아요.
이 책의 많은 부분은 시카고의 사랑스럽고 아늑한 Filter Cafe에서 구상되고 개요가 잡히고 쓰였습니다.
Fitz로 부터
아내 Marie에게 큰 감사를 전합니다. 당신의 격려, 이해, 인내—항상 나에게 영감이 됩니다. 늘 응원해 준 엄마에게도, 그리고 "사람은 식물과 같다"는 비유를 들려준 장모님 Rita Gumler에게도 감사드립니다.
Ben에게: 우리가 서로를 안 지 16년, 세 곳에서 함께 일했고, 세 권의 책을 함께 썼습니다. 매일 같이 일하지 못하는 지금이 아쉽습니다. 이 기묘하고 멋진 여정을 함께해 줘서 고마워요—당신은 훌륭한 친구이자 스승이었습니다.
마지막으로, 내 (어휴) 21년의 소프트웨어 엔지니어링 경력 동안 함께 일한 모든 분들께 감사드립니다. 놀라운 여정이었고, 매일 누군가에게서 무언가를 배웠습니다.
Ben으로 부터
아내 Frances에게 적절한 말을 찾기 어렵습니다. 이 책뿐 아니라 지난 몇 년간 내가 벌인 열두 개쯤 되는 다른 창작 프로젝트들까지도, 그녀가 내게 허락한 '공간’이 없었다면 불가능했을 것입니다. 조용하지만 단단한 그 지지가 없었다면 어떤 것도 일어나지 않았겠죠.
Fitz에게: 이제 우리가 서로의 문장을 마저 이어 줄 정도가 되었으니, 오래된 부부 같다고 해도 되겠지요. 누군가와 함께 발표하는 일이 이렇게 즐거울 줄 몰랐습니다. 소프트웨어를 쓰고 책을 함께 쓰는 일도요. 우리에게 주어진 놀라운 기회들—정말 고마워요. 많은 걸 배웠습니다.
마지막으로, 실리콘밸리의 별난 사람들과 조직들에게도 감사드립니다. 그 기묘한 세계로 나를 들여보내 주지 않았다면, 이 모든 경험은 불가능했을 겁니다.
저자에 관해
Brian Fitzpatrick는 Tock의 창립자이자 CTO입니다. 2005년 Ben과 함께 구글 시카고 엔지니어링 오피스를 시작했고, Data Liberation Front와 Transparency Engineering을 포함한 구글의 여러 글로벌 엔지니어링 노력을 이끌었습니다. 또한 구글의 오픈 데이터 활동의 내부 자문을 맡았고, 그 전에는 Google Code와 Google Affiliate Network 팀을 이끌었습니다. 구글에 합류하기 전에는 Apple, CollabNet, 시카고의 한 로컬 개발사에서 엔지니어로 일했습니다.
Brian은 수많은 글을 쓰고 수십 차례 발표했으며, Team Geek: A Software Developer's Guide to Working Well with Others를 공동 집필했습니다. 또한 Version Control with Subversion (현재 2판), Unix in a Nutshell, Linux in a Nutshell에도 기여했습니다.
Brian은 Loyola University Chicago에서 고전학(라틴 전공, 그리스어 부전공, 순수미술·도자 집중)을 전공했고, 시카고에 거주합니다.
Ben Collins-Sussman은 Subversion 버전 관리 시스템의 창립 개발자 중 한 명입니다. 시카고에서 구글 엔지니어링 오피스를 공동 설립했고, Google Code를 출범시켰으며, 디스플레이 광고 팀 두 곳을 이끌었습니다. 현재는 구글 검색 인프라를 뒷받침하는 팀들을 관리하고 있으며, 시카고 사이트 리드를 맡고 있습니다. 그 외에도 인터랙티브 픽션 집필, 블루그래스 밴조와 재즈 피아노 연주, 뮤지컬 작곡, 아마추어 무선, 사진 등 다양한 취미를 즐깁니다. 시카고 태생으로 University of Chicago에서 수학을 전공(수학 전공, 언어학 부전공)했고, 현재도 아내와 아이들, 고양이들과 함께 시카고에 살고 있습니다.
Foreword to the Second Edition
이 책의 초판인 Team Geek 은 큰 성공을 거두었습니다. 출간된 지 4년 동안 비즈니스에서 팀워크의 중요성에 대한 인식이 더 널리 퍼진 듯합니다. 어떤 곳에서는 협업이 이제 대학 커리큘럼과 리더십 교육 과정의 일부로 가르쳐지고 있으며(종종 이 책을 교재로 씁니다!).
하지만 초판이 소프트웨어 공학에 다소 치우쳐 있었다는 점도 깨달았습니다. 그래서 2판은 비기술 독자도 더 쉽게 접근할 수 있도록 범위를 넓혔고, 그 결과 제목을 Debugging Teams 로 바꾸었습니다. 여전히 공학적 사례를 들긴 하지만, 소프트웨어 개발 도구의 자잘한 세부에는 덜 집중했습니다. 독자들의 지속적인 피드백을 바탕으로 책 전반의 설명을 보강하고 일반화했습니다. 또한 오픈 좌석 배치, 임포스터 증후군, 더 새로운 소통과 리더십 기법 같은 최신 주제도 추가했습니다. 이러한 확장이 여러 산업 전반에서 더 넓은 공감과 영향을 낳길 바랍니다.
Ben and Fitz, 2015년 9월
역자 서문
올 한 해 동안 저를 괴롭힌 문제가 두 가지 있었는데, 둘 다 다른 사람들과 함께 일하는 방법의 문제였습니다. 첫번째로는 시간대가 다른 여러 오피스의 엔지니어들과 함께 일하는 방법이었는데, 비동기 커뮤니케이션과 회의를 시간 맞춰서 하기 힘듬과 같은 여러 문제점이 있었습니다. 두번째로는 오픈소스를 조금 더 열심히 하게 되었다는 점인데, PR이나 description, 어떠한 식으로던, 의사소통 할 때 제가 너무 커뮤니케이션을 못 한다는 피드백을 너무나도 많이 듣고 있었습니다. 이 책을 읽고 제가 겪고 있는 문제가 명확히 정의된 느낌이고, 어떻게 하면 이 문제를 개선할 수 있을지 방향이 잡힌 것 같아서 좋았습니다. 도움이 많이 되었고, 그래서 다른 엔지니어들도 이 책을 읽고 도움이 되었으면 좋겠다고 생각해서 이 책을 번역하게 되었습니다.
-
번역자 1 이현성 (ita9naiwa@gmail.com)
-
번역자 2 유승헌 (seapeon@naver.com)
-
번역자 3 손예지 (handyejee14@gmail.com)
-
번역자 4 나윤상 (nayounsang722@gmail.com)
Introduction
공학은 쉽다. 사람이 어렵다.
former SVP of Engineering at Google
인생은 예상치 못한 반전의 연속이고, 우리 둘도 언젠가 팀워크와 협업에 관한 책을 쓰게 되리라곤 상상하지 못했습니다.
많은 현대의 "메이커"들처럼, 우리는 대학 졸업 후에 컴퓨터를 가지고 노는 취미와 열정이 생계를 꾸릴 훌륭한 방법이 될 수 있음을 발견했습니다. 우리 세대의 대부분 해커들처럼, 1990년대 중반에는 남는 부품으로 PC를 조립하고, 수많은 디스켓으로 리눅스 프리릴리스를 설치하고, 유닉스 머신을 운영하는 법을 배웠습니다. 닷컴 버블이 막 시작될 무렵 우리는 프로그래머가 되었고, 버블이 꺼진 뒤에는 애플 같은 살아남은 실리콘밸리 회사들에서 일했습니다. 이후 우리는 스타트업에 채용되어, 서브버전(Subversion)이라는 오픈 소스 버전 관리 시스템의 설계와 구현을 전업으로 하게 됐습니다.
그런데 2000년에서 2005년 사이에 예상치 못한 변화가 생겼습니다. 서브버전을 만들던 동안 우리의 업무 책임이 서서히 달라진 것입니다. 진공 속에서 하루 종일 코드만 쓰는 것이 아니라, 오픈 소스 프로젝트를 이끌고 있었습니다. 이는 하루 종일 채팅방에 상주하며 열댓 명의 자원봉사 프로그래머들이 무엇을 하는지 지켜보는 일을 의미했습니다. 새로운 기능을 거의 전적으로 메일링 리스트를 통해 조율하는 일이기도 했습니다. 그러는 동안 우리는 프로젝트의 성공 열쇠가 훌륭한 코드를 쓰는 데에만 있지 않다는 것을 발견했습니다. 사람들 즉 목표를 향해 협업하는 방식이 그만큼 중요했습니다.
2005년에 우리는 구글 시카고 엔지니어링 오피스를 시작했고, 프로그래머로서의 커리어를 이어갔습니다. 이때 이미 우리는 오픈 소스 세계에 깊이 관여하고 있었습니다. 서브버전뿐 아니라 아파치 소프트웨어 재단(ASF)에서도요. 서브버전을 구글의 빅테이블 인프라로 포팅했고, 구글 코드라는 이름으로(소스포지와 비슷한) 오픈 소스 프로젝트 호스팅 서비스를 시작했습니다. 우리는 OSCON, 아파치콘, 파이콘, 그리고 결국 구글 I/O 같은 개발자 중심 컨퍼런스에 참석하다가 연사로도 나섰습니다. 기업과 오픈 소스 프로젝트 양쪽에서 일하다 보니, 실제 소프트웨어 엔지니어링 팀들이 어떻게 일하는지에 관한 지혜와 일화들을 '의도치 않게' 한 보따리 얻게 됐다는 것을 알게 됐습니다. 기능 고장 난 개발 프로세스("Subversion Worst Practices")에 대한 유머러스한 연설로 시작한 것이, 점차 팀을 독성 인물로부터 보호하는 법 ("How Open Source Projects Survive Poisonous People")에 대한 이야기로 변해 갔습니다. 발표장에는 점점 더 큰 청중이 모였고, 말 그대로 개발자들을 위한 "집단 치료" 같은 자리가 되었습니다.
창의적 협업의 사회적 도전에 대해 같은 주제의 강연을 수차례 하고 나자, 오라일리 미디어의 편집자가 그 강연을 책으로 엮어 보자고 권했습니다. 나머지는 역사입니다.

누구를 위한 책인가?
이 책은 원래 커리어를 발전시키고 훌륭한 소프트웨어를 출시하려는 소프트웨어 엔지니어들을 위해 쓰였습니다. 그런데 2판으로 개정하면서, 이 책의 주제들이 훨씬 더 넓은 독자층에 적용된다는 점이 분명해졌습니다. 다른 사람들과 함께 어떤 종류의 창의적 일을 하든, 이 책의 교훈은 당신에게 적용됩니다. 당신은 동네 모임, 교회 그룹, 친목 단체, 위원회, 혹은 건축가 집단의 일원일지도 모릅니다. 우리는 독자인 당신에 대해 두 가지를 가정합니다.
-
당신은 다른 창의적인 사람들과 함께, 아마도 기업이나 다른 구조화된 환경에서, 팀으로 일합니다.
-
당신은 무언가를 만드는 일을 즐기며 그 일이 보람 있고 재미있어야 한다고 믿습니다. 단지 생계를 위해 제품을 찍어내고 있다면, 아마 자기실현이나 커리어 충족에는 관심이 없을 겁니다.
우리의 경험은 소프트웨어 엔지니어링에서 왔기에, 예상대로 이 책의 대부분 예시는 그 영역에 속합니다. 하지만 우리가 설명하는 거의 모든 프로세스와 전략은 어떤 창의적 팀에도 직접 적용되거나(혹은 직접적인 유사물이) 존재합니다.
엔지니어들이 다른 사람들과 "잘 어울려" 일하는 법을 논의하는 과정에서, 표면적으로는 프로그래머의 직무 범위를 벗어난 듯 보이는 주제들을 다루게 됩니다. 어떤 곳에서는 팀을 효과적으로 이끄는 법, 조직을 항해하는 법, 소프트웨어 사용자와 건강한 관계를 맺는 법을 논합니다. 겉으로 보기엔 이런 장들이 "피플 매니저"나 "프로덕트 매니저"를 위한 내용처럼 보일 수 있습니다. 하지만 커리어의 어느 순간엔가 당신도 뜻밖에 그런 역할을 맡게 될 것입니다. 불신을 잠시 내려두고 계속 읽어 주세요! 이 책의 모든 내용은 결국 무언가를 만드는 모든 사람에게 관련이 있습니다.
주의: 이 책은 기술 매뉴얼이 아닙니다.
시작하기 전에, 당신의 기대치를 설정해야 합니다. 열정적인 프로그래머는 도메인 구체적인 문제를 완벽한 수학적 표현으로 제시하는 책을 읽기 좋아하죠. 각 문제는 일반적으로 정해진 절차적 솔루션과 함께 나옵니다.
이 책은 그런 책이 아닙니다.
우리 책은 창의적 제품 개발의 인간적인 측면을 탐구합니다. 그리고 인간은 복잡한 존재입니다. 우리가 강연에서 자주 말하듯, "사람이란 본질적으로 간헐적 버그의 거대한 더미"입니다. 우리가 다루는 문제와 해법은 어수선하며, 깔끔한 논리 상자에 딱 들어맞지 않습니다. 이 책은 일련의 에세이처럼 읽힙니다. 실제로도 그렇습니다. 각 장마다 관련된 문제들을(종종 일화로) 묶어 논의하고, 이어서 전체 주제에 걸맞은 해법 묶음을 이야기합니다. 모든 것을 온전히 흡수하려면, 몇 페이지에 걸친 집중 시간을 늘리고, 우뇌를 동원해 연결고리를 만들거나, 아예 하룻밤 자고 나서 다시 읽을 필요가 있을지도 모릅니다!
또 몇 가지 더 미리 말씀드릴 것이 있습니다. 우리가 강연에서 농담처럼 말하듯, "이 의견들은 전적으로 우리의 것이며 우리의 경험에 근거합니다. 동의하지 않는다면, 당신도 당신만의 강연을 하시면 됩니다." 구두 발표에서 그랬듯, 이 책의 내용에서 촉발되는 모든 논의를 환영합니다. 피드백, 교정, 새로운 의견, 이견 모두 즐겁게 이야기하고 싶습니다. http://www.debuggingteams.com/에서 우리를 찾을 수 있습니다. 이 책의 모든 내용은 우리가 불 속에서 겪은 시행착오와 그로부터 얻은 교훈에서 나왔습니다.
또한 사례에 등장하는 모든 이름은 당사자들을 보호하기 위해 바꾸어졌다는 점도 알려 드립니다.
이 책의 내용은 학교에서 가르치지 않습니다.
우리가 아는 대부분의 소프트웨어 엔지니어는 컴퓨터 과학과 소프트웨어 엔지니어링을 배우는 데 4년에서 10년까지 시간을 보냈습니다. 그런데 정작 팀이나 회사에서 어떻게 소통하고 협업하는지 실제로 가르치는 커리큘럼[1]은 거의 없습니다. 물론 대부분 학생은 학력 과정의 어느 시점엔가 팀 프로젝트를 수행해야 합니다. 하지만 누군가에게 다른 사람과 성공적으로 일하는 법을 가르치는 것과, 그를 강제 협업 상황에 던져 넣는 것 사이에는 큰 차이가 있습니다. 대부분 학생은 그 경험에 염증을 느끼게 됩니다.

핵심 요약
성공적인 프로그래머가 되는 일은 최신 언어를 배우거나 가장 빠른 코드를 쓰는 일에만 있지 않습니다. 프로그래머는 거의 항상 팀으로 일하며, 개인의 생산성과 행복은 많은 사람들이 인정하고 싶어 하는 것보다 더 직접적으로 팀의 영향을 받습니다.
이 책의 기본 아이디어는 단순합니다. 소프트웨어 작성은 팀 스포츠이며, 결과에 영향을 미치는 데 있어 인간적 요소는 기술적 요소만큼이나 중요합니다. 수십 년을 프로그래밍의 기술적 측면을 배우는 데 보냈더라도, 대부분 사람들은 인간적 요소에 진지하게 집중해 본 적이 없습니다. 협업을 배우는 일은 성공에 똑같이 중요합니다. 엔지니어링의 "소프트 스킬"에 투자하면, 같은 노력으로 훨씬 더 큰 임팩트를 낼 수 있습니다.
Chapter 1. The Myth of the Genius Programmer
이 책은 소프트웨어 개발의 사회적 위험에 관한 책이므로, 당신이 확실히 통제할 수 있는 한 가지 변수에 초점을 맞추는 것이 합리적입니다: 바로 당신 자신입니다.
사람은 본질적으로 불완전합니다. 하지만 동료들의 버그를 이해하기 전에 자신 안에 있는 버그를 이해해야 합니다. 우리는 당신이 자신의 반응, 행동 및 태도에 대해 생각해 보기를 요구할 것이며, 그 대가로 당신이 더 효율적이고 성공적인 소프트웨어 엔지니어가 되는 데 진정한 통찰력을 얻기를 바랍니다. 결과적으로 사람과 관련된 문제를 처리하는 데 드는 에너지를 줄이고 코드를 작성하는 데 더 많은 시간을 쓰게 될 것입니다.
이 챕터에서 가장 중요한 아이디어는 소프트웨어 개발이 팀 스포츠라는 것을 이해하는 점입니다. 엔지니어링 팀이나 다른 어떤 창의적인 조직에서 성공하기 위한다면, 당신은 겸손(Humility), 존중(Respect), 신뢰(Trust)의 핵심 원칙을 중심으로 행동을 재조직해야 합니다.
더 나아가기 전에, 일반적으로 프로그래머들이 어떻게 행동하는지부터 살펴봅시다.
코드 숨기는 걸 도와줘
우리 둘은 10년 쯤 전부터 프로그래밍 컨퍼런스에서 꽤 많은 발표를 했습니다. 구글 오픈 소스 프로젝트 호스팅 서비스를 2006년에 시작한 이후로, 우리는 제품에 대한 질문과 요청을 많이 받았습니다. 2008년 중반부터는 우리가 받는 요청의 경향이 뚜렷하게 나타났습니다:
구글 에서 Subversion의 특정 브랜치를 숨길 수 있는 기능을 추가해 주세요.
구글 코드에서 처음에는 숨겨져 있다가 준비가 되면 공개되는 오픈 소스 프로젝트를 만들 수 있게 해 주세요.
구글 코드의 모든 히스토리를 지우고 싶어요. 새로 시작할 수 있게 해 주세요.
이 요청들에서 공통점을 발견하셨나요?
답은 불안감입니다. 사람들은 다른 사람들이 자신의 진행 중인 작업을 보고 평가하는 것을 두려워합니다. 어떤 면에서는 인간 본성의 일부일 뿐입니다. 아무도 비판받는 것을 좋아하지 않습니다. 특히 아직 완성되지 않은 것에 대해서는 더욱 그렇습니다. 이 태도는 소프트웨어 개발 내에서의 경향을 알려줍니다. 사실 불안감은 더 큰 문제의 증상입니다.
천재 신화
우리 둘은 1990년대 내내 시카고에 살면서 시카고 불스의 챔피언십 우승 행진을 목격했습니다. 전국 언론은 이 놀라운 농구 팀에 대한 이야기로 가득 찼습니다. 하지만 TV와 신문은 정말 무엇에 집중했을까요? , 그 슈퍼스타였습니다. 모든 선수들이 MJ가 되고 싶어 했습니다. 우리는 그가 다른 선수들을 제치고 춤추는 모습을 지켜봤습니다. 우리는 그가 TV 광고에 출연하는 모습을 봤습니다. 만화 캐릭터들과 농구를 하는 바보같은 영화를 보러 갔습니다. 그는 스타였고, 코트에서 연습하는 모든 아이들은 비밀리에 그의 길을 따르기를 원했습니다.
많은 사람들은 이렇게 우상을 찾고 숭배하는 경향을 갖고 있습니다. 개발자들에게 그런 우상은 리누스 토발즈, 귀도 반 로섬, 빌 게이츠와 같은 인물들입니다. 이들은 모두 영웅적인 업적으로 세상을 바꿨습니다. 리누스는 혼자서 리눅스를 만들었죠?

사실, 리누스가 한 일은 유닉스와 비슷한 커널의 개념 증명을 작성하고 이메일 리스트에 공개한 것이었습니다. 확실히 인상적인 업적이었지만, 빙산의 일각에 불과했습니다. 현재 리눅스는 수백 배 더 크고, 수천 명의 똑똑한 사람들이 개발했습니다. 리누스의 진정한 업적은 이 사람들을 이끌고 그들의 작업을 조정하는 것이었습니다. 리눅스는 그의 아이디어가 아니라 커뮤니티의 집단 노동의 빛나는 결과입니다. (그리고 유닉스 자체도 켄 톰슨과 데니스 리치가 전부 작성한 것이 아니라 벨 연구소의 여러 똑똑한 사람들이 작성했습니다.)
비슷한 예로, 귀도 반 로섬은 파이썬의 모든 코드를 혼자 작성하지 않았습니다. 확실히, 그는 첫 번째 버전을 작성했습니다. 하지만 수백 명의 사람이 그 이후 기여에 참여했습니다. 아이디어, 기능 및 버그 수정을 포함한 것들 말이에요. 스티브 잡스는 매킨토시를 만든 팀을 이끌었고, 빌 게이츠는 초기 가정용 컴퓨터용 BASIC 인터프리터를 작성한 것으로 알려져있지만, 그의 더 큰 업적은 MS-DOS를 중심으로 성공적인 회사를 세운 것이었습니다. 그들은 모두 리더가 되었고, 그 후 자신의 커뮤니티의 집단적 성취의 상징이 되었습니다. 천재 신화는 인간이 팀의 성공을 단일 인물이나 리더에게 돌리는 경향을 말합니다.
그럼 마이클 조던은 어떨까요?
똑같습니다. 우리는 그를 우상화하지만, 사실 그는 혼자서 모든 농구 경기를 이기지 않았습니다. 그의 진정한 천재성은 팀과 함께 일하는 방식에 있었습니다. 팀의 감독인 필 잭슨은 매우 영리했습니다. 그의 코칭 기술은 전설적입니다. 그는 한 선수가 챔피언십을 이길 수 없다는 것을 인식하고 마이클 조던 주위에 전체 "드림 팀"을 구성했습니다. 이 팀은 잘 작동하는 기계였으며, 적어도 마이클 자신만큼이나 인상적이었습니다.
그런데 우리는 왜 반복적으로 이런 이야기에서 개인을 우상화할까요? 왜 사람들은 유명인이 추천하는 제품을 사려고 할까요? 왜 우리는 미셸 오바마의 드레스나 마이클 조던의 신발을 사고 싶어할까요?
유명세가 큰 이유입니다. 인간은 본능적으로 리더와 롤모델을 찾고, 그들을 우상화하며, 그들을 모방하고자 합니다. 우리는 모두 영감을 주는 영웅이 필요하며, 프로그래밍 세계에도 영웅이 있습니다. "기술자-유명인" 현상은 거의 신화가 되었습니다. 우리는 모두 리눅스처럼 세상을 바꾸는 무언가를 만들거나 멋진 프로그래밍 언어를 디자인하고 싶어합니다.
마음 깊은 곳에서 사실 우리 모두는 천재가 되고 싶어합니다. 궁극적인 개발자 판타지는 한 멋진 컨셉에 몰입하게 되는 것입니다. 당신은 몇 주 또는 몇 달 동안 동굴 속에 들어가서 아이디어의 완벽한 구현을 위해 노력합니다. 그런 다음 소프트웨어를 세상에 "내놓고" 당신의 천재성으로 모두를 놀라게 합니다. 동료들은 당신의 영리함에 감탄합니다. 사람들은 당신의 소프트웨어를 사용하기 위해 줄을 섭니다. 명성과 부는 자연스럽게 따라옵니다.
잠깐만요, 현실을 직시할 시간입니다. 당신은 아마 천재가 아닐 것입니다.
공격할 의도는 아니었어요. 우리는 당신이 매우 똑똑한 사람이라고 확신합니다. 하지만 실제로 진정한 천재가 얼마나 드문지 깨닫고 있습니까? 확실히, 코드를 쓰는 일은 꽤 까다로운 기술이고, 당신은 지적으로 많은 사람보다 높은 수준에 있을 것이에요. 하지만 설령 당신이 천재라 하더라도, 그것만으로는 충분하지 않다는 것이 밝혀졌습니다. 천재들도 실수를 하고, 뛰어난 아이디어와 엘리트 프로그래밍 기술을 가지고 있다고 해서 당신의 소프트웨어가 성공할 것이라는 보장은 없습니다. 당신의 소프트웨어가 성공할지 실패할지는 결국 당신이 다른 사람들과 얼마나 잘 협업하는지에 달려 있습니다. 당신의 커리어에서 가장 중요한 것은 다른 사람들과 얼마나 잘 협업하는가입니다.
이러한 천재 신화는 결국 우리 불안감의 한 사례이기도 합니다. 대부분의 프로그래머는 시작한 지 얼마 안 된 작업을 공유하는 것을 두려워합니다. 왜냐하면 동료들이 자신의 실수를 보고 코드 작성자가 천재가 아니라는 것을 알게 되기 때문입니다. 벤의 블로그에서 한 프로그래머가 이렇게 말했습니다:
다른 사람들이 내가 하고 있는 일이 완성되기 전에 보는게 정말 불안해요. 나를 진지하게 평가하고 내가 바보라고 생각할까봐요.
프로그래머 사이에서 무척 흔한 감정입니다. 그리고 자연스러운 반응은 동굴에 숨어서 일하는 것입니다. 아무도 당신의 실수를 보지 못할 것이고, 당신은 작업이 끝날 때까지 걸작을 공개할 기회를 여전히 가지고 있습니다. 모든 것이 완벽해질 때까지 숨겨두세요!
자신의 패를 숨기려는 또 다른 흔한 동기로는 두려움입니다. 다른 프로그래머가 당신의 아이디어를 훔쳐서 당신이 작업하기 전에 실행해 버릴까 봐 말이에요. 당신의 아이디어를 비밀로 유지함으로써, 당신은 당신의 아이디어를 통제할 수 있습니다.
아마 지금 이렇게 생각하고 있을 겁니다: 그래서 뭐 어쩌라는 거지? 사람들은 원하는 방식으로 일할 자유가 있어야 하는 것 아닌가요?
사실, 그렇지 않습니다. 이 경우에는 당신이 잘못하고 있고, 그리고 이것은 중대한 문제입니다. 그 이유는 다음과 같습니다.
숨기는 것은 해롭다
모든 시간을 혼자 일하는 데 쓴다면, 실패할 위험을 높이고 성장할 가능성을 스스로 갉아먹는 셈입니다.
우선, 당신이 올바른 방향으로 가고 있는지 어떻게 알 수 있을까요?
자전거 기어 변속 장치를 완전히 새롭게 설계하는 기발한 아이디어가 떠올랐다고 상상해 보세요. 부품을 주문하고 차고에 틀어박혀 몇 주 동안 시제품을 만들기 시작합니다. 이웃(자전거 애호가)이 무슨 일을 하느냐고 묻지만, 당신은 이야기하지 않기로 합니다. 완벽해질 때까지 누구에게도 보이고 싶지 않기 때문입니다. 몇 달이 더 지나도 시제품은 제대로 작동하지 않습니다. 비밀리에 작업하다 보니, 기계에 밝은 친구들에게 조언을 구할 수도 없습니다.
어느 날 이웃이 차고에서 자전거를 꺼내는데, 혁신적인 변속 메커니즘이 달려 있습니다. 그 역시 자전거 가게 친구들의 도움을 받아 당신의 아이디어와 매우 비슷한 것을 만들고 있었던 겁니다. 당신은 답답한 마음에 자신의 작업을 보여 줍니다. 그는 첫 주에만 보여줬어도 고칠 수 있었을 간단한 결함들을 지적합니다.

여기서 배울 점은 많습니다. 훌륭한 아이디어가 깔끔하게 구현될 때까지 공개하지 않는 것은 엄청난 도박입니다. 초기에 근본적인 설계 실수를 저지르기 쉽고, 바퀴를 다시 발명할 위험도 있습니다.[2] 또한 협업의 이점을 포기하게 됩니다. 다른 사람들과 함께 일한 이웃이 얼마나 빨리 나아갔는지 보셨나요? 그래서 사람들은 깊은 수영장에 뛰어들기 전에 먼저 발끝만 담가 봅니다. 지금 하고 있는 일이 올바른지, 제대로 하고 있는지, 이미 누군가가 해버린 건 아닌지 확인해야 하기 때문입니다. 초기 삽질 가능성은 높습니다. 초기에 피드백을 많이 받을수록 이 위험은 낮아집니다.[3] "일찍 실패하고, 빨리 실패하고, 자주 실패하라"는 검증된 만트라를 기억하세요. 우리는 책의 뒷부분에서 실패의 중요성을 더 길게 다룰 것입니다.
초기 공유는 개인의 실수를 막고 아이디어의 검증을 받는 것에 그치지 않습니다. 우리가 버스 팩터라고 부르는, 프로젝트의 회복력을 강화하는 데도 중요합니다.
버스 팩터(명사): 프로젝트가 완전히 망가지기 전에 버스에 치여야 하는 사람의 수.

당신의 프로젝트에서 지식과 노하우는 얼마나 널리 퍼져 있나요? 시제품 코드의 동작을 이해하는 사람이 당신뿐이라면, 단기적으로는 일이 안정적으로 보일지 몰라도 당신이 "버스에 치이는" 순간 프로젝트는 끝장입니다. 친구와 함께 일한다면 버스 팩터는 두 배가 됩니다. 소규모 팀이 함께 설계하고 시제품을 만든다면 더 좋습니다. 팀원이 한 명 사라져도 프로젝트는 끝나지 않으니까요. 꼭 버스에 치이지 않더라도 예측 불가능한 삶의 사건은 일어납니다. 결혼을 하거나, 이사를 가거나, 회사를 떠나거나, 아픈 가족을 돌봐야 할 수 있습니다. 버스 팩터를 관리함으로써 프로젝트의 성공을 미래에도 보장해야 합니다.
버스 팩터 외에도 전체적인 진행 속도의 문제가 있습니다. 인정하기 쉽지 않지만 혼자 일하는 것은 사람들 생각보다 훨씬 느리고 고됩니다. 혼자 일할 때 얼마나 배우나요? 얼마나 빨리 움직이나요? 웹은 의견과 정보의 거대한 저장소이지만 실제 인간의 경험을 대체할 수는 없습니다. 다른 사람들과 함께 일하면 시도 자체의 집단 지혜가 직접적으로 늘어납니다. 터무니없는 문제에 막혔을 때, 혼자서 구덩이에서 빠져나오느라 얼마나 시간을 날리나요? 어깨너머로 보며 즉시 실수를 짚어주고 다음으로 나아가는 방법을 알려줄 동료 두어 명이 있었다면 얼마나 달라졌을지 상상해 보세요. 이것이 바로 소프트웨어 회사들이 팀을 한데 모아 앉히거나 페어 프로그래밍을 하는 이유입니다. 우리는 종종 두 번째 시선이 필요합니다.
또 다른 비유입니다. 컴파일러와 함께 어떻게 일하는지 떠올려 보세요. 큰 소프트웨어를 작성할 때, 며칠 동안 1만 줄을 쓰고 모든 것이 완벽하다고 느낄 때 처음으로 "컴파일" 버튼을 누르나요? 물론 아니죠. 어떤 재앙이 벌어질지 상상해 보세요. 프로그래머인 우리는 빽빽한 피드백 루프에서 가장 잘 일합니다. 새 함수를 쓰고, 컴파일. 테스트를 추가하고, 컴파일. 코드를 리팩터하고, 컴파일. 코드를 생성한 직후 가능한 한 빨리 오타와 버그를 고칩니다. 작은 단계마다 우리 곁에서 우리를 도와주는 컴파일러를 원합니다. 어떤 환경은 우리가 타이핑하는 동안에도 컴파일해 줍니다. 이렇게 해서 코드 품질을 높게 유지하고 소프트웨어가 조금씩 올바른 방향으로 진화하도록 합니다.
이러한 빠른 피드백 루프는 코드 수준뿐만 아니라 전체 프로젝트 수준에서도 필요합니다. 야심찬 프로젝트는 빠르게 진화하며, 변화하는 환경에 적응해야 합니다. 프로젝트는 예측 불가능한 설계 장애물이나 정치적 위험에 부딪히기도 합니다. 그저 계획대로 되지 않을 때도 있습니다. 요구사항은 뜻밖에 변합니다. 계획이나 설계를 즉시 바꿔야 한다는 신호를 어떻게 빠르게 받나요? 답은 팀으로 일하는 것입니다. 에릭 레이먼드는 "많은 눈이 모든 버그를 얕게 만든다"고 말한 것으로 유명한데, 이렇게 말하는게 더 좋을지도 모릅니다. "많은 눈은 당신의 프로젝트가 관련성을 유지하고 궤도를 벗어나지 않도록 해 준다." 동굴에서 일하던 사람은 자신이 원래 꿈꾸던 비전을 완성했을지라도 세상은 이미 변해 제품을 무의미하게 만들어 놓았음을 뒤늦게 깨닫습니다.
결국 핵심은 이것입니다. 혼자 일하는 것은 본질적으로 함께 일하는 것보다 더 위험합니다. 누군가가 당신의 아이디어를 훔치거나 당신을 멍청하다고 생각할까 두려울 수 있지만, 그보다는 혼자 틀어박혀 엉뚱한 일에 엄청난 시간을 낭비하는 것을 훨씬 더 무서워해야 합니다.
안타깝게도 "아이디어를 가슴에 꼭 쥐고 있는" 이 문제는 소프트웨어 공학에만 국한되지 않습니다. 거의 모든 분야에 만연한 문제입니다. 예를 들어, 전문 과학은 원래 정보의 자유롭고 개방적인 교환에 관한 것이어야 합니다. 하지만 "발표하지 않으면 도태된다"는 절박함과 연구비 경쟁은 정반대의 효과를 낳았습니다. 위대한 사상가들이 아이디어를 공유하지 않습니다. 집요하게 움켜쥐고, 비공개로 연구하고, 과정에서의 모든 실수를 숨긴 채, 마치 전 과정이 수월하고 자명했던 것처럼 논문을 발표합니다. 그리고 결과는 종종 참담합니다. 누군가의 작업을 우연히 중복하거나, 초기에 발견되지 않은 실수를 저지르거나, 한때는 흥미로웠지만 이제는 쓸모없다고 여겨지는 무언가를 만들어 냅니다. 낭비되는 시간과 노력이 비극적일 정도입니다.
또 다른 피해자가 되지 마세요.
모든 건 다 팀
이제 한 걸음 물러서서 이 모든 생각을 다시 모아 봅시다.
우리가 줄곧 강조한 요점은, 프로그래밍 영역에서 외톨이 장인은 극히 드물다는 것입니다. 설령 존재하더라도 공기처럼 텅 빈 진공 속에서 초인적 성취를 해내지 않습니다. 세상을 바꾸는 업적은 거의 언제나 영감의 불꽃 뒤를 잇는 영웅적인 팀 노력의 결과입니다.
슈퍼스타 팀을 만드는 것이 진짜 목표이며, 극도로 어렵습니다. 최고의 팀은 슈퍼스타를 영리하게 활용하지만, 전체는 언제나 부분의 합보다 큽니다.
소프트웨어 개발은 팀 스포츠입니다.
처음에는 받아들이기 어려울 수 있습니다. 우리가 마음속에 품은 천재 프로그래머 판타지와 정면으로 충돌하기 때문이죠. 이를 만트라처럼 되뇌어 보세요.

혼자 해커의 은신처에서 빛나는 존재가 되는 것만으로는 충분하지 않습니다. 비밀 발명을 숨기고 준비한다고 세상을 바꾸거나 수백만 사용자에게 기쁨을 줄 수는 없습니다. 다른 사람들과 함께 일해야 합니다. 비전을 공유하세요. 일을 나누세요. 다른 이들에게서 배우세요. 빛나는 팀을 만드세요.
진정으로 한 사람이 쓴, 널리 사용되고 성공적인 소프트웨어가 얼마나 되나요? (어떤 사람은 "LaTeX"을 말할지도 모르지만, 과학 논문을 쓰는 사람들의 수가 전체 컴퓨터 사용자의 통계적으로 유의미한 비중이라고 보지 않는 한 "널리 사용"된다고 하기는 어렵습니다!)
우리는 이 팀 스포츠 개념을 책 전반에서 거듭 반복할 것입니다. 잘 기능하는 팀은 금과 같으며 진정한 성공의 열쇠입니다. 어떻게 해서든 이런 경험을 목표로 해야 합니다. 이 책이 바로 그 이야기를 다룹니다.
세 가지 축
이제 팀으로 일하는 것이 최선의 길이라는 점은 충분히 이야기했습니다. 훌륭한 소프트웨어를 만들려면, 훌륭한 팀을 어떻게 구축(혹은 발견)할 수 있을까요?
그렇게 단순하지는 않습니다. 협업의 경지에 이르려면 먼저 우리가 "세 개의 축"이라 부르는 사회적 기술을 배우고 받아들여야 합니다. 이 세 가지 원칙은 관계에 약간의 윤활유를 바르는 수준이 아닙니다. 모든 건강한 상호작용과 협업이 기반하는 토대입니다.
- Humility
-
당신은 우주의 중심이 아닙니다. 당신은 전지하지도, 무오류도 아닙니다. 자기 개선에 열려 있습니다.
- Respect
-
당신이 함께 일하는 다른 사람들을 진심으로 아낍니다. 그들을 인간으로 대하고, 그들의 능력과 성취를 인정합니다.
- Trust
-
당신은 다른 사람들이 유능하며 옳은 일을 할 것이라고 믿습니다. 그리고 적절할 때 그들이 운전대를 잡도록 기꺼이 맡깁니다. [5]
우리는 이 원칙들을 HRT라고 부릅니다. "hurt"가 아니라 "heart"라고 발음합니다. 사람을 다치게 하는 것이 아니라, 고통을 줄이는 이야기이기 때문입니다. 사실 우리의 핵심 논지는 이 축 위에 세워져 있습니다.
거의 모든 사회적 갈등은 결국 겸손, 존중, 혹은 신뢰의 결여로 거슬러 올라갈 수 있습니다.
처음에는 믿기지 않을 수 있습니다. 하지만 한번 시도해 보세요. 지금 당신의 삶에서 불쾌하거나 불편한 사회적 상황을 떠올려 보세요. 가장 기초적인 수준에서, 모두가 적절히 겸손한가요? 사람들은 서로를 진심으로 존중하나요? 상호 신뢰가 있나요?
우리는 이 원칙들이 너무 중요하다고 믿기 때문에, 아예 책 전체의 구조를 이것들에 맞췄습니다.
이 책은 당신 자신에서 시작합니다. HRT를 받아들이고, 상호작용의 중심에 HRT를 둔다는 것이 무엇을 의미하는지 진정으로 내재화하는 것입니다. 그것이 바로 이 첫 장이 다루는 내용입니다. 그다음에는 영향력의 원을 점차 넓혀 나갑니다.
Chapter 2. Building an Awesome Team Culture에서는 이 세 기둥을 바탕으로 팀을 만드는 도전을 다룹니다. 팀 문화를 만드는 것은 성공을 위한 결정적 다음 단계—앞서 언급한 "드림 팀"—입니다.
이어서 매일 팀과 상호작용하지만 핵심 팀 문화의 일부가 아닐 수도 있는 사람들을 살펴봅니다. 다른 팀의 동료일 수도 있고, 프로젝트를 돕고자 하는 자원봉사자일 수도 있습니다. 그들 중 다수는 HRT를 무시할 뿐만 아니라, 극도로 독이 될 수 있습니다! 그들로부터 팀을 방어하는 법을 배우는 것이 첫 번째 과제입니다. 그러나 궁극적인 목표는 그들의 이빨을 뽑고 당신의 문화로 끌어들이는 것입니다. 팀을 확장하는 훌륭한 방법이니까요.

대부분의 팀은 더 큰 회사 안에서 일하며, 이 환경도 종종 독한 사람들만큼이나 장애물이 됩니다. 이러한 조직적 장애물을 헤쳐 나가는 법을 배우는 것은 제품을 출시하느냐, 아니면 바로 그 제품이 취소되느냐를 가르는 차이가 됩니다.
마지막으로, 소프트웨어의 사용자들을 생각해 봅니다. 우리는 때때로 그들의 존재를 잊어버리지만, 그들은 프로젝트의 생명줄입니다. 사용자가 없으면 소프트웨어에는 목적이 없습니다. 팀 안에서 번성하는 HRT 원칙은 사용자와 상호작용하는 방식에도 적용될 수 있고, 적용되어야 하며, 그로 인한 이득은 엄청납니다.
잠시 멈춰 생각해 봅시다.
이 책을 집어 들었을 때, 아마도 일종의 주간 지원 그룹에 참여하게 될 거라고는 생각하지 않았을 것입니다. 우리도 공감합니다. 사회적 문제를 다루는 일은 어렵습니다. 사람은 복잡하고, 예측 불가능하며, 종종 다루기 귀찮은 존재입니다. 사회적 상황을 분석하고 전략적으로 행동하는 데 에너지를 쏟기보다는, 아예 그런 노력 자체를 포기하고 싶어질 때가 있습니다. 예측 가능한 컴파일러와 함께 있는 게 훨씬 쉽지 않나요? 굳이 사회적 문제에 신경 써야 할 이유가 있을까요?
여기 유명한 리처드 해밍의 강연에서 나온 인용문이 있습니다.[6]
비서들에게 농담을 건네고 조금 친근하게 대하는 수고를 들인 덕분에, 나는 최고의 비서 도움을 받을 수 있었습니다. 예를 들어, 한 번은 무슨 바보 같은 이유로 머리 힐의 모든 복사 서비스가 마비된 적이 있었습니다. 어떻게 된 일인지는 묻지 마세요. 나는 복사할 일이 있었죠. 내 비서는 홀름델에 있는 누군가에게 전화를 걸고, 회사 차를 타고 한 시간이나 걸려 내려가 복사를 하고 돌아왔습니다. 내가 그녀를 기분 좋게 해주고 농담을 건네며 친근하게 대했던 그 작은 노력이 결국 나에게 큰 도움이 되어 돌아온 것입니다. 시스템을 활용해야 한다는 사실을 깨닫고, 시스템이 내 일을 하도록 만드는 방법을 연구하면, 내 바람에 맞게 시스템을 적응시키는 법을 배우게 됩니다.
이 이야기의 교훈은 이렇습니다: 사회적 게임의 힘을 과소평가하지 마세요. 사람을 속이거나 조종하는 것이 아니라, 일을 해내기 위해 관계를 만드는 것입니다. 그리고 관계는 항상 프로젝트보다 오래갑니다.
실전 HRT
겸손, 존중, 신뢰에 대한 이 모든 설교는 마치 강단에서 하는 이야기처럼 들릴 수 있습니다. 이제 구름 위에서 내려와, 이러한 아이디어들을 현실의 상황에서 어떻게 적용할지 생각해 봅시다. 우리는 실용적인 제안을 찾고 있으니, 지금 당장 시작할 수 있는 구체적인 행동과 사례 목록을 살펴보려 합니다. 처음에는 당연해 보일 수 있지만, 막상 곰곰이 생각해 보면 당신(그리고 동료들)이 이를 따르지 않는 경우가 얼마나 잦은지 곧 깨닫게 될 것입니다.
자아를 놓아라
좋아요, 이는 겸손이 부족한 사람에게 태도를 좀 내려놓으라고 전하는 더 단순한 방식입니다. 자신이 가장 중요한 사람인 양 꾸준히 행동하는 이와 함께 일하고 싶은 사람은 없습니다. 당신이 토론에서 가장 현명한 사람이라는 걸 안다 해도, 그 사실을 굳이 남들 앞에서 드러내지 마세요. 예를 들어, 모든 주제에서 항상 첫 번째 혹은 마지막 발언을 해야 직성이 풀리나요? 제안서나 토론의 모든 세부에 꼭 한마디씩 해야 하나요? 아니면 그런 사람을 알고 있나요?
"겸손하라"는 말이 방바닥처럼 남들에게 밟히라는 뜻은 아닙니다. 자신감은 나쁘지 않습니다. 다만 모든 것을 다 아는 듯한 태도로 보이지 않게 하세요. 더 나아가 개인의 자아 대신 "집단의 자아"를 지향해 보세요. 내가 얼마나 대단한지에 집착하기보다 팀의 성취감과 집단의 자부심을 세우는 데 힘쓰라는 뜻입니다. 예컨대 Apache Software Foundation은 소프트웨어 프로젝트를 중심으로 커뮤니티를 만들어 온 긴 역사가 있고, 이런 커뮤니티는 매우 강한 정체성을 가지며 자기 홍보에 더 관심이 큰 사람들을 거부합니다.
자아는 여러 방식으로 드러나며, 당신의 생산성을 방해하고 속도를 늦춥니다. 이 점을 완벽하게 보여 주는 해밍의 강연에서 또 하나의 훌륭한 이야기가 있습니다:
존 투키는 거의 항상 매우 캐주얼한 복장을 했습니다. 그는 중요한 사무실에 들어가면 상대가 그가 일급의 인물이라는 사실을 깨닫고 귀를 기울이기까지 오랜 시간이 걸리곤 했습니다. 오랫동안 존은 이런 종류의 적대감을 이겨내야 했습니다. 그건 낭비예요! 내가 말한 건 순응하라는 것이 아니라, "순응하는 듯한 모습이 당신을 멀리 데려다 준다"는 겁니다. "난 내 방식대로 할 거야"라며 어떤 방식으로든 자아를 주장하기로 선택하면, 직업 생애 전체에 걸쳐 작은 비용을 꾸준히 지불하게 됩니다. 그리고 그 비용은 평생에 걸쳐 쌓여 불필요한 엄청난 골칫거리가 됩니다. […] 시스템을 사용해야 한다는 사실을 인정하고, 시스템이 당신의 일을 하도록 만드는 방법을 연구하면, 당신의 바람에 맞게 시스템을 적응시키는 법을 배우게 됩니다. 아니면 평생을 작은, 선언되지 않은 전쟁처럼 그것과 싸우며 보낼 수도 있습니다.
비판을 제시하고 수용하는 방법을 배우기
Joe라는 프로그래머는 새 직장에서 일을 시작했습니다. 첫 주가 지나자 그는 코드베이스를 본격적으로 파고들기 시작했고, 무슨 일이 일어나는지 신경 쓴 나머지 팀 동료들에게 그들의 기여에 관해 정중히 질문을 던졌습니다. 그는 설계 가정은 무엇인지, 또는 논리를 어디서 개선할 수 있는지 정중히 묻는 간단한 코드 리뷰를 이메일로 보냈습니다. 몇 주 뒤, 그는 이사에게 호출을 받았습니다. "무슨 문제죠? 제가 뭘 잘못했나요?" 이사는 걱정스러운 표정으로 말했다. "요즘 너의 태도에 대한 불만이 많아. 여기저기 사람들을 너무 거칠게 비판하고 있대. 모두 마음이 상했어. 톤을 낮추도록 해." Joe는 완전히 당황했습니다. HRT에 기반한 강한 문화라면 그의 코드 리뷰는 동료들에게 환영받고 감사받았어야 했습니다. 하지만 이 경우 Joe는 팀 전반의 불안감을 더 민감하게 살피고, 코드 리뷰를 문화에 들여오되 더 섬세한 방식으로 진행했어야 했습니다.
전문적인 소프트웨어 엔지니어링 환경에서 비판은 거의 개인적인 것이 아닙니다—보통 더 나은 제품을 만들기 위한 과정의 일부일 뿐입니다. 요령은 당신(과 주변 사람들)이 누군가의 창작물에 대한 건설적 비판과 노골적인 인신공격을 구분하도록 하는 것입니다. 후자는 쓸모없고—사소하며—실행하기도 거의 불가능합니다. 전자는 항상 도움이 되며 개선 방법에 대한 안내를 줍니다. 그리고 무엇보다도 그것은 존중으로 가득합니다: 건설적인 비판을 하는 사람은 상대를 진심으로 아끼고, 그 자신이나 그의 작업이 나아지기를 바랍니다. 동료를 존중하고 공손하게 건설적 비판을 하세요. 누군가를 진정으로 존중한다면, 배려 있고 도움이 되는 표현을 선택하려는 동기가 생길 것입니다—이는 많은 연습을 통해 얻게 되는 기술입니다.
한 편, 비판을 받아들이는 법도 배워야 합니다. 이는 단지 자신의 실력에 대해 겸손해지는 것만이 아니라, 상대가 당신과 당신의 프로젝트의 최선의 이익을 생각하고 있으며 실제로 당신을 바보라고 생각하는 것이 아님을 신뢰하는 것을 의미합니다. 프로그래밍은 다른 모든 것과 마찬가지로 하나의 기술입니다. 연습으로 향상됩니다. 동료가 저글링을 더 잘하는 방법을 지적해 준다면, 그것을 당신의 인성과 인간으로서의 가치에 대한 공격으로 받아들이겠습니까? 우리는 그렇지 않기를 바랍니다. 마찬가지로, 당신의 자존감은 당신이 쓰는 코드—혹은 당신이 만드는 어떤 창작물—과 연결되어 있어서는 안 됩니다. 거듭 말하지만: 당신은 당신의 코드가 아닙니다. 계속 되뇌이세요. 당신은 당신이 만드는 것 그 자체가 아닙니다. 당신 스스로 믿을 뿐 아니라, 동료들도 그렇게 믿도록 만들어야 합니다.

예를 들어, 불안감이 큰 협업자가 있다면 이렇게 말하지 마세요: "이 메서드의 제어 흐름 완전히 틀렸네. 모두가 쓰는 표준 xyzzy 코드 패턴을 써야지." 이런 피드백에는 안티패턴이 가득합니다. 상대를 "틀렸다"고 단정하고, 무언가를 바꾸라고 요구하며, 모두가 하는 방식과 다르다고 몰아세워 상대를 바보처럼 느끼게 만듭니다. 방어적으로 된 사람에게서 돌아올 반응은 과도하게 감정적일 것입니다.
같은 내용을 더 낫게 말하는 방법은 이렇습니다. "여기 이 부분의 제어 흐름이 좀 헷갈리네요. xyzzy 코드 패턴을 쓰면 더 명확하고 유지보수하기 쉬워지지 않을까요?" 겸손을 활용해 질문의 초점을 상대가 아니라 나에게 둡니다. 그가 틀린 게 아니라, 내가 코드를 이해하기 어려운 것입니다. 이 제안은 그저 사안을 명확히 하려는 방법일 뿐이며, 프로젝트의 장기적인 지속 가능성에도 도움이 될 수 있습니다. 또한 아무것도 요구하지 않습니다—협업자가 제안을 평화롭게 거절할 여지를 줍니다. 논의는 코드 그 자체의 영역에 머무르고, 누구의 가치나 코딩 실력에 관한 이야기가 아닙니다.
빠르게 실패하고 반복하기
사업 세계에는 잘 알려진(그리고 다소 진부한) 도시 전설이 있습니다. 한 관리자가 실수를 저질러 무려 1,000만 달러의 손실을 냈다는 이야기입니다. 그는 다음 날 풀이 죽어 출근해 책상을 정리하기 시작하고, 예고된 전화—"CEO께서 지금 당장 보자십니다"—를 받자, CEO 사무실로 걸어가 조용히 종이 한 장을 책상 너머로 밀어줍니다.
CEO는 묻습니다. "이게 뭐지?"
임원이 답합니다. "사직서입니다. 절 해고하려고 부르신 줄 았습니다."
CEO가 믿기지 않는다는 듯 말합니다. "당신을 해고하라고? 왜 내가 당신을 해고하겠소? 방금 1,000만 달러를 들여 당신을 훈련시켰는데!"[7]
다소 극단적인 이야기지만, 이 이야기의 CEO는 임원을 해고한다고 해서 1,000만 달러의 손실이 사라지지 않는다는 점을 이해하고 있습니다. 오히려 다시는 그런 실수를 저지르지 않을 귀중한 임원까지 잃어 손실을 키우게 될 뿐이죠.
구글에서 우리가 좋아하는 모토 중 하나는 "실패해도 된다(Failure is an option)"입니다. 때때로 실패하지 않는다면, 충분히 혁신적이지 않거나 충분한 위험을 감수하지 않고 있다는 뜻으로 널리 받아들여집니다. 실패는 다음 시도를 위한 학습과 개선의 황금 같은 기회로 여겨집니다. 실제로 토머스 에디슨은 종종 이렇게 인용됩니다. "어떤 것이 작동하지 않는 1만 가지 방법을 찾아냈다면, 나는 실패한 것이 아니다. 나는 낙담하지 않는다. 버려진 잘못된 시도 하나하나가 앞으로 나아가는 또 한 걸음이기 때문이다."
구글 X—Google Glass, 자율주행차 같은 '문샷’을 다루는 부서—에서는 실패가 의도적으로 인센티브 체계에 포함되어 있습니다. 사람들은 기상천외한 아이디어를 내고, 동료들은 가능한 한 빨리 그 아이디어를 반박하도록 적극 장려됩니다. 개인들은 정해진 기간 동안 얼마나 많은 아이디어를 반증하거나 무효화할 수 있는지로 보상을 받기도 하고 심지어 경쟁하기도 합니다. 모든 동료가 화이트보드에서 정말 반박할 수 없을 때에만, 그때서야 초기 프로토타입 단계로 진행합니다.
실수에서 배우는 핵심은 실패를 문서화하는 것입니다. 우리 업계에서는 이를 종종 "사후 분석(postmortem)"이라 부릅니다. 사후 분석 문서가 단지 쓸모없는 사과나 변명의 목록이 되지 않도록 특별히 주의하세요—그것이 목적이 아닙니다. 제대로 된 사후 분석에는 무엇을 배웠는지와 그 학습의 결과로 무엇이 바뀔 것인지가 반드시 포함되어야 합니다. 그리고 찾기 쉬운 곳에 보관하고, 제안된 변경 사항을 실제로 끝까지 실행하세요. 실패를 올바르게 문서화하면, 다른 사람들이(현재와 미래의 사람들 모두) 무슨 일이 일어났는지 알고 역사를 반복하지 않도록 도울 수 있습니다. 당신의 흔적을 지우지 마세요—뒤따르는 사람들을 위해 활주로처럼 환하게 밝혀 두세요!
좋은 사후 분석은 다음을 포함해야 합니다:
-
간단한 요약
-
사건의 타임라인(발견부터 조사, 해결까지)
-
사건의 1차 원인
-
영향 및 피해 평가
-
문제를 즉시 해결하기 위한 실행 항목들
-
같은 사건이 다시 발생하지 않도록 예방하는 실행 항목들
-
배운 점
배우기 위한 시간을 마련하기
신디는 슈퍼스타였다. 자신의 전문 분야를 진정으로 정복한 소프트웨어 엔지니어였다. 기술 리드로 승진했고 책임이 늘어났으며 그 도전을 훌륭히 받아들였다. 얼마 지나지 않아 주변 모두를 멘토링하며 요령을 가르쳤다. 자신의 주제로 컨퍼런스에서 발표했고 곧 여러 팀을 맡게 되었다. 그녀는 항상 '전문가’로 대접받는 것을 정말 사랑했다. 그런데도 점점 지루해지기 시작했다. 어느 순간부터 새로운 것을 배우지 않게 된 것이다. 가장 현명하고 경험 많은 전문가라는 신선함은 서서히 바래기 시작했다. 겉으로 보이는 숙련과 성공의 모든 징후에도 불구하고, 뭔가 빠져 있었다. 그러던 어느 날, 출근해서 보니 자신이 선택한 분야가 더는 그다지 관련성이 없다는 것을 깨달았다. 사람들은 이미 다른 주제로 관심을 옮겨가 있었다. 어디서 잘못된 걸까?
솔직히 말하면, 속한 조직에서 아는 것이 가장 많다는 것은 정말 재미있는 일이고, 다른 사람을 멘토링하는 일은 엄청 보람있습니다. 문제는 팀에서 '국지적 최대치’에 도달하면 학습이 멈춘다는 것입니다. 그리고 배우지 않으면 지루해집니다. 아니면 어느새 구식이 되어 버립니다. 선두 주자가 되는 데 중독되기 쉽지만, 약간의 자아를 내려놓아야만 방향을 바꾸고 새로운 것들에 노출될 수 있습니다. 다시 말해, 더 많이 가르치는 만큼 배우려는 겸손을 키워야 합니다. 때때로 컴포트 존 밖으로 자신을 밀어야 합니다. 당신보다 큰 물고기가 있는 어항을 찾아 그들이 내미는 도전에 올라타라. 장기적으로 훨씬 더 행복해질 것이다.
인내심을 배우기
수년 전, Fitz는 CVS 저장소를 Subversion(나중에는 Git)으로 변환하는 도구를 만들고 있었고, CVS의 변덕스러움 때문에 기괴한 버그들을 계속 파헤쳐냈다. 오랜 친구이자 동료인 Karl이 CVS에 매우 정통했기에, 둘은 함께 이 버그들을 고치기로 했다.
함께 페어 프로그래밍을 시작하자 문제가 생겼다. Fitz는 바닥부터 올라가는 엔지니어로 진흙탕에 뛰어들어 빠르게 많은 시도를 하며 세부를 훑고 지나가는 편이었고, Karl은 위에서 아래로 내려가는 엔지니어로 전체 지형을 파악하고 호출 스택의 거의 모든 메서드 구현을 들여다본 뒤 버그를 건드리길 원했다. 그 결과 거대한 갈등과 논쟁, 때로는 격한 언쟁이 벌어졌다. 결국 둘은 함께 페어 프로그래밍을 할 수 없을 지경에 이르렀다. 둘 모두에게 너무 좌절스러웠던 것이다.
그렇다 해도 둘은 오래된 신뢰와 존중의 역사가 있었다. 여기에 인내가 더해져 새로운 협업 방식을 찾아냈다. 함께 컴퓨터 앞에 앉아 버그를 확인한 뒤, 둘이 갈라져 동시에 두 방향(탑다운과 보텀업)에서 문제를 공략하고, 각자의 결과를 들고 가운데에서 다시 만났다. 그들의 인내와 새로운 작업 방식을 기꺼이 시도하려는 태도는 프로젝트뿐 아니라 우정까지 지켜냈다.
다른 사람에게 영향받는 것에 열려있기
당신이 영향에 열려 있을수록, 오히려 더 큰 영향을 미칠 수 있습니다. 더 취약해질수록, 당신은 더 강해 보입니다. 얼핏 모순처럼 들리지만, 누구나 함께 일했던 사람들 중 고집이 너무 세서 미치게 만드는 누군가를 떠올릴 수 있을 겁니다. 사람들이 아무리 설득하려 해도 그는 더 깊이 발을 굽니다. 이런 팀원에게 결국 무슨 일이 벌어질까요? 우리의 경험상, 모두가 그냥 존재하는 장애물로 여기며 우회해 버립니다. 사람들은 그의 의견이나 이의를 듣지 않게 됩니다. 당신이 그런 처지가 되지 않으려면, 이런 생각을 항상 기억하세요: 다른 사람이 당신의 생각을 바꾸도록 해도 괜찮습니다. 싸움을 현명하게 고르세요. 제대로 들리려면 먼저 다른 사람을 들어야 합니다. 영향받는 경우라면, 땅에 말뚝을 박거나 이미 결정을 굳혔다고 선언하기 전에 이 경청이 일어나야 합니다—계속 마음이 바뀐다면, 사람들은 당신을 우유부단하다고 생각할 것입니다.
취약함에 관해서라면, 처음에는 조금 이상하게 느껴질 수 있습니다. 누군가가 지금 주제에 무지하다고 인정하거나 문제를 어떻게 풀어야 할지 모르겠다고 말한다면, 그 사람이 집단 안에서 어떤 신뢰를 얻을 수 있을까요? 취약함은 약함의 표시이고 신뢰를 파괴한다고요? 그렇지 않습니다. 실수를 인정하거나 그냥 자신의 역량 밖이라고 인정하는 일은 장기적으로 당신의 지위를 오히려 높이는 방법입니다. 사실 이것은 HRT 전체를 포괄합니다. 겉으로 드러나는 겸손의 표현이며, 책무성과 책임을 지는 태도이고, 다른 이들의 의견을 신뢰한다는 신호입니다. 그 대가로 사람들은 당신의 정직함과 강인함을 존중하게 됩니다. 때로 당신이 할 수 있는 최선은 "모르겠습니다"라고 말하는 것뿐입니다.

전문 정치인을 생각해 보세요. 그들은 틀렸거나 주제에 대해 지식이 없다는 것이 명백할 때조차 결코 오류나 무지를 인정하지 않는 것으로 악명이 높습니다. 그래서 대부분의 사람들은 정치인이 말하는 한 마디도 믿지 않습니다. 이런 행동은 주로 정치인들이 상대의 끊임없는 공격을 받기 때문에 존재합니다. 그러나 소프트웨어를 작성할 때는, 항상 방어 태세로 살 필요가 없습니다. 당신의 팀원들은 경쟁자가 아니라 협력자입니다.
다음 단계
여기까지 읽었다면, 당신은 "다른 사람들과 잘 지내는 법"의 기술을 익히는 길에 잘 올라선 것입니다. 시작은 당신 자신의 행동을 검토하고 곱씹는 것으로부터 해야 합니다. 이러한 전략을 일상에 녹여 내면, 협업이 훨씬 더 자연스러워지고, 엔지니어링 생산성이 눈에 띄게 증가하기 시작할 것입니다.
중요한 변화는 당신에게서 시작해 바깥으로 퍼져 나갑니다. 다음 장에서는 당신의 즉각적인 팀 안에 HRT 문화를 만드는 방법에 대해 이야기하겠습니다.
Chapter 2. Building an Awesome Team Culture
팀 문화는 놀라울 만큼 다양하며 매우 폭넓은 가치와 우선순위를 반영합니다. 어떤 문화는 팀의 성공을 촉진하지만, 어떤 문화는 대규모의 실패를 부추기기도 합니다. 성공적인 팀을 이끄는 문화들 사이에서도, 어떤 문화는 믿을 수 없을 정도로 효율적이라 팀이 하려던 일에 대부분의 노력을 집중하게 만들고, 어떤 문화는 당면 과제에서 팀을 크게 산만하게 만들기도 합니다. 이 장에서는 성공에 기여하는 다양한 커뮤니케이션 기법에 강하게 초점을 맞춰 문화를 이야기합니다. 또한 이러한 기법들을 사람이 모인 팀이 어떤 제품이든 더 효율적으로 만들어내는 데 어떻게 사용할 수 있는지 살펴보겠습니다.
문화란 무엇인가?
‘문화’라는 말을 들으면 대개 오페라 같은 공연이나, 고등학교 생물 시간에 봤던 박테리아가 자라던 젤리 접시를 떠올리게 됩니다. 사실 엔지니어링 팀 문화는 박테리아 배양실험과 그리 다르지 않습니다.

정말 맛있는 사워도우 빵을 먹어보고 굽는 사람을 일부러 찾아가 본 적이 있다면, 그 빵의 핵심 재료가 밀가루와 물을 먹고 사는 효모와 유산균이 들어 있는 ‘스타터’라는 사실을 알게 될 것입니다. 효모는 빵을 부풀게 하고, 박테리아는 그 놀라운 톡 쏘는 새콤한 풍미를 만듭니다. 하지만 모든 유산균이 똑같지는 않아서, 어떤 균주는 더 바람직한 맛을 내기도 합니다. 그래서 어느 제빵사가 정말 훌륭한 사워도우 풍미를 내는 스타터(즉, 박테리아/효모 혼합 배양)를 발견하면, 같은 배양을 유지·증식시키기 위해 밀가루와 물을 보충하며 정성껏 돌봅니다. 그런 다음 스타터를 조금씩 덜어 한 덩이의 빵 재료에 접종하고, 짜잔, 훌륭한 사워도우 한 덩이가 나옵니다! 이는 스타터의 배양이 원하는 맛을 만들어낼 뿐 아니라, 반죽 재료나 제과점 공기 중에 있을 수 있는 다른 야생 효모나 박테리아의 균주들을 제압할 만큼 충분히 강하기 때문입니다.

여러분의 팀 문화는 좋은 사워도우 한 덩이와도 같습니다. 스타터 배양(창업자와 초기 구성원)은 새 반죽(신규 입사자)을 문화로 ‘접종’하고, 효모와 박테리아(팀원)가 자라면서 훌륭한 빵(팀)이 나옵니다. 스타터 문화가 강하면, 신입이 가져올 수 있는 바람직하지 않은 ‘야생 균주’의 문화까지도 충분히 제압할 수 있습니다.[8] 반대로 스타터 문화가 약하면, 팀은 신입이 가져올지 모르는 미지의 문화 균주에 취약해집니다. 낯선 문화는 예측 불가능한 결과를 동반하므로, 알려진 스타터 문화로 시작하는 편이 더 낫습니다.
하지만 팀 문화는 팀원들이 일을 다루는 방식이나 코드를 작성하는 방식, 서로를 대하는 태도만을 의미하지 않습니다. 우리가 몸담았거나 관찰했던 모든 엔지니어링 팀마다 고유한, 공유된 경험·가치·목표의 집합이 곧 문화입니다. 팀이나 회사의 창립 구성원이 팀 문화의 큰 부분을 규정하지만, 문화는 팀이 존속하는 동안 계속 변하고 발전합니다.
팀 문화를 이루는 요소는 실로 제각각입니다. 어떤 것은 일하는 과정과 직접적으로 관련이 있습니다. 소프트웨어 개발의 경우 코드 리뷰와 테스트 주도 개발을 도입하고, 산더미 같은 코드를 양산하기 전에 좋은 디자인 문서를 중시할 수 있습니다. 어떤 요소는 더 사회적입니다. 예를 들어 매주 목요일마다 특정 식당에 점심을 먹으러 가거나, 금요일마다 단골 바에 가서 한잔하는 것처럼요. 외부인의 눈에는 어떤 것들은 완전히 엉뚱하거나 우스꽝스러워 보일 수도 있습니다. 구글 피츠버그 엔지니어링 오피스는 한때 화물열차 선로 바로 옆에 있었는데, 기차가 지나갈 때마다(정말 엄청 시끄럽습니다) 모두가 벌떡 일어나 서로에게 너프 다트를 쏘곤 했습니다.[9] 이 모든 것이 팀 문화를 구성하며, 팀의 생산성과 훌륭한 인재를 끌어들이고 유지하는 능력에 영향을 미칩니다.
오늘날 엄청난 성공을 거둔 소프트웨어 회사들—구글, 애플, 마이크로소프트, 오라클—을 보면, 각 회사가 매우 다른 문화를 가지고 있음을 알 수 있습니다. 그 문화는 창업자와 초기 직원들이 세운 문화에 뿌리를 두고 있습니다. 회사들이 성장하고 성숙해 오면서 문화도 진화하고 변해 왔지만, 제품을 개발하는 방식, 직원을 대하는 방식, 다른 회사와 경쟁하는 방식 등 거의 모든 측면에 스며드는 고유한 정체성은 여전히 유지되고 있습니다.
그게 왜 중요한가?
요약하면, 여러분은 문화에 신경 써야 합니다. 문화에 공을 들여 만들고 유지하지 않으면, 언젠가 강한 개성을 지닌 사람들이 들어와 팀 안에 그들만의 문화를 키워 버릴 것이기 때문입니다. 이렇게 길러진 문화가 운 좋게도 생산적이고 건강해서 훌륭한 코드를 쏟아내는 경우도 있겠지만, 대체로 그렇지 않습니다. 그러면 제품을 설계하고 만드는 데 쓰이던 에너지가 갑자기 논쟁과 내분으로 소모되기 시작합니다. 더 나아가 팀이 가치 있게 여기고 지키고자 하는 문화가 있어야 합니다. 팀이 문화를 소중히 여기지 않으면 강한 팀 정체성과 공동의 자부심을 쌓기 어렵고, 새로운 팀원이 들어와 문화를 엉망으로 바꾸어 버리기 아주 쉬워집니다.
대부분의 팀 구성원이 저지르는 첫 번째 실수는 팀의 문화는 팀 리더가 관리한다고 가정하는 것입니다. 사실과 정반대입니다. 창업자나 리더들이 보통 문화의 건강을 돌보긴 하지만 팀의 모든 구성원이 문화를 함께 만들고, 유지하고, 지켜낼 책임을 나눠 갖습니다. 누군가 팀에 합류하면, 그 사람은 리더에게서만 문화를 배우는 것이 아니라 같이 일하는 모든 팀원에게서 문화를 받아들입니다. 예를 들어, 새로운 팀원의 작업을 꼼꼼히 리뷰하며 왜 우리 팀이 그렇게 하는지 설명해 주면, 새로운 팀원은 팀이 제품에서 무엇을 가치 있게 여기는지 빠르게 깨닫습니다. 또한 팀의 나머지 구성원들이 어떻게 일하고 상호작용하며 갈등을 다루는지를 관찰하면서 문화 전반을 배우게 됩니다.
“강한 문화”란, 문화를 더 좋게 만드는 변화에는 열려 있으면서도, 해를 끼치는 급진적 변화에는 단호히 저항하는 문화를 말합니다. 가장 성공적인 팀 문화는 팀의 노력을 위대한 소프트웨어를 출시하는 데 집중시킵니다. 팀의 주된 초점이 소프트웨어를 만드는 일이 아니라면(예: 파티, 회의 참석, 자기 과시 경쟁), 팀 결속은 강해질지 몰라도 소프트웨어는 거의 만들어지지 않을 것입니다. 코드 작성과 제품 출시가 가장 즐겁다면, 그 가치를 중시하는 팀을 찾고 그런 환경을 유지하기 위해 노력하는 것이 분명 여러분에게 이롭습니다. 강하고 생산적인 문화 없이도 훌륭한 무언가를 만들 수는 있겠지만, 그 경우 훨씬 더 많은 시간과 에너지가 듭니다. 강한 문화는 집중, 효율, 그리고 힘을 줍니다. 이것이 팀을 더 행복하게 만듭니다.
팀 문화의 흥미로운 점은 한 번 뚜렷하게 정립되면, 그 문화에 어울리는 사람만 남게 되는 특성이 있습니다. 오픈 소스 세계에서 HRT를 기반으로 깔끔하고 우아하며 유지보수하기 쉬운 코드를 지향하는 프로젝트는—놀랍게도—서로를 존중하고 신뢰하며 그런 코드를 작성하고자 하는 엔지니어를 끌어들입니다. 반대로 공격성, 괴롭힘, 인신공격이 만연한 문화 위에 팀이 세워졌다면, 그런 사람들만 더 모이게 될 것입니다.
우리는 아파치 소프트웨어 재단에서 자기 선택적(self-selecting) 문화가 작동하는 모습을 여러 번 보았습니다. ASF는 커뮤니티 기반의 합의 모델로 운영되는 소프트웨어 개발 팀들의 모음입니다. 새로운 기여자가 메일링 리스트에 들어와 무지나 악의로 팀 문화에 어긋나는 행동을 보일 때가 종종 있습니다. 커뮤니티 구성원들은 보통 그 새로운 기여자을 교육하려고 시도합니다(가끔은 부드럽게, 가끔은 음… 그다지 부드럽지 않게). 그리고 그 새로운 기여자가 ASF 팀의 방식에 관심이 없다면, 보통은 더 잘 맞는 프로젝트를 찾으러 떠납니다.
기업 세계에서도 팀은 채용 과정을 통해 자기 선택을 이룹니다. 이는 후보자에게서 중시하는 기술과 강점이라는 암묵적 기준일 수도 있고, 채용 과정에서 문화 적합성을 명시적으로 평가하는 절차일 수도 있습니다. 구글은 명시적 접근을 택합니다. 면접에서 문화 적합성을 구체적으로 확인합니다. 모든 면에서 뛰어난 엔지니어처럼 보여도, 사람들과 팀으로 일하지 못하거나 지나치게 구조화된 환경만을 요구한다면, 면접관들은 피드백에 경고(red flag)를 남깁니다.
채용에서 문화 적합성을 살피지 않고 맞지 않는 사람을 뽑는다면, 그 사람이 팀에 맞도록 적응시키거나 팀을 떠나게 만드는 데 엄청난 에너지를 쓰게 됩니다. 결과가 어떻든 비용이 매우 크기 때문에, 새 팀원이 기존 팀과 잘 맞을지를 미리 확인하는 것이 확실히 그만한 가치가 있습니다.
Note
|
문화 적합성 인터뷰
새 팀원이 문화적으로 맞는지 확실히 하려면, 그 자체를 위한 인터뷰를 해야 합니다. 많은 회사(구글 같은)는 면접에서 문화 적합성을 후보자 평가 기준 중 하나로 둡니다. 어떤 회사는 채용 실수를 피하려고 한 발 더 나아갑니다. 기술 면접 이전에 문화 적합성만 따로 보는 면접을 진행해, 기술적으로는 맞아도 문화적으로 맞지 않는 사람은 아예 고려하지 않으려는 것입니다. 이런 과정에의 개입은 강한 문화를 만들고 지키는 데 결정적입니다. 우연히 이루어지지 않습니다. 보통 회사의 창립자와 초기 직원들이 의식적으로 설계합니다. |
문화와 사람
소프트웨어를 개발하는 것과 같은 창의적 일은 단순히 조립 라인에서 부품을 찍어내는 일과 다릅니다. 어떤 일은 며칠간의 교육과 기본 도구만으로도 해낼 수 있고, 사람이 그만두거나 맞지 않으면 다른 사람을 투입해 이어갈 수도 있습니다. 조립 라인 환경에서는 창의적 사고나 문제 해결 능력이 거의 요구되지 않는 단순 작업을 종종 반복합니다. 반면 소프트웨어 세계에서는 제품을 만드는 엔지니어에게 많은 창의적 사고가 요구됩니다.[10] 훌륭한 제품을 원한다면, 훌륭한 엔지니어가 필요합니다. 훌륭한 엔지니어가 좋은 일을 하고 오래 함께하도록 하려면, 아이디어를 안전하게 공유하고 의사결정 과정에서 목소리를 낼 수 있는 문화를 만들어야 합니다.
뛰어난 엔지니어들을 팀으로 데려오고 싶다면, 우선은.. 네, 뛰어난 엔지니어를 채용하는 것부터 시작해야 합니다! 다소 이상하게 들릴지 몰라도 사실입니다. 대부분의 훌륭한 엔지니어는 다른 훌륭한 엔지니어들과 함께하는 팀을 원합니다. 우리가 아는 많은 뛰어난 엔지니어는 업계의 거인들에게서 배울 수 있는 팀으로 모여듭니다.[11] 그럼 애초에 이들을 어떻게 끌어들일 수 있을까요?
먼저, 이들은 단지 제품 개발에 기여하는 것을 넘어, 제품에 대한 의사결정 과정에도 참여하길 원합니다. 이는 대개 일정 수준의 합의 주도형 경영을 의미합니다. 반면 상명하복식(top-down) 관리에서는 알파 엔지니어가 팀 리드가 되고, 그보다 낮은 엔지니어들이 팀원으로 채용됩니다. 순응적인 팀원일수록 비용이 적게 들고 다루기 쉽기 때문입니다. 하지만 이렇게 하면 훌륭한 엔지니어를 팀으로 데려오기 어렵습니다. 다른 회사에서는 운전석에 앉을 수 있는데 굳이 여기서 승객이 되려 할 훌륭한 엔지니어가 누가 있겠습니까? 반면 합의 주도형 경영에서는 팀 전체가 의사결정 과정에 참여합니다.
“합의 기반 팀”이라고 하면, 모닥불 옆에서 ‘쿰바야’를 부르며 결정 하나 못 내리고 아무것도 못 하는 히피 무리를 떠올리는 사람이 많습니다. 그러나 그런 고정관념은 합의 기반 팀이 아니라 기능장애 팀의 징후에 가깝습니다. 우리가 말하는 “합의”란 모든 구성원이 제품의 성공에 대해 강한 소유감과 책임감을 갖고, 리더가 팀의 목소리를 진지하게 귀 기울여 듣는 것(HRT의 “존중” 요소를 강조)입니다. 제품이 성공하려면 때로는 충분한 토론과 숙고가 필요할 때가 있고, 다른 때에는 빠르게 움직여야 한다고 팀이 합의할 때도 있습니다. 후자의 경우 팀원들은 일상적인 세부 의사결정의 많은 부분을 한 명 또는 여러 명의 팀 리드에게 위임하기로 결정할 수 있습니다.[12] 이를 위해서는 팀 전체가 팀의 전반적 미션에 동의해야 하며, 믿기 어렵겠지만 그 핵심은 팀의 미션 스테이트먼트(이 장 뒤에서 더 다룹니다)를 만드는 것입니다.
팀의 의사결정 과정만큼이나 중요한 것은 팀원들이 서로를 대하는 방식입니다. 이는 무엇보다도 자기 선택적이기 때문입니다. 가슴을 치며 고함치고 서로에게 소리를 지르는 문화에서는, 강한 개인의 자아가 지배적인 환경에 익숙한 공격적인 유형의 사람들만 끌리고(그리고 남게) 됩니다(실제로 우리가 아는 많은 여성들은 이런 환경을 특히 불쾌해합니다). 반대로 서로를 친절히 대하고 건설적 비판을 주기 위해 노력하는 HRT에 기반한 문화를 만들면, 훨씬 더 다양한 사람들을 끌어들일 수 있고, 소프트웨어를 작성하는데 훨씬 더 많은 에너지를 쏟게 됩니다. 강한 팀 자아[13]는 좋습니다. 그러나 개인의 자아가 팀 전체를 가리는 상황은 재앙의 처방전입니다. 이런 상황을 어떻게 예방할지는 Chapter 4. Dealing with Poisonous People에서 다루겠습니다.
건설적 비판은 개인이나 팀의 성장과 발전에 필수적입니다. 하지만 많은 사람들은 비판을 구하는 일을 어떻게든 피하려 듭니다. 어떤 경우엔 불안감 때문이지만, 우리가 보기엔 대체로 받은 비판에 동의하지 않더라도 반드시 행동으로 옮겨야 한다고 생각하기 때문입니다. 건설적 비판의 가장 좋은 점은, 어떤 부분을 행동으로 옮길지 여러분이 선택할 수 있다는 것입니다. 예를 들어 중요한 면접을 앞두고 가장 좋아하는 정장을 입었다고 합시다. 신뢰하는 친구에게 어떻게 보이는지 묻습니다. “이 사이에 시금치 끼었고, 솔직히 옷은 별로야”라고 하면, 바로 치실로 해결하면 됩니다. 옷까지 바꿀 필요는 없습니다. 비판은 여러분이 받아들일 수도, 거절할 수도 있는 선물입니다.
여러분의 일을 더 잘하고 개인적인 결함을 고치는 데 관심이 있다면, 바로 그런 친구와 동료들이 여러분의 효율을 떨어뜨리는 습관을 자각하게 만들어 줄 사람들입니다. 아주 놀라운 수준의 자기 인식이나 성찰 능력이 있지 않은 한, 비판이 없으면 아무도 말해 주지 않는 같은 실수를 계속 반복하게 됩니다. 예컨대 이 책을 출간하는 과정에서 우리는 12명 넘는 사람들이 우리 글을 읽고 건설적 비판을 해주었고, 그 대부분이 믿을 수 없을 만큼 세밀하고 정말 귀중했습니다. 여러분이 이 책을 좋다고 보든 나쁘다고 보든, 우리가 이 귀중한 피드백을 무시했거나 묻기를 두려워했다면 책은 훨씬 더 형편없어졌을 것입니다.
어떤 비판이든 받아들이려면 일정 수준의 자신감이 필요하고, 그중에서도 건설적 비판이 가장 받아들이기 쉽다고 생각합니다. 반면 남에게 건설적 비판을 해주는 일은, 그저 몰아붙이거나 조롱하는 것보다 훨씬 어렵습니다. 대부분의 사람에게 건설적 비판을 부탁하고 실제로 받는 일은 매우 어렵다는 것도 잘 알고 있습니다. 많은 사람들이 여러분이 비판을 요청하면 사실 칭찬과 안심만을 원한다고 생각하기 때문입니다. 여러분이 요청할 때 건설적으로 비판해 줄 수 있는 친구나 동료를 찾았다면, 그들은 ‘언옵테이니엄(unobtainium)’만큼 귀한 사람들이니 꼭 붙잡으세요.
공격적인 사람은(보통) 더 조용한 환경에서도 생산적으로 일할 수 있습니다. 하지만 조용하고 내향적인 사람은 공격적인 환경에서 뛰어나기(혹은 즐겁게 일하기) 어렵습니다. 소음 속에서 그들의 목소리를 듣기 어려울 뿐 아니라, 적극적으로 참여하지 않게 만들기 때문입니다.[14] 가장 넓은 범위의 사람들이 가장 효율적으로 일할 수 있는 문화를 원한다면, 그 문화는 겸손, 존중, 신뢰 위에 세워야 합니다.
존중을 바탕으로 한 차분하고 느긋한 문화는, 공격적인 문화가 느긋한 사람들에게서 받는 방해보다 공격적인 사람들로부터 받는 방해가 더 심합니다. 느긋한 문화는 이를 인지하고, 보통은 공격적인 어조로 맞대응하지 않음으로써, 공격적인 새로운 팀원이 주도권을 잡지 못하게 해야 합니다. 경우에 따라서는 선임 팀원 중 한 명 이상이 나서서 그 공격적인 새로운 팀원을 정면으로 상대해, 온화한 팀 문화를 해치지 못하도록 막아야 할 수도 있습니다. 이런 “독이 되는 사람들”을 다루는 법은 Chapter 4. Dealing with Poisonous People에서 더 자세히 이야기하겠습니다.
성공적인 문화의 커뮤니케이션 패턴들
팀으로 일할 때 커뮤니케이션은 종종 어려운 과제가 됩니다. 특히 예측 가능하고 논리적인 컴파일러와 오후 내내 씨름하는 편이, 예측 불가능하고 감정적인 인간과 3분간 대화하는 것보다 낫다고 느끼는 엔지니어에게는 더 그렇습니다. 많은 경우 엔지니어는 커뮤니케이션을 더 많은 코드를 쓰기 위해 넘어야 할 장애물로 봅니다. 하지만 팀이 합의하지 않았거나 정보가 공유되지 않았다면, 애초에 여러분이 올바른 코드를 작성하고 있는지조차 알 수 없습니다.

성공적이고 효율적인 문화를 살펴보면, 메일링 리스트, 디자인 문서, 채팅방, 미션 스테이트먼트, 코드 주석, 운영 방법서 등 수많은 커뮤니케이션 채널에 높은 가치를 두고 있음을 알 수 있습니다. 팀의 모든 구성원이 팀의 방향에 동의하고 무엇을 해야 하는지 정확히 이해하도록 만드는 데는 상당한 노력이 듭니다. 그러나 이 모든 노력은 생산성과 팀의 행복을 높여주는 투자입니다.
커뮤니케이션의 일반적인 규칙은 회의, 통화와 같은 동기식 커뮤니케이션에는 꼭 필요한 최소한의 사람만 포함하고, 이메일, 이슈 트래커, 문서 댓글과 같은 비동기식 커뮤니케이션에는 더 폭넓은 대상을 포함하라는 것입니다. 동기식 커뮤니케이션은 비용이 큽니다. 상대의 업무 시간을 끊고 여러분의 일정에 맞춰 정보를 받도록 요구하기 때문입니다. 반대로 비동기식 커뮤니케이션은 수신자가 가장 편한 시간과 장소에서 처리할 수 있습니다. 누군가의 일을 방해할 때마다 다시 몰입 상태로 돌아오려면 시간이 걸립니다—여러분이 방해를 만드는 순간을 항상 의식하세요.
하지만 가장 중요한 것은, 프로젝트 문서를 통해 모든 정보를 가능한 한 많은 사람이 접근할 수 있도록 보장하는 것입니다. 이제 팀으로 소프트웨어를 만드는 과정에서 사람들이 활용하는 주요 커뮤니케이션 수단들을 살펴보겠습니다. 언뜻 당연해 보이는 것들도 있겠지만, 다시 짚을 만한 미묘한 차이가 많습니다. 한 가지는 분명합니다. 커뮤니케이션에 노력을 들이지 않으면, 불필요한 일을 하거나 이미 다른 팀원이 하고 있는 일을 되풀이하느라 엄청난 노력이 낭비됩니다.
상위 수준 동기화
가장 상위 수준에서 팀은 공통 목표를 동기화하고 진행 상황 소통에 관한 모범 사례를 따라야 합니다.
미션 스테이트먼트—정말로
누군가 “미션 스테이트먼트”이라고 말하면, 대기업들이 흔히 내세우는 싱겁고 과장된 마케팅 문구가 먼저 떠오르기 마련입니다. 예를 들어, 이름은 밝히지 않을 어느 대형 통신사의 미션 문구를 보시죠:
우리는 세계에서 가장 존경받고 가치 있는 회사가 되기를 열망합니다. 우리의 목표는 흥미롭고 유용한 통신 서비스를 시장에 출시함으로써 고객의 개인 생활을 풍요롭게 하고 그들의 비즈니스를 더욱 성공적으로 만들며, 이 과정에서 주주 가치를 창출하는 것입니다.
아이러니하게도, 우리는 그 회사를 존경한다고 말하는 사람을 아직 못 만났습니다! 다음은 다른 대기업의 예시입니다:
고객의 요구사항을 충족하기 위한 실시간 솔루션을 제공합니다.
도대체 무슨 뜻일까요? 문자 그대로 아무 의미로나 해석될 수 있습니다—우리가 그 회사에서 일한다면, 차를 닦는 일이 중요한지, 새는 파이프를 고치는 게 중요한지, 아니면 피자를 배달하는 게 중요한지조차 알 수 없을 겁니다. 바로 이런 기업식 이중언어 때문에 미션 스테이트먼트가 나쁜 평판을 얻게 됩니다.
효과적이고 효율적인 팀에게 미션 스테이트먼트 작성은, 제품의 방향을 간결하게 정의하고 범위를 제한하는 방법입니다. 좋은 미션 스테이트먼트를 쓰려면 시간과 노력이 들지만, 팀이 해야 할 일과 하지 말아야 할 일을 명확히 함으로써 잠재적으로 수년간의의 일을 절약할 수 있습니다.[15]
구글이 Google Web Toolkit(GWT)의 개발을 오픈 소스 프로젝트로 전환하기로 했을 때, 우리는 팀의 멘토를 맡았습니다. 오픈 소스와 폐쇄형 개발 사이의 여러 차이를 검토하며, 누구나 끼어들어 의견을 내고, 패치를 기여하며, 제품의 사소한 부분까지 비판할 수 있는 환경에서 설계·토론·코드 작성이 얼마나 어려운지에 특히 주목했습니다.[16] 이런 도전들을 살펴본 뒤, 우리는 팀에 미션 스테이트먼트를 만들어 대중에게 제품의 목표(그리고 비목표)를 설명하라고 권했습니다.
팀원들 중 일부는 앞서 말한 이유들로 난색을 보였지만, 다른 이들은 호기심을 보였고 팀 리드는 훌륭한 제안이라 여기는 듯했습니다. 그러나 막상 미션 스테이트먼트를 쓰기 시작하자, 내용과 골자, 문체를 두고 논쟁이 이어졌습니다. 충분한 토론(과 몇 번의 추가 회의) 끝에 팀은 훌륭하고 간결한 미션 스테이트먼트 뿐만 아니라, 해당 문장을 구절별로 설명한 “Making GWT Better”라는 전체 문서를 만들었습니다.[17] 심지어 프로젝트의 비목표가 무엇인지 설명하는 섹션까지 포함했습니다. 다음이 그 미션 내용입니다:
GWT의 미션은 개발자가 기존 Java 도구를 사용해 모든 최신 브라우저에서 동작하는 타협 없는 AJAX를 구축할 수 있도록 함으로써 사용자의 웹 경험을 획기적으로 개선하는 것입니다.
저 짧은 문장에 실질적인 내용이 가득합니다. 방향(“개발자가 사용할 수 있도록 하여 웹 경험을 개선”)과 범위 제한(“Java 도구”)이 모두 담겼다는 점에서 미션 스테이트먼트의 훌륭한 본보기입니다. 수년 뒤 팀 리드와 저녁을 먹으며, Fitz는 팀이 미션 스테이트먼트를 쓰도록 한 노력에 그가 강력히 힘을 실어 준 데 대해 고맙다고 말했습니다. 그는 처음에는 이 모든 과정이 시간 낭비라고 생각했지만, 팀과 논의를 시작하고 나서야 자신도 몰랐던 사실—리드 엔지니어들이 제품의 방향에 합의하지 못하고 있었다—는 것을 알게 되었다고 답했습니다.
이 경우 미션 스테이트먼트를 쓰는 과정이 팀의 이견을 마주하게 했고, 제품의 방향에 합의하도록 만들었습니다. 그렇지 않았다면 시간이 지날수록 개발이 느려지거나 멈췄을 수도 있는 문제였습니다. 그들은 미션 스테이트먼트를 웹에 게시했고, 전 팀이 제품에서 무엇을 하려는지에 ‘레이저처럼’ 집중하게 되었을 뿐 아니라, 기여 희망자들과 제품 방향을 두고 몇 달을 소모할 논쟁도 줄었습니다—신규 팀원에게 “Making GWT Better”를 안내하면 대부분의 질문이 해결됐습니다.

프로젝트가 진행되는 동안, 미션 스테이트먼트는 궤도를 유지하게 합니다. 다만 변화에 대한 넘을 수 없는 장벽이 되어서는 안 됩니다. 환경이나 사업 계획에 급격한 변화가 생기면(예: 스타트업), 팀은 스스로에게 솔직해져 그 미션이 여전히 유효한지 재평가해야 합니다. 헌법을 변경하기 어렵게 만든 이유는, 변덕으로 변경하지 못하게 하기 위해서입니다. 하지만 격변의 시기에는 적어도 변경할 가능성이 있어야 하며, 검토되어야 합니다. 회사나 제품이 급격히 방향을 전환한다면, 미션 스테이트먼트도 그에 맞춰 업데이트되어야 합니다.
효율적인 회의
대부분의 사람은 회의를 ‘필요악’으로 분류합니다. 잘만 쓰면 매우 효과적일 수 있지만, 회의는 자주 남용되고, 보통 정리가 안 되어 있으며, 거의 언제나 너무 깁니다. 우리는 회의를 하수처리장처럼 대합니다. 적고, 드물며, 바람 아래에 있길 바랍니다. 그래서 이 섹션은 짧게, 팀 회의만 다루겠습니다.
모든 회의 중 가장 두려운 것부터 시작해 봅시다. 정기 회의입니다. 이 회의는 보통 매주 열리며, 기본적인 공지와 소개로 딱 제한해야 합니다. 참석자 전원을 돌며(중요한 말이 있든 없든) 현황을 말하게 하는 관행은 시간을 낭비하고, 눈을 굴리게 만들며, 빨리 끝내려고 목을 치고 싶은 욕망을 불러일으키는 지름길입니다.
더 깊은 논의가 필요한 건 회의 후에, 관련자만 남겨서 진행하세요. 누군가 특정 주제로 깊이 파고들어 회의를 탈선시키려 할 때도 같은 방식이 좋습니다. 진행자는 그 주제를 “사이드바(sidebar)” 목록에 추가하고, 본회의가 끝난 뒤 하나씩 검토하면 됩니다. 이를 습관화하면, 주제가 벗어나기 시작할 때 누구의 기분도 상하지 않게 “사이드바”를 선언하기 쉬워집니다. 이 회의를 잘 굴리는 핵심은, 본 파트가 끝나면 사람들이 기꺼이 자리를 떠나도록 하는 것입니다. 다룰 게 없거나 이메일로 충분히 전파할 수 있으면, 주저 말고 회의를 취소하세요. 참석이 곧 지위인 양 여겨져 모두가 빠지기 싫어하는 문화도 봤습니다. 노골적으로 말해, 그건 명백히 미친 일입니다.
Note
|
데일리 스탠드업
어떤 엔지니어들은 애자일 같은 개발 방법론이 권하는 데일리 스탠드업을 강력히 신봉합니다. 짧고 핵심만 지킨다면 괜찮습니다. 이런 회의는 보통 15분 내외로, 모두가 실제로 서서 자신이 하는 일을 간단히 공유하는 것으로 시작합니다. 하지만 엄격한 경계가 없으면 곧장 30분짜리 앉은 회의로 변해, 그룹 치료처럼 주절거리는 자리가 되기 쉽습니다. 이런 회의를 할 거라면, 누군가 권위를 갖고 운영하며, 회의가 비대해지지 않게 억제해야 합니다. |
새로운 것을 설계하려면 회의는 다섯 명 이내로 유지하세요. 다섯 명이 넘으면, 한 사람이 독단적으로 결정하지 않는 이상 새로운 설계를 내고 결정을 내리기가 사실상 불가능합니다. 믿기지 않으면 친구 다섯을 불러 여섯이 함께 시내로 나가, 관광지 여섯 곳을 도는 도보 여행 코스를 정해 보세요. 한 사람을 최종 심판으로 정해 그를 따라다니는 게 아니라면, 하루 종일 길모퉁이에서 언쟁만 하게 될 확률이 높습니다.

회의는 흔히 많은 이들이 “메이크 타임(make time)”이라고 부르는 시간을 방해합니다. 이는 폴 그레이엄의 “Maker’s Schedule, Manager’s Schedule”에서 영감을 받은 개념입니다.[18] 특히 엔지니어에게는 회의 때문에 일을 계속 끊어야 하면 몰입 상태에 들어가기 어렵습니다. 캘린더에 3~4시간짜리 블록을 잡아 “바쁨” 혹은 아예 “메이크 타임”으로 표시하고, 그 시간에 일을 끝내세요. 회의를 잡아야 한다면 점심시간 같은 자연스러운 휴식 지점이나 하루의 맨 끝에 배치하세요. 구글에는 “목요일 회의 금지” 전통이 오래(그리고 안타깝게도 자주 무시되면서) 이어져 왔습니다.[19] 그냥 일만 하는 시간을 확보하기 위한 취지입니다. 이것은 더 긴 블록으로 20~30시간의 메이크 타임을 확보하는 첫걸음입니다.
Note
|
회의 운영을 위한 간단한 다섯 가지 규칙:
|
회의를 해야 한다면, 안건을 만들고 최소 하루 전에 참석자 모두에게 배포하세요. 무엇을 기대해야 하는지 알게 하려는 것입니다. 동기식 커뮤니케이션의 비용을 기억하며 가능한 적은 인원만 초대하세요. 우리가 아는 팀원, 관리자, 심지어 이사와 부사장급까지도 안건 없는 회의 초대는 단호하게 거절합니다.
회의의 목표를 달성하는 데 실제로 필요한 사람만 초대하세요. 참석자들이 집중하지 않고 이메일을 본다는 이유로 회의장 노트북 반입을 금지하는 사람들도 있습니다. 하지만 이는 원인이 아니라 증상을 공격하는 일입니다—사람들이 회의에서 이메일을 보기 시작하는 이유는, 아마도 그들이 애초에 그 회의에 있을 필요가 없기 때문입니다.
회의를 운영하는 사람은 정말로 회의를 운영해야 합니다. 주제에서 벗어나거나, 더 나쁘게는 대화를 독점하려 드는 사람을 (부드럽지만) 과감히 제지하세요. 잘 해내기 어렵지만 그만한 가치가 있습니다. 그리고 가장 중요한 점은 안건을 마쳤다면 겁내지 말고 회의를 일찍 끝내세요.
"지리적으로 분산된" 팀에서 일하기
분산된 팀의 일원이거나 원격으로 일한다면, 단지 다른 소통 방법을 찾는 데 그치지 않고, 아예 커뮤니케이션 자체에 더 많은 노력을 기울여야 합니다. 팀에 원격 근무자가 있다면, 보통 이메일을 통해 의사결정을 문서화하고 공유해야 한다는 뜻입니다. 온라인 채팅, 인스턴트 메시지, 복도 대화에서 많은 논의가 이루어질 수 있지만, 이런 관련 논의를 모두에게 전파해 모두가 정보를 받아보고 참여하도록 만드는 장치가 필요합니다(게다가 메일링 리스트 아카이브는 문서화라는 보너스도 제공합니다). 영상 통화도 빠른 대화를 이끌어내는 데 매우 유용하고, 요즘은 대부분의 노트북에 웹캠이 달려 있습니다.
서브버전(Subversion) 프로젝트에는 이런 모토가 있었습니다. “메일링 리스트에서 일어나지 않은 논의는, 실제로는 일어나지 않은 것이다.” 사람들은 채팅방에서 아이디어를 주고받는 데 많은 시간을 썼지만, 결정을 “진짜”로 만들려면 그 장면을 보지 못한 모두를 고려해야 했습니다. 대화 내용을 메일링 리스트에 다시 올리도록 함으로써, 분산된 팀 전체가 의사결정 과정을 확인할 수 있는 기회를 제공했고(원한다면 의견을 제시할 수도 있었습니다). 이는 합의 기반의 팀 문화를 장려하려 할 때 특히 중요합니다.
원격지의 누군가와 대화하는 일은, 그 사람 책상으로 걸어가 말을 거는 만큼이나 마찰이 없어야 합니다. 원격으로 일한다면, 온라인 채팅, 인스턴트 메시지, 이메일, 영상 통화, 전화 등 가능한 모든 수단으로 팀과 과하게 소통하세요. 여러분이 ‘존재’한다는 사실뿐 아니라 지금 무엇을 하고 있는지도 모두가 알도록 하기 위해서입니다. 그리고 무엇보다도, 대면 대화의 대역폭을 과소평가하지 마세요.
Fitz가 한번은 콜로라도 팀과 함께 일하는 엔지니어를 둔 적이 있습니다. 그녀는 공동 프로젝트의 동력을 얻는 데 어려움을 겪고 있었습니다. 그녀가 Fitz에게 이를 털어놓자, Fitz는 비행기를 타고 콜로라도로 가 팀과 일주일을 함께 보내며 프로젝트에 시동을 걸라고 조언했습니다. 2주 뒤, 그녀는 콜로라도에서 단 하루만 보낸 후 좋은 소식과 함께 이메일을 보냈습니다. 프로젝트에 큰 동력을 얻었을 뿐 아니라, 점심을 함께 먹고 퇴근 뒤에 한잔하면서 팀과 아주 잘 지내게 되었다는 소식이었습니다.
Ben에게는 다른 사무실 팀과 새 프로젝트를 시작한 Corey라는 팀원이 있었습니다. Corey는 새 팀에서 동력을 얻기 어렵다며, 둘의 주간 1:1에서 이를 하소연했습니다. Ben은 비행기를 타고 그 팀의 사무실로 가 일주일간 함께 앉아 프로젝트를 시작하라고 했습니다. Corey는 항공료와 숙박비 때문에 주저했지만, 그 여행의 이익을 고려하지 못하고 있었습니다. Corey는 이틀 일정으로 팀과 함께 일했고, 현장에 함께 있는 것이 얼마나 가치 있는지 즉시 깨달았습니다. 대면 대화의 추가적인 대역폭이 주는 이점뿐 아니라, 점심을 먹고 하루는 퇴근 뒤에 함께 나가며, Corey와 팀은 서로를 사람으로 알게 되었습니다. 그 결과 Corey가 천 마일이나 떨어져 있었음에도, 이후 팀과의 상호작용은 훨씬 원활해졌습니다.
Note
|
같은 공간에 있는 것을 대체할 수 있는 것은 없다
여기서 언급된 모든 사람과 사례를 통해 알 수 있는 점이 하나 있습니다. 소셜 미디어와 화상회의 기술이 아무리 발전해도, 현실에서 서로 얼굴을 맞대는 대면 대화의 대역폭과 친밀함에 비할 바가 못 된다는 것입니다. 새 프로젝트를 시작하거나 회사 내 중요한 만남이 있고, 직접 갈 예산이 있다면, 번거롭더라도 이동할 가치는 거의 언제나 충분합니다. 대면 대화의 여운은 전화나 화상 통화가 따라올 수 없는 방식으로 기억에 새겨집니다. 출장에 반대하는 흔한 주장 중 하나는 비용이 너무 많이 들거나 아예 감당할 수 없다는 것입니다. 지리적으로 분산된 소규모 회사에는 그럴 수 있습니다. 하지만 대부분의 대기업은 그 비용을 감당할 수 있습니다. 동료들과 얼굴을 맞대고 시간을 보내지 않는 데 드는 비용은 여러분이 생각하는 것보다 큽니다. |
이메일을 얼마나 하고, 채팅과 통화를 얼마나 하든, 주기적으로 비행기를 타고 팀을 방문하는 일을 두려워하지 마세요. 이는 원격 직원, 원격 팀, 원격 오피스 모두에 해당합니다—본사로 나가 사람들과 직접 대화할 시간을 만드세요.
디자인 문서
엔지니어라면 새 프로젝트에서 당장 코드 작성으로 뛰어들고 싶은 충동을 참기 어려울 때가 있습니다. 하지만 이는 (대충 뚝딱 만든 프로토타입이 아니라면) 거의 결실을 맺지 못합니다. 그럼에도 많은 엔지니어가 설계 전에 코드 작성부터 서두르고, 보통은 아주 좋지 않은 결말로 이어집니다.
디자인 문서는 보통 한 사람이 소유하고, 두세 사람이 작성하며, 더 많은 인원이 리뷰합니다. 이는 미래 프로젝트의 상위 청사진일 뿐 아니라, 무엇을 어떻게 할 것인지 더 큰 팀에 알리는 저비용의 커뮤니케이션 수단이기도 합니다. 아직 몇 주(혹은 몇 달)간 코드를 쓰지 않았기 때문에, 이 시점에는 비판을 받아들이기가 훨씬 쉽고 결국 더 나은 제품과 구현으로 이어집니다. 또한 디자인 문서를 확정하고 나면, 일정 수립과 작업 분할의 길잡이가 됩니다. 다만 코드 작성을 시작하고 나서는 디자인 문서를 돌에 새긴 것처럼 다루지 말고 살아 있는 문서로 여겨야 합니다. 프로젝트가 성장하고 변함에 따라 문서를 반드시 업데이트해야지, 출시 후에야 고치는 것이 아닙니다. 말은 쉽지만 실천은 어렵습니다. 대부분의 팀은 아예 문서가 없고, 나머지는 짧은 전성기 이후 오래도록 낡은 문서를 둔 채로 지냅니다.
그렇다고 “디자인 문서 교”의 반대 극단으로 치닫지는 마세요. 100줄짜리 프로그램에 4페이지짜리 설계 에세이를 쓰는 통제광도 봤습니다. 디자인 문서를 작성하는 데 걸리는 시간에 프로젝트를 처음부터 여러 번 다시 쓸 수 있다면, 디자인 문서는 분명 시간 낭비입니다. 이런 시간 계산과 트레이드오프에서는 경험과 판단을 사용하세요.
일상적인 논의
상위 목표에 합의했다면, 이제 일상적 협업에 팀이 사용하는 도구를 신경 써야 합니다. 이 도구들은 유용하지만, 커뮤니케이션 대역폭이 좁고, 보통은 표정과 몸짓 같은 메타데이터와 보조 채널이 전무합니다. 그 결과 오해를 낳기 쉽고 HRT에 본질적 위협이 되기도 합니다. 그럼에도 대부분의 팀에 없어서는 안 될 도구이며, 약간의 노력만으로도 생산성을 크게 끌어올릴 수 있습니다.
메일링 리스트들
요즘 팀으로 일하는 사람 중에 메일링 리스트를 하나도 안 쓰는 사람은 없다고 봅니다. 다만 메일링 리스트를 더 유용하게 만드는 몇 가지 방법이 있습니다.
큰 성공을 거둔 프로젝트는 메일링 리스트를 여러 개 두는 경우가 많습니다. 개발 논의, 코드 리뷰, 사용자 토론, 공지, 긴급 알림 이메일, 기타 행정 등을 분리합니다. 종종 소규모 프로젝트가 이를 흉내 내며 시작부터 여섯 개의 리스트를 만들기도 하는데, 엔지니어 셋과 사용자 둘뿐인 상황에서 벌어지는 일입니다. 이는 다섯 사람이 논의하자고 회의실을 여섯 개 마련하는 것과 같습니다—일관성은 떨어지고, 메아리만 많고, 방은 대체로 비게 됩니다. 실제로는 리스트 하나로 시작하고, 하나의 리스트의 트래픽이 감당하기 어려울 때(보통 리스트 구성원들이 살려달라고 할 때)만 리스트를 추가하는 것이 가장 좋습니다. 예외적으로 자동 이메일과 봇 알림은 별도 리스트로 보내거나, 최소한 쉽게 필터링할 수 있도록 식별자를 사용하세요.
이메일 토론의 예절을 마련하는 데 시간을 쓰세요—토론을 예의 바르게 유지하고, “시끄러운 소수”의 필리버스터를 막으세요.[20]
사무실을 함께 쓰는 팀에서 메일링 리스트가 1차 토론 수단은 아닐 수 있지만, 회의 안건, 회의록, 의사결정, 디자인 문서, 기타 관련 텍스트 정보를 팀의 메일링 리스트에 보내 중앙 기록으로 남기는 것이 좋습니다. 모든 게시물을 검색 가능한 인덱스로 보관하도록 설정하세요—오픈 소스 프로젝트는 공개 인덱스로, 폐쇄형 프로젝트는 사내망 인덱스로 말입니다. 이제 프로젝트의 역사를 기록하는 시스템이 생기고, 새로운 팀원이 과거 의사결정의 근거를 물을 때도 쉽게 참고할 수 있습니다. 이런 논의가 어딘가에 아카이브되지 않으면, 여러분은 똑같은 이야기를 반복하고 또 반복하게 될 것입니다.
온라인 채팅
온라인 채팅은 팀 커뮤니케이션에 믿을 수 없을 만큼 편리합니다. 특히 동료의 업무를 방해하지 않고도 빠르게 요청을 보낼 수 있기 때문입니다(물론 채팅 프로그램이 방해하지 않도록 설정되어 있어야 합니다!). 새로운 프로젝트를 빠르게 진행할 때, 저녁이나 주말에 가볍게 일할 때, 팀원이 하루 이틀 자리를 비울 때 유용합니다. 일대일 채팅도 유용하고 팀 커뮤니케이션에서 분명히 역할이 있지만, 우리는 어떤 형태로든 그룹 채팅 메커니즘을 사용할 것을 강력히 권장합니다.[21]
인스턴트 메시징이 대중화되기 한참 전부터, 팀들은 IRC(Internet Relay Chat) 채널에 모여 대부분의 토론을 그룹 채팅으로 진행했습니다. 때로는 시끄러웠지만, 팀원들이 전체의 관심사가 아닌 주제를 논의할 때는 사적인 대화로 쉽게 빠져나갈 수 있었습니다. 하지만 대부분의 경우 토론은 팀의 다른 모두가 "보는 앞에서" 진행되었습니다. 덕분에 다른 사람들이 대화에 참여하거나, 배경에서 지켜보며 흐름을 따라가거나, 나중에 놓친 토론을 따라잡을 수 있었습니다. 이는 즉석 그룹 토론을 쉽게 시작할 수 있기 때문만이 아니라, 지리적으로 흩어진 팀에서도 공동체 의식을 형성하는 데 도움이 되기 때문입니다. 새 팀원이 자신이 직접 참여하지 않는 다양한 논의를 그저 지켜보는 것만으로도(또는 나중에 읽기만 해도) 많은 것을 배울 수 있다는 점은 종종 놀라운 일입니다.
인스턴트 메시징이 등장하면서, 예전 같으면 그룹 채팅방에서 이뤄졌을 대화가 1:1로 옮겨갔습니다. 인스턴트 메신저의 기본이 1:1 대화였기 때문입니다. 팀 앞에서 망신을 살 위험을 감수하기보다는, 스스로 불안함을 달래며 ‘어리석게 보일지 모를’ 질문을 1:1로 가져가고 싶은 유혹이 큽니다. 안타깝게도 이렇게 하면 공유된 지식이 축적되지 않아 팀의 부담이 커집니다. 서로 다른 팀원들이 같은 질문을 다른 사람들에게 계속해서 반복하게 되기 때문입니다.
다행히 2014/2015년경 슬랙(Slack)의 부상과 함께 그룹 채팅이 부흥을 맞았습니다. 슬랙은 무료(하지만 무료 소프트웨어나 오픈 소스는 아님) 그룹 메시징 클라이언트로, 현대판 IRC에 가깝습니다. 수십 종의 제품과 통합되며, 소규모 회사, 스타트업, 심지어 인터넷상 느슨한 지인 그룹에서도 선호하는 도구가 되었습니다. 사적인 메시지도 보낼 수 있지만, 팀 소유자는 주간 리포트를 통해 사적 메시지와 그룹 메시지의 비율을 확인할 수 있습니다. 덕분에 팀이 1:1보다 그룹 채널에서 더 많이 대화하도록 부드럽게 “유도”하기가 쉬워졌습니다.
어떤 채팅 애플리케이션을 쓰든, 우리는 팀이 편리하고 접근성 높은 그룹 채팅 수단을 갖추길 강력히 권합니다. 팀에 이 추가적인 커뮤니케이션 대역폭을 확보하는 일은 그만한 노력을 들일 가치가 충분합니다.
Note
|
그룹채팅 vs 1:1 인스턴트 메시지
요즘 IRC 얘기를 처음 들은 사람들은 원시적인 텍스트 기반 환경을 비웃곤 합니다. 가장 최신 IRC 클라이언트조차도 오래된 iChat이나 Google Talk보다 덜 번지르르해 보이기 때문입니다. 외양에 속지 마세요. IRC의 핵심 장점은 다중 사용자 채팅을 위해 설계되었고 비동기적이라는 점입니다. 대부분의 클라이언트는 무제한 스크롤백을 제공해서 놓친 대화를 나중에 읽어볼 수 있습니다. 슬랙은 본질적으로 현대판 IRC입니다. 멋진 그래픽, 아바타, 이모지 통합에도 불구하고, 핵심은 여전히 IRC와같은 텍스트 기반 메시징 시스템입니다. 화려한 화상 회의나 공유 화이트보드 같은 도구를 시도해 보고 싶을 수 있지만, 이런 시스템은 비효율적인 경우가 많고 텍스트 기반 그룹 채팅의 비동기적 장점을 없애버리기도 합니다. 슬랙이나 IRC가 아닌 다른 도구를 쓰려면, 실제로 그룹 채팅을 위해 설계된 도구인지, 1:1 메신저에 그룹 채팅을 덧대기만 한 것은 아닌지 확인하세요. |
사람들은 온라인에서 대화하는 편이 더 편할 때가 있습니다. 우리는 여러 오픈 소스 기여자가(그중 다수는 처음으로) 얼굴을 맞대고 프로젝트를 함께 하던 첫 해커톤을 기억합니다. 방에는 6~8명씩 앉은 12개 테이블이 있었지만, 거의 침묵 속에 모두 노트북을 두드리고 있었습니다. 우리는 늦게 도착해 다들 코드를 쓰고 있구나 싶어, 자리에 앉아 에디터를 열고 프로젝트 IRC 채널에 접속했습니다. 현장에 오지 못한 이들이 “가상으로” 와 있는지 보려던 것이었죠. 그런데 채널에선 여러 대화가 진행 중이었고, 우리가 방에 막 도착했다고 인사하자 몇몇이 IRC에서 인사를 건넸습니다. 확인해 보니 그들은 우리로부터 3미터도 떨어지지 않은 곳에 앉아 있었습니다! 관성 탓도 있었겠지만, 많은 이들에게는 온라인이 그룹과 소통하기 가장 편안한 방식이었기 때문입니다. 4시간 비행을 마치고 더 넓은 대역폭의 소통이 절실했던 우리는 자리에서 일어나 테이블마다 돌아다니며 직접 인사를 나눴습니다.
채팅과 이메일 중 무엇을 언제 써야 하는지에 대한 철칙은 없습니다. 실시간으로 빠르게 진행되는 논의에서, 결정이 쉽게 내려지고 모든 참여자가 현재 자리에 있다면 채팅이 더 유용합니다. 일부가 자리에 없거나 논의의 긴급성이 낮다면 이메일이 더 나을 수 있습니다. 앞서 성공적인 문화의 커뮤니케이션 패턴들에서 살펴본 동기식 대 비동기식 커뮤니케이션의 비용을 기억하세요.
이슈 트래커 사용하기
이슈/버그 트래커를 쓸 것이라면(그리고 써야 합니다), 버그를 처리하고 분류하는 프로세스를 갖춰 사람들이 중요한 버그를 제때 등록하고 고치도록 장려해야 합니다. 버그 트래커가 방치되고 우선순위가 없다면, 사람들은 버그 등록을 멈추고 허공을 향해 불만을 외치기 시작합니다. 그러다 팀이 결국 트래커를 파헤치면, 정작 중요한 버그는 무시하고 중요하지 않은 버그만 고치게 될 가능성이 큽니다.
버그 트래커는 본질적으로 약간 특화된 “인터넷 포럼” 혹은 “게시판”일 뿐임을 기억하세요. 따라서 메일링 리스트와 공통점이 많고, 같은 모범 사례가 적용됩니다. 복도에서 나눈 버그 대화도 트래커 업데이트로 기록해, 생각과 결정을 모두가 볼 수 있는 “공식 기록”으로 남기세요. 어조는 정중히 유지하고, 악의적인 행동은 용납하지 마세요.
프로젝트 매니저가 트래커의 모든 오픈 이슈를 순회 점검하는 일이 맡겨지는 경우도 자주 봤습니다. 이는 큰 소용돌이를 만들 뿐 아니라, 팀원들이 트래커에서 장황한 대화를 시작하게 만들기도 합니다. 대화가 지나치게 길어지거나 뿔뿔이 흩어지면, 잠시 메인 메일링 리스트로 옮기세요—복잡한 스레드에는 이메일 클라이언트가 훨씬 더 좋은 도구입니다.
엔지니어링의 일부로서의 커뮤니케이션
소프트웨어 개발 프로세스에 관한 책은 수백, 수천 권에 이릅니다. 여기서 모두 파헤칠 수는 없지만, 어떤 개발 방법론을 쓰던지 꼭 짚고 넘어가야 할 커뮤니케이션 관련 요점이 몇 가지 있습니다. 설령 소프트웨어를 쓰지 않더라도 배울 점이 있습니다—특히 하지 말아야 할 일에 관한 교훈이요.
코드 주석
코드 주석 스타일은 매우 주관적입니다. 장황한 주석은 원 작성자의 의도와 이유에 대한 실마리를 제공해 유용할 때가 많지만, 그만큼 유지보수 비용이 듭니다. 낡거나 틀린 주석은 코드베이스 이해를 크게 해칩니다. 반대로 너무 짧거나 아예 없는 주석은, 미래의 유지보수자나 API 소비자가 추리하느라 시간을 낭비하게 만듭니다. 주석은 흔히 빠진 구조와 나쁜 네이밍을 지적한 뒤, 코드가 이미 말하는 바를 다시 설명하는 데 쓰입니다. 주석은 코드가 무엇을 하는지가 아니라, 왜 그렇게 하는지에 집중해야 합니다.
주석은 함수나 메서드 수준에서 가장 유용합니다. 특히 API를 문서화하는 수단으로서요. 장황함을 피하라는 뜻에서, “μηδέν άγαν(과유불급)”이라는 유명한 그리스 격언으로 요약할 수 있습니다. 그다음으로 중요한 것은 팀의 주석 스타일을 정해 모두가 따르도록 하는 것입니다—우리 생각에 일관성이 실제 선택지보다 더 중요합니다.[22] 스타일 가이드는 왜 존재하는지와 무엇을 규정하려는지 설명해야 합니다. 예컨대 Google C++ 스타일 가이드는 이렇게 시작합니다.[23]
C++는 Google의 많은 오픈 소스 프로젝트에서 사용하는 주요 개발 언어입니다. 모든 C++ 프로그래머가 알고 있듯이, 이 언어는 강력한 기능을 많이 제공하지만 그만큼 복잡성도 따라오며, 이는 코드를 더 버그가 발생하기 쉽고 읽기 어렵고 유지보수하기 힘들게 만들 수 있습니다.
이 가이드의 목표는 C++ 코드 작성 시 해야 할 것과 하지 말아야 할 것을 자세히 설명함으로써 이러한 복잡성을 관리하는 것입니다. 이 규칙들은 코드베이스를 관리 가능하게 유지하면서도 개발자들이 C++ 언어 기능을 생산적으로 사용할 수 있도록 하기 위해 존재합니다.
가독성(readability)이라고도 알려진 스타일은 우리의 C++ 코드를 다스리는 규약을 말합니다. 스타일이라는 용어는 약간 부적절한데, 이러한 규약들이 소스 파일 포맷팅보다 훨씬 많은 것을 다루기 때문입니다.
코드베이스를 관리 가능하게 유지하는 방법 중 하나는 일관성을 강제하는 것입니다. 모든 프로그래머가 다른 사람의 코드를 보고 빠르게 이해할 수 있다는 것은 매우 중요합니다. 균일한 스타일을 유지하고 규약을 따르는 것은 "패턴 매칭"을 더 쉽게 사용하여 다양한 심볼이 무엇인지, 그리고 그것들에 대해 어떤 불변조건이 참인지를 추론할 수 있게 해줍니다. 공통적이고 필수적인 관용구와 패턴을 만드는 것은 코드를 훨씬 더 이해하기 쉽게 만듭니다. 경우에 따라 특정 스타일 규칙을 변경하는 것에 대한 좋은 논거가 있을 수 있지만, 우리는 일관성을 유지하기 위해 그럼에도 기존 방식을 유지합니다.
이 가이드가 다루는 또 다른 문제는 C++ 기능 비대화입니다. C++는 많은 고급 기능을 가진 거대한 언어입니다. 경우에 따라 우리는 특정 기능의 사용을 제한하거나 심지어 금지하기도 합니다. 이는 코드를 단순하게 유지하고 이러한 기능들이 야기할 수 있는 다양한 일반적인 오류와 문제를 피하기 위해서입니다. 이 가이드는 이러한 기능들을 나열하고 그 사용이 제한되는 이유를 설명합니다.
Google에서 개발한 오픈 소스 프로젝트들은 이 가이드의 요구사항을 준수합니다.
이 가이드는 C++ 튜토리얼이 아님에 주의하세요: 독자가 이 언어에 익숙하다고 가정합니다.
이 가이드는 C++를 쓰는 가장 좋거나 가장 빠른 방법을 강제하려는 것이 아니라, 코드베이스 전반의 일관성 유지가 얼마나 중요한지를 강조할 뿐임을 유념하세요.
작업에 이름 남기기
누구나 자신이 한 일에 대한 공로를 인정받고 싶어 합니다. 그림에 사인을 남기는 화가에서부터, 책 등이나 블로그 상단에 이름을 올리는 저자까지 말이죠. 어떤 식으로든 인정받고 싶은 마음은 인간의 본성입니다. 하지만 소스 파일마다 이름을 도배하는 일은, 우리가 보기에 얻는 것보다 잃는 것이 큽니다. 저작권 표시 옆에 바싹 붙은 이름 줄들을 모두가 본 적 있을 겁니다.
# ---------------------------------- # Created: October 1998 by Brian W. Fitzpatrick <fitz@red-bean.com> # ----------------------------------
소스 코드 상단에 이름을 넣는 전통은 오래되었습니다(우리도 과거에 그랬습니다). 개인이 프로그램을 쓰던 시절에는 타당했을지도 모릅니다. 하지만 오늘날에는 같은 코드에 많은 사람이 손을 댑니다. 파일의 이름 표기는 끝없는 논쟁과 시간 낭비, 그리고 상처받은 감정의 온상이 됩니다. 따라서 우리는 소스 파일에 소유권의 표시로 이름을 넣는 것을 강하게 반대합니다(굳이 넣는다면, 변경 시 우선 리뷰어 지정을 위한 정도로만, 결코 소유권을 암시하지 않도록 조심하세요).

예를 들어 봅시다. 여러분이 팀의 프로젝트—새 파일을 만들고 수백 줄의 코드를 씁니다. 파일 상단에 이름과 적절한 저작권 표시를 넣어 코드 리뷰에 보내고, 이후 저장소에 커밋합니다. 지금까지는 문제도, 드라마도, 이견도 없습니다. 그런데 동료 Adrian이 와서 파일을 고칩니다. 언제 그가 파일 상단에 자신의 이름을 올릴 수 있을까요? 버그를 한 개 고치면? 버그 다섯 개? 함수를 하나 작성하면? 함수 두 개는? 코드 몇 줄을 작성해야 할까요? 그가 함수를 하나 작성하고 이름을 올렸는데, 다른 누군가가 와서 “그의” 함수를 다시 쓴다면? 그 사람도 이름을 올려야 할까요? Adrian의 이름은 지워야 할까요? 연극, 소설, 영화 같은 다른 협업 창작물과 달리, 소프트웨어는 “완성” 이후에도 계속 변합니다. 영화 끝에 올라가는 참여자 목록은 안전하고 정적인 일이지만, 소스 파일의 이름을 더했다 뺐다 하는 일은 끝없는 광기로 흐르기 쉽습니다.
물론 위 질문들에 답을 정하고 가능한 모든 엣지 케이스를 상세히 문서화할 수는 있습니다. 하지만 이를 유지·추적하고 위반을 감시하는 일은—원래 코드 작성에 썼어야 할—엄청난 시간 낭비입니다. 바로 이 때문에, 우리는 공로를 코드가 아닌 프로젝트 수준에서 추적할 것을 권합니다. 우리가 본 대부분의 프로젝트에는 일을 한 모든 사람을 나열한 “Authors”나 “Contributors” 파일이 있습니다. 더 자세한 내용이 필요하면, 버전 관리 시스템이 알려줄 것입니다. 물론 버전 관리를 하지 않는다면, 그 모든 순간은 빗속의 눈물처럼 시간 속에 사라질 것입니다.[24]
모든 커밋에 코드 리뷰 적용하기
코딩 표준을 둘 것이라면, 제품으로 들어오는 코드를 감시할 수단이 필요합니다. 커밋 전이든 후든, 저장소로 들어오는 모든 코드 한 줄 한 줄이 두 번째 시선의 검토를 거쳐, 스타일, 품질, 그리고 물론 부주의한 실수를 확인하도록 하세요. 변경사항은 작고 리뷰 가능하게 유지하세요—수천 줄짜리 변경세트는 포맷팅 문제 외에는 제대로 리뷰할 수 없습니다. 이는 더 높은 품질의 코드베이스를 만들 뿐만 아니라, 코드 품질에 대한 강한 집단적 자부심을 심어주는 데도 크게 기여합니다. 더 자세한 내용은 숨기는 것은 해롭다의 피드백 루프 섹션을 참고하세요.
실질적인 테스트 및 릴리스 프로세스 구축하기
풀 TDD를 하는 팀이든, 간단한 회귀 테스트만 있는 팀이든, 자동화된 테스트가 많을수록 버그를 고치고 기능을 추가할 때 더 큰 확신을 갖게 됩니다. 당신의 팀에서 테스트의 역할을 정했다면, 그것이 코딩과 리뷰 과정의 일부가 되어야 합니다. 못지않게 중요한 점은, 릴리스 프로세스가 충분히 가벼워서(예: 주단위) 자주 릴리스할 수 있어야 하면서도, 사용자에게 문제를 전파하기 전에 깨짐을 잡아낼 만큼 충분히 철저해야 한다는 것입니다.
결국 중요한 것은 제품입니다
문화와 커뮤니케이션의 이런 습관들이 우리가 선호하는 작업 방식을 반영하므로 어느 정도 편향을 나타내는 것처럼 보일 수 있습니다. 그러나 여러분이 생각하는 만큼 주관적이지만은 않습니다. 우리는 강하고 생산적인 팀 문화를 만들고, 팀 내 커뮤니케이션에 시간을 들이는 일이, 제품을 쓰고 출시하는 데 더 많은 시간을 쓰고, 무엇을 출시할지 언쟁하는 데는 더 적은 시간을 쓰는 팀을 만든다는 사실을 확인했습니다.
강한 팀은 저절로 생기지 않습니다. 기능장애 팀으로 소프트웨어를 개발하는 데 드는 높은 비용을 이해하는 팀 리더와 창업자들이 정성껏 씨를 뿌리고 가꾸어야 합니다. 처음부터 이런 노력을 들이면, 문화를 규정하고 방어하는 데보다 제품을 설계하고 만드는 데 훨씬 더 많은 시간을 쓰는 자기 선택적 문화를 만들 수 있습니다. 이 노력—커뮤니케이션과 프로세스—의 큰 부수 효과는, 새로운 팀원이 팀에 합류하는 장벽을 크게 낮춘다는 것입니다. 이런 요소가 없으면, 새로운 팀원은 팀이 어떻게 일하는지 배우느라 많은 시간을 낭비하거나, 포기하고 이전 팀 방식대로 일하게 만들려고 시도할 것입니다(좋든 나쁘든).
적절한 사람을 팀에 모으고 올바른 가치를 심는 일은 중요하지만, 문화에 들어가는 노력의 압도적 다수는 커뮤니케이션입니다. 미션 스테이트먼트, 회의, 메일링 리스트, 온라인 채팅, 코드 주석, 문서, 심지어 의사결정 과정까지—이 모든 것이 팀이 내부와 외부에 소통하는 다양한 방식입니다. 오직 제품을 만들기 위해 강한 팀을 세우는 데 이렇게 많은 커뮤니케이션—감정적 시간과 노력까지 포함해서—이 필요하다는 사실은 종종 사람들을 놀라게 하지만, 사실입니다. 제품은 결국 사람과의 커뮤니케이션이지, 기계와만의 커뮤니케이션이 아니기 때문입니다.
팀의 문화가 무엇이든, 커뮤니케이션이 얼마나 잘되든 간에, 우리가 본 모든 효과적인 팀에는 리더가 있었습니다. 다음 장에서는 가장 효과적인 팀 리더를 만드는 요소가 무엇인지, 그 역할이 여러분이 생각하는 것과 왜 다를 수 있는지, 그리고 팀의 모든 구성원이 리더십의 기본을 이해하는 것이 왜 중요한지를 살펴보겠습니다.
Chapter 3. Every Boat Needs a Captain
당신이 절대 “관리자”가 되지 않겠다고 맹세했더라도, 커리어의 어느 순간엔가 우연히 리더십 역할을 맡게 될 것입니다. 이 장은 그런 일이 일어났을 때 무엇을 해야 하는지 이해하도록 도와줍니다.[25]
관리자를 위한 관리 서적은 이미 셀 수 없이 많지만, 이 장은 비공식적인 리더십 자리에 서게 된 개인 기여자를 위한 것입니다. 대부분의 사람들은 여러 이유로 관리자가 되는 것을 두려워하지만, 리더 없이 작동하는 팀은 없습니다. 우리는 당신을 관리자가 되라는 것으로 설득하려는 것이 아니라(비록 우리 둘은 지금 관리자이지만!), 팀에 리더가 필요한 이유, 사람들이 보통 관리자가 되기를 두려워하는 이유, 그리고 최고의 리더가 왜 겸손·존중·신뢰의 원칙으로 팀을 ‘섬기는’지 보여 주려 합니다. 더 나아가 효과적인 리더십의 패턴과 안티패턴, 동기부여를 살펴보겠습니다.
리더십의 요령을 이해하는 것은 당신의 일의 방향에 영향력을 행사하는 데 필수적인 기술입니다. 프로젝트의 배를 그저 따라타는 것이 아니라 직접 키를 잡고 싶다면, 항해법을 알아야 (당신과 프로젝트가) 좌초하지 않습니다.
자연은 공허를 싫어한다
선장이 없는 배는 떠다니는 대합실에 불과합니다. 누군가 키를 잡고 시동을 걸지 않으면, 물살에 휩쓸려 목적없이 표류할 뿐입니다. 프로젝트도 배와 같습니다. 조종하는 사람이 없으면, 무엇인가가 일어나길 기다리는 괴짜들의 무리만 남게 됩니다.

공식 임명 여부와 상관없이, 프로젝트가 어디로든 진행되려면 누군가 운전석에 앉아야 합니다. 동기부여가 강하고 성격이 급한 타입이라면, 그 누군가는 아마 당신일 겁니다. 갈등 해결, 의사결정, 사람들을 조율해 팀을 돕는 일에 빨려 들어가게 될 수 있습니다. 이런 일은 흔하고, 종종 우연히 일어납니다. ‘리더’가 될 생각은 없었지만, 어느새 그렇게 되었던 경험이 있죠. 어떤 사람들은 이를 “관리자병(manageritis)”이라 부릅니다.
관리자는 네 글자 욕설
오늘날 우리가 떠올리는 '뾰족 머리 관리자’의 개념은 군대식 위계에서 비롯되어 "Industrial Revolution"산업혁명[26] 시기에 채택된 유산입니다. 공장이 곳곳에 생겨나고, 컨베이어 벨트를 돌리기 위해 (대개 비숙련) 노동자가 필요했습니다. 그들을 관리할 감독자도 필요했지요. 일자리에 절박한 다른 사람으로 노동자를 쉽게 대체할 수 있었기에, 관리자가 직원을 잘 대하거나 환경을 개선하려는 동기는 낮았습니다. 인간적이든 아니든, 직원들이 기계적으로 반복 작업만 하던 시대에는 이 방식이 오랫동안 그럭저럭 효과적이었습니다.
관리자는 때로 노새몰이꾼처럼 직원을 대했습니다. 당근으로 앞에서 이끌다가, 듣지 않으면 채찍을 휘두르는 방식이었습니다. 이른바 ‘당근과 채찍’ 관리는 공장[27]에서 현대적인 직장으로 옮겨가도 살아남았습니다. 특히 직원이 같은 일을 수년간 하던 20세기 중반, ‘노새를 모는 독한 관리자’의 전형이 널리 퍼졌습니다.
수많은 연구가 시대에 뒤떨어진 당근과 채찍이 비효율적이며[28] 창의적 인재의 생산성에 해롭다고 경고함에도, 오늘날에도 일부 산업에서는 이 방식이 이어집니다. 과거 컨베이어 벨트 노동자는 며칠간의 교육으로 대체가 가능했지만, 지식 노동자는 새 팀에서 수개월이 지나야 제 속도가 나옵니다. 쉽게 대체 가능한 노동자와 달리, 이들에게는 사려·사고·창조를 위한 돌봄, 시간 그리고 공간이 필요합니다.
“리더”는 새로운 “관리자”
많은 이들이 ‘관리자’라는 직함을 여전히 쓰지만, 이 말은 자주 시대착오적입니다. 우리는 관리자 대신 리더라는 말을 써야 한다고 봅니다. 정치적 올바름을 외치는 부류와는 거리가 있지만, ‘관리자’는 네 글자 욕처럼 느껴질 정도입니다. 그 말의 존재 자체가 새 관리자로 하여금 사람을 관리하게 부추깁니다. 관리자는 부모[29]처럼 행동하게 되고 직원들은 아이처럼 반응합니다. HRT 맥락에서 말해 보죠. 관리자가 직원에 대한 신뢰를 분명히 보여 주면, 직원은 그 신뢰에 부응하려는 긍정적 압박을 느낍니다. 정말 간단합니다. 리더는 팀의 길을 열고, 안전과 행복을 살피며, 필요가 충족되도록 합니다. 이 장에서 하나만 기억한다면, 다음과 같습니다.
전통적인 관리자는 일을 어떻게 하게 만들지 걱정하고, 리더는 무엇을 할지 걱정합니다…(그리고 어떻게 할지는 팀을 신뢰합니다.)

몇 해 전 Fitz 팀에 새 엔지니어가 합류했습니다. 제리의 이전(다른 회사) 관리자는 매일 9시부터 5시까지 자리에 앉아 있으라고 고집했고, 자리에 없으면 일을 충분히 안 한다고 가정했습니다(물론 터무니없는 가정이죠). Fitz와 함께하는 첫날 오후 4시 40분, 제리는 미리 잡힌 약속 때문에 15분 일찍 나가야 한다며 미안하다고 더듬거리며 말했습니다. Fitz는 미소 지으며 단호히 말했습니다. "일만 잘하면, 몇 시에 나가든 상관없어요." 제리는 잠시 멍하니 바라보다 고개를 끄덕이고 자기 일로 돌아갔습니다. Fitz는 제리를 성인으로 대했고, 제리는 항상 일을 마쳤으며, Fitz는 제리가 자리에 있는지 걱정할 필요가 없었습니다. 제리는 보모가 필요하지 않았습니다.
"리더"가 된다는 것이 모든 것에 대해 최종 책임을 진다는 뜻은 아닙니다. 리더십에는 기술적인 것도 있고, 사람과 관련된 것도 있습니다. 소프트웨어 개발 세계에서 팀을 이끄는 사람에게는 보통 두 가지 뚜렷한 역할(과 직함)이 있습니다. TL(테크 리드)과 TLM(테크 리드 관리자)입니다.[30] TL은 보통 제품 전체(또는 일부)의 기술적 방향을 책임지고, TLM은 제품 전체(또는 일부)의 기술적 방향을 책임 지는 것에 더해 팀원의 커리어와 행복까지 책임집니다. 덕분에 프로젝트 리딩에 집중하고 싶은 사람은 원한다면 사람 관리 영역을 피할 수 있습니다.
두려워해야 할 유일한 것은…음, 모든 것
사람들이 관리자라는 단어에서 느끼는 막연한 불쾌감 외에도, 관리자가 되기를 꺼리는 이유는 여럿 있습니다. 소프트웨어 세계에서 가장 큰 이유는, 코드 작성 시간이 크게 줄어든다는 점입니다. 기술 리더든 사람 리더든 마찬가지입니다. 이는 뒤에서 더 이야기하고, 먼저 우리가 관리자를 피하는 또 다른 이유들을 보겠습니다.
커리어 대부분을 코딩에 써왔다면, 보통 하루가 끝날 때 코드를 쓰든, 디자인 문서를 만들든, 닫은 버그 더미를 남기든, “오늘 나는 이것을 했다”고 손가락으로 가리킬 무언가가 있습니다. 이런 생산성 기준에서 보면, “관리”로 분주했던 하루 끝에는 “오늘 아무것도 못 했네”라고 생각하기 쉽습니다. 매일 딴 사과 개수만 세다가, 바나나를 따는 일로 옮긴 뒤에도 하루가 끝나 “오늘 사과를 하나도 못 땄네”라고 말하는 꼴입니다. 옆에는 바나나 더미가 수북한데 말이죠. 관리 업무를 수치화하는 일은 생산된 부품을 세는 것보다 확실히 어렵고, 팀의 성과를 본인이 가져갈 필요도 없습니다. 다만 팀이 행복하고 생산적으로 일할 수 있게 만드는 것이 당신 일의 큰 기준이라는 점을 잊지 마세요. 바나나를 따면서 사과 개수를 세는 함정에 빠지지 마세요.

관리자가 되지 않으려는 또 하나의 큰 이유는 자주 말로는 하지 않지만, 유명한 “피터의 법칙”에 뿌리를 둡니다. 이 법칙은 “위계에서 모든 직원은 자신의 무능 수준까지 승진하는 경향이 있다”고 말하죠. 대부분의 사람은 일을 못 하거나 사람 관리를 몹시 못 하는 관리자를 한 번쯤은 겪었고,[31] 몇몇은 커리어 내내 나쁜 관리자 밑에서만 일하기도 했습니다. 커리어 내내 형편없는 관리자만 봤다면, 왜 스스로 관리자가 되려 하겠습니까? 왜 자신이 잘하지 못할 역할로 승진하길 바라겠습니까?
관리자가 되는 것을 고려할 만한 훌륭한 이유도 있습니다. 첫째, 자신을 확장하는 방법입니다. 코드를 아무리 잘 써도, 혼자 쓸 수 있는 양에는 상한이 있습니다. 당신의 리더십 아래 훌륭한 엔지니어 팀이 얼마나 많은 코드를 쓸 수 있을지 상상해 보세요! 둘째, 당신이 정말 그 일을 잘할지도 모릅니다. 프로젝트의 리더십 공백 속으로 빨려 들어간 많은 이들이, 팀이 필요로 하는 안내·지원·엄호를 제공하는 데 비범한 재능이 있음을 발견하곤 합니다.
서번트 리더
새 관리자에게는 묘한 병이 생기곤 합니다. 과거에 자신의 관리자들이 했던 끔찍한 짓을 모조리 잊고, 부하를 “관리”한다며 똑같은 짓을 반복하는 병입니다. 증상은 이에 국한되지 않지만 마이크로매니징, 저성과자 방치, 지시만 따르는 사람들만 채용하기 등이 있습니다. 제때 치료하지 않으면 팀 전체가 무너집니다. 우리가 구글에서 처음 관리자가 되었을 때 엔지니어링 디렉터 Steve Vinter에게 들은 최고의 조언은 “무엇보다, 관리하고 싶은 충동을 억누르라.”입니다. 갓 임명된 관리자가 가장 갖기 쉬운 충동은 직원을 ‘적극적으로 관리’하는 것입니다. 관리자의 일이라고 믿기 때문이죠. 대체로 파국을 부릅니다.
이 “관리병”의 치료법은 우리가 “서번트 리더십”이라 부르는 것을 듬뿍 바르는 것입니다. 리더가 할 수 있는 가장 중요한 일은 집사의 마음으로 팀을 섬기는 일이라는 뜻입니다. 서번트 리더는 겸손·존중·신뢰(HRT)의 분위기를 만들려고 힘씁니다. 팀원이 혼자 치울 수 없는 관료적 장애물을 치워 주거나, 팀의 합의를 돕거나, 야근하는 팀에 저녁을 사는 일일 수도 있습니다. 서번트 리더는 틈새를 메우며 길을 닦고, 필요할 때 조언하되, 손을 더럽히는 일을 두려워하지 않습니다. 서번트 리더가 ‘관리’하는 유일한 대상은 팀의 기술적 그리고 사회적 건강입니다. 기술적 건강에만 집중하고 싶은 유혹이 크지만, 사회적 건강은 똑같이 중요합니다 (관리하기 훨씬 어려운 경우가 더 많습니다!).
안티패턴
성공적인 리더가 되고 싶다면 따라야 할 "디자인 패턴"들을 나열하기 전에, 따라하지 말아야 할 패턴들을 먼저 살펴보겠습니다. 우리는 커리어에서 만난 몇몇 나쁜 리더들과, 더러는 우리 자신에게서 이러한 파괴적인 패턴들을 관찰했습니다.[32]
안티패턴: 호구 채용하기
당신이 관리자이고 역할에 대해 불안감을 느끼고 있다면(어떤 이유든), 아무도 당신의 권위에 의문을 제기하거나 직장을 위협하지 못하게 하는 한가지 방법은 당신이 밀어붙일 수 있는 사람들을 채용하는 것입니다. 당신보다 똑똑하지 않거나 야망이 없는 사람들, 아니면 당신보다 더 불안한 사람들을 채용함으로써 이를 달성할 수 있습니다. 이렇게 하면 팀 리더이자 의사결정자로서의 당신의 위치는 확고해지지만, 당신에게는 훨씬 더 많은 일이 생깁니다. 당신 팀은 목줄에 묶인 개들처럼 당신이 이끌지 않으면 움직일 수 없습니다. 만약 당신이 밀어붙일 수 있는 사람들로 팀을 구성한다면, 아마 휴가를 갈 수 없을 것입니다. 당신이 방을 떠나는 순간, 생산성은 급격히 멈춥니다. 하지만 직장에서 안전함을 느끼는 것에 비하면 이 정도는 작은 대가일 뿐이겠죠, 그렇지 않나요?
대신, 당신보다 똑똑하고 당신을 대체할 수 있는 사람들을 채용하려고 노력해야 합니다. 이는 어려울 수 있습니다. 바로 그런 사람들이 정기적으로 당신에게 도전할 것(당신이 실수했을 때 확실한 말로 알려주는 것 외에도)이기 때문입니다. 그런 사람들은 계속해서 당신을 감동시키고 훌륭한 일들을 만들어낼 것입니다. 그들은 훨씬 더 큰 범위에서 스스로를 이끌 수 있고, 일부는 팀을 이끌고 싶어할 것입니다. 당신은 이것을 당신의 권력을 빼앗으려는 시도로 보지 말고, 오히려 추가 팀을 이끌거나 새로운 기회를 탐색하거나, 심지어 매일 팀이 일을 제대로 하고 있는지 확인하느라 신경 쓰지 않고도 휴가를 갈 수 있는 기회로 봐야 합니다.
안티패턴: 저성과자 무시하기
구글에서 팀 리더로서 Fitz의 커리어 초기에, 팀에게 보너스 편지를 나눠줄 때가 되었고, 그는 관리자에게 "관리자가 되는 게 정말 좋아요!"라고 말하며 활짝 웃었습니다. 오랜 업계 베테랑이었던 Fitz의 관리자는 주저하지 않고 답했습니다. "때로는 이빨 요정이 되어야 하고, 때로는 치과의사가 되어야 하지."
이빨을 뽑는 일은 결코 즐겁지 않습니다. 우리는 팀 리더들이 믿을 수 없을 정도로 강한 팀을 구축하기 위해 모든 올바른 일을 하는 것을 보았지만, 단지 한두 명의 저성과자 때문에 이런 팀들이 뛰어나지 못하고 (결국 무너지는) 것을 보았습니다. 인간적 측면이 소프트웨어 작성에서 가장 어려운 부분이라는 것을 이해하지만, 인간을 다루는 데 있어 가장 어려운 부분은 기대치를 충족하지 못하는 사람을 처리하는 것입니다. 때로는 사람들이 충분히 오래 또는 열심히 일하지 않아서 기대치를 놓치지만, 가장 어려운 경우는 아무리 오래 또는 열심히 일해도 자신의 일을 할 수 없는 사람입니다.
구글에서 모든 서비스를 계속 운영하는 책임을 맡은 팀의 모토는 "희망은 전략이 아니다"입니다. 그리고 저성과자를 다루는 데 있어서만큼 희망이 전략으로 남용되는 곳은 없습니다. 대부분의 팀 리더들은 이를 악물고, 눈을 돌리고, 저성과자가 마법처럼 나아지거나 그냥 사라지기를 희망합니다. 하지만 이런 일이 일어나는 경우는 극히 드뭅니다.
리더가 희망을 품고 있는 동안 저성과자가 나아지지도 않고 (떠나지도 않는) 상황에서, 팀의 고성과자들은 저성과자를 끌고 가는 데 귀중한 시간을 낭비하고 팀 사기는 허공으로 새어나갑니다. 당신이 그들을 무시하고 있어도 팀은 그들이 있다는 것을 확실히 알고 있습니다. 팀의 나머지 구성원들은 저성과자가 누구인지 예리하게 알고 있습니다. 왜냐하면 그들을 떠안아야 하기 때문입니다.
저성과자를 무시하는 것은 또한 새로운 고성과자들이 당신의 팀에 합류하는 것을 막는 방법이고, 기존 고성과자들이 떠나도록 부추기는 방법이기도 합니다. 결국 당신은 저성과자들로만 이루어진 팀을 갖게 됩니다. 왜냐하면 그들만이 스스로의 의지로 떠날 수 없는 사람들이기 때문입니다. 마지막으로, 저성과자를 팀에 계속 두는 것은 저성과자에게도 도움이 되지 않습니다. 종종 당신의 팀에서 잘하지 못하는 사람이 다른 곳에서는 실제로 많은 영향을 미칠 수 있습니다.
저성과자를 가능한 한 빨리 다루는 것의 이점은 그를 끌어올리거나 아니면 내보낼 수 있는 위치에 자신을 둘 수 있다는 것입니다. 저성과자를 즉시 다룬다면, 종종 그가 더 높은 생산성 상태로 들어가기 위해 단지 약간의 격려나 방향이 필요할 뿐이라는 것을 발견하게 될 것입니다. 저성과자를 다루기까지 너무 오래 기다리면, 팀과의 관계가 너무 악화되고 당신도 너무 좌절해서 그를 도울 수 없게 될 것입니다.
저성과자를 효과적으로 코칭하는 방법은 무엇일까요? 우리 둘은 (불행히도) 고통스러운 시행착오를 통해 이 분야에서 상당한 경험을 쌓았습니다. 가장 좋은 비유는 절뚝거리는 사람이 다시 걷고, 조깅하고, 팀의 나머지 구성원들과 함께 달릴 수 있도록 돕는다고 상상하는 것입니다. 거의 항상 일시적인 마이크로매니징이 필요하지만—여전히 많은 HRT, 특히 존중이 필요합니다. 특정 시간대(예: 2-3개월)를 설정하고, 그 기간 동안 그가 달성하기를 기대하는 매우 구체적인 목표들을 설정하세요. 목표를 작고 점진적으로 만들어서 많은 작은 성공의 기회가 있도록 하세요. 진행 상황을 확인하기 위해 매주 팀원과 만나고, 성공이나 실패를 측정하기 쉽도록 다가오는 각 이정표에 대해 정말 명시적인 기대치를 설정하세요. 저성과자가 따라갈 수 없다면, 과정 초기에 당신 둘 모두에게 매우 명백해질 것입니다. 이 시점에서 그 사람은 종종 일이 잘 되지 않고 있다는 것을 인정하고 그만두기로 결정할 것입니다. 다른 경우에는 결단력이 발동되어 기대치를 충족하기 위해 "게임을 업그레이드"할 것입니다. 어느 쪽이든, 저성과자와 직접 작업함으로써 당신은 중요하고 필요한 변화를 촉진하고 있는 것입니다.
안티패턴: 인간 문제 무시하기
앞서 말했듯이, 팀 리더는 팀에 대해 사회적 측면과 기술적 측면이란 두 가지 주요 영역에 집중해야 합니다. 리더들이 기술적 측면에서 더 강한 것은 꽤 흔한 일이고, 대부분의 리더들이 기술적 직무에서 승진했기 때문에(그들의 직무의 주요 목표가 기술적 문제를 해결하는 것이었기 때문에), 그들은 인간적 문제를 무시하는 경향이 있습니다. 팀의 기술적 측면에 모든 에너지를 집중하는 것은 유혹적 입니다. 개인 기여자로서 당신은 대부분의 시간을 기술적 문제 해결에 썼기 때문입니다. 학생이었을 때 당신의 수업은 모두 당신의 일의 기술적 요령을 배우는 것이었습니다. 하지만 이제 당신이 리더가 되었으니, 팀의 인간적 요소를 무시하는 것은 당신 자신의 위험입니다.
팀에서 인간적 요소를 무시하는 리더의 예시부터 시작해보겠습니다. 몇 년 전, Fitz의 친한 친구—Jake라고 부르겠습니다—가 첫 아이를 가졌습니다. Jake와 Fitz는 원격으로도, 같은 사무실에서도 수년간 함께 일해왔기 때문에, 새 아기가 태어난 후 몇 주 동안 Jake는 집에서 일했습니다. 이는 Jake와 그의 아내에게 훌륭하게 작동했고, Fitz는 이미 Jake와 원격으로 일하는 데 익숙했기 때문에 전혀 문제없었습니다. 그들은 평소처럼 생산적이었습니다. 그런데 (다른 사무실에서 일하는) 그들의 관리자 Pablo가 Jake가 일주일 대부분을 집에서 일하고 있다는 것을 알게 되었습니다. Jake가 평소처럼 생산적이고 Fitz도 그 상황에 만족함에도 불구하고, Pablo는 Jake가 Fitz와 함께 일하기 위해 사무실에 나오지 않는다고 화를 냈습니다. Jake는 Pablo에게 사무실에 나와서 일하는 것만큼 생산적이고, 몇 주 동안 주로 집에서 일하는 것이 자신과 아내 모두에게 훨씬 쉽다고 설명하려 했습니다. Pablo는 "야, 사람들은 항상 아이를 가져. 너는 사무실에 나와야 해."라고 반응했습니다. 말할 필요도 없이, (평소에는 온화한 엔지니어인) Jake는 분노했고 Pablo에 대한 존경을 많이 잃었습니다.
Pablo가 이를 다르게 처리할 수 있었던 방법은 많습니다. Jake가 아내를 위해 집에 더 있고 싶어한다는 것을 이해하고, 그의 생산성과 팀에 영향을 미치지 않는다면 한동안 계속 그렇게 하도록 놔둘 수 있었습니다. 상황이 안정될 때까지 Jake가 일주일에 하루나 이틀은 사무실에 나오도록 협상할 수도 있었습니다. 최종 결과가 무엇이든, 약간의 공감은 이 상황에서 Jake를 행복하게 유지하는 데 큰 도움이 되었을 것입니다.
안티패턴: 모두의 친구가 돼라
대부분의 사람들이 리더십에 첫 발을 내딛는 것은 이전에 팀원이었던 팀의 리드가 될 때입니다. 많은 리드들이 팀과 쌓아온 우정을 잃고 싶어하지 않기 때문에, 팀 리드가 된 후에도 팀원들과의 우정을 유지하기 위해 때로는 더 열심히 노력합니다. 이는 재앙이 되며 많은 우정을 깨뜨리는 레시피가 될 수 있습니다. 우정과 부드러운 터치로 이끄는 것을 혼동하지 마세요. 당신이 누군가의 커리어에 대한 권력을 가지고 있을 때, 그는 우정의 제스처에 인위적으로 보답해야 한다는 압박감을 느낄 수 있습니다.
팀의 동료가 되지 않고도(또는 엄청나게 독한 사람이 되지 않고도) 팀을 이끌고 합의를 이룰 수 있다는 것을 기억하세요. 마찬가지로, 기존의 우정을 바람에 날려버리지 않고도 강한 리더가 될 수 있습니다. 우리는 팀과 함께 점심을 먹는 것이 그들을 불편하게 만들지 않으면서도 사회적으로 연결을 유지하는 효과적인 방법이 될 수 있다고 발견했습니다. 이는 정상적인 업무 환경 밖에서 비공식적인 대화를 나눌 기회를 제공합니다.
때로는 좋은 친구이자 동료였던 사람을 관리하는 관리자 역할로 이동하는 것이 까다로울 수 있습니다. 관리받는 친구가 자율적이지 않고 열심히 일하지 않는다면, 모든 사람에게 스트레스가 될 수 있습니다. 가능한 한 이런 상황에 빠지지 않도록 하는 것을 권장합니다.
안티패턴: 채용 기준 타협하기
스티브 잡스는 한때 이렇게 말했습니다: "A 등급 사람들은 다른 A 등급 사람들을 채용하고, B 등급 사람들은 C 등급 사람들을 채용한다." 이 격언의 희생자가 되기는 매우 쉽고, 빠르게 채용하려고 할 때는 더욱 그렇습니다. 우리가 흔히 보는 접근법은 팀이 5명의 엔지니어를 채용해야 한다고 해서, 지원서 더미를 훑어보고 40-50명을 면접한 다음, 채용 기준을 충족하는지 여부와 상관없이 최고의 5명을 뽑는 것입니다. 이는 평범한 팀을 만드는 가장 빠른 방법 중 하나입니다.
올바른 사람을 찾는 비용—리크루터에게 돈을 주든, 광고비를 내든, 또는 추천을 위해 길을 뛰든—은 처음부터 채용하지 말았어야 할 직원을 다루는 비용에 비하면 아무것도 아닙니다. 이 "비용"은 팀 생산성 손실, 팀 스트레스, 직원을 관리하거나 내보내는 데 드는 시간, 그리고 직원을 해고하는 데 관련된 서류 작업과 스트레스로 나타납니다. 물론 그 직원을 팀에 그대로 두는 엄청난 비용을 피하려고 노력한다고 가정할 때의 이야기입니다. 만약 당신이 채용에 대한 발언권이 없는 팀을 관리하고 있고 팀을 위해 채용되는 사람들에 불만족스럽다면, 더 높은 품질의 엔지니어를 위해 치열하게 싸워야 합니다. 여전히 수준 이하의 엔지니어들만 받게 된다면, 아마 다른 직장을 찾아볼 때일 것입니다. 훌륭한 팀을 위한 원료가 없다면, 당신은 망할 것입니다.
안티패턴: 팀을 아이들처럼 대하라
팀에게 당신이 그들을 신뢰하지 않는다는 것을 보여주는 가장 좋은 방법은 그들을 아이처럼 대하는 것입니다. 사람들은 당신이 그들을 대하는 방식대로 행동하는 경향이 있으므로, 만약 당신이 그들을 아이나 죄수처럼 대한다면, 그들이 그렇게 행동할 때 놀라지 마세요. 당신은 그들을 세세하게 관리하거나 단순히 그들의 능력을 존중하지 않고 그들의 일에 책임질 기회를 주지 않음으로써 이런 행동을 나타낼 수 있습니다. 만약 신뢰하지 않기 때문에 사람들을 세세하게 관리하는 것이 영구적으로 필요하다면, 당신은 채용 실패를 손에 쥐고 있는 것입니다. 물론, 당신의 목표가 평생 돌봐야 할 팀을 만드는 것이 아니라면 실패입니다. 만약 당신이 신뢰할 만한 사람들을 채용하고 이 사람들에게 그들을 신뢰한다는 것을 보여준다면, 그들은 보통 기회에 부응할 것입니다(앞서 언급한 기본 전제, 즉 당신이 좋은 사람들을 채용했다는 것에 충실하여).
피츠는 시카고에서 지역 기관에서 빌린 장소에서 열리던 컨퍼런스를 운영합니다. 피츠가 컨퍼런스를 위해 장소에 접근하려고 처음 갔을 때, 시설 관리자는 피츠가 모든 것이 어디에 있는지 알 수 있도록 장소를 간단히 둘러보게 했습니다. 그런 다음 관리자는 건물 열쇠를 그에게 건네주고 다음 주에 열쇠를 돌려받겠다고 말했습니다. "해야 할 일과 하지 말아야 할 일" 목록도 없었고, 행사에 대한 광범위한 감독도 없었으며, 결과적으로 피츠와 그의 팀은 마치 자신들의 것처럼 시설을 돌보는 책임감을 느꼈고, 장소를 깨끗하고 정리된 상태로 유지한다는 기대를 뛰어넘었습니다.
이 수준의 신뢰의 결과는 건물 열쇠에서 사무실과 컴퓨터 용품까지 모든 곳에 나타납니다. 또 다른 예로, 구글은 직원들에게 다양한 사무용품(예: 펜, 노트북, 그리고 다른 "레거시" 창작 도구들)이 가득한 캐비닛을 제공하며, 직원들이 필요에 따라 자유롭게 가져갈 수 있습니다. IT 부서는 미니 전자상가와 같은 셀프 서비스 영역인 여러 "테크 스톱"을 운영합니다. 이곳에는 컴퓨터 액세서리와 잡동사니들(예: 전원 공급 장치, 케이블, 마우스, USB 드라이브 등)이 많이 있는데, 그냥 집어서 가져가기 쉽지만, 구글 직원들이 이 물품들을 체크아웃하도록 신뢰받고 있기 때문에, 올바른 일을 해야 한다는 책임감을 느낍니다. 전형적인 기업의 많은 사람들은 이런 말을 듣고 공포에 반응하며, 확실히 구글은 사람들이 이 물품들을 "훔쳐가서" 돈을 잃고 있을 것이라고 외칩니다. 그럴 수도 있지만, 아이처럼 행동하는 직원을 두는 비용은 어떨까요? 확실히 그것이 펜 몇 개와 USB 케이블 몇 개의 가격보다 더 비쌀 것입니다.
리더쉽 패턴
이것들은 우리가 경험과 다른 훌륭한 리더들을 관찰하고, 무엇보다도 우리의 리더십 멘토들에게서 배워 온 성공적인 리더십 행동 패턴들 입니다. 이는 우리가 직접 적용해 큰 성과를 거둔 패턴들이자, 우리가 따르는 리더들에서 가장 존경해 온 패턴들이기도 합니다.
자아를 내려놓기
HRT를 처음 다룰 때 Chapter 1. The Myth of the Genius Programmer에서 ‘자아를 내려놓기’에 대해 이야기했는데, 이는 서번트 리더 역할을 할 때 특히 중요합니다. 이 패턴을 ‘바닥걸레처럼 깔리고 팀이 마음대로 하게 두라’는 의미로 오해하곤 하지만 전혀 아닙니다. 겸손함과 남에게 휘둘림 사이에는 미묘한 경계가 있지만, 겸손은 자신감 부족과 같지 않습니다. 자아도취자가 아니면서도 자신감과 의견을 가질 수 있습니다. 큰 개인적 자아는 어떤 팀에서도, 특히 리더에게서는 다루기 어렵습니다. 대신 강력한 집단적 팀 자아와 정체성을 키워야 합니다.
‘자아를 내려놓기’의 일부는 이미 다룬 바와 같습니다. 팀을 신뢰해야 합니다. 이는 신규 합류자라 하더라도 팀원의 능력과 과거 성취를 존중한다는 뜻입니다.
마이크로매니징을 하지 않는다면, 최전선의 사람들이 당신보다 일을 더 잘 이해하고 있다고 봐도 됩니다. 즉, 당신이 합의를 이끌고 방향을 돕더라도, 목표를 어떻게 달성할지는 제품을 만드는 이들이 결정하는 편이 가장 좋습니다. 이는 소유감뿐 아니라 성과(또는 실패!)에 대한 책임감까지 크게 높여 줍니다. 좋은 팀이 있고 그들이 품질과 속도의 기준을 스스로 세우게 두면, 당근과 채찍으로 군림할 때보다 훨씬 많은 것을 이룹니다.
리더 역할을 처음 맡으면 모든 걸 완벽히 하고, 다 알고, 모든 해답을 가져야 한다는 압박을 느낍니다. 하지만 실제로는 그럴 수 없고, 그런 척하면 팀의 존중을 빠르게 잃습니다. 핵심은 역할 속에서 기본적인 안정감을 갖는 것입니다. 개인 기여자 시절을 떠올려 보세요. 불안은 멀리서도 냄새로 맡을 수 있었죠. 질문을 환대하세요. 누군가 당신의 결정이나 발언을 묻는다면, 대개 더 잘 이해하려는 것입니다. 질문을 장려하면 당신과 팀을 더 낫게 만드는 건설적 비판을 받을 가능성이 커집니다. 훌륭한 건설적 비판을 줄 사람을 찾기는 매우 어렵고, 특히 당신에게 ‘보고하는’ 사람에게서 그런 비판을 얻기는 더 어렵습니다. 팀의 큰 그림을 생각하고 피드백과 비판을 열린 마음으로 받으세요. 영역 싸움의 유혹을 피하세요.
‘자아를 내려놓기’의 마지막은 단순하지만, 많은 엔지니어가 기름에 삶기는 한이 있어도 피하고 싶어하는 일입니다. 실수했을 때 사과하는 것. 팝콘에 소금 치듯 “미안”을 남발하라는 뜻이 아니라, 진심으로 사과하라는 뜻입니다. 실수는 반드시 생기고, 인정하든 말든 팀은 이미 알고 있습니다(그리고 확실한 사실 하나: 그들은 분명 서로 이야기할 겁니다). 사과에는 돈이 들지 않습니다. 실수했을 때 사과하는 리더에 대한 존중은 큽니다. 흔한 통념과 달리, 사과가 당신을 취약하게 만들지 않습니다. 오히려 사람들은 당신을 더 존중합니다. 사과는 당신이 침착하고 상황 판단이 좋으며—HRT로 돌아가—겸손하다는 신호이기 때문입니다.
달인이 돼라
엔지니어로서 회의주의와 냉소에 능숙해졌겠지만, 팀을 이끌 때는 그게 독이 될 수 있습니다. 매사 순진한 낙관주의자가 되라는 뜻은 아니지만, 공개적인 회의적 태도는 줄이되 일의 복잡성과 장애물을 인지하고 있음을 팀이 알게 하세요. 반응을 조절하고 침착함을 유지하는 것은 리드하는 인원이 늘수록 중요합니다. 팀은 의식적·무의식적으로 당신의 태도에서 어떻게 행동·반응해야 하는지 신호를 읽습니다.

이 효과를 시각화하는 간단한 방법은, 회사 조직도를 기어 사슬로 보는 것입니다. 한쪽 끝의 작은 개인 기여자 기어에서 시작해, 위로 올라갈수록 더 큰 관리자 기어가 이어지고, 최종적으로 수백 개 톱니를 가진 CEO 기어가 있습니다. 하나의 ‘관리자 기어’가 한 바퀴 돌면 개인 기어는 두세 바퀴 돕니다. CEO가 아주 작은 움직임만 보여도 여섯, 일곱 단계 말단의 직원은 미친 듯이 회전하게 됩니다! 사슬 위로 올라갈수록, 의도했든 아니든 아래 기어들을 더 빠르게 돌게 만듭니다.

또 다른 관점은 “리더는 늘 무대 위에 있다”는 격언입니다. 드러난 리더십 위치에 있다면 늘 누군가의 시선 아래 있습니다. 회의를 진행할 때만이 아니라, 책상에 앉아 이메일을 답할 때조차도요. 동료들은 당신의 몸짓, 스몰토크 반응, 점심시간의 작은 신호에서 미묘한 단서를 읽습니다. 그들은 자신감을 읽을까요, 두려움을 읽을까요? 리더의 일은 영감을 주는 일이고, 영감은 24시간 내내 찾아옵니다. 사소해 보이는 모든 것에 대한 당신의 태도는 무의식적으로 포착되어 전염되듯 팀으로 퍼집니다.
Fitz에게는 Bill이라는[33] 관리자가 있었는데, 그는 어떤 순간에도 침착함을 유지하는 능력을 완전히 체득한 사람이었습니다. 무엇이 터지든, 얼마나 미친 사건이 벌어지든, 얼마나 큰 화재 폭풍이 닥치든 Bill은 결코 당황하지 않았습니다. 그는 한 팔을 가슴에 올리고 턱을 괴고는, 보통은 완전히 패닉 상태인 직원에게 문제를 묻곤 했습니다. 그러면 직원은 진정하고, ‘목 잘린 닭’처럼 헤매지 않고 문제 해결에 집중할 수 있었습니다. Fitz는 농담처럼 말하곤 했습니다. 누가 와서 “회사 사무실 19곳이 외계인에게 공격당했습니다”라고 말한다면, Bill은 이렇게 답할 거라고요. “왜 20개를 채우지 않았을까요?”
여기서 또 하나의 "질문하기"란 달인 관리 요령으로 이어집니다. 팀원이 조언을 구하면 흥분되기 쉽습니다. 마침내 무엇인가를 고칠 기회니까요! 리더가 되기 전 수년간 해 오던 일이기도 하니, 보통은 바로 해결 모드로 뛰어듭니다. 하지만 그건 최악의 선택입니다. 조언을 구하는 사람은 보통 당신이 문제를 대신 해결하길 바라지 않습니다. 대신 그 사람 자신이 해결하도록 돕기를 바랍니다. 가장 쉬운 방법은 질문하는 것입니다. 물론 당신 자신을 Magic 8 Ball(미국 장난감)로 대체하라는 뜻은 아닙니다. 그건 미치게 만들 뿐 도움이 되지 않습니다. 대신 HRT를 적용해, 문제를 더 정교하게 정의하고 탐색하도록 도와 그가 스스로 해결책에 이르도록 하세요. 그러면 대개 답에 다다르게 됩니다.[34] 그리고 그 답은 그 사람의 답이 됩니다. 앞서 말한 소유감과 책임으로 이어지죠. 당신이 답을 알고 있든 없든, 이 기법을 쓰면 대부분의 경우 당신이 답을 알고 있었다는 인상을 남기게 됩니다. 교묘하죠? 소크라테스가 자랑스러워할 겁니다.
촉매가 돼라
화학에서 촉매는 반응을 가속하지만 스스로는 소모되지 않는 물질입니다. 촉매(예: 효소)가 작동하는 방식 중 하나는 반응물들을 가까이 데려다 놓는 것입니다. 용액 속에서 이리저리 튀던 반응물들이, 촉매의 도움으로 서로 가까워지면 유리한 상호작용을 할 가능성이 훨씬 커집니다. 리더로서 당신도 자주 이런 역할을 하게 되며, 이를 위한 방법은 여러가지입니다.
팀 리더가 가장 흔히 하는 일 중 하나는 합의를 만드는 것입니다. 처음부터 끝까지 프로세스를 이끌 수도 있고, 속도를 내도록 올바른 방향으로 살짝 밀어 줄 수도 있습니다. 팀 합의 형성은 비공식 리더들이 자주 쓰는 리더십 기술입니다. 실제 권한 없이도 리드할 수 있는 방법이기 때문이죠. 권한이 있다면 지시하고 명령할 수 있지만, 합의를 만드는 것에 비해 전체적으로 효과는 떨어집니다. 팀이 빠르게 움직이고자 할 때는, 팀원들이 자발적으로 한두 명의 팀 리드에게 권한과 방향 결정을 위임하기도 합니다. 겉으로는 독재나 과두정치처럼 보여도, 자발적으로 이루어진 것이라면 그것 역시 합의의 한 형태입니다.
때로 팀은 해야 할 일에 이미 합의했지만, 장애물에 막혀 멈춥니다. 기술적일 수도, 조직적일 수도 있습니다. 이때 다시 움직이도록 돕는 것은 흔한 리더십 기술입니다. 팀원들에게는 사실상 넘기 어려운 장애물이, 리더인 당신에게는 쉽게 처리할 수 있는 일일 때가 있습니다. 이런 장애물이라면 기꺼이(그리고 능히) 도와주겠다는 신호를 팀이 이해하도록 돕는 것이 가치 있습니다.
어느 날 Fitz의 팀은 법무 부서와의 장애물을 넘기 위해 몇 주를 보냈습니다. 마침내 한계에 다다라 Fitz에게 도움을 청했을 때, 그는 연락해야 할 ‘적임자’를 알고 있었기에 두 시간도 안 되어 문제를 풀었습니다. 또 다른 날, Ben의 팀은 서버 자원이 필요했지만 배정을 받을 수 없었습니다. 다행히 Ben은 회사 전체의 다른 팀들과 소통하고 있었고, 그날 오후 바로 팀이 필요로 하는 자원을 확보했습니다. 또 한 번은 Fitz 팀의 엔지니어가 난해한 Java 코드에 막혔는데, Fitz는 자바 전문가가 아니었지만 문제를 정확히 아는 다른 엔지니어를 연결해 주었습니다. 모든 답을 알아야 장애물을 치울 수 있는 것은 아닙니다. 대신 답을 아는 사람을 아는 것이 대개 큰 도움이 됩니다. 많은 경우, ‘정답’을 아는 것보다 ‘정답을 아는 사람’을 아는 게 더 가치 있습니다.
실패는 선택지
팀의 촉매가 되는 또 다른 방법은, 더 큰 위험을 감수할 수 있도록 안전함과 심리적 안정감을 주는 것입니다. 위험은 흥미로운 주제입니다. 대부분의 인간은 위험 평가를 형편없이 합니다. 대부분의 회사는 어떤 대가를 치르더라도 위험을 피하려 하죠. 그래서 보통은 보수적으로 일하고, 더 큰 위험이 기하급수적 성과를 가져올 수 있는 상황에서도 작은 성공에만 집중합니다. 구글에선 자주 이렇게 말합니다. 불가능해 보이는 목표에 도전하면 실패할 확률이 높다. 하지만 불가능에 도전하다 실패하면, 애초에 해낼 수 있는 일만 시도했을 때보다 훨씬 더 많은 것을 이루게 된다. 위험 감수를 받아들이는 문화를 만들려면, 실패해도 괜찮다는 사실을 팀이 알도록 하세요.
그러니 분명히 합시다. 실패해도 괜찮습니다. 사실 우리는 실패를 아주 빠르게 많은 것을 배우는 방법으로 봅니다(물론 같은 일을 반복해서 실패하지 않는다는 전제하에). 실패를 비난이나 책임 추궁의 대상이 아니라 학습 기회로 보는 것이 중요합니다. 빨리 실패하는 건 좋습니다. 걸린 것이 많지 않으니까요[35]. 천천히 실패해도 배움은 있지만, 위험과 손실(대개 엔지니어링 시간)이 커서 더 아픕니다. 고객에게 영향을 주는 방식의 실패는 우리가 가장 원치 않는 실패로, 그럴수록 실패에서 학습하기 위한 구조를 더 갖춰 둡니다. 앞서 말했듯 구글은 프로덕션 실패가 있을 때마다 포스트모템을 진행합니다. 이는 실제 실패로 이어진 사건들을 기록하고, 재발 방지를 위한 단계들을 만드는 절차입니다. 이 과정은 책임을 따지거나 불필요한 관료적 점검을 들이밀기 위한 자리가 아닙니다. 문제의 핵심에 강하게 집중해 완전히 고치기 위한 자리입니다. 매우 어렵지만, 아주 효과적입니다(그리고 카타르시스입니다!).
개인의 성공과 실패는 조금 다르게 다뤄야 합니다. 개인의 성공을 칭찬하는 것은 좋지만, 실패했을 때 개인에게 책임을 전가하려 드는 건 팀을 분열시키고 전반적 위험 감수를 위축시키는 최악의 방법입니다. 실패해도 됩니다. 다만 팀으로서 실패하고, 거기서 배우세요. 개인이 성공했다면 팀 앞에서 칭찬하고, 개인이 실패했다면 비공개로 건설적 비판을 제공하세요.[36] 어떤 경우든 기회를 살려 HRT를 넉넉히 적용해, 팀이 실패에서 학습하도록 도우세요.
선생님과 멘토가 돼라
팀 리더로서 가장 어려운 일 중 하나는, 당신이라면 20분이면 끝낼 일을 주니어가 세 시간을 들여 씨름하는 모습을 지켜보는 것입니다. 사람을 가르치고 스스로 배울 기회를 주는 일은 처음엔 몹시 어렵지만, 효과적인 리더십의 필수 구성 요소입니다. 특히 신규 입사자에게 중요합니다. 그들은 팀의 기술과 코드베이스뿐 아니라 팀의 문화와 적절한 책임 수준까지 함께 배우고 있기 때문입니다.
관리자 역할과 마찬가지로, 멘토 역할은 지원해서 맡기보다는 팀 리드가 신입을 도울 사람을 찾다가 자연스럽게 맡게 되는 경우가 많습니다. 멘토에게 거창한 교육이나 준비는 필요하지 않습니다. 본질적으로 세 가지가 중요합니다. 팀의 프로세스와 시스템에 대한 경험, 타인에게 설명하는 능력, 그리고 멘티가 어느 정도 도움을 필요로 하는지 가늠하는 능력. 마지막이 아마 가장 중요합니다. 멘티에게 충분한 정보를 주는 것은 당신의 일입니다. 하지만 지나치게 장황하게 설명하면, 멘티는 “알겠다”고 정중히 말하기보다, 그냥 귀를 닫아 버릴 것입니다.
명확한 목표를 세워라
겉보기에는 너무나 자명하지만 놀라울 만큼 많은 리더들이 꾸준히 무시하는 패턴입니다. 팀을 한 방향으로 빠르게 움직이게 하려면, 구성원 모두가 그 방향이 무엇인지 이해하고 동의하게 해야 합니다. 제품을 거대한 트럭이라고 상상해 봅시다(파이프가 아니라). 각 팀원이 트럭 앞에 묶인 밧줄을 손에 쥐고 있고, 일을 하면서 자신의 방향으로 트럭을 끕니다. 당신의 목표가 트럭(혹은 제품)을 가능한 한 빨리 북쪽으로 끌고 가는 것이라면, 제각각으로 끌게 둘 수는 없습니다. 모두가 북쪽으로 끌어야 합니다.

명확한 목표를 세우고 팀이 같은 방향으로 제품을 끌도록 만드는 가장 쉬운 방법은, 간결한 팀 미션 스테이트먼트를 만드는 것입니다(미션 스테이트먼트에 대해서는 Chapter 2. Building an Awesome Team Culture 의 미션 스테이트먼트—정말로 절을 참조하세요). 팀의 방향과 목표를 정의하도록 도운 뒤에는 한 발 물러서 자율성을 부여하고, 주기적으로 점검해 올바른 궤도에 있는지 확인하세요. 이렇게 하면 리더십의 다른 과제에 시간을 쓸 여유가 생길 뿐 아니라, 팀의 효율이 비약적으로 향상됩니다. 명확한 목표 없이도 팀은 (실제로) 성공할 수 있지만, 대개는 각자가 약간씩 다른 방향으로 제품을 끌면서 엄청난 에너지를 낭비합니다. 이는 당신을 좌절시키고 팀의 진행을 늦추며, 당신이 진로를 바로잡기 위해 더 많은 에너지를 쓰게 만듭니다.
진실되라
당신이 팀에게 거짓말을 한다고 가정하는 것은 아닙니다. 다만, 언젠가 반드시 팀에게 어떤 것을 말할 수 없거나, 더 나쁘게는 듣기 싫은 사실을 말해야 하는 상황이 오기 때문에 이 주제를 언급합니다. Fitz의 이전 관리자는 신입 팀원들에게 이렇게 말하곤 했습니다. “나는 너희에게 거짓말하지 않아. 하지만 어떤 건 말할 수 없을 때가 있고, 그냥 모를 때도 있다는 건 말해 줄게.”
팀원이 당신이 공유할 수 없는 것을 묻는다면, 답을 알고 있지만 말해 줄 수 없다고 말해도 괜찮습니다. 더 흔한 상황은, 당신이 답을 모르는 질문을 받는 경우입니다. 모른다고 말하세요. 글로 보면 너무나 자명하지만, 많은 이들이 관리자 역할로 이동하면 답을 모르는 것이 약하거나 둔감하다는 증거라고 느낍니다. 현실에서 그게 증명하는 유일한 사실은 ‘인간’이라는 점뿐입니다.
어려운 피드백을 주는 일은… 음, 어렵습니다. 부하 직원에게 실수를 했거나 기대만큼 일을 잘하지 못했다고 처음 말해야 할 때는 엄청나게 스트레스를 받을 수 있습니다. 대부분의 관리 서적은 어려운 피드백을 전할 때 충격을 완화하기 위해 "칭찬 샌드위치"를 사용하라고 조언합니다. 칭찬 샌드위치는 다음과 같습니다:
"당신은 팀의 든든한 구성원이고 우리의 가장 똑똑한 엔지니어 중 한 명입니다. 그런데 말이지, 당신의 코드는 엄청나게 복잡하고 팀의 다른 누구도 이해하기 거의 불가능합니다. 하지만 당신은 엄청난 잠재력이 있고 멋진 턱수염도 있어요."
물론 이렇게 하면 충격은 완화되지만, 이런 식으로 에둘러 말하면 대부분의 사람들은 회의를 마치고 나서 "좋아! 내 턱수염이 멋지다는군!"이라고만 생각할 것입니다. 우리는 칭찬 샌드위치 사용을 강력히 반대합니다. 불필요하게 잔인하거나 가혹해야 한다고 생각해서가 아니라, 대부분의 사람들이 핵심 메시지를 듣지 못하기 때문입니다. 그 핵심 메시지는 무언가가 바뀌어야 한다는 것입니다. 여기서도 HRT를 적용할 수 있습니다. 칭찬 샌드위치에 의존하지 않고도 건설적 비판을 전할 때 친절하고 공감적으로 할 수 있습니다. 사실, 상대방이 비판을 듣고 즉시 방어적으로 나오지 않게 하려면 친절함과 공감이 필수적입니다.

몇 년 전, Fitz는 다른 관리자로부터 팀원 Tim을 인수받았는데, 그 관리자는 Tim과 함께 일하는 것이 불가능하다고 주장했습니다. 그는 Fitz에게 Tim이 피드백이나 비판에 전혀 반응하지 않고, 대신 하지 말라고 들은 똑같은 일을 계속 한다고 말했습니다. Fitz는 관리자와 Tim 사이의 상호작용을 관찰하기 위해 몇 번의 회의에 참석했고, 그 관리자가 Tim의 감정을 상하게 하지 않으려고 칭찬 샌드위치를 광범위하게 사용한다는 것을 알아차렸습니다. Fitz가 Tim을 자신의 팀으로 데려왔을 때, 그는 Tim과 앉아서 팀과 더 효과적으로 일하기 위해 몇 가지 변화가 필요하다고 매우 명확하게 설명했습니다. Fitz는 Tim에게 어떤 칭찬도 하지 않았고 문제를 포장하지도 않았지만, 똑같이 중요한 것은 Fitz가 비정하지 않았다는 점입니다. 그는 단지 이전 팀에서의 Tim의 성과를 바탕으로 자신이 본 사실들을 제시했을 뿐입니다. 놀랍게도 몇 주 만에 (그리고 몇 번의 "복습" 회의 후에) Tim의 성과가 극적으로 향상되었습니다. Tim에게는 매우 명확한 피드백과 방향이 필요했을 뿐이었습니다.
직접적인 피드백이나 비판을 제공할 때, 메시지가 들리고 회피되지 않도록 하는 데 있어 전달 방식이 핵심입니다. 상대방을 방어적으로 만들면, 그는 어떻게 변화할 수 있을지 생각하는 대신 당신이 틀렸다는 것을 보여주기 위해 어떻게 논쟁할지를 생각하게 됩니다. Ben은 한때 Dean이란 엔지니어를 관리했습니다. Dean은 극도로 강한 의견을 가지고 있었고 팀의 나머지 구성원들과 무엇이든 논쟁했습니다. 팀의 미션처럼 큰 것이든 웹 페이지의 위젯 배치처럼 작은 것이든 상관없이, Dean은 같은 확신과 격렬함으로 논쟁했고, 어떤 것도 그냥 넘어가게 두지 않았습니다. 몇 달간 이런 행동을 한 후, Ben은 Dean과 만나 그가 너무 호전적이라고 설명했습니다. 만약 Ben이 그냥 "Dean, 그렇게 짜증나게 굴지 마"라고 말했다면, Dean이 그것을 완전히 무시했을 것이 확실합니다. Ben은 Dean이 자신의 행동이 팀에 어떻게 악영향을 미치고 있는지 이해하게 할 방법을 열심히 생각했고, 다음과 같은 비유를 생각해냈습니다.
의사결정이 이루어질 때마다, 마을을 지나가는 기차와 같습니다. 기차를 멈추려고 기차 앞에 뛰어들면 기차를 늦추게 되고 기차를 운전하는 기관사를 짜증나게 할 수 있습니다. 새로운 기차가 15분마다 지나가고, 만약 모든 기차 앞에 뛰어든다면, 기차를 멈추는 데 많은 시간을 보낼 뿐만 아니라 결국 기차를 운전하는 기관사 중 한 명이 당신을 그냥 밟아버릴 만큼 화가 날 것입니다. 따라서, 일부 기차 앞에 뛰어드는 것은 괜찮지만, 정말 중요한 기차만 멈추고 있다는 것을 확실히 하기 위해 멈추고 싶은 기차를 선택하세요.
이 일화는 상황에 약간의 유머를 주입했을 뿐만 아니라, Dean의 "기차 멈추기"가 팀에 미치는 영향과 Dean이 그것에 들이는 에너지에 대해 Ben과 Dean이 더 쉽게 논의할 수 있게 했습니다.
행복을 추적하라
리더로서 장기적으로 팀을 더 생산적으로 만들고 (떠날 가능성을 줄이는) 한 가지 방법은 시간을 내어 그들의 행복을 측정하는 것입니다. 우리가 함께 일한 최고의 리더들은 모두 아마추어 심리학자였습니다. 때때로 팀원들의 복지를 살피고, 그들이 하는 일에 대한 인정을 받도록 하며, 그들이 자신의 일에 만족하는지 확인하려고 노력했습니다. 우리가 아는 한 리더는 해야 할 모든 더럽고 고마움을 받지 못하는 작업들의 스프레드시트를 만들어 이런 작업들이 팀 전체에 고르게 분산되도록 합니다. 다른 리더는 팀이 일하는 시간을 관찰하고 보상 휴가와 재미있는 팀 외출을 활용해 번아웃과 탈진을 피합니다. 또 다른 리더는 팀원들과의 일대일 세션을 기술적 문제를 다루는 것으로 시작해 분위기를 풀고, 그다음 각 엔지니어가 일을 완료하는 데 필요한 모든 것을 갖추고 있는지 확인하는 데 시간을 씁니다. 분위기가 풀린 후에는 엔지니어와 잠시 이야기하며 현재 하고 있는 일을 얼마나 즐기고 있는지, 다음에 무엇을 기대하고 있는지 알아봅니다.
팀의 행복을 추적하는 데 가장 가치 있는 도구 중 하나는 각 일대일 회의가 끝날 때 팀원에게 "무엇이 필요하세요?"라고 묻는 것입니다. 이 간단한 질문은 마무리하고 각 팀원이 생산적이고 행복하게 지내는 데 필요한 것을 갖추고 있는지 확인하는 좋은 방법입니다. 세부 사항을 얻기 위해 조심스럽게 좀 더 파고들어야 할 수도 있지만 말입니다. 일대일 회의를 할 때마다 이렇게 묻는다면, 결국 팀이 이것을 기억하게 되고 때로는 자신의 일을 더 좋게 만들기 위해 필요한 것들의 목록을 가지고 당신에게 오기도 할 것입니다.
사무실 밖에서의 팀의 행복에도 어느 정도 관심을 기울이는 것이 가치 있을 수 있습니다. 사람들이 일 밖에는 삶이 없다고 가정하지 않도록 주의하세요. 사람들이 일에 투입할 수 있는 시간에 대해 비현실적인 기대를 갖는 것은 사람들이 당신에 대한 존경을 잃게 하거나, 더 나쁘게는 번아웃을 일으킬 것입니다. 우리는 팀원들의 사생활을 캐라고 주장하는 것이 아니라, 팀원들이 겪고 있는 개인적 상황에 민감하게 반응하는 것이 특정 시점에 그들이 왜 더 생산적이거나 덜 생산적일 수 있는지에 대한 많은 통찰을 줄 수 있다는 것입니다. 지금 집에서 힘든 시간을 보내고 있는 팀원에게 약간의 여유를 주는 것은 나중에 팀이 촉박한 마감일을 맞춰야 할 때 그가 더 긴 시간을 기꺼이 투입하게 만들 수 있습니다.
팀원들의 행복을 추적하는 큰 부분은 그들의 커리어를 추적하는 것입니다. 팀원에게 5년 후 자신의 커리어를 어떻게 보는지 묻는다면, 대부분의 경우 어깨를 으쓱하며 멍한 표정을 짓게 될 것입니다. 갑자기 그런 질문을 받으면 대부분의 사람들은 이에 대해 많이 말하지 않을 것이지만, 보통 모든 사람이 향후 5년 동안 하고 싶어하는 몇 가지가 있습니다: 승진하기, 새로운 것 배우기, 중요한 것 출시하기, 그리고 똑똑한 사람들과 일하기. 이것을 말로 표현하든 그렇지 않든, 대부분의 사람들은 이에 대해 생각하고 있습니다. 효과적인 리더가 되려면, 이 모든 것들이 일어나도록 어떻게 도울 수 있는지 생각하고 이에 대해 생각하고 있다는 것을 팀에게 알려야 합니다. 이 중 가장 중요한 부분은 이러한 암묵적 목표들을 명시적으로 만드는 것입니다. 그래야 커리어 조언을 할 때 상황과 기회를 평가할 수 있는 실제 지표 세트를 갖게 됩니다.
행복 추적은 단순히 커리어를 모니터링하는 것뿐만 아니라, 팀원들에게 자신을 개선하고, 그들이 하는 일에 대한 인정을 받으며, 그 과정에서 약간의 재미를 느낄 기회를 주는 것으로 귀결됩니다.
다른 팁과 비결들
위임하되, 손을 더럽혀라. 개인 기여자 역할에서 리더십 역할로 이동할 때, 균형을 맞추는 것은 가장 어려운 일 중 하나입니다. 처음에는 모든 일을 스스로 하려는 경향이 있고, 리더십 역할을 오래 맡은 후에는 일을 전혀 하지 않는 습관에 빠지기 쉽습니다. 리더십 역할이 처음이라면, 팀의 다른 엔지니어들에게 일을 위임하는 데 열심히 노력해야 할 것입니다. 그들이 그 일을 완수하는 데 당신보다 훨씬 오래 걸릴지라도 말입니다. 이것은 당신의 정신 건강을 유지하는 한 가지 방법일 뿐만 아니라, 팀의 나머지 구성원들이 배우는 방법이기도 합니다. 한동안 팀을 이끌어왔거나 새로운 팀을 맡게 된다면, 팀의 존경을 얻고 그들이 하고 있는 일을 빠르게 파악하는 가장 쉬운 방법 중 하나는 손을 더럽히는 것입니다. 보통 다른 누구도 하고 싶어하지 않는 더러운 작업을 맡는 것으로 말입니다. 이력서와 성취 목록이 아무리 길어도, 실제로 뛰어들어 힘든 일을 하는 것만큼 팀에게 당신이 얼마나 숙련되고 헌신적이며 (그리고 겸손한지) 알려주는 것은 없습니다.
자신을 대체할 사람을 찾아라. 평생 똑같은 일을 계속하고 싶지 않다면, 자신을 대체할 사람을 찾으세요. 이는 앞서 언급했듯이 채용 과정에서 시작됩니다. 팀의 구성원이 당신을 대체하기를 원한다면, 당신을 대체할 수 있는 사람들을 고용해야 합니다. 우리는 이를 보통 "당신보다 똑똑한 사람을 고용하라"고 요약합니다. 당신의 일을 할 수 있는 팀원들이 있으면, 그들에게 더 많은 책임을 맡거나 때때로 팀을 이끌 기회를 주어야 합니다. 이렇게 하면 누가 리더십에 가장 적성이 있는지, 그리고 누가 팀을 이끌고 싶어하는지 빠르게 알 수 있을 것입니다. 어떤 사람들은 그냥 고성과 개인 기여자로 있는 것을 선호한다는 것을 기억하세요. 그것도 괜찮습니다. 우리는 항상 최고의 엔지니어들을 데려다가—그들의 의사에 반해—관리 역할에 던져넣는 회사들에 놀라왔습니다. 이는 보통 팀에서 훌륭한 엔지니어를 빼고 평균 이하의 관리자를 추가하는 결과를 낳습니다.
언제 변동을 일으켜야 하는지 알아라. (필연적이고 빈번하게) 몸의 모든 세포가 아무것도 하지 말라고 소리치는 어려운 상황들이 생길 것입니다. 기술적 실력이 기준에 미치지 못하는 팀의 엔지니어일 수도 있습니다. 모든 기차 앞으로 뛰어드는 사람일 수도 있습니다. 주 30시간만 일하는 동기 부족한 직원일 수도 있습니다. "조금만 기다리면 나아질 거야"라고 스스로에게 말할 것입니다. "저절로 해결될 거야"라고 합리화할 것입니다. 이 함정에 빠지지 마세요. 이런 상황들이야말로 가장 큰 변동을 일으켜야 하고 지금 일으켜야 하는 상황들입니다. 이런 문제들이 저절로 해결되는 경우는 거의 없으며, 해결을 미룰수록 팀의 나머지 구성원들에게 더 악영향을 미치고 밤에 그것들을 생각하며 잠 못 이루게 할 것입니다. 기다리는 것은 불가피한 일을 지연시키고 그 과정에서 헤아릴 수 없는 피해를 일으킬 뿐입니다. 그러니 행동하세요. 그리고 빠르게 행동하세요.

팀을 혼돈으로부터 보호하라. 리더십 역할을 맡으면, 보통 가장 먼저 발견하게 되는 것은 팀 밖에는 개인 기여자였을 때 결코 보지 못했던 혼돈과 불확실성(또는 심지어 광기)의 세계가 있다는 것입니다. Fitz가 1990년대에 처음 관리자가 되었을 때(다시 개인 기여자로 돌아가기 전), 그는 회사에서 일어나고 있는 엄청난 양의 불확실성과 조직적 혼돈에 깜짝 놀랐습니다. 그는 다른 관리자에게 평소 차분했던 회사에 갑자기 이런 불안정함이 생긴 원인이 무엇인지 물었고, 그 관리자는 Fitz의 순진함에 히스테리컬하게 웃었습니다. 혼돈은 항상 존재했지만, Fitz의 이전 관리자가 Fitz와 팀의 나머지 구성원들을 그것으로부터 보호해왔던 것입니다.
팀에게 엄호를 제공하라. 회사에서 그들 "위에서" 무슨 일이 일어나고 있는지 팀에게 알려주는 것이 중요하지만, 팀 외부에서 당신에게 부과될 수 있는 많은 불확실성과 사소한 요구들로부터 그들을 방어하는 것도 똑같이 중요합니다. 팀과 가능한 한 많은 정보를 공유하되, 실제로 그들에게 영향을 미칠 가능성이 극히 낮은 조직적 광기로 그들을 산만하게 하지는 마세요.
팀이 잘하고 있을 때 알려주어라. 많은 새로운 팀 리드들은 팀원들의 부족한 점을 다루는 데 너무 몰두한 나머지 충분히 자주 긍정적인 피드백을 제공하는 것을 소홀히 할 수 있습니다. 누군가 실수했을 때 알려주는 것처럼, 잘했을 때도 반드시 알려주고, 홈런을 쳤을 때는 그 사람(과 팀의 나머지 구성원들)에게 반드시 알려주세요.
마지막으로, 새로운 것을 자주 시도하고 싶어하는 모험적인 팀원들이 있을 때 최고의 리더들이 알고 자주 사용하는 것이 있습니다. 무언가를 되돌리기 쉽다면 "예"라고 말하기도 쉽다는 것입니다. 제품 속도를 높일 수 있는 새로운 도구나 라이브러리를 하루나 이틀 시도해보고 싶어하는 팀원이 있다면(그리고 촉박한 마감일이 없다면), "물론, 해보세요"라고 말하기 쉽습니다. 반면에, 향후 10년간 지원해야 할 제품을 출시하는 것 같은 일을 하고 싶어한다면, 좀 더 신중하게 생각해보고 싶을 것입니다. 정말 좋은 리더들은 언제 무언가를 되돌릴 수 있는지에 대한 좋은 감각을 가지고 있습니다.
사람들은 식물같다
Fitz의 아내는 여섯 자녀 중 막내이고, 그녀의 어머니는 여섯 명의 매우 다른 자녀를 각각 다른 것들이 필요한 아이들을 어떻게 키울지 알아내는 어려운 과제에 직면했습니다. Fitz는 그의 장모에게 어떻게 이것을 관리했는지 물었고(우리가 거기서 뭘 했는지 보셨나요?), 그녀는 아이들은 식물과 같다고 대답했습니다: 어떤 아이는 선인장 같아서 물은 적게 필요하지만 햇빛은 많이 필요하고, 다른 아이는 아프리카 제비꽃 같아서 산란광과 촉촉한 흙이 필요하며, 또 다른 아이들은 토마토 같아서 약간의 비료만 주면 정말 뛰어나게 될 것입니다. 만약 당신이 여섯 명의 아이가 있고 각각에게 같은 양의 물, 빛, 비료를 준다면, 그들은 모두 동등한 대우를 받게 되지만, 아무도 실제로 필요로 하는 것을 받지 못할 가능성이 높습니다.

그래서 당신의 팀원들도 식물과 같습니다:\ 어떤 이는 더 많은 빛이 필요하고, 어떤 이는 더 많은 물이 필요하며(그리고 어떤 이는 더 많은 헛소리, 아니, 비료가 필요합니다). 누가 무엇을 필요로 하는지 알아내고 그것을 제공하는 것이 그들의 리더로서 당신의 일입니다.
이 모형을 살펴보죠.

모든 팀원들을 최적 상태로 만들기 위해서는, 모형의 "곤경에 빠진" 부분에 속하는 사람들을 동기부여하고, "주의 산만해!" 부분에 있는 사람들에게는 더 강한 방향성을 제공해야 합니다. 물론, "표류하는" 사람들은 동기부여 그리고 방향성 모두가 필요합니다. 따라서, 물과 햇빛 대신, 팀원들을 행복하고 생산적으로 만들기 위해 동기부여와 방향성의 조합을 제공해야 합니다. 그리고 당신은 둘 다 너무 많이 주고 싶지 않습니다—왜냐하면 만약 그들이 동기부여나 방향성을 필요로 하지 않는데 당신이 그것을 주려고 한다면, 그저 그들을 짜증나게 할 뿐이기 때문입니다.
방향성을 제공하는 것은 상당히 직관적입니다. 무엇을 해야 하는지에 대한 기본적인 이해, 간단한 조직 기술, 그리고 그것을 관리 가능한 작업으로 나누는 충분한 조정이 필요합니다. 그 도구들을 손에 쥐고 있으면 방향성 도움이 필요한 엔지니어에게 충분한 안내를 제공할 수 있습니다(좋습니다, 그것보다 더 많은 것이 있지만, 우리는 이 장의 앞부분에서 그 많은 부분을 다뤘습니다). 하지만 동기부여는 조금 더 정교하고 설명이 필요한 가치가 있습니다.
내재적 vs 외재적 동기
동기부여에는 두 가지 유형이 있습니다: 외부에서 비롯되는 외재적 동기부여(예: 금전적 보상)와 내부에서 오는 내재적 동기부여입니다. 그의 저서 Drive[38]에서 Dan Pink는 사람들을 가장 행복하고 생산적으로 만드는 방법이 외재적으로 동기부여하는 것(예: 그들에게 돈을 쏟아붓는 것)이 아니라, 그들의 내재적 동기부여를 높이기 위해 노력하는 것이라고 설명합니다. Dan은 사람들에게 자율성, 숙달, 그리고 목적[39]이란 세 가지를 제공함으로써 내재적 동기부여를 높일 수 있다고 주장합니다.
사람이 자율성을 갖는다는 것은 누군가가 마이크로매니징하지 않고도 스스로 행동할 수 있는 능력을 갖는다는 뜻입니다[40]. 자율적인 직원들과 함께라면, 제품이 나아가야 할 일반적인 방향은 제시하되 어떻게 그곳에 도달할지는 그들이 결정하도록 맡길 수 있습니다. 이는 그들이 제품과 더 밀접한 관계를 갖고 있고 (당신보다 어떻게 만들어야 하는지 더 잘 알 가능성이 높기) 때문일 뿐만 아니라, 제품에 대한 훨씬 더 큰 소유감을 갖게 해주기 때문에 동기부여에 도움이 됩니다. 제품의 성공에 대한 그들의 지분이 클수록, 그것이 성공하는 것을 보고자 하는 관심도 더 커집니다.
숙련의 가장 기초적인 의미는, 누군가가 새로운 기술을 배우고 기존 기술을 향상할 기회를 제공하는 것입니다. 숙련의 기회를 넉넉히 주면 동기부여에 도움이 될 뿐 아니라 시간이 지날수록 사람을 더욱 성장시켜, 더 강한 팀을 만듭니다[41]. 직원의 기술은 칼날과 같습니다. 가장 예리한 기술을 가진 사람을 찾기 위해 수만 달러를 들이더라도, 그 칼을 수년간 갈지 않고 ‘사용’만 하면 결국 무뎌져 비효율적이고, 때로는 무용지물이 됩니다. 팀원들이 새 것을 배우고 장인을 향해 숙련을 쌓을 기회를 넉넉히 제공하면, 그들은 예리하고 효율적이며 효과적인 상태를 유지합니다.
물론 세상의 모든 자율성과 숙련 기회도, 일이 목적 없이 보인다면 동기부여에 도움이 되지 않습니다. 많은 사람이 의미 있는 제품을 만들지만, 그 제품이 회사·고객·세상에 주는 긍정적 효과와는 일정 거리를 둔 채 일합니다. 영향이 작은 제품이라 해도, 팀의 노력이 가진 이유를 찾아 명확히 알려 주면 동기부여할 수 있습니다. 그들이 자신들의 일에서 그 목적을 보도록 도와주면, 동기와 생산성이 크게 높아질 것입니다[42]. 우리가 아는 한 관리자는(영향이 '작은' 편에 속하는) 자사 제품에 대한 고객 이메일 피드백을 유심히 살피다가, 제품이 개인적으로 혹은 비즈니스에 얼마나 도움이 되었는지 전하는 메시지를 보면 즉시 엔지니어링 팀에 전달합니다. 이는 팀의 동기를 북돋울 뿐 아니라, 제품을 더 좋게 만들 아이디어를 자주 불러일으킵니다.
마지막 생각들
당신이 언젠가 팀을 이끌 생각이 있든 없든, 이 장이 훌륭한 팀 리더에게 필요한 것이 무엇인지 이해하고, 리더가 팀을 위해 무엇을 하는지에 대한 몇 가지 신화를 걷어 내는 데 도움이 되었기를 바랍니다. 설령 절대로 리더가 되지 않겠다고 단단히 마음먹었다 해도, 여기에 담긴 개념을 알아 두는 것은 좋습니다. 당신 팀의 리더가, 능력이 뛰어나든 형편없든, 왜 그런 행동을 하는지 이해하는 데 도움이 되기 때문입니다. 잠시 시간을 내어 당신의 팀을 살펴보고, 팀 리더가 팀의 성공(혹은 실패)을 위해 이 장의 어떤 패턴과 안티패턴을 적용하고 있는지 찾아보세요. 그러면 팀이 어떻게 돌아가는지 훨씬 더 구체적으로 이해할 수 있을 것입니다.
하지만 매일 함께 일하는 팀과 리더를 이해하는 것은 타인과 함께 일하는 일의 한 측면일 뿐입니다. 팀 밖의 사람과 마주치는 일은 훨씬 도전적일 수 있으며, 특히 그 사람이 당신의 팀을 망치려 든다면 더더욱 그렇습니다. 우리는 이들을 “독성 인물”이라 부르며, 다음 장에서 자세히 다룹니다.
Chapter 4. Dealing with Poisonous People
이 책의 머리말이 시사하듯, 창의적 일에서 가장 어려운 부분은 사람 입니다.
여기까지 우리는 내향적 접근을 취했습니다. 먼저 당신의 행동을 돌아보고 그것을 겸손·존중·신뢰(HRT)의 원칙에 맞추는 방법을 다루었습니다. 또한 이 원칙들을 바탕으로 소통하는 팀 문화를 구축하는 법을 탐구했고, 바로 앞 장에서는 필요한 경우 당신 스스로가 이런 팀의 효과적인 리더가 되는 방법을 설명했습니다.
이 책의 후반부에서는 시선을 바깥으로 돌려 보려고 합니다. 당신의 팀은 가까운 범위를 벗어난 사람들과 어떻게 상호작용하나요? 언제나 당신의 팀에 합류하거나 협업하기를 원하는 이들이 존재합니다. 또한 더 큰 조직 안에서의 정치적 문제를 다루는 일도 피할 수 없습니다. 그리고 무엇보다 중요한 외부인은 바로 당신이 만든 소프트웨어의 사용자들입니다. 따라서 이들과 관계를 맺고 대응할 수 있는 계획이 반드시 필요합니다.
이 장에서는 파괴적인 외부자가 당신의 팀이 어렵게 만든 협력 문화를 망치지 못하도록 막는 일이 왜 중요한지 다룹니다. 그리고 더 중요한 것은, 이미 팀 안에 있는 독이 되는 사람을 어떻게 다뤄야 하는지도 함께 이야기할 것입니다.
“ ‘독이 되는 사람’ 의 정의 ”
우리는 이미 견고하고 소통이 원활한 팀 문화를 만드는 것이 얼마나 중요한지 살펴 보았습니다. 우리는 대부분의 시간을 좋은 문화가 무엇을 포함해야 하는지에 대해 이야기 했습니다. 예를 들어 합의 기반 개발(consensus-based development), 고품질 코드, 코드 리뷰, 그리고 사람들이 새로운 것을 시도하고 빠르게 실패할 수 있을 만큼 편안함을 느끼는 환경 같은 것들을 말합니다.
그만큼 중요한 것은, 당신의 문화에 포함되지 말아야 할것들에 대해 이야기 하는 일입니다. 매우 효율적이고 빠르게 움직이는 팀을 만들고자 한다면, 원하지 않는 것에 초점을 맞추는 게 중요합니다. 뛰어난 엔지니어들은 팀을 더 빠르고 효율적으로 만들 수 있지만, 특정한 역행적 행동은 팀을 더 느리고 비효율적으로 만들고, 회사를 일하기 불편한 장소로 만들고, 결국에는 팀을 하나로 묶어주는 결속력을 서서히 무너뜨리게 됩니다.
소프트웨어 개발의 사회적 도전 과제에 대해 처음 이야기하기 시작했을 때, 우리는 “How to Deal with Bad Eggs(악당을 다루는 법)”이라는 발표를 만들었습니다. 한 컨퍼런스 의장이, 더 자극적인 제목이 더 많은 청중을 끌 수 있을 것이라며, 발표 제목을 "프로젝트가 독이 되는 사람(Poisonous People)으로부터 살아남는 법" 으로 바꾸자고 제안했습니다. 그리고 그는 옳았습니다. 우리는 여러 컨퍼런스에서 서서 듣는 관객이 가득 찬 가운데 그 발표를 거듭했습니다. 사람들을 끌어들인 것은 독이 되는 같은 부정적 단어 때문만이 아니라, 누구나 짜증나는 사람을 다뤄 본 개인적 경험이 어느 정도 있기 때문이었습니다. 발표는 거의 늘 청중이 전쟁담을 나누고 조언을 구하는 집단 치료 세션으로 바뀌곤 했습니다.
하지만 여기에는 위험이 있습니다. 일반적으로 부정적인 감정의 바다에 빠져 시간을 보내는 것은 건강하지 않습니다. 그것은 결국 당신을 갉아먹고, 장기적으로 더 많은 갈등을 일으킬 수 있습니다.[43] 독성 인물 이라는 말은 불쾌한 꼬리표이며, 자동으로 “우리”(좋은 사람들)와 “그들”(성가신 사람들) 사이에 선을 그어 버립니다. 이 문제를 더 나은 방식으로 생각할 수 있습니다. “못된 사람들을 몰아내자”라는 사명을 가진 엘리트 집단처럼 팀을 운영하기보다는, 특정한 부정적 행동을 결코 용납하지 않는 문화를 만드는 것이 더 건강합니다. 걸러내야 할 것은 특정한 사람이 아니라, 바로 그 행동 들입니다. 개인을 순수하게 선악으로 나누는 것은 순진한 생각이며, 용납할 수 없는 행동을 식별하고 꾸짖는 것이 더 건설적이고 실용적입니다.
당장은 설명을 단순하게 하기 위해 독성 인물이라는 표현을 계속 쓰겠습니다. 이는 바람직하지 않은 행동을 하는 사람을 가리키는 수사적 표현입니다. 다만 실제로는 일상 대화에서 쓰고 싶은 용어는 아닙니다!
팀을 더욱 견고하게 만들기
앞서 사용한 효모의 은유를 떠올려 보세요. 팀 문화는 중요한 시작 문화로부터 자라납니다. 팀의 장기적인 문화에 가장 큰 영향을 미치는 것은 바로 당신이 처음 함께 시작하는 팀입니다. 그리고 창립 팀이 충분히 강한 문화를 세우지 못한다면, 다른 문화의 요소들이 그것을 덮어버릴 것입니다. 만약 시작 팀이 받아들일 수 있는 행동과 받아들일 수 없는 행동에 대한 강한 기준치를 세운다면, 그 기대치는 오래도록 지속될 것입니다.
우리 둘은 오픈 소스 세계에서 많은 시간을 보냈고, 경험상 이 생각에 매우 강하게 공감합니다.
우리가 가장 깊이 관여했던 프로젝트인 서브버전(Subversion) 은 아주 작은 그룹의 사람들에 의해 시작되었습니다. 그들은 많은 겸손을 갖추었고, 자연스럽게 서로를 신뢰하고 존중했습니다. 15년이 넘는 시간이 흐르는 동안 프로젝트는 적어도 세대 교체를 세네 번 겪었고(창립자들은 대부분 떠났습니다), 그럼에도 같은 문화가 지속되고 있습니다. 모두가 친절하고 예의 바르며, 서로에게서 같은 행동을 기대합니다. 이런 문화는 높은 기준 때문만이 아니라, 문화가 대체로 자기 선택적(self-selecting)이기 때문이기도 합니다. 좋은 사람들은 기존의 좋은 커뮤니티에 이끌립니다.
자체 선택(Self-selection)은 아주 쉽게 반대 방향으로도 작동할 수 있습니다. 만약 한 팀이 화난 무례한 사람들에 의해 시작된다면, 그런 유형의 사람들이 점점 더 모여듭니다. 여기서 특정 프로젝트(예: 리눅스 커널 커뮤니티)의 이름을 굳이 언급하진 않겠지만, 끝없는 말다툼과 과시적인 행동으로 가득찬 대표적 사례들입니다. 물론 그 팀이 많은 일을 처리 할 수는 있겠지만, 전반적인 운영의 효율성은 의심스럽습니다. 만약 인신공격에 그렇게 많은 에너지를 쓰이지 않았더라면 얼마나 더 많은 일을 할 수 있었을까요? 그리고 정중한 사람들이 초장부터 내쫓기지 않았다면 얼마나 많은 잠재적 기여가 있었을까요?

우리가 이 주제를 다시 꺼내는 이유는, 무엇이 걸려 있는지를 당신이 이해해야 하기 때문입니다. 독이 되는 사람(poisonous people) 은 고성과 팀에 직접적인 위협이 됩니다. 나쁜 행동을 그대로 방치하면 생산성이 떨어질 뿐만 아니라, 팀 문화가 서서히 나쁜 쪽으로 변하는 걸 보게 될지도 모릅니다. 최선의 방어는 강력한 모범 사례와 절차를 통해 문화를 견고하게 구성하는 것입니다. 우리는 이미 Chapter 2. Building an Awesome Team Culture 에서 다뤘지만, 간단히 상기해 보겠습니다.
-
눈앞에 보이는 mission statement를 두어, 추구할 목표와 추구하지 않을 비목표 모두에 집중하도록 도와줍니다.
-
이메일 논의에 대한 올바른 에티켓을 정해라. 기록을 보관하고, 신규 참여자들이 읽게 하며, 시끄러운 소수에 의해 시간 끌림이 발생하지 않도록 해라.
-
모든 이력을 문서화하라. 코드 이력만이 아니라, 설계 결정, 중요한 버그 수정, 과거의 실수까지 포함한다.
-
효과적으로 협업하라. 버전 관리를 쓰고, 코드 변경을 작고 리뷰 가능하게 유지하며, 영역의식을 막기 위해 “버스 팩터(bus factor)”를 넓게 분산시켜라.
-
버그 수정, 테스트, 릴리스에 대한 명확한 정책과 절차를 마련하라.
-
신규자가 쉽게 참여하도록 진입 장벽을 낮춰라.
-
합의 기반 의사결정에 의존하되, 합의가 어려울 때 갈등을 해결할 대비 절차를 마련하라.
핵심은 이 모범 사례들이 깊이 뿌리내릴수록 커뮤니티가 악이 되는 행동을 더 단호히 거부하게 된다는 점입니다. 말썽꾼이 나타나도 당신은 대비가 되어 있을 것입니다.
위협 식별하기
당신이 독이 되는 사람들로부터 팀을 지키려면, 무엇이 위협을 이루는지, 언제 경계해야 하는지부터 정확히 이해해야 합니다. 구체적으로 위험에 처한 것은 팀의 주의력과 집중력입니다.
주의와 집중은 당신이 가진 가장 희소한 자원입니다. 팀이 커질수록 무언가를 만들고 흥미로운 문제를 해결하는 데 집중할 수 있는 역량은 커지지만, 그것 역시 언제나 한정되어 있습니다. 이 자원들을 적극적으로 보호하지 않는다면, 독이 되는 사람들이 팀의 흐름을 깨뜨리기는 아주 쉽습니다. 결국 당신의 팀은 말다툼에 휘말리고, 집중을 잃으며, 감정적으로 소진됩니다. 모두가 훌륭한 제품을 만드는 것 외의 일에 주의와 집중을 탕진합니다.

그러는 한편, 이런 의문이 생깁니다. 독이 되는 사람(poisonous person) 은 어떤 모습일까요? 스스로를 지키려면, 주의해야 할 것이 무엇인지 알아야 합니다.
우리의 경험에 따르면, 고의적으로 악의를 가지고 행동하는 사람(즉, 일부러 악당이 되는 사람)을 찾는 경우는 드뭅니다. 우리는 그런 사람들을 “트롤” 이라고 부르며, 보통 무시합니다. 그러나 대부분의 나쁘게 행동하는 사람들은 자신이 그런 행동을 하고 있다는 것을 인식하지 못하거나, 단순히 신경 쓰지 않을 뿐입니다. 그것은 악의라기보다는 무지나 무관심의 문제입니다. 대부분의 나쁜 행동은 단순히 HRT(겸손, 존중, 신뢰) 의 부족으로 귀결됩니다.
주의해야 할 전형적 신호와 패턴이 있습니다. 우리가 이런 패턴을 볼 때마다, 우리는 그 사람에게 “보조 비트를 뒤집는다(flipping the bozo bit)” 고 표현합니다. 즉, 그 사람이 지속적으로 독이 되는 행동을 보이고 있으며, 그와 상대할 때 매우 조심해야 한다는 점을 마음속에 기록하는 것입니다.
타인의 시간을 배려하지 않는 태도
프로젝트의 현재 상황을 전혀 파악하지 못하는 사람들이 있습니다. 이들이 끼치는 피해는 주로 팀의 시간을 낭비하는 형태로 나타납니다. 기본 문서, 미션 스테이트먼트, FAQ, 최신 메일 스레드만 몇 분 읽으면 될 일을 하지 않고, 온 팀을 반복적으로 붙잡아 스스로도 쉽게 찾을 수 있는 질문을 던집니다.
Subversion 프로젝트에는 한 참여자가 있었는데, 메인 개발자 포럼을 자기 의식의 흐름을 떠보는 놀이터로 쓰기로 했습니다. Charlie는 코드 기여를 전혀 하지 않았습니다. 대신 두세 시간마다 공상과 브레인스토밍을 뿌렸습니다. 그의 아이디어가 왜 틀렸는지, 불가능한지, 이미 진행 중인지, 예전에 논의됐거나 문서화돼 있는지 설명하는 답글이 반드시 여러 개 달렸습니다. 더 나쁜 건, Charlie가 지나가던 사용자들의 질문에 틀린 답을 달기 시작했다는 점입니다. 핵심 기여자들이 그의 답을 거듭 수정해야 했습니다. 우리는 이 상냥하고 열정적인 참여자가 실은 독이 되어 공동의 에너지를 빨아들이고 있음을 깨닫기까지 시간이 걸렸습니다. 이 상황을 어떻게 처리했는지는 뒤에서 다룹니다.
Ego
여기서 자아(에고)라는 말이 완벽하진 않지만, 우리는 합의 결정을 받아들이지 못하고, 다른 관점을 경청하거나 존중하지 못하며, 타협에 이르지 못하는 사람을 가리키는 용어로 씁니다. 이런 사람은 자신이 그 자리에 없었다는 이유로 오래전에(그리고 메일 아카이브에 문서화되어) 끝난 논의를 다시 열곤 합니다. 아예 기록을 읽지도, 생각하지도 않고 자기만을 위해 논쟁을 처음부터 다시 하자고 요구합니다. 자기 방식대로 하지 않으면 곧 파멸이 임박했다고 프로젝트의 성공 가능성을 휘둘러 말하기도 합니다.
Subversion 프로젝트에서는 어느 날 똑똑한 프로그래머가 메일 목록에 나타나 제품 전체가 잘못 설계되었다고 발언한 적이 있습니다. 그는 진리를 보았고, 사물이 작동해야 하는 급진적 구상을 가졌으며, 프로젝트를 처음부터 다시 시작해야 한다고 주장했습니다. 심지어 자신이 재시작을 이끌겠다고 ‘도움’까지 자처했습니다. 자신의 리더십 없이는 완전한 실패가 코앞이라고도 공언했습니다.
그 사람과 창립자들이 일주일 내내 논쟁하며 원래의 설계 결정을 방어하는 동안, 엄청난 주의와 집중이 소모됐습니다. 그는 타협할 의사가 없었고, 자신의 아이디어를 현재 제품에 통합할 생각도 없다는 것이 분명해졌습니다. 제품은 이미 베타였고, 현업에서 사용되고 있었습니다. 우리는 어느 시점에 토론을 떠나 본궤도로 돌아갈 수밖에 없었습니다. 아이러니하게도 수년 후에 이 사람의 예측은 여러 측면에서 옳은 것으로 드러났습니다. 그러나 그렇다 해도 Subversion이 크게 성공하는 것을 막지는 못했습니다. 적어도 기업용 소프트웨어 개발 분야에서는 그렇습니다. 요점은 옳고 그름 싸움이 아니라, 이견이 언젠가 결말을 맺을 수 있는지, 논쟁을 계속할 가치가 있는지입니다. 스스로에게 이런 질문을 멈추지 마세요. 언젠가는 손실을 줄이고 다음으로 넘어갈 때를 결정해야 합니다.
특권 의식
무언가가 반드시 이루어져야 한다고 요구하는 방문자가 나타난다면, 경고 신호를 켜야 합니다. 소프트웨어의 부족한 점을 불평하는 데 모든 에너지를 쏟으면서도, 어떤 방식으로든 직접 기여하려 하지 않는 사람에게는 분명 문제가 있습니다.
이러한 권리의식은 때때로 트롤 같은 행동으로 번집니다. 우리가 구글의 Project Hosting 서비스를 운영할 때, 한 프로젝트 소유자가 외설적 행동을 이유로 사용자를 차단해 달라고 요청했습니다. 해당 오픈 소스 프로젝트는 비디오 게임 에뮬레이터였고, 그 사용자가 좋아하는 게임이 제대로 동작하지 않았습니다. 그는 무례한 버그 리포트로 시작했고, 개발자들은 왜 아직 작동하지 않는지, 왜 당분간 고치기 어려운지 정중히 설명했습니다. 그러나 그는 그 답을 받아들이지 않았고, 매일 개발자들을 괴롭히기 시작했습니다. 같은 불만으로 버그를 계속 열었고, 다른 버그에도 “내 문제를 고치지 않는 바보들”이라는 식의 댓글을 달았습니다. 개발자들과 구글 관리자의 반복 경고에도 언행은 점점 더 심해졌습니다. 파괴적 행동을 없애려는 모든 노력에도 그는 끝내 변하지 않았고, 결국 최후의 수단으로 전체 차단을 할 수밖에 없었습니다.
미숙하거나 혼란스러운 커뮤니케이션
실명 대신 “SuperCamel”, “jubjub89”, “SirHacksalot” 같은 유치한 닉네임만 씁니다. 더 나쁜 건 미디어마다 별명이 다르기도 합니다. 이메일용, 메신저용, 코드 제출용이 각각 다른 식이죠. 사람들은 lol-speak(인터넷 은어), 1337speak(leetspeak), 모두 대문자, 혹은 과도한 문장 부호로 소통하는 모습을 보이게 됩니다.
피해 의식
앞선 예시에서 보았듯이, 때로는 부적절한 특권 의식이 프로젝트에 대한 공개적인 적대감으로 곧바로 이어지기도 합니다. 그것이 완전한 피해 의식으로 번지는 경우도 자주 봅니다. 기존 팀이 방문자와 의견이 다르면, 독이 되는 사람은 때땨로 “파벌”이나 음모가 있다고 비난하기 시작합니다. 프로젝트 팀이 그 사람을 그렇게까지 중요하게 생각해서 방문자에게 대항하기 위해 음모를 꾸민다고 상상하는 것은 우스꽝스러운 일이겠습니까. 이미 Chapter 2. Building an Awesome Team Culture 에서 권한 것처럼 소통이 개방적이고 투명한 문화라면 모든 대화가 이미 공개 기록이라 이런 비난은 더 우스워집니다. 우리의 권고는 간단합니다. 이런 주장에 굳이 답하지 마세요. 그 사람이 여기까지 갔다면, 당신이 무슨 말을 해도 그의 마음속 구덩이만 더 깊어집니다. 그러니 애초에 아무 말도 하지 않는 편이 낫습니다. 중요한 만들기 작업으로 돌아갈 때입니다.
완벽주의
표면적으로 완벽주의자는 전혀 위험해 보이지 않습니다. 때로는 강박적 성향이 조금 보일 수도 있지만, 보통 겸손하고 공손하며, 존중을 알고, 경청합니다. HRT와 선의로 가득 차 보이죠. 그럼 문제가 뭘까요? 문제는 ‘마비’의 위협입니다.
과거에 함께했던 사람을 보죠. Patrick은 뛰어난 엔지니어였습니다. 설계 감각이 탁월했고, 고품질 코드와 테스트를 썼으며, 함께 일하기 편했습니다. 하지만 새 소프트웨어를 설계할 때면, 평생을 설계를 다듬고 개선하는 데 쓸 기세였습니다. 계획에 결코 만족하지 않았고, 코딩을 시작할 준비가 영원히 되지 않은 듯 보였습니다. 우리가 풀려고 하던 문제에 대한 그의 통찰은 훌륭했지만, 팀은 엄청난 좌절을 겪었습니다. 우리는 실제로는 코드를 절대 쓰지 못할 것 같았죠. 프로젝트의 몇몇이 이 문제를 어떻게 할지 오랜 논의를 했습니다. 한편으로 Patrick은 팀에 큰 도움이었습니다. 다른 한편으로 그는 팀의 전진을 막고 있었습니다. 코딩을 막 시작하려 할 때마다 그는 공손하게 거부권을 행사하며, 먼 미래에 어쩌면 문제가 될지 모를 이론적 위험을 지적했습니다. 그는 자신도 모르게 우리를 마비시키고 있었습니다. 해결법은 다음 절에서 다룹니다.
해독시키기
반사회적이거나 무례하다는 이유만으로 사람을 커뮤니티에서 내쫓자고 권하지는 않습니다. 앞서 말했듯 “우리(좋은 사람)” 대 “그들(나쁜 사람)”에 집착한 파벌을 만드는 것은 건강하지 않습니다. 앞선 예들에서도 우리는 사람을 쫓아내는 데 집중하지 않고, 행동을 쫓아내는 데 집중했습니다. 나쁜 행동은 용납되지 않는다는 것을 분명히 하세요. 반복 경고에도 행동이 바뀌지 않을 때에만, 공식적인 배제를 고려하는 것이 타당합니다.
독성 행동을 제거하는 데 노력을 집중하는 것만으로도, (사회성이 조금 어색하더라도) 똑똑한 사람을 팀의 생산적 구성원으로 바꿀 수 있습니다. 몇 해 전 우리 팀에는 훌륭한 엔지니어였지만 무심코 동료를 곤란하게 만드는 습관이 있는 사람이 있었습니다. 커뮤니티에서 배제하기보다, 우리는 그를 따로 불러 자신의 말이 사람들을 소외시키고 있음을 알고 있냐고 물었습니다. 그는 다소 놀랐고, 왜 그런 효과가 생기는지 정확히 이해하지 못했습니다. 하지만 더 나은 팀원이 되기 위해 행동을 누그러뜨려 보겠다고 동의했습니다. 그리고 모든 것이 완벽히 풀렸습니다. 그는 행동을 바꾸었고 문제가 해결되었습니다. 모든 일화가 추방으로 끝나지는 않습니다!
이제 독성 인물을 식별했습니다. 어쩌면 지금도 팀의 에너지를 분산시키고 소모시키는 사람이 있을 겁니다. 어떻게 효과적으로 다룰 수 있을까요? 아래 전략들이 도움이 됩니다.
완벽주의자의 에너지를 전환하기
원래 문제에 대해 ‘충분히 좋은’ 해법을 찾았다면, 완벽주의자의 에너지를 아직 손봐야 하는 다른 문제로 돌리세요.
Subversion의 완벽주의자에게도 이 전략이 통했습니다. 우리는 결국 Patrick을 따로 불러 이렇게 말했습니다. “좋아요, 지금의 설계대로 그냥 시작해 보고, 일어나는 일을 보죠. 길에서 문제가 생기면 그때 당신이 우회로를 찾도록 도와주세요.” 놀랍게도 Patrick은 이를 받아들였고, 집착의 대상을 다른 주제로 옮겼습니다. 누구의 감정도 상하지 않았고, Patrick은 계속 전체 노력에 기여했습니다.
“완벽이 좋은 것의 적이 되게 하지 말라”는 오래된 속담이 있습니다. 성과 높은 팀을 만들고자 한다면, 더 분명하게 방해가 되는 행동들을 지적할 때만큼이나 완벽주의를 피하는 데에도 경계를 늦추지 않아야 합니다.
에너지를 돌리는 요령은, 돕기보다 불평·비난에 시간을 더 쓰는 과도한 권리의식의 소유자에게도 통합니다. 이런 사람에게 “패치 환영” 같은 상투적 응수(‘말만 하지 말고 기여하라’는 오픈 소스식 완곡 표현)를 하고 싶겠지만, 대신 정식 테스트와 리그레션 지적에 관심을 두게 해 보세요. 불평을 계속하되 유익한 방식으로 하게 됩니다.
에너지 괴물을 키우지 마라
Usenet에서 유래한 옛 격언입니다.[44] 특히 이것은 의도적으로 당신이나 당신의 팀을 자극하려는 트롤(trolls) 에게 가장 잘 통합니다. 당신이 반응하면 할수록 트롤은 당신의 에너지를 빨아들이고, 당신은 그만큼 더 많은 시간을 낭비하게 됩니다. 가장 좋은 대응은 침묵인 경우가 많습니다. 한 방 먹이는 멋진 한 줄을 던지고 싶더라도, 참으세요. 아무도 자신에게 관심을 주지 않는다는 걸 깨닫게 되면, 그는 보통 흥미를 잃고 그냥 떠납니다. 대응하지 않기 위해서는 꽤 큰 의지가 필요하다는 점을 명심하십시오. 참고 버티세요!

과도하게 감정적이지 마라
상대가 의도적으로 트롤링하지 않더라도, 방어적으로 굴기 쉽습니다. 누군가가 나쁜 설계 결정을 했다거나 음모를 꾸몄다고 비난하거나, 자명한 질문을 너무 많이 해서 시간을 낭비하게 만들면 쉽게 화가 납니다. 기억하세요. 당신의 일은 훌륭한 것을 만드는 일이지, 방문자 모두를 달래거나 존재 이유를 반복 입증하는 일이 아닙니다. 감정이 강할수록, 그만한 대우를 받을 자격이 없는 사람에게 격정적 답장을 쓰느라 시간과 날을 더 낭비하기 쉽습니다. 싸움을 신중히 고르고, 침착함을 유지하세요. 누구에게 답할지, 누구는 그냥 두고 넘어갈지 신중히 결정하세요.
쏟아내는 독설 속에서도 사실을 찾아라
과도한 감정을 경계한다는 주제의 연장선에서, 또 하나의 보완점은 사실을 적극적으로 찾는 것입니다. 누군가가 불평하면 주의 깊게 들으세요. 화가 섞이거나 무례한 언어에도 불구하고, 언제나 먼저 그 사람에게 선의의 해석을 부여하는 것부터 시작해야 합니다. 정말 일리가 있나요? 그 사람의 경험에서 배울 것이 있나요, 응답할 가치가 있는 아이디어가 있나요? 종종 대답은 “그렇다”입니다.독성 인물의 독설 속에도 실제로는 지혜가 묻혀 있는 경우가 많습니다. 논의를 항상 기술적 토론으로 되돌리세요[45].
좋은 예가 하나 있습니다. 오픈 소스 커뮤니티의 유명 리더에게서 독설 가득한 이메일을 받은 날이었습니다. 버그 리포트의 형식을 띠었지만, 표면상으로는 팀의 지능을 깎아내리는 분노의 글에 가까웠습니다. 중상과 과장이 가득했고, 버그를 고치려는 의도보다 팀을 자극하려는 의도가 더 뚜렷해 보였습니다. 하지만 우리 팀의 한 구성원은 버그에만 집중해 몇 가지 구체 질문으로 응답했습니다. 리포터는 추가 설명을 보냈지만, 여전한 독설에 싸여 있었습니다. 팀원은 모욕을 완전히 무시한 채 이슈를 조사하고 간단히 답했습니다. “리포트 감사합니다. 고치는 방법이 보입니다. 곧 패치를 배포하겠습니다.”
그 팀원의 대처가 몹시 자랑스러웠습니다. 철저히 침착하고 사실 중심으로 임하자, 대화가 진행될수록 원 게시자는 더 광적으로 보였습니다. 결국 교환의 끝에서 버그 리포터는 청중의 신뢰를 완전히 잃었고, 더는 머물 관심도 사라졌습니다.
상냥함으로 트롤을 물리쳐라
앞서 말한(침착하고 사실에 충실한) 접근을 한 걸음 더 나아가면, 지나치게 친절함 만으로도 사람을 물러가게 만들 때가 있습니다! 아래는 Subversion IRC 채널의 실제 대화록입니다.
harry: Subversion 구려. 진짜 성가시네.
sussman: 도움이 필요하면 그냥 물어봐.
harry: 난 그냥 cvs로 누군가의 파일을 가져오고 싶어. 아니, 사실 그냥 투덜대고 싶을 뿐이야. 근데 그 사람이 Subversion이라는 거에 꽂혀서 cvs 대신 svn을 쓰고 있거든.
sussman: 그럼 svn 클라이언트 받아서 소스 체크아웃하면 되잖아.
harry: 그래서 이 Subversion이란 걸 다운로드했는데… cvs처럼 configure; make; make install로 설치할 수 있냐? 당연히 안 되지. 난 Subversion 사람들보다 그 인간을 더 탓할 거야.
sussman: 네가 ./configure; make; make install 못한다고 해서, 큰 버그가 있는 건 아니야. 사람들은 매일 svn tarball로 그거 하고 있어.
harry: 난 버그라고 말한 적 없어.
sussman: 그렇게 근본적인 게 깨져 있었다면 우리가 tarball을 배포했겠냐?
harry: 그냥 저 얼간이에 대해 불평하는 거야. expat이나 libxml을 설치해야 하잖아. 하아…
sussman: 그런 건 보통 대부분 시스템에 기본으로 설치돼 있어.
sussman: 그 사람이 아파치 서버 쓰는 거야? 그냥 바이너리 받는 게 낫겠다.
harry: 몰라, 그냥 svn이라고만 해.
sussman: 어떤 배포판 쓰고 있어?
harry: FreeBSD
sussman: 그럼 ports 트리 들어가서 그냥 port 빌드하면 돼.
harry: 너희는 내 불평을 다 망치네… 난 싸우러 왔는데… 너희가 너무 친절하고 도움이 돼.
sussman: :-)
harry: 대체 언제 IRC 채널에 와서 다들 도와주려고만 하냐? 에휴.
— Harry님이 나갔습니다.
포기할 때를 알아라
아무리 노력해도, “보조 비트”를 켜고 지나가야 할 때가 있습니다. 나쁜 행동을 바로잡으려 주의와 집중을 많이 들였더라도, 가망이 없는 일을 알아보는 법을 알아야 합니다.
메일을 너무 자주 올리던 친절한 철학자, Charlie의 이야기로 돌아갑시다. 우리는 결국 메일 토론을 분석했고, 두 달 사이 그가 세 번째로 많은 글을 올린 참가자가 되었음을 발견했습니다. 1등과 2등은 핵심 기여자였고, 그들의 글 70%가 Charlie에게 답장하는 데 쓰였습니다! Charlie에게 악의가 없었음에도 우리의 에너지와 집중이 빨려나가고 있었습니다. 최종 해결책은 그에게 개인적으로 (정중히) 메일을 보내서, 그렇게 자주 글을 올리지 말아 달라고 요청하는 것이었습니다. 이는 어려운 대화였는데, 주로 그가 자신의 방해 규모를 이해하지 못했기 때문입니다. 몇 주 더 큰 변화가 없자, 우리는 전화로 길고(더 어려운) 대화를 통해 아예 글을 멈춰 달라고 부탁했습니다. 그는 약간 슬프고 혼란스러워했지만, 팀의 뜻을 존중해 물러났습니다. 그가 가한 피해를 끝내 완전히 이해하지 못했기에 모두가 약간 죄책감을 느꼈지만, 동시에 옳은 일이라 느꼈습니다. 섬세한 상황이었지만, 우리는 HRT를 충분히 적용해 예의를 지키며 적절히 해결했습니다.
장기적인 것에 집중하라
성공으로 가는 길에는 수천 가지 산만함이 늘어서 있습니다. 독성 인물로 인한 산만함을 다룰 때 공통 주제가 있다면, 눈앞의 드라마에 휘말리기 너무 쉽다는 점입니다. 독성 행동으로 보이는 장면을 목격했다면, 자신에게 다음의 두 가지 핵심 질문을 던지세요.
-
단기적으로 팀의 주의와 집중을 잃더라도, 장기적으로 프로젝트가 이득을 볼 것이라고 진정 믿는가?
-
그 갈등이 궁극적으로 유익한 방식으로 해결될 것이라고 믿는가?

이 질문들 중 하나라도 답이 “아니오”라면, 가능한 한 빨리 개입해 그 행동을 멈춰야 합니다. 독을 묵인하면 단기적 이득이 있다고 스스로를 설득하기 쉽지만, 보통은 그렇지 않습니다. 누군가 훌륭한 기술 기여자일지라도 독성 행동을 보일 수 있습니다. 기술적 진보의 이익을 위해 행동을 못 본 척하고 싶겠지만, 조심하세요! HRT에 기반한 강한 문화는 대체 불가능하지만, 기술 기여는 충분히 대체 가능합니다. 우리 팀 동료의 말을 빌리면
나는 그를 어느 정도 아는 친구들이 몇 명 있습니다. 그중 한 명은 이렇게 말했습니다. “그는 종종 천재와 광인의 경계선을 아슬아슬하게 걷는다.”문제는 요즘은 천재가 너무 흔한 자원이라, 더 이상 괴짜로 사는 것이 용납되지 않는다는 점입니다.
물론 Greg이 말하는 ‘천재’는 문자 그대로의 천재가 아닙니다. 세상은 유능한 프로그래머로 가득합니다. 장기적으로 불쾌감을 주거나 문화를 위협하는 사람이라면, 다른 사람을 기다리는 편이 낫습니다.
Subversion 프로젝트에서도 비슷한 상황을 겪었습니다. 팀에는 소스 파일에 이름을 넣지 않는 엄격한 정책이 있습니다(Chapter 2. Building an Awesome Team Culture 에서 다룬 바로 그 정책!). 개인 명의는 통제하기 어려운 영역의식을 만듭니다. 누군가의 이름이 박힌 코드는 바꾸기 두렵고, 버스 팩터를 인위적으로 낮춥니다. 대신 버전 관리 이력을 통해 적절히 공을 돌리고, 최상위에 모든 기여자의 이름을 모은 파일을 하나 둡니다.
어느 날 똑똑한 프로그래머가 나타나 절실히 필요했던 큰 기능을 자원해 구현하겠다고 나섰습니다. 그는 리뷰를 위해 코드를 제출했는데, 우리가 준 주요 피드백은 파일 상단에 적힌 자신의 이름을 지워 달라는 단순한 요청이었습니다. 다른 기여자들과 마찬가지로 동일한 방식으로 공로를 인정하겠다는 뜻이었습니다. 그러나 그는 이를 거부했고, 논의는 교착 상태에 빠졌습니다. 결국 우리는 그의 코드를 거절했고, 그는 자신의 코드를 챙겨 떠나 버렸습니다. 물론 모두가 실망했지만, 새로운 기능을 빨리 얻자고 해서 우리의 정책을 어기고 문화를 희석하고 싶지는 않았습니다. 그리고 두어 달 뒤, 다른 사람이 그 기능을 다시 구현했습니다.
분명히 말하자면, 단기적인 이익을 위해 문화를 희생할 가치는 없습니다. 특히 그것이 HRT의 중요성을 인정하지 않는 뛰어난 기여자에 관한 것이라면 더더욱 그렇습니다.
마지막으로 드는 생각
이 장은 다양한 시나리오를 다뤘고, 다 읽고 나면 편집증이 깊어지기 쉽습니다. 하지만 세상이 온통 못된 사람들로 가득 차 있지는 않다는 점을 기억하세요. 어느 친구가 이렇게 말했습니다. “미친 사람은 몇 안 돼. 인터넷이 마치 다 옆집에 사는 것처럼 보이게 만들 뿐.”
로버트 J. 한론의 격언을 빌리면,
“악의로 충분히 설명할 수 있는 일을 '멍청함' 탓으로 돌리지 마라.”
우리는 멍청함 대신 무지라는 말을 쓰고 싶지만, 요점은 같습니다. 앞서 말했듯, 사람을 선과 악으로 나누는 건 순진한 생각입니다. 문화를 고의로 박살 내려는 진짜 악인은 드뭅니다. 대부분은 단지 잘못 알았거나 길을 잘못 든 사람들입니다. 혹은 인정받고 싶지만 사회적으로 서툴러 어울리지 못하는 사람일 수도 있습니다. 어느 쪽이든, 당신의 일은 우쭐대며 계몽되지 않은 농노들을 프로젝트 밖으로 내치는 게 아니라, 파괴적 행동을 용납하지 않고 HRT에 대한 기대를 분명히 하는 일입니다. 둘의 차이를 이해하는 데는 지혜가, 이를 실행하는 데는 진짜 기술이 필요합니다.
5장. 조직적 조율의 기술
("organizational manipulation", id="ixch05asciidoc0", range="startofrange" 지금까지는 당신과 팀의 '사람' 측면을 다루는 법을 이야기했습니다. 팀을 이끄는 데 필요한 기본적인 대인 기술과, 독이 되는 사람들의 위협을 다룰 때의 위험 요소도 검토했습니다. 이와 더불어, 좋은 회사와 나쁜 회사 모두에서 어떻게 길을 찾을지도 알아야 합니다. 대부분의 사람은 기능장애적 관료제 속에서 일하며, 일을 효과적으로 끝내기 위해 일정한 '기술적 조작' 기법을 사용해야 합니다. 어떤 이는 이것을 정치라 부르고, 또 어떤 이는 사회공학이라 부릅니다.
우리는 이를 조직적 조율(organizational manipulation)이라 부릅니다.
좋은 것, 나쁜 것, 그리고 전략
대기업은 복잡한 미로입니다. 최고의 회사조차 회사의 한쪽 끝에서 다른 끝으로 가려면 GPS, 손전등, 그리고 트럭 한가득 빵가루가 필요합니다.

먼저 이상적인 회사에서 팀이 보통 어떻게 움직이는지 살펴보고, 이어 기능장애적 회사가 팀의 성공에 어떻게 갖가지 장벽을 세우는지 논의합니다. 두 종류의 회사에서 일을 해내는 전략을 정리한 다음, 끝으로 모든 방법이 통하지 않을 때의 플랜 B를 다룹니다.
당연히 그래야 하는 회사
제대로 기능하는 회사에는 두 가지 층위가 있습니다: 대부분의 시간을 함께 보내게 될 당신의 매니저와, 매니저를 넘어선 회사 전체입니다. 후자에는 지식 근로자, 중간 관리자, 임원, 영업 담당자, 법무 담당자 등이 포함됩니다.
이상적인 직장인 경험(Employee Experience)
당신의 매니저가 HRT를 실천하며 당신의 성공을 진심으로 돕고자 하는 서번트 리더라면(Chapter 3. Every Boat Needs a Captain 참조), 그녀의 일을 더 쉽게 만들어주고 결과적으로 당신을 더 생산적이고 가치 있는 팀원으로 만들 수 있는 몇 가지 간단한 방법들이 있습니다. 더 중요한 것은, 이런 방법들이 당신의 일을 더 좋게 만들고 커리어를 더 성공적으로 만들 수 있다는 점입니다.

추가적인 책임을 추구하라 일을 해나가면서 말입니다. 이에 대한 우리가 가장 좋아하는 비유 중 하나는 산림 관리원이 당신(주니어 관리원)을 숲으로 보내 병들거나 손상된 나무를 베어내라고 하는 상황입니다. 단순히 당면한 과제에만 집중한다면, 숲에 들어가서 병든 나무를 베고 의기양양하게 돌아올 것입니다. 하지만 더 큰 그림을 생각한다면, 숲에 들어가서 병든 나무를 베고, 여행 중에 마주친 다른 모든 병든 나무들의 지도와 함께 돌아올 것입니다. 그리고 시니어 관리원이 이것이 최선의 행동 계획이라고 동의한다면 효율적으로 그것들을 베어낼 계획도 함께 말입니다. 이런 종류의 행동의 결과로, 다음에 산림 관리원이 그 수준의 책임감을 요구하는 과제를 가지고 있을 때 그녀는 당신에게 첫 번째 기회를 줄 가능성이 높습니다. 그녀가 이렇게 하는 이유는 당신이 할 수 있다는 것을 알기 때문일 뿐만 아니라, 그것이 최소 저항의 경로이기 때문입니다—그녀에게는 더 적은 일이죠.

이런 종류의 적극적이고 책임을 추구하는 행동은 매니저가 걱정할 일이 하나 줄어들기 때문에 그녀의 업무량을 줄여주고, 당신이 현재 수준을 넘어서는 일을 할 수 있다는 것을 보여줍니다. 이는 또한 당신이 컴포트 존을 벗어나 새로운 것들을 시도해야 할 가능성이 높다는 것을 의미하며, 위험을 감수하고 빠르게 실패하는 것이 장려되는 팀에 있다면 그것은 괜찮습니다.
위험을 감수하고 실패를 두려워하지 마세요. 우리는 3장과 4장에서 위험을 감수하고 빠르게 실패하는 것의 중요성에 대해 많이 이야기했습니다. 깨달은 매니저가 있는 상황에서 실패는 빠르게 배우고, 당신이 할 수 있는 것과 할 수 없는 것의 한계를 발견하며, 시간이 지나면서 그 한계를 늘려가는 훌륭한 방법입니다. 업무상 여행을 많이 다니는 우리 친구 Steve Hayman은 종종 이렇게 말했습니다. "1년에 적어도 한 번은 비행기를 놓치지 않는다면, 공항에 너무 일찍 도착하고 있는 것이다." 이는 어떤 종류의 제품을 만드는 것에 대한 훌륭한 비유입니다. 1년에 적어도 한 번은 실패하지 않는다면, 충분한 위험을 감수하지 않고 있는 것입니다. 그리고 추가적인 책임을 추구하는 것처럼, 위험을 감수하는 것은 당신이 더 큰 일들을 할 수 있다는 것을 보여주는 방법입니다.
일에서 위험을 감수하지 않으면 실패는 적겠지만, 큰 성공도 적을 것입니다. 좋은 매니저는 자신들이 무엇을 할 수 있고 할 수 없는지 알아보기 위해 한계를 밀어붙이려는 팀을 원하며(그 과정에서 많은 것을 배우기 위해), 당신이 실패했을 때 부드러운 착지를 제공할 것입니다. 실패했을 때는 책임을 지고, 비난할 대상을 찾지 말며, 무슨 일이 일어났는지와 같은 실패를 다시 피하기 위해 무엇을 할 수 있는지 문서화하세요. 반복하고, 헹구고, 다시 반복하세요.
어른처럼 행동하라. 뻔해 보이는 제안들의 긴 목록에서 또 다른 권고사항입니다: 사람들에게 어떻게 행동하고 당신을 어떻게 대해야 하는지 가르치는 것은 당신의 책임입니다. 나쁜 매니저들은 종종 어떤 주도권, 책임감, 또는 규칙 위반이라도 짓밟음으로써 팀이 아이들처럼 행동하도록 훈련시킵니다. 이런 매니저를 겪었다면, 모든 매니저들로부터 이런 종류의 대우를 기대하게 되는 경우가 많습니다.
확실하지 않은 것들에 대해 질문하라. 매니저가 당신이 동의하지 않는 결정을 내린다면, 그녀와 논쟁하거나 그녀가 결정을 내린 전제에 대해 질문하는 것을 두려워하지 마세요. 이것이 장애물이 되라는 허가증은 아니지만, 당신이 그녀에게 없는 정보나 경험을 가지고 있다면 "예스맨"이 되는 것은 리더십 위치에 있는 사람에게 도움이 되지 않습니다.
당신의 매니저는 천리안을 갖고 있지 않습니다: 조직에서 과도하게 소통하는 사람을 찾는 것은 드물기 때문에, 그녀가 무슨 일이 일어나고 있는지 묻기 전에 당신이 무엇을 하고 있는지 팀 리더에게 업데이트하는 것을 주저하지 마세요. 장애물에 부딪히거나, 승리를 거두거나, 무언가가 필요하거나, 무언가를 기대할 때 그녀에게 간단한 메모를 보내세요. 이는 매니저가 당신이 무엇을 하고 있는지 알도록 하는 훌륭한 방법일 뿐만 아니라, 우리는 영리한 엔지니어들이 마이크로매니징을 다루는 방법으로 이 기법을 극단적으로 활용하는 것을 보았습니다: 매니저가 계속 당신을 확인한다면, 그녀가 당신을 확인하는 빈도와 같은 빈도로 적극적으로 이메일을 보내는 것은 그녀가 물러서게 만드는 확실한 방법입니다.
이런 기법들은 이상적인 조직에 있을 때 잘 작동하지만, 조직이 이상적이지 않을 때는 어떨까요?
보통 회사는
행복한 가족은 다 닮아있다. 모든 불행한 가족은 각자의 방식으로 불행하다.[46]
Anna Karenina
회사 환경이 당신의 성공을 막는 방법은 셀 수 없이 많지만, 보통 두 가지 주요 범주로 나눌 수 있습니다: 나쁜 사람들과 나쁜 조직입니다.
나쁜 매니저
나쁜 매니저의 특성을 설명하는 것을 어디서부터 시작해야 할지 알기 어렵습니다—전체 영화와 TV 쇼들이 세상의 나쁜 매니저들을 조롱하기 위해서만 만들어졌을 정도입니다. 우리 대부분은 커리어에서 적어도 한 명의 나쁜 매니저를 겪었고, 나쁜 매니저는 가장 훌륭한 팀에서조차 삶을 지옥으로 만들 수 있기 때문에, 우리는 일반적으로 엔지니어들에게 영향을 미치는 나쁜 매니저의 몇 가지 특성만 다루겠습니다.
실패에 대한 두려움은 나쁜 매니저들의 가장 흔한 특성 중 하나입니다. 이런 불안감은 그들을 매우 보수적으로 만드는 경향이 있으며, 이는 일반적인 엔지니어의 작업 스타일과 정반대입니다. 매니저가 당신이 위험을 감수하기를 원하지 않는다면, 제품에 당신만의 아이디어를 주입할 기회는 거의 없고, 보통 다른 사람이 설계한 제품을 (기계적으로) 구현하게 될 것입니다. [47]
종종 불안한 매니저는 당신이 팀 외부 사람들과 갖는 모든 상호작용에 자신을 끼워넣으려 고집하며, 이로 인해 당신이 "지휘 계통을 거치지" 않고는 다른 팀들과 직접 대화하는 것을 막습니다. 이런 종류의 매니저는 당신이 팀 외부의 누구와든—특히 다른 매니저와—직접 접촉하는 것을 반란이나 불복종과 같다고 여길 것입니다. 팀이나 그들의 조직 외부에서 무언가가 필요하다면, 이 매니저는 당신이 그녀를 통해 가기를 기대하며, 이는 그녀가 자신의 중요성을 높이고 당신을 종속시켜 더 많은 권력을 갖게 해줍니다.
우리 대부분은 학교에서 자주 반복되는 거짓말인 "지식이 곧 힘이다"라는 말을 들으며 자랐습니다. 나쁜 매니저는 이것을 매우 잘 알고 있지만, 다른 각도에서 접근합니다: 그녀는 이 힘을 자신만 가지고 있고 당신과 공유하지 않으려 하며, 그것이 당신의 일에 얼마나 도움이 될지는 상관없습니다. 이런 매니저는 정보를 독점하고 당신으로부터 숨김으로써 그 정보와 관련된 모든 일에 자신이 관여할 수 있도록 확실히 하며, 이는 당신이 일을 완수하는 것을 막을 뿐만 아니라 개발을 얼마나 늦추든 상관없이 그녀가 관련성과 권력의 위치를 유지하는 데 도움이 됩니다.

정보를 독점하고 정보와 소통의 통로가 되도록 요구함으로써, 나쁜 매니저들은 또한 당신의 성공에 대한 공로를 가로챌 수 있고[48] 당신의 실패(그리고 때로는 그들 자신의 실패까지도)에 대해 당신을 비난할 수 있습니다. 많은 경우, 이런 종류의 나쁜 매니저는 당신의 존재를 오로지 자신이 승진하기 위한 수단으로만 보며, 당신의 커리어는 물론이고 팀의 행복에 대해서도 신경 쓰지 않습니다.
우리 친구 Susan은 몇 년 동안 끔찍한 매니저를 두었는데, 그녀의 매니저는 종종 아무런 맥락도, 프로젝트를 어떻게 완수해야 하는지에 대한 정보도, 질문할 사람도 없이 새 프로젝트를 Susan에게 넘겨주곤 했습니다. 그는 Susan이 새로운 과제에 대해 전혀 지식이나 맥락이 없더라도 이렇게 했는데, 이는 그녀가 정보뿐만 아니라 다른 팀들과의 소통에서도 그에게 의존하도록 강요했기 때문입니다. Susan의 매니저가 반드시 Susan이 실패하기를 원한 것은 아니었습니다: 사실, 그가 Susan에게 프로젝트에 대해 알아야 할 모든 것을 말해주었다면, Susan의 삶이 더 쉽고 생산적이 되었을 것입니다. 반면에, 그는 아마도 그렇게 했다면 그녀가 그를 우회하기가 훨씬 쉬워졌을 것을 두려워했을 것입니다! 관련 팀들에게 직접 연락할 수 있는 능력을 갖는 것은 그들로 하여금 Susan이, 그녀의 매니저가 아닌, 이 프로젝트를 진행하고 있다는 것을 알게 했을 것입니다. 몇 번이고 Susan은 새 프로젝트를 따라잡기 위해 허둥지둥하고, 완수하고, 그리고 나서 쓰러지곤 했으며, 나중에 소문을 통해 그녀의 매니저가 그녀의 작업에 대한 공로를 가로챘다는 것을 알게 되곤 했습니다.
Chapter 3. Every Boat Needs a Captain에서 논의한 서번트 리더와는 극명한 대조를 이루며, 나쁜 매니저는 당신이 최근에 그를 위해 무엇을 했는지 알고 싶어 합니다. 그리고 팀의 저성과자들은? 팀을 완전히 멈춰 세우지 않는 한 어디로도 가지 않을 것입니다—나쁜 매니저가 그들을 다루기에는 너무 많은 일이기 때문입니다. 결국 이것으로 귀결됩니다: 당신의 매니저가 당신을 섬기고 있습니까? 아니면 당신이 매니저를 섬기고 있습니까? 항상 전자여야 합니다.
오피스 정치꾼
우리는 사람들을 신뢰하거나, 최소한 그들에게 의심의 여지를 주는 것을 크게 지지하지만, 오피스 정치꾼을 신뢰하는 것은 심각하게 커리어를 제한하는 행동이 될 수 있습니다.
오피스 정치꾼은 처음 만났을 때 발견하기 어려울 수 있는데, 그는 관계를 관리하고 사람들을 다루는 데 매우 능숙한 경향이 있기 때문입니다. 처음에는 꽤 친근할 수도 있습니다. 그는 보통 상급자 관리를 뛰어나게 하고, 동료들과 부하직원들을 자기 홍보의 수단으로 사용하는 것은 더욱 뛰어나게 합니다. 그는 다른 사람들을 비난하기를 빨리 하지만, 기회가 주어졌을 때 공로를 가로채는 것은 더욱 빠릅니다. 그는 보통 직접적으로 대립적이지는 않지만, 대신 당신이 그를 좋게 생각하도록 당신이 듣고 싶어 하는 말을 해주는 것을 선호합니다. 그가 당신을 이용하거나 조종할 수 없다면, 당신을 무시하거나, 당신을 위협으로 본다면 당신을 약화시키려 할 것입니다. 그와 한동안 일해본 후에는 그를 발견하기 쉽습니다: 그는 실제로 영향력을 미치는 것보다 영향력 있어 보이는 데 더 많은 시간을 씁니다.
우리는 오피스 정치꾼을 피하라고 조언합니다: 가능한 곳에서는 그를 우회하되, 조직에서 그보다 위에 있는 다른 사람들에게 부주의하게 그를 험담하지는 마세요. 그가 누구를 속였고 누가 그를 꿰뚫어 보는지 알기가 매우 어렵기 때문입니다. 만약 당신이 고개를 숙이고 흥미로운 기술을 구축하는 데 집중하는 것을 좋아하는 종류의 사람이라면, 오피스 정치꾼이 주변에 있을 때는 이 전략을 재고해볼 필요가 있을 것입니다. "게임을 하기"를 원하지 않아서 승진에 에너지를 쏟지 않는다면, 오피스 정치꾼이 당신보다 승진하는 것을 발견할 수도 있으며, 그 경우 당신은 이제 나쁜 매니저 그리고 오피스 정치꾼을 갖게 된 것입니다. 이에 대한 자세한 내용은 조직을 이용하기을 참조하세요.
나쁜 조직
회사가 성장함에 따라, 그들은 이익을 관리하고, 위험을 줄이고, 예측 가능성을 높이고, 조직 자체의 거대한 무게를 지탱하기 위한 노력으로 관료제와 프로세스를 개발합니다. 시간이 지나면서, 이 관료제는 회사가 성공하는 것을 방해하는 지점까지 성장할 수 있습니다. 나쁜 매니저들과 마찬가지로, 나쁜 조직들에 대해서도 많이 쓰여졌기 때문에, 우리는 개별 기여자들에게 가장 자주 영향을 미치는 조직적 문제들의 몇 가지 예만 검토하겠습니다.
대부분의 회사들이 엔지니어링 중심이 아니라는 것은 단순한 사실입니다. 즉, 엔지니어들은 일반적으로 기술적이지 않은 비즈니스 목표를 달성하기 위한 수단입니다. 이는 회사를 운영하는 사람들이 아마도 그들 시스템의 기술적 기반을 이해하지 못하고, 단지 비즈니스에 의해 그들에게 부과된 요구사항만 이해한다는 것을 의미하며, 그래서 그들은 엔지니어링에 비현실적인 요구를 하게 됩니다. 기술적으로 유능한 임원이 이런 종류의 회사에 들어가서 자신의 조직을 방어하기 위해 싸운다 하더라도, 그녀는 종종 비즈니스의 요구를 충족하기 위해 직원들의 건강과 정신을 희생할 의향이 있는 사람으로 교체되는 자신을 발견하게 될 것입니다. 일반적으로 당신은 이것을 비현실적인 마감일과 프로젝트를 제시간에 완료할 자격을 갖춘 기술 인력의 부족의 형태로 직접 보게 될 것입니다. 제품을 효과적으로 실행하기에 충분한 하드웨어를 확보하는 데 어려움을 겪거나, 몇 백 달러짜리 하드웨어 구매로 해결될 일을 팀이 몇 주 동안 다시 작성하는 데 보내는 것을 발견할 수도 있습니다. 이는 불행히도 엔지니어들을 가치 있게 여기지 않고 그들을 "작업 단위"나 "자원"으로 취급하며, 회사가 어떻게 운영되는지에 대해 그들에게 발언권을 주지 않는 회사의 전형입니다.
가장 심각하게 나쁜 조직들은 봉건제도를 닮은 경직된 명령과 통제 구조를 가지고 있습니다. 몇 년 전, 우리 친구 Terrence는 팀 간에 버그를 전달하는 데 엄격한 규칙을 가진 회사에서 일했는데, 결국 다른 팀이 Terrence의 제품이 몇 시간에 걸쳐 메모리 부족을 일으키는 버그를 만들었습니다. 이에 대해 책임이 있는 팀 멤버들에게 이메일을 보내거나, 그들의 커밋 로그나 소스 코드를 보는 대신, 그는 밤새 버그를 재현하고, 데이터를 수집하고, 자신의 케이스를 구축했습니다. Terrence는 이 이메일을 자신의 매니저에게 보냈고, 매니저는 그 이메일을 자신의 디렉터에게 보냈으며, 디렉터는 버그를 만든 팀의 디렉터에게 이메일을 보냈습니다. 이 디렉터는 그 팀의 매니저에게 이메일을 보냈고, 매니저는 자신의 팀에서 누가 해당 소프트웨어에 대해 책임이 있는지 알아냈습니다. 10일이 넘은 후, Terrence는 두 명의 매니저, 두 명의 디렉터, 그리고 세 명의 다른 엔지니어들과 함께 버그에 대해 논의하고 다음 출시에 맞춰 수정할 수 있는지에 대해 회의하는 자신을 발견했습니다. 터무니없게 들리나요? 슬프게도, 이런 종류의 일은 항상 일어납니다. 대조적으로, Fitz가 Google에서의 첫 주 동안 Gmail에서 오타를 발견했습니다. 그는 소스 코드를 열고, 오타를 수정한 다음, Gmail 팀에 패치를 이메일로 보냈고, 그들은 그에게 진심으로 감사했습니다.
많은 회사들은 조직 계층구조에 집착하는 사람들로 가득 차 있습니다.[49] 이는 끝없는 권력 투쟁을 초래하며, 매니저들은 종종 엔지니어들이 다른 팀으로 이전하는 것을 막아서 자신의 팀이 가치 있는 기여자를 잃는 것을 보호하려 합니다. 회사와 엔지니어 모두에게 올바른 일이 이전을 허용하는 것일 때조차 말입니다.
당신의 회사가 당신을 못된 아이처럼 대한 적이 있나요? 지나치게 열성적인 회사 방화벽 때문에 무해한 외부 웹사이트에 접근할 수 없나요? 상세한 타임카드로 하루의 모든 순간을 세심하게 기록해야 하나요? 일부 조직들은 심지어 매주 작성하는 코드 줄 수와 같은 무의미하고 (보통 매우 부정확한) 방법으로 당신의 생산성을 측정하기까지 합니다. [50]

또 다른 조직들은 출시하는 제품의 수와 품질이 아니라 참석하도록 초대받는 회의의 수로 자신의 성공을 판단하는 직원들을 양성할 것입니다.
마지막으로, 당신의 회사는 집중력, 비전, 또는 방향성과 같은 중요한 것들이 부족할 수 있습니다. 이는 종종 너무 많은 주인들이나 "위원회에 의한 설계"의 결과이며, 이는 상충하는 명령들이 일반 직원들에게 내려보내지는 결과를 낳습니다. 그래서 당신은 일관된 방향이 아니라 점점 더 좁은 원을 그리며 움직이게 됩니다.
많은 나쁜 회사들이 이런 위반 행위들과 훨씬 더 많은 것들에 대해 유죄입니다. 그럼에도 불구하고, 이런 회사들은 사람들로 구성되어 있으며, 사람들이 당신을 도와주도록 하기 위해 활용할 수 있는 여러 팁과 요령들이 있습니다.
조직을 이용하기
이것은 매트릭스의 프로그래밍된 현실과 유사한 스파링 프로그램입니다. 중력과 같은 규칙들, 같은 기본 규칙들을 가지고 있습니다. 당신이 배워야 할 것은 이런 규칙들이 컴퓨터 시스템의 규칙들과 다르지 않다는 것입니다. 그 중 일부는 구부릴 수 있습니다. 다른 것들은 깨뜨릴 수 있습니다. 이해하겠습니까? 그럼 할 수 있다면 저를 쳐보세요.
스파링 프로그램과 마찬가지로, 회사들은 규칙들로 만들어져 있습니다: 그 중 일부는 구부릴 수 있고, 다른 것들은 깨뜨릴 수 있습니다. 조직에서 일들이 어떠해야 하는지에 집중한다면, 보통 좌절과 실망만을 발견하게 될 것입니다. 대신, 일들이 어떠한지 인정하고, 일을 완수하고 회사에서 자신만의 행복한 자리를 만들어내기 위해 사용할 수 있는 메커니즘을 찾기 위해 조직의 구조를 탐색하는 데 집중하세요. 좋은 조직에 있든 나쁜 조직에 있든, 일을 완수하는 데 매우 효과적이라고 우리가 발견한 여러 전략들이 있습니다.
"용서를 구하는 게 허가를 구하기보다 쉽다"[51]
무엇보다도, 조직에서 당신이 무엇을 해낼 수 있는지 알아두세요—허가를 요청하는 것이 책임을 다른 사람에게 떠넘길 기회를 주기는 하지만, 누군가가 당신에게 "안 된다"고 말할 기회도 만들어냅니다. 상급자 중 한 명으로부터 명시적으로 승인을 받지 않고도 조직에서 무엇을 해낼 수 있는지 아는 것이 중요하지만, 가능한 한 회사에 옳다고 생각하는 일을 하라고 조언합니다.
용서를 구할 준비가 되어 있다 하더라도, 싸움을 현명하게 선택하세요. 무언가에 대해 당신의 케이스를 변호하거나 회사의 다른 누군가와 맞서야 할 때마다, 당신은 정치적 자본을 소비하고 있는 것입니다. 중요하지 않은 많은 싸움들에서 이기는 데 모든 자본을 소비한다면, 중요한 일들에 관해서는 계좌에 남은 것이 없다는 것을 발견하게 될 것입니다. 전략적이 되어서 중요한 것들이나 당신이 이길 어느 정도 가능성이 있다고 확신하는 것들을 위해 싸우세요. 이길 수 없다는 것을 알고 있는 싸움에 모든 자본을 날려버리는 것은 무의미하고, 스트레스를 주며, 아무런 좋은 이유 없이 커리어를 제한합니다. 자세한 내용은 정치적 은행 계좌를 참조하세요.
"용서를 구하는" 경로를 택하기로 결정한다면, 당신의 아이디어들—특히 더 위험한 아이디어들—에 대한 사운딩 보드로 사용할 수 있는 회사의 동료들과 친구들을 두는 것이 유용합니다.
이런 사람들은 회사에서 당신이 무엇을 해낼 수 있고 없는지, 그리고 어떤 아이디어들이 받아들여지지 않을지에 대해 좋은 감각을 가지고 있어야 합니다.
마케팅의 누군가가 Fitz에게 Google의 임원들 사이에서 자신의 Data Liberation 팀에 대한 인식을 높이라고 제안했을 때, Fitz는 사운딩 보드 동료들에게 아이디어를 던져보았습니다: Data Liberation 브랜드의 볼트 커터와 잠긴 굿즈 상자들(물론 열쇠는 안에 잠겨 있는)을 임원들에게 주는 것이었습니다. 그는 진행하기로 결정했고 큰 성공을 거두었습니다. 몇 년 후, Fitz가 좀 "선정적인" 굿즈를 인쇄하는 것을 고려하고 있을 때, 같은 사운딩 보드는 그 계획이 너무 위험하다는 우려를 표현했고 Fitz는 그 계획을 취소하기로 결정했습니다. 허가를 요청하지 않고 행동할 것이라면, 직감을 믿는 것이 좋지만, 신뢰할 수 있는 출처로부터의 두 번째 의견은 매우 귀중합니다.
길이 없다면 길을 만들어라

회사에서 변화를 만드는 또 다른 전략은 풀뿌리 수준에서 당신의 아이디어가 받아들여지도록 하는 방법을 찾는 것입니다. 충분한 사람들이 당신의 아이디어를 받아들이거나 특정 제품을 사용하도록 할 수 있다면, 관료제가 당신을 짓밟기에는 종종 너무 늦을 것이고, 경영진은 그것을 알아차리고 받아들이거나 반대 행동을 취하도록 강요받을 것입니다(그리고 그것은 그들에게, 맞습니다, 짐작하셨겠지만, 정치적 자본을 소비시킵니다!). 이는 많은 엔지니어들이 수년간 사용한 전략으로, 예를 들어 자신들의 삶을 훨씬 더 즐겁게 만들기 위해 오픈 소스 도구들을 일상 워크플로우에 몰래 도입하는 데 사용했습니다.
Note
|
대리를 통한 설득
누군가를 설득하려고 한다면, 성공 가능성을 높이는 훌륭한 방법은 당신과 동의하는 여러 사람들을 찾아서 그들이 그 사람과의 대화에서 당신의 아이디어(또는 제안이나 요청)를 언급하도록 하는 것입니다. 당신의 대상이 무슨 일이 일어나고 있는지 완전히 알고 있다 하더라도, 기본적인 인간 심리학에 따르면 그녀는 그 아이디어가 당신만이 아니라 여러 방향에서 오고 있기 때문에 더 많은 비중을 둘 것입니다. |
특히 아이디어들은 매혹적인 것들입니다: 누가 공로를 인정받는지 신경 쓰지 않는다면 멀리 갈 수 있습니다! 때로는 사람들이 아이디어를 자신의 것으로 공로를 인정받을 수 있을 때만 아이디어를 퍼뜨린다는 것을 발견하게 될 것이므로, 무엇이 더 중요한지 결정해야 합니다: 당신이 공로를 인정받는 것인지, 아니면 아이디어가 퍼지는 것인지. 당신의 말이 다른 사람(아마도 경멸하는)의 입에서 나오는 것을 듣는 것이 고통스러울 수 있다는 사실에도 불구하고, 그것은 종종 아이디어가 여행하는 가장 수월한 방법입니다. 우리는 이런 일이 크고 작은 회사들에서 몇 번이고 일어나는 것을 보았습니다: 임원의 입에서 나오는 고상한 개념들과 아이디어들이 그녀의 조직 내 누군가로부터 시작된 것입니다. 이 경우 당신의 아이디어가—그렇지 않았다면 들리지 않았을—도달할 수 있는 광범위한 청중에 대해 생각해보세요!
개인과 마찬가지로, 회사에서 나쁜 습관을 없애는 것은 어렵습니다. Ben의 초기 선생님 중 한 분은 이런 말을 하곤 했습니다: "나쁜 습관을 단순히 멈추는 것은 불가능하다; 좋은 습관으로 대체해야 한다." 금연을 시도해본 적이 있는 사람이라면 누구나 이 현상을 잘 알고 있을 것입니다. 기업들도 마찬가지입니다—나쁜 습관을 성공적으로 없애려면, 그것을 대체할 더 나은 것을 찾으세요. 특정 주간 회의가 마음에 들지 않나요? 다른 종류의 회의나 대안적인 (더 효과적인) 의식으로 대체하세요. 쓸모없는 보고 프로세스가 마음에 들지 않나요? 그것에 대해 불평하지 말고; 무시하기에는 너무 매력적인 유용한 것을 작성하세요. 좋은 대체 습관을 찾았다면, 변화 회피의 관성을 극복해야 하므로, 몇 주 동안 새로운 의식을 "시도해보자"고 제안하는 것을 권합니다. 이렇게 하면 새로운 것이 덜 영구적이고, 덜 무섭게 보이며, 모든 사람이 새로운 의식을 좋아한다는 것이 밝혀지면, "시험" 기간이 끝날 때쯤에는 그들이 애초에 그것이 시험이었다는 것을 잊어버렸을 것입니다.
상향 관리를 배워라
매니저든 개별 기여자든, 당신은 시간의 일부를 상향 관리에 써야 합니다. 이것이 의미하는 바는 당신의 매니저와 팀 외부의 사람들이 당신이 무엇을 하고 있는지 알 뿐만 아니라, 당신이 그것을 잘하고 있다는 것을 알도록 보장하려고 노력해야 한다는 것입니다. 어떤 사람들은 이런 "자신을 팔아넘기는" 방식을 불쾌하게 여기고, 그럴 수도 있지만, 이렇게 하는 것의 이익은 엄청납니다.
Chapter 6. Users Are People, Too에서 언급하겠지만, 가능할 때마다 적게 약속하고 많이 전달해야 합니다. 모든 추정치를 보수적으로 잡고 마감일을 늘리라고 주장하는 것은 아니지만, 가능한 한 전달할 수 없는 것들을 약속하는 것을 피하려고 노력하세요. 원하는 것보다 더 자주 "안 된다"고 말해야 한다 하더라도 말입니다. 지속적으로 마감일을 놓치거나 기능을 빼먹는다면, 회사의 다른 사람들이 당신을 신뢰할 이유가 줄어들 것이고 무언가를 완수할 사람을 찾을 때 당신을 건너뛸 가능성이 높습니다.
우리는 다른 거의 모든 것보다 제품 출시에 에너지를 집중하라고 권합니다. 제품을 출시하는 것은 회사에서 거의 다른 어떤 것보다도 신뢰성, 평판, 그리고 정치적 자본을 줍니다. 제품을 출시하는 것은 당신이 무언가를 성취하고 있다는 것을 보여주는 높은 가시성의 이벤트입니다. 코드베이스를 정리하고 리팩터링하는 데 많은 시간을 보내는 것이 유혹적일 수 있지만, 이런 종류의 방어적 작업에 시간의 절반 이상을 할애한다면, 상급자들을 포함하여 팀 외부의 누구에게도 거의 가치를 인정받지 못한다는 것을 경험으로부터 배웠습니다. 그러면 당신은 시간에 대해 보여줄 (정치적으로) 중요한 것이 거의 없는 다소 당황스러운 위치에 있는 자신을 발견하게 될 것입니다.[52] 이는 인정받지 못하는 좋은 방법일 뿐만 아니라, 제품이 취소되는 좋은 방법이기도 합니다.
운과 호의 경제
어떤 종류의 회사에서 일하든, 믿거나 말거나, 자신을 위한 일종의 운을 만드는 것은 그리 어렵지 않습니다. The Luck Factor의 저자인 Richard Wiseman[53]은 사람들이 우연한 기회를 발견하는 능력을 테스트하기 위해 수행한 실험에 대해 썼습니다:[54]
나는 운이 좋은 사람들과 운이 나쁜 사람들 모두에게 신문을 주고, 그것을 훑어보며 안에 사진이 몇 장 있는지 말해달라고 요청했습니다. 평균적으로, 운이 나쁜 사람들은 사진을 세는 데 약 2분이 걸렸지만, 운이 좋은 사람들은 단 몇 초밖에 걸리지 않았습니다. 왜일까요? 신문의 두 번째 페이지에 "세는 것을 멈추세요. 이 신문에는 43장의 사진이 있습니다"라는 메시지가 있었기 때문입니다. 이 메시지는 페이지의 절반을 차지했고 2인치보다 큰 글자로 쓰여 있었습니다. 그것은 모든 사람의 얼굴을 똑바로 응시하고 있었지만, 운이 나쁜 사람들은 그것을 놓치는 경향이 있었고 운이 좋은 사람들은 그것을 발견하는 경향이 있었습니다.
그는 계속해서 운이 좋은 사람들이 "우연한 기회를 만들고 알아차리는 데 능숙하다"고 언급합니다. 우리는 같은 원칙이 회사에서 기회를 만드는 데도 적용된다고 생각합니다: 법조문 그대로 일을 수행하고 다른 모든 것을 배제하고 오직 자신의 일을 완수하는 데만 집중한다면, 당신에게는 우연한 기회가 거의 없을 것입니다. 기회가 주어졌을 때 다른 사람들이 그들의 일을 완수하도록 도와준다면, 그것이 당신의 일의 일부가 아닐지라도, 그들이 호의를 되돌려줄 것이라는 보장은 없습니다(그리고 "눈에는 눈" 식의 기대도 있어서는 안 됩니다). 하지만 많은 사람들이 기회가 주어진다면 미래에 기꺼이 호의를 갚을 것입니다.
정치적 은행 계좌
모든 회사는 조직도 밖에 존재하는 회색 시장 호의 경제를 가지고 있으며, 그런 호의들은 당신이 정치적 은행 계좌를 채우는 데 사용할 수 있는 주요한 것들 중 하나입니다. 보통 당신이 빠르고 쉽게 할 수 있으면서 회사에 도움이 되지만 다른 사람의 일인 것이 있으며, 이런 일들을 할 기회에 눈을 열어두고 있다면(많은 경우, 누군가가 직접 나와서 당신에게 무언가를 해달라고 요청할 것입니다), 이 호의 경제에서 당신의 은행 계좌에 약간의 크레딧을 얻게 됩니다. 이런 크레딧들을 일련의 작은 베팅으로 생각해보세요: 일부는 절대 당신에게 갚지 않을 것이고, 다른 것들은 본전을 갚을 것이며, 또 다른 것들은 엄청난 배당금을 지불할 것입니다. 어떤 베팅이 성과를 낼지 알기는 어렵지만, 시간이 지나면서 성과를 낼 한 가지는 사람들이 당신을 곤경에서 도와준 사람으로 기억할 것이라는 점입니다. 나중에, 당신이 곤경에 처해서 그들에게 전화를 걸 때, 그들이 도움을 찾아왔을 때 당신이 "내 일이 아니다"라는 뚱뚱한 대답을 했다면보다 상당히 더 기꺼이—심지어 열심히—당신을 도와줄 것입니다. "갚음"을 받지 못한다 하더라도 누군가를 돕는 과정에서 종종 새로운 것을 배우게 될 것이고, 다른 사람들을 돕는 것은 기분 좋은 일이므로, 약간의 시간과 노력 외에 잃을 것이 무엇이 있겠습니까?
이 같은 정치적 은행 계좌는 회사의 다른 누군가에게 호의를 요청해야 할 때 활용하게 될 것입니다. 누군가가 당신을 위해 무언가를 해주기를 원하거나, 다른 사람의 발가락을 밟는 일을 하거나, 심지어 회사의 다른 누군가와 단순히 의견이 다를 수도 있습니다. 언제 정치적 자본을 얻고 있고, 언제 그것을 소비하고 있는지에 대한 인식을 개발하는 것은 매우 유용합니다. 이런 인식을 개발하지 못한다면, 당신이 알기도 전에 계좌가 고갈되어 조직(그리고 커리어)에서 무력하게 될 가능성이 높습니다.

호의 경제에 대한 가장 흥미로운 것 중 하나는 직장이나 회사를 떠날 때 당신의 은행 계좌가 단순히 비워지지 않는다는 것입니다—떠난 후에도 종종 회사의 사람들에게 도움을 요청할 수 있을 것입니다. 이것이 회사를 떠날 때 아무리 유혹적으로 보일지라도 다리를 태워서는 절대 안 되는 이유입니다.[55]
안전한 위치로 승진하기
대부분의 엔지니어들과 같다면, 승진하기 위해 필요한 것은 일을 잘하는 것뿐인 논리적인 승진 과정을 기대할 것입니다. 불행히도, 이런 세상은 가장 깨달은 회사들에서만 존재합니다. 대부분의 회사에서는 승진하기 위해 "승진 게임을 하는" 데 어느 정도의 노력을 기울여야 합니다(보통 일을 잘하는 것에 추가로)..

직장, 급여, 그리고 팀에 만족한다면, 승진 게임을 하지 않고 이미 있는 직책과 직급에서 정착하기로 선택할 수도 있습니다. 이는 많은 상황에서 당신을 취약하게 만들 수 있습니다—예를 들어, 회사가 재조직되어 새로운 팀으로 배치되거나, 나쁜 매니저를 만나거나, 오피스 정치꾼의 엄지손가락 아래 들어가게 되는 경우 말입니다.
조직에서 더 높은 위치에 올라갈수록(개별 기여자든 매니저든), 회사 내에서 당신의 운명에 대한 더 많은 통제권을 가질 수 있습니다. 현재 위치에서 편안할 때 승진을 위해 약간의 노력을 기울이는 것은 회사나 팀에 문제가 생겼을 때 당신의 안전과 행복에 투자하는 훌륭한 방법입니다. 당신의 성과들을 기록하고 자기 평가에 활용하세요. 이력서를 업데이트하고[56] 매니저나 승진 위원회와 공유하세요. 승진 과정에 대해 읽고 매니저와 승진을 위해 체크해야 할 항목들에 대해 이야기하고, 체계적으로 모든 항목을 체크해 나가세요. 승진이 주관적이고 결정적이지 않다 하더라도, 당신에게 유리한 확률을 높이기 위해 할 수 있는 일이 많이 있습니다.
강력한 친구들을 찾기
모든 회사는 쓰여지지 않았지만 권력과 영향력이 흐르는 "그림자" 조직도를 가지고 있습니다. 이 그래프의 노드를 구성하는 사람들의 유형은 몇 가지뿐입니다.
연결자들은 조직의 모든 구석에서 사람들을 아는 사람들이고, 팀의 누군가를 모른다면 당신을 위해 올바른 사람을 찾을 수 있습니다. 때로는 무언가를 완수하는 것이 단순히 대화할 올바른 사람을 찾는 문제이고, 연결자가 그 사람을 찾는 데 도움을 줄 수 있습니다.
고참들은 높은 직급이나 멋진 직책을 가지지 않을 수도 있지만, 오랜 시간 동안 있었기 때문에 일반적으로 많은 제도적 지식을 가지고 있고 많은 영향력을 행사합니다. 이들은 조직이 왜 특정한 방식으로 작동하는지 이해하려고 할 때나, 많은 사람들이 존경하는 지지자가 필요할 때 찾아가기 좋은 사람들입니다.
사람들은 대부분 이것을 농담으로 이야기하지만, 행정 비서들은 자신들이 일하는 임원들의 대리인이기 때문에 조직에서 엄청난 양의 권력과 영향력을 행사합니다. 더 중요한 것은, 그들이 보통 일들이 원활하게 돌아가도록 엄청난 양의 일을 하므로, 그들을 화나게 하는 것은 당신 자신(그리고 당신의 커리어)에게 위험합니다. 그리고 행정 비서에게 친절하게 대할 기회를 절대 놓치지 마세요—그들은 호의 경제의 초석입니다.
바쁜 임원에게 무언가를 요청하는 방법…이메일을 통해
어떤 큰 회사에서든 충분히 오래 일하다 보면, 임원(또는 모르는 바쁜 사람)에게 무언가를 요청하기 위해 이메일을 보내야 하는 상황에 처하게 될 것입니다. 아마도 제품이나 팀을 위해 무언가가 필요하거나, 잘못을 바로잡으려고 할 것입니다. 어떤 경우든, 이는 아마도 이 사람과 처음으로 소통하는 것일 것입니다. 이런 상황에서, 거의 모든 사람이 같은 초보자 실수를 합니다: 횡설수설하고, 격분하고, 열변을 토합니다.
Fitz는 (Apple에서 일하던 당시) 14년도 더 전에 어머니께 불량 iMac을 사 드렸고, 동료의 조언에 따라 Steve Jobs에게 "짧은" 이메일을 보냈습니다.[57] 이 이메일은 임원에게 도움을 효과적으로 요청하는 방법의 거친 프로토타입 역할을 했습니다:
날짜: 2001년 2월 1일 (목) 받는이: sjobs@apple.com 제목: 우리 하드웨어로 인한 끔찍한 고객 경험—제가 무엇을 할 수 있을까요? 이 문제를 해결하기 위해 제가 무엇을 할 수 있는지 조언해 주신다면 정말 감사하겠습니다. 이는 Apple과 저 모두에게 매우 곤란한 일입니다. 지난 어머니날에 어머니께 iMac을 사 드렸습니다—어머니는 뉴올리언스의 한 몬테소리 학교 교감으로, 학교에서는 오래된 Macintosh를 사용하고 계십니다. 어머니는 iMac을 무척 기뻐하셨고, 학교 실습실용 iMac을 더 사기 위한 예산까지 확보하셨습니다. 하지만 제가 사 드린 딸기색 iMac은 완전한 불량품으로 드러났습니다. - 7월: 절전 모드로 들어간 뒤 전혀 깨어나지 않았습니다. 공인 Apple 대리점에 맡겼고, 불량 로직 보드로 진단되어 교체했습니다. - 집에 가져와 전원을 연결하니 부팅이 시작되다가 슬픈 맥 아이콘과 사망음을 보았습니다. 다시 대리점에 맡겼고, 불량 아날로그 보드로 진단되어 교체했습니다. - 9월: (종료/부팅 대신) 절전 기능을 다시 사용해 보았지만 전혀 깨어나지 않았습니다. 완전히 전원을 뽑았다가 다시 연결해야 겨우 부팅되었습니다. 이때부터 절전 기능을 완전히 끄었습니다. - 12월: 모니터 색이 노랑, 초록, 파랑으로 깜빡이기 시작했습니다. 어제 다시 대리점에 맡겼고, 지금도 그곳에 있습니다. 현재 상황이 이렇습니다. 어머니는 제가 못된 장난을 친 줄 아시고, 아는 모든 분께 자신의 iMac이 고물이라고 말씀하고 계십니다. 그리고 제가 아는 Apple 직원 누구도 이 문제를 어떻게 해야 할지 모릅니다. 다른 하나를 새로 사는 것 말고, 어머니께 정상 작동하는 iMac을 드릴 수 있는 방법이 있을까요? 존경을 담아, -Fitz
날짜: 2001년 2월 1일 (목)
받는이: sjobs@apple.com
제목: 우리 하드웨어로 인한 끔찍한 고객 경험—제가 무엇을 할 수 있을까요?
이 문제를 해결하기 위해 제가 무엇을 할 수 있는지 조언해 주신다면 정말 감사하겠습니다. 이는 Apple과 저 모두에게 매우 곤란한 일입니다.
지난 어머니날에 어머니께 iMac을 사 드렸습니다—어머니는 뉴올리언스의 한 몬테소리 학교 교감으로, 학교에서는 오래된 Macintosh를 사용하고 계십니다. 어머니는 iMac을 무척 기뻐하셨고, 학교 실습실용 iMac을 더 사기 위한 예산까지 확보하셨습니다.
하지만 제가 사 드린 딸기색 iMac은 완전한 불량품으로 드러났습니다.
-
7월: 절전 모드로 들어간 뒤 전혀 깨어나지 않았습니다. 공인 Apple 대리점에 맡겼고, 불량 로직 보드로 진단되어 교체했습니다.
-
집에 가져와 전원을 연결하니 부팅이 시작되다가 슬픈 맥 아이콘과 사망음을 보았습니다. 다시 대리점에 맡겼고, 불량 아날로그 보드로 진단되어 교체했습니다.
-
9월: (종료/부팅 대신) 절전 기능을 다시 사용해 보았지만 전혀 깨어나지 않았습니다. 완전히 전원을 뽑았다가 다시 연결해야 겨우 부팅되었습니다. 이때부터 절전 기능을 완전히 끄었습니다.
-
12월: 모니터 색이 노랑, 초록, 파랑으로 깜빡이기 시작했습니다. 어제 다시 대리점에 맡겼고, 지금도 그곳에 있습니다.
현재 상황이 이렇습니다. 어머니는 제가 못된 장난을 친 줄 아시고, 아는 모든 분께 자신의 iMac이 고물이라고 말씀하고 계십니다. 그리고 제가 아는 Apple 직원 누구도 이 문제를 어떻게 해야 할지 모릅니다.
다른 하나를 새로 사는 것 말고, 어머니께 정상 작동하는 iMac을 드릴 수 있는 방법이 있을까요?
존경을 담아,
-Fitz
20시간도 채 지나지 않아 Steve 밑에서 일하는 누군가에게서 Fitz에게 전화가 왔고, 2주 뒤 어머니는 새 iMac(더는 불량이 아닌)을 받으셨습니다.
여기 큰 비밀이 있습니다: 잘못된 것을 바로잡을 기회가 주어지면, 권력 있는 위치의 사람들은 좋아서 옳은 일을 하려 합니다—바쁜 임원들조차도 말입니다(많은 이들이 잘못된 것을 바로잡는 것을 즐기고, 절대적으로 모든 이들이 약간의 추가 정치적 자본을 얻는 가치를 이해합니다). 불행하게도, 이런 사람들의 이메일 받은 편지함은 끝없는 분산 서비스 거부 공격처럼 보이며, 처음 보는 사람에게서 단락 구분도 없이 3,000단어짜리 텍스트 벽이 도착하면, 15단어쯤 읽고 Delete 키를 누른 뒤 다음 메일로 넘어갈 가능성이 큽니다.
하지만 반대로, 이메일을 10초 만에 읽고 마법 지팡이를 휘둘러(즉, 부하 중 한 명에게 실행하라고 메일을 보내) 문제를 해결할 수 있다면, 아마 그렇게 할 것입니다. 몇 초만 위임하는 데 쓰고, 그 대가로 당신으로부터 큰 정치적 자본을 얻게 됩니다.
수년간의 시행착오 끝에, 더 짧은 이메일일수록 답장을 받을 가능성이 높다는 것을 깨달았습니다.
우리는 이것을 "세 가지 핵심 항목과 실행 요청" 기법이라고 부르며, 처음 연락하는 거의 누구에게든 무언가를 요청할 때 실제 행동을 이끌어내거나—최소한—답장을 받을 가능성을 비약적으로 높여줍니다.[58] 임원에게만 해당되는 것이 아닙니다.
좋은 "세 가지 핵심 항목과 실행 요청" 이메일은 (많아도) 세 가지 핵심 항목으로 현재 사안을 요약하고, 하나—오직 하나—의 실행 요청만 담습니다. 그게 전부입니다—쉽게 전달될 수 있는 이메일을 써야 합니다. 장황하게 쓰거나 완전히 다른 네 가지를 한 이메일에 넣으면, 상대는 답할 항목 하나만 고를 것이고, 그건 대개 당신이 가장 중요하지 않다고 여기는 항목일 것입니다. 더 나쁜 건, 인지적 부담이 너무 커서 아예 메일이 버려질 수도 있다는 겁니다.
핵심 항목들은 짧은 문장이어야 합니다(각 항목은 줄바꿈 없이 한 줄에 들어가야 합니다). 실행 요청은 가능한 한 짧아야 합니다. 누구에게서든 답장을 원한다면, 상대가 본문 인라인으로 답하기 쉽게 만드세요. 한두 단어로 답할 수 있으면 가장 좋습니다. 한 문단에 여섯 개 질문을 하지 말고—문단당 한 질문, 이상적으로는 이메일당 한 질문으로 제한하세요. 마지막으로 이메일에는 HRT가 가득해야 합니다: 공손하고, 존중하며, 문법과 철자 오류가 없어야 합니다. 배경 설명을 꼭 포함해야 한다면 이메일 맨 끝(심지어 서명 뒤)에 두고, "자세한 내용" 또는 "배경"이라고 명확히 표시하세요.

돌이켜보면, 우리는 Fitz의 프로토타입 이메일이 조금 장황했다고 생각합니다—오늘 우리가 쓴다면, 아마 다음과 같은 형태에 더 가까울 것입니다:
날짜: 2001년 2월 1일 (목) 받는이: sjobs@apple.com 제목: 나쁜 고객 경험—도와주실 수 있나요? - 학교 행정가인 어머니를 위해 iMac을 구입했습니다. 어머니는 iMac을 받으시고 무척 기뻐하셨고, 학교 실습실용 iMac을 더 사기 위한 예산도 확보하셨습니다. - 7월에는 Apple이 불량 로직 보드를 교체했고, 한 달 뒤에는 아날로그 보드도 교체했습니다. - 9월에는 절전 기능이 제대로 작동하지 않았고, 12월에는 모니터가 고장 나기 시작했습니다. 현재 대리점에 맡겨져 있습니다. 어머니는 아는 모든 분께 자신의 iMac이 고물이라고 말씀하시고, 제가 아는 Apple 직원 누구도 이 문제를 어떻게 해야 할지 모릅니다. 어머니께 정상 작동하는 iMac을 드릴 수 있는 방법이 있을까요? 존경을 담아, -Fitz
날짜: 2001년 2월 1일 (목)
받는이: sjobs@apple.com
제목: 나쁜 고객 경험—도와주실 수 있나요?
-
학교 행정가인 어머니를 위해 iMac을 구입했습니다. 어머니는 iMac을 받으시고 무척 기뻐하셨고, 학교 실습실용 iMac을 더 사기 위한 예산도 확보하셨습니다.
-
7월에는 Apple이 불량 로직 보드를 교체했고, 한 달 뒤에는 아날로그 보드도 교체했습니다.
-
9월에는 절전 기능이 제대로 작동하지 않았고, 12월에는 모니터가 고장 나기 시작했습니다. 현재 대리점에 맡겨져 있습니다.
어머니는 아는 모든 분께 자신의 iMac이 고물이라고 말씀하시고, 제가 아는 Apple 직원 누구도 이 문제를 어떻게 해야 할지 모릅니다.
어머니께 정상 작동하는 iMac을 드릴 수 있는 방법이 있을까요?
존경을 담아,
-Fitz
이렇게 다시 쓴 이메일은 장식적인 설명을 많이 덜어냈지만, 이제 바쁜 임원도 10초 안에 읽을 수 있습니다.
우리의 커리어 과정에서, 우리는 이런 모든 기법들을 반복해서 사용하여 일을 완수했습니다. 하지만 때로는 세상의 모든 팁과 요령들이 직장을 고치는 데 충분하지 않을 수 있습니다.
플랜 B: 나가기
나쁜 조직 내에서 일을 완수하고 나쁜 사람들과 일하는 것에 대해 이야기해온 모든 세월 동안, 우리는 항상 강연 후에 다가와서 절망적으로 모든 것을 시도해봤지만 어떤 개선도 만들 수 없고 아무것도 완수할 수 없다며, 그럼 무엇을 할 수 있느냐고 묻는 사람들을 만납니다. 여기서 불행한 답은 간단합니다: 아마도 당신이 할 수 있는 다른 것은 없을 것입니다. 피해자가 되지 마세요. 거기서 나오세요.
시스템을 바꿀 수 없다면, 그것을 바꾸는 데 계속 에너지를 쏟을 이유가 없습니다. 대신, 그것을 떠나는 데 에너지를 쏟으세요: 이력서를 업데이트하고, 가까운 친구들에게 다른 회사에서 당신을 위한 자리가 있는지 묻기 시작하세요. 새로운 것들을 배우세요. 이 시대에 지식 근로자가 되는 것의 훌륭한 점 중 하나는 좋은 사람들이 높은 수요에 있다는 것이고, 그것이 당신에게 자신의 미래를 통제할 능력을 준다는 것입니다.
이런 통제권을 가지고 있다는 것을 깨닫게 되면, 그것은 매우 해방적입니다. 주변을 둘러보고 다른 직장 옵션들이 있다는 것을 발견한다면, 현재 고용주가 당신을 해고한다고 해도 세상의 끝이 아니기 때문에 갑자기 직장에서 (훨씬 적은 스트레스로) 훨씬 많은 일을 완수하게 된다는 것을 발견할 수도 있습니다! 우리는 Google의 오랜 "즐거운 좋은 동료" Chade-Meng Tan의 이 블로그 글[59]을 매우 영감을 주는 것으로 발견했고, 그것이 우리가 우리 자신의 일을 하는 방식에 크게 영향을 주었습니다:
옳은 일을 하고, 해고당하길 기다려라
새로 입사한 구글 직원들("누글러"라고 부릅니다)이 종종 제게 무엇이 저를 효과적으로 만드는지 묻습니다. 저는 반쯤 농담으로 이렇게 말합니다. 매우 간단합니다: 구글과 세상을 위해 옳은 일을 하고, 그다음 뒤로 물러나 해고당하길 기다리는 것입니다. 해고당하지 않으면, 모든 사람을 위해 옳은 일을 한 것입니다. 해고당한다면, 애초에 일할 잘못된 고용주인 것입니다. 그러니 어느 쪽이든 제가 이기는 겁니다. 그것이 제 커리어 전략입니다.
준비가 되어 있고 선택지를 안다면, 당신은 세상에서 가장 자유로운 사람입니다. 나가는 것을 두려워하지 마세요. 우리는 지난 5년 넘게 강연 후에 이런 조언을 해왔고, 우리 조언을 따라 지금은 사랑하는 일을 하고 있다고 이메일을 보내준 여러 사람들이 있다는 것을 기쁘게 보고할 수 있습니다. 이런 이메일들은 우리가 받은 최고의 이메일 중 일부입니다—여기 우리가 가장 좋아하는 것 중 하나가 있습니다:
날짜: 2011년 12월 1일 목요일 제목: 감사 인사 발신자: Alex Mrvaljevich 수신자: Brian Fitzpatrick 안녕하세요 Brian! 아마 저를 기억하지 못하실 것 같지만, 제가 받은 최고의 커리어 조언 두 가지를 주셔서 제 인생을 바꿔주셨습니다. 2010년 Google IO에서 열린 당신의 기술 강연에 참석했고, 강연 후 제 현재 업무 상황에 대한 조언을 구하기 위해 다가갔습니다. 아주 간단하게 당신은 저에게 "빨리 나가라"고 말했고, 그래서 제 프로젝트 매니저 이력서를 보냈습니다. 그 후 당신은 구글이 비기술직 프로젝트 매니저를 거의 고용하지 않는다고 알려주셨습니다. 그 때문에 제 커리어에 대해 깊이 생각해야 했습니다: 구글의 정책이 무엇이든, 대부분의 회사들이 따라하니까요. 커리어 트랙을 바꾸는 것이 제 유일한 선택이었고, 가장 가까운 선택은 제품 관리였습니다. 죽도록 공부하고 회사뿐만 아니라 나라까지 "빨리 나갔습니다"(베네수엘라에는 제품 관리 직업이 많지 않거든요). 그것이 제 인생 최고의 결정이었습니다... 그 결정 덕분에 일본에서 제품 리드라는 놀라운 직업을 얻게 되었고, 2월에 고베로 이사할 예정입니다. 그 조언 덕분에 상황이 좋아진다면 감사 인사를 보내겠다고 스스로 약속했었습니다. 그래서 여기 있습니다: 감사합니다. Alex
모든 것이 끝난 건 아니다
그만두거나 해고당하기를 기다린다는 이런 모든 이야기가 직장에서 불행하다면 이력서를 털어내고 거리로 나가야 한다는 의미는 아닙니다. 반대로, 당신의 첫 번째 목표는 직장에서 행복하고 목표를 달성하는 데 필요한 변화를 만드는 것이어야 하며, 이 장은 그렇게 하는 데 필요한 많은 도구들을 제공했습니다. 조직을 탐색하는 방법을 이해하려는 노력을 기울이지 않는다면, 운명의 큰 부분을 우연에 맡기는 것입니다.
Chapter 6. Users Are People, Too
성공적인 제품 개발에 필수적인 요소들을 길게 살펴봤습니다.
똑똑하고 창의적인 소수로 시작하세요. 겸손·신뢰·존중의 강한 문화로 팀을 거름 주고, 서번트로서 이끌어 협업과 좋은 의사결정을 가능케 하세요. 필요하면 물, 햇빛, 방향, 내재적 동기를 주되, 문화와 진전을 해치는 부정적 영향(행동·환경)으로부터 보호하세요. 화씨 72도에서 6개월 구우면 훌륭한 소프트웨어가 나옵니다. 다 된 걸까요?
많은 프로그래머가 여기서 멈춥니다. 자신을 위해 소프트웨어를 만들고, 결과에 만족하며, 승리를 선언합니다.
안타깝게도 현실은 그렇지 않습니다. "좋은 소프트웨어"만으로 성공을 정의하는 것은 지나치게 좁습니다. 돈을 벌거나(혹은 이력서를 빛내려면) 다른 사람들이 당신의 소프트웨어를 쓰고 만족해야 합니다. 개발은 제품을 벽 너머로 던지는 순간 끝나지 않습니다. 사실 끝나지 않습니다. 사람들이 제품을 쓰고, 당신은 그들에게 반응하며, 제품을 개선해 나가야 합니다. 이 피드백 굴레를 다루는 법을 배우지 못하면, 당신의 창작물은 도태됩니다.
이 장에서는 사용자 참여의 세 단계를 살핍니다. 첫째, 사람들이 당신의 작업을 알도록 해야 합니다. 그 존재를 인식하나요? 문턱에 들어오기 전, 무엇으로 받아들이나요? 둘째, 실제 사용을 시작했을 때의 경험을 생각해야 합니다. 기대에 부합하나요? 쓰기 쉬운가요? 위대한 일을 하도록 힘을 실어 주나요? 마지막으로, 사용자가 단단히 자리 잡은 뒤에는 어떻게 생산적으로 상호작용할지 봅니다. 이 모든 상호작용이 제품 개발의 순환을 이룹니다.
핵심은 이것입니다. 협업은 팀과만 하는 것이 아닙니다. 위대한 것을 만들려면 사용자와도 적극적으로 협업해야 합니다.
이런 일들을 제대로 챙기지 않으면, 결국 사용자 없는 번지르르한 소프트웨어만 남게 됩니다. 그렇다면 직업 선택을 다시 생각해볼 때인지도 모릅니다!
대중의 인식 관리
마케팅이라는 용어를 들으면 제일 먼저 무엇이 떠오르나요?
대부분이라면, 이 단어가 부정직한 영업사원의 모습을 떠올리게 할 겁니다. 가짜 웃음과 번들거리는 머리의, 고객이나 제품의 이미지를 만드는 데만 열중하는 사람 말이죠. 제품이 팔아야 할 날것의 "고기"라면, 마케터의 일은 더 많은 사람이 몰려들도록 스테이크에 마법의 "지글지글함"을 더하는 것입니다.
왜 이런 생각이 우리를 그토록 괴롭힐까요? 왜 마케터를 떠올리면 소름이 돋을까요?
프로그래머인 우리에게 마케터는 엔지니어링 문화의 대척점을 나타내기 때문입니다. 우리는 진실에 집착합니다. 코드가 컴파일되거나 안 되거나, 소프트웨어에 기능이 있거나 없거나, 문제를 해결하거나 안 하거나입니다. 세상을 묘사할 때 "비틀어" 말하지 않고, 사실을 말하고 그것을 바꾸려 노력합니다. 마케터를 보면 거짓말만 보이고, 속는 걸 좋아하지 않습니다. 결정을 내릴 때 질서와 예측 가능성, 정확한 설명을 원합니다.
마케팅을 진실을 왜곡하는 것으로 인식하기 때문에, 만드는 사람의 본능적인 실력주의 욕구를 위반합니다. 최고의 제품이 항상 이겨야 한다고 믿습니다. "최고"란 매끄러운 TV 광고가 아니라 객관적으로 가장 품질이 좋고 효과적인 제품을 뜻합니다. 우수한 기술이 지는 것을 볼 때마다 실망합니다. 베타맥스가 VHS보다 우수했고, 레이저디스크가 DVD보다 나았으며, Lisp이 여전히 최고의 프로그래밍 언어 (알려지기만 하면 된다!)라고 많이 믿습니다. 버전 관리 도구 세계에서도 Git 같은 새로운 시스템의 기술적 우위에도 불구하고 Subversion이 기업 세계를 장악했습니다.

더 나쁜 건 마케터들이 고객에게 과도한 약속을 하는 것으로 보여서, 엔지니어가 항상 못 미치는 것처럼 보인다는 점입니다. 귀에서 김이 날 정도입니다.
나쁜 소식과 좋은 소식을 모두 전해드리겠습니다.
나쁜 소식은 마케팅을 무시할 수 없다는 것입니다. 실제로 중요하고 다뤄야 합니다. 좋은 소식은 마케팅과 적극적으로 협력할 수 있다는 것입니다. 제대로만 하면 추잡한 일이 될 필요 없습니다. 사실 성공을 위한 엄청나게 강력한 도구가 될 수 있습니다!
프로그래머는 논리 감각이 과도하게 발달해 있지만, 대부분의 인간은 논리와 감정에 동등하게 좌우됩니다. 마케터들은 감정 조작의 달인이며, 그래서 효과적입니다. 사실과 감정을 섞어 주의를 끕니다. 새로운 사람들이 소프트웨어를 사용하게 하려면 소프트웨어에 대한 감정적 인식에 신경을 써야 합니다. 사람들이 결정하는 방식을 바꿀 수는 없습니다.
Apple Inc.는 비기술자의 감정에 호소하는 기술을 만드는 데 있어 논란의 여지없는 대가입니다. 2015년 기준으로 묻자면, iPhone이 Android 폰보다 객관적으로 우월한가요? 기능 면에서는 거의 동일합니다. 하지만 비기술 사용자가 iPhone이 마법적이라고 믿는다면, 적어도 그 사용자에게는 정말로 마법입니다. 인식이 현실입니다. 앞서 말했듯이 "인식이 십중팔구를 좌우한다"는 것입니다.
이기는 유일한 방법은 참여하지 않는 것이라고 생각하고 싶겠지만, 이는 무시할 수 없는 게임입니다. 소프트웨어를 링에 올리기 위해서라도 최소한의 마케팅 전략은 필요하고, 똑똑하게 하면 마케팅이 훌륭한 엔지니어링을 위한 진정한 힘의 배수가 될 수 있음을 발견할 것입니다. 주도권을 잡기 위한 몇 가지 기본 방법을 소개하는데, 모두 HRT에 기반합니다.
첫인상에 신경 쓰라
만약 배가 고파서 식당을 찾고 있다면, 길에서 보이는 식당의 모습이 정말 중요합니다. 역겹거나 매력적이지 않으면 아예 들어가지 않습니다. 따뜻하고 친근하거나 주인이 친절하면 공정한 기회를 줄 의향이 생깁니다. 제품의 잘 설계된 첫 사용감이 주는 감정적 충격을 과소평가하지 마세요. iPad나 Nest 온도조절기를 개봉해본 적이 있다면 우리가 무슨 말인지 정확히 알 것입니다.
초보자에게 당신의 제품은 어떤 모습일까요? 환영받는 느낌을 주고, 탐색을 장려하나요? 반대로 소프트웨어 첫 세션을 시작하는 전문가에게는 익숙하고 합리적으로 보이나요? 첫눈에, 당신의 앱은 즉각적인 생산성을 외치나요? 아니면 가파른 학습 곡선과 끝없는 눈물을 예고하나요? 더 구체적으로, 사용자가 소프트웨어를 실행한 후 첫 30초 동안 무엇을 경험하나요? 단순히 지적인 답변(“선택 메뉴와 로그인 박스를 본다”)만 하지 말고, 감정적인 답변도 해보세요. 새로운 사용자가 1분 후에 어떻게 느끼나요? 힘을 얻나요, 아니면 그저 혼란스러우나요? 그 느낌을 개선하기 위해 무엇을 할 수 있을까요? 한 단계 물러서서 제품 웹사이트를 보세요. 좋은 상점가처럼 전문적이고 매력적으로 보이나요? 소프트웨어가 진지하게 받아들여지려면 이런 것들을 진지하게 받아들여야 합니다.
적게 약속하고, 더 많이 제공하라
여기서 마케팅 담당자들이 선수를 치지 못하게 하세요. 사용자가 곧 출시될 기능이나 릴리스 일정을 물어보면 지나치게 보수적인 추정을 할 기회로 삼으세요. 마케터들이 소문을 퍼뜨리도록 두면, Duke Nukem Forever 같은 상황, "무려 15년이나 늦게 출시된 소프트웨어"에 처하게 됩니다. 그러나 당신의 (더 정확한) 메시지가 먼저 전해진다면, 사용자는 언제나 환호할 것입니다. 구글이 이걸 잘합니다. 어떤 제품에 대해서도 기능을 미리 발표하지 않는 신중한 정책이 있습니다. 새 기능이 출시될 때는 종종 기분 좋은 놀라움이 됩니다. 또한 비현실적으로 광고된 출시일에 맞추려는 내부 죽음의 행진도 방지합니다. 소프트웨어는 실제로 준비되고 사용 가능할 때 출시됩니다.
업계 애널리스트와 존중하는 태도로 협력하라
많은 프로그래머가 미디어 업계를 싫어합니다. 그냥 다른 모습의 마케팅일 뿐이라고 여기죠. 업계 잡지나 리서치 회사가 문을 두드리면 많은 회사가 모든 걸 제쳐두고 그들의 요청에 굴복합니다. 좋은 (또는 나쁜) 리뷰가 제품 인식을 좌우할 수 있다는 걸 알기 때문입니다. 하지만 엔지니어들은 이런 권력과 복종을 못마땅해하는 경향이 있습니다.
예를 들어, Apache 소프트웨어 재단(ASF) 구성원들이 분석가와 상호작용하는 데 문제가 있었던 때가 있었습니다. 분석가가 ASF에 Apache HTTPD 서버를 설명하는 업계 표준 백서를 요청하면, 전형적인 비아냥거리는 대답은 "다른 사람들처럼 웹사이트의 문서를 읽어보세요"였습니다. 이런 반응은 오픈 소스 개발자들의 실력주의에 대한 깊은 신념을 만족시키긴 했지만, 전체적으로는 "특히 기업 사용자들 사이에서" 대중 인식에 역효과를 낳았습니다. 결국 ASF의 "PR 담당자"가 커뮤니티 구성원들에게 이런 태도에 대해 재교육하고 분석가들과 더 생산적으로 일하도록 노력했습니다. 아무리 짜증나더라도 수동공격적으로 시스템과 싸우는 것은 말이 안 됩니다. 레스토랑 리뷰어에게 줄 맨 뒤로 가라고 말하는 것과 다를 바 없습니다. 리뷰어가 특별 대우를 받아야 할까요? 아마 아닐 겁니다. 하지만 원칙의 문제로 그에게 복수할 가치가 있을까요? 절대 아닙니다. 과정에서 자신만 해칠 뿐입니다. 싸울 곳을 신중히 선택하세요.
당신의 소프트웨어는 얼마나 쓸만한가?
가혹한 진실을 말하자면, 소프트웨어 도구를 개발하는 게 아니라면 엔지니어는 소프트웨어의 대상 사용자가 아닙니다. 따라서 엔지니어인 당신은 소프트웨어 사용성의 끔찍한 평가자입니다. 당신에게는 완전히 합리적으로 보이는 인터페이스가 비기술자인 이웃을 좌절시켜 머리카락을 뽑게 만들 가능성이 높습니다.
"성공적인 소프트웨어"가 "많은 사람이 소프트웨어를 사용하고 좋아하는 것"을 뜻한다고 가정하면, 사용자에게 깊이 주의를 기울여야 합니다. 구글에는 유명한 모토가 있습니다:
사용자에 집중하라, 그러면 모든 것이 따라올 것이다.

다소 진부하게 들리지만, 경력을 통해 우리는 이 격언이 여러 프로젝트에서 반복적으로 실현되는 것을 봤습니다. 이 진리에 기반해 프로젝트가 성공하고 실패하는 것을 목격했습니다.
구글의 큰 돌파구 중 하나는 검색 광고의 효과를 측정하기 시작한 것이었습니다. 사용자가 특정 광고를 클릭하면 그들에게 유용한 것이고, 클릭을 전혀 받지 못하면 짜증스럽거나 쓸모없는 것입니다. 나쁜 광고는 시스템에서 제거되고 광고주에게는 광고 개선을 위한 피드백이 제공됩니다. 처음에는 단기적으로 역효과인 것처럼 보입니다. 구글이 적극적으로 수익원을 거부하는 셈이니까요. 하지만 (광고주가 아닌) 검색자에게 관심의 초점을 맞춤으로써 장기적으로는 구글 검색 광고 시스템의 유용성과 사용량을 극적으로 증가시킵니다.
사용자에게 직접 집중할 수 있는 몇 가지 중요한 방법을 이야기해 봅시다.
누구를 상대로 할지 정하라
우선 첫째로, 사용자들이 기술적 역량 스펙트럼에 걸쳐 분포한다고 상상해 보세요.

만약 제품에 가장 잘 맞는 사용자 집단을 표시하는 수직선을 그린다면, 그 선은 어디에 두시겠습니까? 종 모양 곡선의 한가운데를 지나는 선은 전체 컴퓨터 사용자의 절반가량이 당신의 제품을 기꺼이 사용한다는 의미입니다. (즉, 선의 오른쪽에 있는 사용자들이죠.)
예를 들어, 큰 TV 화면에 인터넷 콘텐츠를 표시하고 싶은 문제를 생각해 봅시다. 경쟁 솔루션들의 "사용성"이 어떻게 잠재적 사용자층을 넓혔을까요? 처음에 사람들은 노트북 컴퓨터를 TV에 직접 연결해야 했습니다. 이는 아날로그 대 디지털 입력을 이해하고 적절한 오디오·비디오 케이블을 갖추는 일을 포함했습니다.

그다음 애플이 Apple TV 제품을 내놨습니다. TV에 영구히 연결해 두는 작은 컴퓨터형 기기였죠. 컴퓨터나 스마트폰에서 제어할 수 있었고, 개인 미디어나 실시간 인터넷 콘텐츠를 스트리밍할 수 있었습니다. 이는 훨씬 더 큰(그리고 덜 기술적인) 사용자층의 문제를 해결했습니다. 적절한 케이블이 함께 제공됐고, 한 번 연결하면 그냥 두면 되었습니다.
그러자 구글이 한 수 더 뜨며 Chromecast를 출시했습니다. TV의 HDMI 포트에 바로 꽂는 작은 스틱이었죠. 설치가 더욱 쉬웠고, 애플 기기 와 비애플 기기 모두에서 더 넓은 범위로 화면을 "캐스트"할 수 있었습니다. 이 글을 쓰는 시점에 우리는 WiFi와 인터넷 스트리밍이 내장된 새 TV들이 출시되는 것을 보고 있습니다. 벤의 아이들은 아마도 Netflix가 내장되지 않은 TV 시절을 기억하지 못할 것 같습니다!
여기서 요점은 좋은 제품 개발은 수직선을 가능한 한 왼쪽으로 이동시키는 것을 목표로 한다는 것입니다. 일반적으로 사용자가 많을수록 더 성공적이고(회사가 더 많은 돈을 벌죠!), 사용자를 고려할 때의 교훈은 대상이 누구인지 깊이 생각해야 한다는 것입니다. 당신의 작업이 가능한 한 가장 큰 그룹이 사용할 수 있나요? 이것이 간단하고 사려 깊은 사용자 인터페이스가 그토록 중요한 이유입니다—세련된 문서와 접근하기 쉬운 튜토리얼 같은 것들과 함께 말이죠.

진입 장벽을 고려하라
이제 소프트웨어의 첫 사용자들을 생각해 보세요. 처음 시작하기가 얼마나 어려운가요? 사용자가 쉽게 사용해 볼 수 없다면 사용자는 없을 것입니다. 첫 사용자는 보통 당신의 소프트웨어가 경쟁자보다 더 강력한지 덜 강력한지는 생각하지 않습니다. 그냥 뭔가를 해내고 싶을 뿐입니다. 빠르게요.
동료들로부터 PHP 요령을 익히면 됩니다.
예를 들어 인기 있는 스크립트 언어들을 보세요. 대다수 프로그래머는 Perl이나 Python이 PHP보다 "더 좋은" 언어라고 지지할 것입니다. Perl/Python/Ruby 프로그램이 장기적으로 읽고 유지보수하기 더 쉽고, 성숙한 라이브러리를 갖추고 있으며, 오픈 웹에 노출될 때 본질적으로 더 안전하고 보안이 좋다고 주장할 것입니다. 그런데도 PHP가 훨씬 더 인기 있습니다—적어도 웹 개발에서는요. 왜일까요? 고등학생이라도 친구의 웹사이트를 복사하면서 삼투압 현상으로 그냥 배울 수 있기 때문입니다. 책을 읽거나, 광범위한 튜토리얼을 하거나, 진지한 프로그래밍 패턴을 배울 필요가 없습니다. 만지작거리기에 적합합니다. 그냥 사이트를 해킹하기 시작해서 동료들에게서 다양한 PHP 요령을 알아내면 됩니다.
또 다른 예는 텍스트 편집기에서 찾을 수 있습니다. 프로그래머는 Emacs를 써야 할까요, vi를 써야 할까요? 중요할까요? 꼭 그렇지는 않지만, 왜 어떤 사람은 하나를 다른 것보다 선택할까요? 여기 실제 일화가 있습니다. Ben이 처음 Unix를 배우기 시작했을 때(1990년 인턴 기간), 실행할 텍스트 편집기를 찾고 있었습니다. 그는 생애 처음으로 vi를 실행해 기존 파일을 열었고, 20초 만에 완전히 좌절했습니다. 파일 안에서 움직일 수는 있었지만 아무것도 입력할 수 없었습니다! 물론 vi 사용자들은 파일을 변경하려면 "편집" 모드로 들어가야 한다는 걸 압니다. 하지만 초보자에겐 여전히 끔찍한 첫 경험이었습니다. 대신 Ben이 Emacs를 실행했을 때는, 집에서 익숙한 워드 프로세서를 쓰듯 즉시 파일 편집을 시작할 수 있었습니다. Emacs의 초기 동작이 그의 이전 경험과 동일했기 때문에, Ben은 첫 1분 안에 Emacs 사용자가 되기로 결정했습니다. 한 제품을 다른 제품보다 선택하는 이유로는 바보 같아 보일 수 있지만, 이런 일은 늘 일어납니다! 제품과 함께하는 그 첫 1분은 치명적입니다.[60]
물론 첫인상을 망치는 다른 방법들도 있습니다. 소프트웨어를 처음 실행할 때 사용자에게 거대한 양식을 작성하게 하거나 필수 설정의 거대한 패널을 설정하게 하지 마세요. 사용자가 새로운 계정을 만들도록 강요하는 것도 상당히 거부감을 줍니다. 사용자가 아무것도 하기 전에 장기적 약속을 암시하는 셈이니까요. 개인적으로 짜증나는 것은 웹사이트가 방문자에게 처음 2초 안에 "구독하세요!" 모달 대화상자를 즉시 터뜨리는 것입니다. 이런 모든 것들이 사용자를 반대 방향으로 비명을 지르며 도망가게 만듭니다.
거의 보이지 않는 진입 장벽의 훌륭한 예는 여행 일정을 관리하도록 설계된 TripIt 웹 서비스입니다. 서비스를 사용하기 시작하려면 기존 여행 확인 이메일(비행기, 호텔, 렌터카 등)을 plans@tripit.com으로 단순히 전달하기만 하면 됩니다. 짜잔, 이제 TripIt을 사용하고 있습니다. 서비스가 임시 계정을 만들어주고, 이메일을 파싱하고, 멋진 일정 페이지를 만들어서, 준비됐다고 알려주는 이메일을 보냅니다. 개인 어시스턴트가 즉시 나타난 것 같은데, 당신이 한 일이라곤 몇 개의 메시지를 전달한 것뿐입니다! 거의 노력을 들이지 않고도 빨려들어가서 관심 있는 사용자로 웹사이트를 둘러보고 있습니다. 이 시점에서 당신은 진짜 서비스 계정을 만들 의향이 생깁니다.
자신의 제품의 진입 장벽에 대해 의심스럽다면 간단한 테스트를 해보세요. 일반 사람들—기술적 및 비기술적 모두—에게 소프트웨어를 주고 처음 1-2분을 관찰해 보세요. 발견하는 것에 놀랄지도 모릅니다.
사용자 수가 아니라 사용 행태를 측정하라
사용자층의 크기와 시작하기 쉬운지 여부를 생각할 때, 사용량을 어떻게 측정하는지도 고려해야 합니다. 우리가 "설치 횟수"가 아닌 "사용량"이라고 했다는 점에 주목하세요. 제품을 다운로드하는 횟수가 많은 것이 아니라 제품을 사용하는 사용자 수가 많은 것을 원합니다. "야, 내 제품이 300만 다운로드를 기록했어— 300만 명의 행복한 사용자가 있다는 뜻이야!"라고 말하는 것을 종종 들을 수 있습니다. 잠깐, 다시 생각해보세요. 그 300만 사용자 중에 실제로 소프트웨어를 사용하는 사람은 몇 명인가요? 그것이 "사용량"의 의미입니다.
극단적인 예로, Unix 아카이브 유틸리티 "ar"가 얼마나 많은 머신에 설치되어 있을까요? 답: Linux의 모든 버전, Mac OS X, BSD 등을 포함해 거의 모든 Unix 기반 OS에 설치되어 있습니다. 그런데 그 프로그램을 사용하는 사람은 몇 명일까요? 그것이 무엇인지 아는 사람도 몇 명일까요? 여기서 우리는 수백만 번 설치되었지만 사용량은 거의 0에 가까운 소프트웨어를 봅니다.
사용량은 구글을 포함한 많은 회사들이 측정에 많은 시간을 투자하는 것입니다. 일반적인 지표로는 "7일 활성 사용자"와 "30일 활성 사용자"가 있습니다—지난 주 또는 달에 소프트웨어를 사용한 사용자 수를 말합니다. 이것이 소프트웨어가 얼마나 잘하고 있는지 실제로 알려주는 중요한 숫자입니다. 다운로드 수는 무시하세요. 대신 지속적인 활동을 측정하는 방법을 찾아보세요. 예를 들어, 제품이 웹사이트나 웹 앱이라면 구글 애널리틱스 같은 제품을 사용해 보세요. 이런 지표들을 제공할 뿐만 아니라 사용자가 어디서 왔는지, 얼마나 머물렀는지 등에 대한 통찰도 제공합니다. 이것들은 제품 수용도를 나타내는 믿을 수 없을 만큼 유용한 지표입니다.
디자인은 중요하다
인터넷이 두각을 나타내기 전에는, 제품을 시장에 내놓는 데 있어 가장 큰 도전은 유통이었습니다. 제품을 개발하고 세계의 수천 개 매장에 진출시킬 능력을 가진 회사는 거의 없었기 때문에, 회사가 제품을 출시하면 엄청나게 마케팅을 했습니다. 이는 보통 각 소프트웨어 범주에서 1-2개의 "승자"를 만들어냈습니다(예: Microsoft Word vs. WordPerfect, Excel vs. Lotus 1-2-3 등). 소프트웨어가 얼마나 못생겼거나 직관적이지 않든 상관없이 제품을 선택할 때 사용하는 주요 기준은 기능과 비용이었습니다.
그러나 상황이 바뀌었습니다.
인터넷은 소프트웨어를 찾고 다운로드하는 데 거의 비용이 들지 않는 글로벌 유통 네트워크입니다. 그리고 소셜 미디어는 사람들이 다양한 제품에 대한 감정을 몇 초 안에 전 세계에 공유하기 쉽게 만듭니다. 이 두 가지 큰 변화(와 기타 여러 작은 요인들)의 결과는 오늘날 소비자가 어떤 제품을 사용할지 선택권을 가지게 되었다는 것입니다. 이렇게 경쟁이 치열한 환경에서는 필요한 기능만 갖춘 제품을 출시하는 것만으로는 더 이상 충분하지 않습니다—제품이 아름답고 사용하기 쉬워야 합니다. 요즘에는 아무리 마케팅을 해도 형편없는 제품을 구할 수는 없지만, 사용자들을 기쁘게 하는 잘 설계된 제품은 그 사람들을 제품을 당신을 위해 마케팅하는 전도사로 만들 것입니다.
따라서 좋은 디자인이 핵심이지만, 좋은 디자인의 큰 부분은 사용자를 우선시하고, 복잡성을 숨기고, 제품을 빠르게 만들며, 가장 중요하게는 모든 사람에게 모든 것이 되려 하지 않는 것입니다.
사용자를 최우선으로 하라
"사용자를 우선시하라"고 할 때, 우리는 당신과 당신의 팀이 사용자가 제품을 더 쉽게 사용할 수 있도록 어려운 제품 작업이라도 맡아야 한다고 제안하는 것입니다. 이는 어려운 엔지니어링 작업을 의미할 수도 있지만, 더 자주는 사용자가 제품을 사용할 때마다 이런 결정을 하게 하는 대신 어려운 디자인 결정을 하는 것을 의미합니다. 우리는 이를 제품 게으름이라고 부릅니다. 어떤 사람들은 게으름이 업무의 효율적 자동화로 이어지기 때문에 엔지니어에게는 미덕이라고 주장할 것입니다. 반면에, 사용자에게 큰 고통을 주는 것을 만들기는 쉬울 수 있습니다. 사용자를 위해 소프트웨어를 쉽게 만드는 것은 제품 개발의 가장 큰 도전 중 하나입니다.
이런 종류의 게으름의 고전적인 예는 사용자에게 너무 많은 옵션을 제시하는 것입니다. 사람들은 1990년대 후반의 마이크로소프트 오피스 제품들을 조롱하는 것을 좋아합니다. 버튼 바! 모든 가능한 메뉴 항목을 즉시 사용 가능하게 만들어서… 엄청난 편의를 위해서! 사용자 인터페이스 디자이너들은 특히 극단적으로 갔을 때 이 아이디어를 조롱하는 것을 좋아합니다:

너무 많은 옵션을 갖는 것은 압도적입니다. 위협적이고 거부감을 줍니다. 너무 많은 선택이 어떻게 불안과 비참함을 만드는지에 대한 책들도 쓰여졌습니다.[61] 심지어 소프트웨어의 설정 대화상자 내에서도 주의해야 합니다. (인기있던 이메일 클라이언트인 유도라(Eudora)가 30개의 서로 다른 설정값 패널을 가지고 있었다는 걸 아세요?) 그리고 누군가가 양식을 작성하게 한다면, 받아들이는 것에 관대하세요: 여분의 공백, 구두점, 또는 대시를 처리하세요. 사용자가 파싱을 하게 만들지 마세요! 이는 사용자의 시간을 존중하는 것입니다. 프로그래머가 최종 사용자를 위해 친근하고 쉬운 것을 만들 수 있었는데 귀찮아서 하지 않았을 때는 정말 명백하고 (짜증나는 것)입니다.
속도는 중요하다
대부분의 프로그래머는 애플리케이션 속도(또는 더 과학적으로 들리는 지연시간)의 중요성을 크게 과소평가합니다. 그 효과는 기본적이면서도 깊이 있습니다.
첫째, 지연시간은 또 다른 형태의 "진입 장벽"입니다. 우리는 웹 페이지 속도에 대해 버릇이 나빠졌습니다. 새 웹사이트를 확인하라고 할 때, 3-4초 안에 로딩되지 않으면 사람들은 종종 중단하고 관심을 잃습니다. 여기에는 변명의 여지가 없습니다. 웹 브라우저는 떠나서 주의를 12개의 다른 곳으로 돌리기 쉽게 만듭니다. 페이지가 로딩되기를 기다리는 것보다 더 나은 일들이 있습니다.
둘째, 프로그램이 빠르게 반응할 때 사용자에게 깊은 잠재의식적 효과를 줍니다. 마찰이 없는 것처럼 느껴지기 때문에 점점 더 많이 사용하기 시작합니다. 그들의 능력의 무의식적 확장이 됩니다. 반면에 느린 애플리케이션은 시간이 지남에 따라 점점 더 좌절감을 줍니다. 사용자들은 종종 깨닫지도 못한 채 소프트웨어를 점점 덜 사용하기 시작합니다.
제품이 출시된 후, 시간이 지남에 따라 사용량이 증가하는 것을 보는 것은 신나는 일입니다. 하지만 잠시 후 사용량이 종종 한계에 부딪힙니다—그냥 평평해집니다. 이 지점에서 마케팅 담당자들이 종종 개입해서 더 많은 기능, 더 예쁜 색상, 더 좋은 폰트, 또는 더 "튀는" 애니메이션이 필요하다고 소리칩니다. 하지만 때로는 정체의 실제 이유가 지연시간입니다. 프로그램이 느려지고 좌절감을 주게 된 것입니다. 다음 그래프에서 보는 것처럼, 지연시간이 증가할수록 사용자 참여도가 감소합니다.

구글의 실화 한 가지: 어느 날 한 엔지니어링 팀이 구글 맵에 극적인 지연시간 개선을 출시했습니다. 발표도 없었고, 블로그 포스트도 없었습니다. 출시는 완전히 비밀스럽고 조용했습니다. 그런데 활동 그래프는 처음 며칠 안에 사용량의 거대한(그리고 영구적인) 증가를 보여줬습니다. 거기에는 강력한 심리학이 작용하고 있습니다!
웹 기반 애플리케이션을 서비스할 때는 지연시간의 작은 개선도 중요합니다. 메인 애플리케이션 화면을 로딩하는 데 750밀리초가 걸린다고 가정해보세요. 충분히 빠른 것 같죠? 개별 사용자에게는 그리 좌절스럽지 않을 것입니다. 하지만 로딩 시간을 250밀리초로 줄일 수 있다면, 그 추가적인 0.5초가 총합에서는 엄청난 차이를 만듭니다. 백만 명의 사용자가 각각 하루에 20번의 요청을 한다면, 그것은 116년의 절약된 사용자 시간에 해당합니다—사용자들을 죽이는 것을 멈추세요! 지연시간 개선은 사용량을 늘리고 사용자를 행복하게 만드는 최고의 방법 중 하나입니다. 구글 창립자들이 좋아하는 말처럼, "속도는 기능이다."
모든 것을 다 하려 들지 마라
당신의 소프트웨어가 너무 많은 것을 이루려 하고 있나요? 처음에는 바보 같은 질문으로 들리지만, 가장 최악의 소프트웨어 중 일부는 지나치게 야심적이기 때문에 나쁩니다. 모든 사람에게 절대적으로 모든 것이 되려고 합니다. 최고의 소프트웨어 중 일부는 문제를 좁게 정의하고 잘 해결하기 때문에 성공합니다. 모든 문제를 나쁘게 해결하는 대신, 대부분의 사용자에게 정말 일반적인 문제들을 해결하고 정말 잘 해냅니다.
우리는 종종 잡지 광고에서 보는 특정 기기들을 농담거리로 삼습니다: 이봐, 봐봐, 캠핑 랜턴인데, 날씨 라디오가 내장되어 있어!…그리고, 음, 또한 내장 TV도 있고, 음, 스톱워치, 알람시계, 그리고…어? 혼란스러운 엉망입니다. 대신 당신의 소프트웨어를 간단한 토스터 오븐으로 생각하세요. 모든 걸 요리하나요? 절대 아닙니다. 하지만 정말 흔한 음식을 많이 요리하고 압도적이지 않으면서도 그것을 접하는 거의 모든 사람에게 유용합니다. 토스터 오븐이 되세요. 적은 것이 더 많은 것입니다.

복잡함을 숨겨라
"하지만 내 소프트웨어는 복잡해요"라고 생각할 수도 있습니다. "그리고 복잡한 문제를 해결하고 있어요. 그런데 왜 그걸 숨기려 해야 하죠?" 합리적인 우려이지만, 이것 또한 좋은 제품 설계의 핵심 과제 중 하나입니다. 우아한 설계는 쉬운 일을 쉽게 만들고 어려운 일을 가능하게 만듭니다. 복잡한 일을 할 때에도 소프트웨어는 매끄럽고 쉽게 느껴져야 합니다. (다시, 우리는 사용자의 감정에 집중하고 있습니다.)
이것을 우리는 "복잡성 숨기기"라고 부릅니다. 복잡한 문제를 가져다가 분해하고, 덮거나, 어떻게든 소프트웨어가 간단해 보이도록 만드는 것입니다.
애플을 다시 보세요. 애플의 제품 설계는 전설적이며, 가장 영리한 것 중 하나는 MP3 음악 컬렉션 관리 문제를 창의적으로 해결한 것입니다. iPod이 나오기 전에는 휴대용 기기에서 바로 음악을 관리하려 하는 어색한 기기들이 몇 개 있었습니다. 애플의 천재성은 MP3 관리가 작은 화면에서 해결하기에는 너무 어려운 문제라는 것을 깨닫고, 해결책을 큰 컴퓨터로 이동시킨 것입니다. iTunes가 그 답이었습니다. 컴퓨터(큰 화면, 키보드, 마우스)를 사용해 음악 컬렉션을 관리하고, iPod은 재생만을 위해 사용합니다. 그러면 iPod은 간단하고 우아할 수 있고, 음악 정리가 더 이상 좌절스럽지 않습니다.
구글 검색은 복잡성을 숨기는 또 다른 잘 알려진 예입니다. 구글의 인터페이스(와 진입 장벽)는 거의 존재하지 않습니다. 그냥 입력할 수 있는 마법의 상자일 뿐입니다. 하지만 그 상자 뒤에는 전 세계의 수천 대 기계가 병렬로 응답하며 당신이 타이핑하는 모든 키 입력 후에 검색을 수행합니다. 엔터를 누를 때쯤이면 검색 결과가 이미 화면에 렌더링되어 있습니다. 그 텍스트 상자 뒤의 기술의 양은 입이 떡 벌어질 정도이지만, 문제의 복잡성은 사용자로부터 숨겨져 있습니다. 마법처럼 동작합니다.[62] 이것은 본질적으로 제품 사용성의 정점이기 때문에 창의적인 팀이 추구할 훌륭한 목표입니다.
마지막으로, 복잡성에 대한 주의사항을 언급해야 합니다. 복잡성을 가리는 것은 칭찬할 만하지만, 모든 사용자를 결박하게 만들 정도로 소프트웨어를 꽁꽁 밀봉하는 것이 목표는 아닙니다. 복잡성을 숨기는 것은 거의 항상 영리한 추상화 만들기를 포함하며, 프로그래머로서 당신은 추상화가 결국 "새어나올" 것이라고 가정해야 합니다. 웹 브라우저가 404 오류를 출력할 때, 그것은 새어나온 추상화입니다. 환상이 깨진 것이죠. 하지만 당황하지 마세요. 추상화가 새어나온다고 가정하고 커튼을 걷을 수 있는 의도적인 방법을 제공함으로써 단순히 그것을 받아들이는 것이 더 좋습니다. 이를 위한 좋은 방법은 다른 프로그래머들에게 API를 제공하는 것입니다. 또는 정말 고급 사용자들을 위해 추상화를 우회하고 싶어하는 사람들에게 더 많은 옵션과 선택을 제공하는 "전문가 모드"를 만드는 것입니다.
인터페이스를 유연하고 우회 가능하게 유지하는 것뿐만 아니라, 사용자의 데이터도 접근 가능해야 합니다. 피츠는 구글 제품들이 "데이터 해방"을 제공하도록—사용자가 애플리케이션에서 자신의 데이터를 내보내고 떠나는 것이 간단하도록—하는 데 많은 열정을 쏟았습니다. 인터페이스가 아무리 우아해도 소프트웨어가 사용자를 가둬서는 안 됩니다. 사용자가 후드를 열고 자신의 데이터로 원하는 것을 무엇이든 할 수 있게 하는 것은 당신이 정직하게 경쟁하도록 강요합니다. 사람들이 당신의 소프트웨어를 사용하는 이유가 갇혀있기 때문이 아니라 원하기 때문이어야 합니다. 이는 신뢰를 생성하는 것에 관한 것이며, (앞으로 언급하겠지만) 신뢰는 당신의 가장 신성한 자원입니다.
사용자와의 관계를 관리하라
좋습니다. 제품이 첫눈에 매력적입니다. 시작하기 쉽습니다. 그리고 사람들이 시작하고 나면 정말 즐겁습니다. 몇 달 후에는 어떻게 될까요? 매일, 수년간 제품을 사용하는 사람들과 어떻게 상호작용할까요?
믿건 안 믿건, 많은 사용자가 당신의 회사나 팀과 관계를 갖고 싶어합니다. 행복한 사용자는 소프트웨어의 진화에 무슨 일이 일어나고 있는지 알고 싶어하고, 화난 사용자는 불평할 곳을 원합니다. 프로그래머가 저지르는 가장 큰 실수 중 하나는 소프트웨어를 벽 너머로 던지고 피드백 듣기를 멈추는 것입니다.
마케팅과 마찬가지로, 고객 서비스라는 용어도 일반적으로 부정적 함의를 가집니다. "고객 서비스" 직업은 종종 커피숍에서 일하는 바리스타나 지원 전화에 응답하는 로봇 같은 사람들로 가득한 방의 이미지를 떠올리게 합니다. 하지만 실제로는 고객 서비스가 불쾌하고 영혼을 소모하는 일이 아니며, 다른 사람들(더 낮은 직무 설명을 가진)이 하는 일도 아닙니다. 이는 삶의 철학—사용자와의 지속적인 연결에 대해 생각하는 방식입니다. 외부 불만에 대한 단순한 반응이 아니라 창의적 팀으로서 적극적으로 해야 할 일입니다.
엔지니어들은 종종 사용자와의 직접적인 상호작용을 두려워합니다. "사용자들은 무지해"라고 생각합니다. "성가시고 대화하기 불가능해." 모든 사용자에게 사랑을 퍼부으라고 요구하는 사람은 없지만, 단순한 사실은 사용자들이 들리고 싶어한다는 것입니다. 터무니없는 제안이나 무지한 불만을 해도, 당신이 할 수 있는 가장 중요한 일은 그들을 인정하는 것입니다. 토론과 개발 과정에 참여하도록 더 많이 허용할수록, 그들은 더 충성스럽고 행복해집니다. 그들과 동의할 필요는 없지만, 여전히 들어야 합니다. 이것이 HRT의 "존중"입니다! 기업들은 소셜 미디어 시대에 이것을 빠르게 배우고 있습니다— 거대하고 얼굴 없는 기업이 아닌 인간으로서 누군가에게 다가가는 것만으로도 종종 그 사람의 우려를 완화하기에 충분합니다. 사람들은 기업이 HRT를 공개적으로 보여주는 것을 좋아합니다.

시간에 따른 사용자 관리의 중요성을 보여주기 위해 또 다른 간단한 (약간 비과학적인) 그래프를 그리는 것을 좋아합니다. 시간이 지나면서 소프트웨어는 점점 더 많은 사용자를 얻습니다. 물론 제품을 "개선"하면서 복잡성도 점점 더 많아집니다:

여기서 문제는 사용자 수가 증가함에 따라 평균적인 기술적 능력 수준이 감소한다는 것입니다. 일반 대중을 점점 더 많이 포함하게 되기 때문입니다. 이를 계속 증가하는 복잡성과 짝지으면 사용자의 절망에 심각한 문제가 생깁니다:

더 많은 절망은 더 많은 불만, 더 화난 사용자, 그리고 소프트웨어 개발자와의 열린 소통에 대한 끊임없이 증가하는 필요를 의미합니다!
이 트렌드를 피하려면 무엇을 할 수 있을까요?
우선, 문제를 부정하지 마세요. 많은 기업은 본능적으로 프로그래머와 사용자 사이에 관료적 장벽을 세우기 위해 할 수 있는 모든 것을 합니다. 탐색해야 하는 보이스메일 트리를 만들거나, 실제로 소프트웨어를 작성하지 않는 여러 층의 사람들에 의해 추적되는 "헬프 티켓"으로 불만을 접수하게 합니다. 메시지는 이러한 층을 통해서만 간접적으로 전달되며, 위험한 군중과의 직접 접촉이 개발자를 위험에 빠뜨리거나(혹은 무의미하게 방해할까 봐) 그런 것처럼 행동합니다. 이렇게 해서 사용자는 무시당하고 무력해졌다고 느끼게 되고, 개발자는 완전히 단절되게 됩니다.
훨씬 더 나은 상호작용 방식은 사용자를 직접 인정하는 것입니다. 불만을 제기할 수 있는 공개 버그 트래커를 제공하고 그들에게 직접 응답하세요. 서로 도울 수 있도록 메일링 리스트를 만드세요. 소셜 미디어에서 사용자와 직접 상호작용하세요. 제품이 오픈 소스가 될 수 있다면, 그것도 큰 도움이 됩니다. 사용자에게 더 "인간적"으로 보일수록 제품에 대한 신뢰가 커지고, 절망은 줄어들기 시작합니다. 예상치 못한(그리고 멋진) 방식으로 당신의 제품을 사용하는 사람들에게도 주의를 기울이세요. 진정한 대화를 통해서만 그들이 당신의 소프트웨어로 실제로 무엇을 하고 있는지—어쩌면 영리하거나 짜릿한 무언가를—발견할 수 있습니다.
사용자의 지성을 존중하라
기본적으로 사용자들에게 존중을 보이세요. 직접적인 사용자 상호작용에 대한 두려움을 부채질하는 일반적인 오해는 사용자들이 바보라는 신화입니다. 어쨌든 그들은 소프트웨어를 작성하지 않으니까, 그냥 "무지한 사용자들"이겠죠? 마침내 그들과 상호작용할 기회가 있을 때 기억해야 할 가장 중요한 것은 거만함을 피하는 것입니다. 능숙한 컴퓨터 사용자인 것이 일반 지능의 공정한 척도는 아닙니다. 세상에는 컴퓨터를 도구로, 그 이상도 그 이하도 아닌 것으로 사용하는 훌륭한 사람들이 많습니다. 그들은 디버깅하거나 과학적 방법을 따라 문제를 진단하는 데 관심이 없습니다. 우리 대부분이 자동차를 분해하고 수리하는 방법을 모른다는 걸 기억하세요. 사용자들을 바보라고 가정하는 것은 자동차 정비사가 당신이 변속기를 재조립하는 방법을 모르고, 변속기 문제를 진단하는 방법에도 관심이 없다고 해서 당신을 바보라고 생각하는 것과 같습니다. 자동차는 블랙박스입니다—당신은 그냥 운전하고 싶을 뿐입니다. 대부분의 사람들에게 컴퓨터(와 당신의 소프트웨어)도 블랙박스입니다. 사용자들은 분석 과정에 참여하고 싶어하지 않습니다. 그들은 그냥 일을 끝내고 싶을 뿐입니다. 이것은 지능과는 아무 관련이 없습니다!
인내를 가져라
The corollary, then, is to learn great patience. Most users simply don’t have the 그러므로 결론은, 큰 인내심을 배우라는 것입니다. 대부분의 사용자들은 자신의 문제를 간결하게 표현할 어휘가 없습니다. 그들이 말하는 바를 이해하는 법을 배우는 데는 수년의 연습이 필요합니다: 부모님께 전화로 컴퓨터 기술 지원을 해보려 했던 누구에게나 물어보세요(아마 이 책을 읽는 대부분일 것입니다!). 대화의 절반은 같은 어휘에 합의하려는 시도입니다. 많은 사람들은 웹 브라우저가 무엇인지 모르고, 그것이 그냥 컴퓨터의 일부라고 생각합니다. 애플리케이션을 동작으로 설명하거나, 화면 아이콘을 신비한 워크플로 이름처럼 이야기합니다. 요점은, 가장 똑똑한 사람들조차도 컴퓨터가 어떻게 동작하는지 설명하는 자신만의 논리적 우주(와 어휘)를 만들어내는 재주가 있다는 것입니다. 그들은 머릿속에만 존재하는 가상의 분류와 규칙의 관점에서 문제를 진단하기 시작합니다.
Parent: "내 컴퓨터가 느린 건 디스크가 가득 차서 그런 것 같아."
You: "디스크가 가득 찼다는 걸 어떻게 아세요? 확인해 보셨어요?"
Parent: "응, 화면이 아이콘으로 꽉 차 있거든. 그러니까 아마 이메일 받을 공간도 없는 거 아닐까? 쿠키 몇 개 지우면 공간이 좀 늘겠지? 지난번에도 그랬던 것 같아."
You: [머리를 탁! 치며 절망]
여기서 중요한 경청 능력은 사람들이 의미하는 것을 이해하는 법을 배우는 것이지, 그들이 문자 그대로 말하는 것을 해석하려고 하는 것이 아닙니다. 이는 단순한 언어 번역뿐만 아니라 감정 지능과 마음 읽기도 필요합니다.
Fitz에게는 할머니에 대한 훌륭한 이야기가 있습니다. 할머니가 그에게 (전화로) 물었습니다. "브라이언, 할아버지의 그 오래된 컴퓨터가 전혀 가치가 있을까?" Fitz는 그냥 인터넷 연결도 없는 아주 오래된 Mac 클래식일 뿐이니 안전하게 재활용하는 게 최선이라고 말했습니다. 할머니의 대답: "그래, 음, 난 연필을 깎을 때만 그걸 켜거든."
완전히 혼란스러운 순간이 길게 지속된 후, Fitz는 그녀가 정확히 무슨 뜻인지 알아내기 위해 질문을 시작해야겠다고 결정했습니다!
결국 Mac과 할머니의 전기 연필깎이가 모두 멀티탭에 꽂혀 있었던 것으로 밝혀졌습니다. 일주일에 한 번 할머니는 연필을 들고 방에 들어와서 멀티탭 전원을 켰습니다. Mac은 삐 소리를 내며 부팅을 시작했습니다. 할머니는 연필을 깎고 방을 나갈 때 멀티탭 전원을 꺼서 갑자기 부팅을 끝내기도 전에 Mac을 죽인 것입니다.[63] 이것은 기술적이지 않은 사람이 제한된 어휘와 컴퓨터와의 관계에서 형성된 어떤 모델을 사용해서 상황을 설명하려고 시도하는 좋은 예입니다.

많은 사람들이 구글의 검색 서비스에 대해 마법 같은 선입견을 갖고 있습니다. 많은 사람들이 그것이 그냥 자신의 컴퓨터의 일부라고 생각합니다. 2005년에 우리가 구글에서 엔지니어로 일한다고 말하면 사람들로부터 당황스러운 표정을 받곤 했습니다: "오! 거기에서 일하는 사람이 있는 줄 몰랐어요?!" 반대로 Fitz의 할머니 친구 중 한 분은 회사 전체가 오프사이트 스키 여행을 간다는 소식을 듣고 화를 냈습니다. (이는 회사가 아직 작았던 시절입니다.) "그거 끔찍해요! 어떻게 다 스키를 타러 갈 수 있어요?"라고 물었습니다. "누가 내 검색을 다 해줄 거예요?" 분명히 구글이 태만해서 트래픽을 유지할 교환원을 충분히 남겨두지 않은 것입니다.
신뢰와 행복을 만들어라
사용자와 상호작용하는 방식의 초석이 되어야 할 두 가지 더 있습니다: 신뢰와 기쁨입니다.
신뢰는 까다로운 용어입니다. 우리는 이미 HRT 문맥에서 동료에게 신뢰를 보이는지, 또 어떻게 보이는지—신뢰에 대해 이야기했습니다. 여기서는 사용자로부터 신뢰를 얻는 것에 대해 이야기합니다. 사용자가 당신의 팀(또는 회사)을 신뢰할 때 그것은 주로 감정적 상태입니다. "제품 X를 신뢰합니다, 왜냐하면 관계에 위험이 전혀 없음을 증명하는 긴 사실 목록이 있기 때문입니다"라고 말하는 사람은 거의 없습니다. 그들은 당신과의 상호작용들이 누적되어 전반적으로 감정적으로 긍정적인 상태가 되었기 때문에 당신을 신뢰합니다.
친구와 가족을 잠시 떠올려 보세요. 그들 중에 정말 신뢰하는 자동차 정비사가 몇이나 있나요? 요즘 답은 거의 0에 가깝습니다. 거의 아무도 정비사를 신뢰하지 않습니다. 수년간 "메일박싱"이라 불리는 일을 겪어왔기 때문입니다: 정기 점검(예: 오일 교환)으로 갔다가, 받은편지함에 스팸우편이 쌓이듯 예기치 않은 유지보수 항목들이 한꺼번에 추가되는 것입니다. 정비사들은 모든 기회에 이익을 극대화하라는 지시를 받았기 때문에, 이제 아무도 그들을 믿지 않습니다. 기억하세요, 진정성에는 일시적인 둔탁함 같은 것은 없습니다.
이것은 장기적 관계가 단기적 이익을 위해 어떻게 쉽게 희생될 수 있는지를 보여주는 좋은 예입니다. 고객들을 이따금씩 아주 조금씩 속이면, 결국 그들은 누적된 경멸의 베일을 통해 관계를 바라보게 됩니다.
계속되면서, 결국 그들은 누적된 경멸의 베일을 통해 관계를 바라보게 됩니다. 반대로, 당신의 팀이 도움이 되거나 유용한 일을 하거나, 빠르게 반응할 때마다 그들의 마음속 가상의 은행 계좌에는 신뢰가 조금씩 쌓입니다. 제빵사가 12개 도넛에 깜짝 13번째 도넛을 추가할 때("라니아페"라고 뉴올리언스에서 부르는), 이것은 당신의 얼굴에 미소를 가져다 줍니다. 수년간의 거래를 통해 신뢰 계좌는 계속 증가하여 당신의 제품에 대한 언급만으로도 따뜻하고 포근한 느낌을 가져다 주게 됩니다.
하지만 신뢰는 위험할 수 있습니다. 한 번의 어리석고 충동적인 구매로 은행 계좌가 고갈될 수 있는 것처럼 한번에 날아가 버릴 수 있기 때문입니다. 회사가 사용자에 대한 완전한 존중 부족을 보여주는 일을 한다면(실수라 하더라도), 신뢰 은행은 하룻밤에 비워집니다.
이것의 좋은 예는 넷플릭스가 2011년 말에 사용자와의 관계를 일시적으로 망친 방식입니다. 넷플릭스는 인터넷을 통한 영화 스트리밍 서비스이면서 동시에 우편으로 DVD를 대여하는 방법이기도 합니다. 10년에 걸쳐 점점 더 인기를 얻었습니다: 쉽고, 편리하고, 새로웠습니다. 가격도 저렴했습니다. 2011년 초까지 2300만 명 이상의 구독자를 보유하고 있었습니다.
어느 시점에 비즈니스 담당자들은 DVD와 스트리밍 서비스가 실제로는 별개의 수익 모델, 관리 요구사항 등을 가진 별개의 사업이라는 것을 깨달았습니다. 그래서 이 사업들에 대해 별도로 요금을 부과하기로 결정하여, 일부 사용자의 월 요금을 60% 인상했습니다. 고객들은 분노했습니다. 그러자 넷플릭스는 더 명확함과 편의를 위해 두 개의 별개 회사로 분할할 것이라고 발표했습니다. 사용자들에게는 이것이 단순히 "이제 하나 대신 두 개의 청구서를 지불해야 하는 성가심이 생긴다"고 읽혔습니다. 홍보 재앙이 닥쳤다는 것을 깨달은 그들은 회사 분할을 철회했지만, 그때는 이미 너무 늦었습니다. 손상이 이미 가해졌습니다. 지속적인 성장의 역사에도 불구하고 3개월 만에 80만 명의 구독자를 잃었습니다. 단순하고 필요한 비즈니스 결정처럼 보였지만 기존 관계에 거의 관심을 두지 않은 두어 번의 작은 움직임으로 10년 가치의 신뢰 대부분을 날려버린 것입니다. (다행히도, 그들은 서비스와 콘텐츠에 세심한 주의를 기울여 다음 몇 년에 걸쳐 신뢰의 은행을 완전히 재건했습니다. 더 강하게 돌아왔죠!)
신뢰는 당신의 가장 신성한 자원입니다. 조심스럽게 지켜보세요. 은행 계좌의 크기를 측정하세요. 모든 행동 전에 그것이 은행 계좌에 어떤 영향을 줄지 생각해보세요. 단기적 편의가 아닌 장기적 이미지에 집중하세요.
신뢰와 마찬가지로 기쁨은 사용자와의 관계를 크게 개선할 수 있는 또 다른 감정입니다. 그 따뜻하고 포근한 느낌을 증가시키고 당신의 팀이 더 인간적으로 보이게 만드는 방법입니다.

자신을 너무 진지하게 받아들이지 않는 것부터 시작해야 합니다. 구글은 만우절에 터무니없는 제품 발표를 하는 전통이 있습니다. 예를 들어 어느 해에는 유튜브 첫 페이지의 모든 비디오가 "릭롤"을 유발했습니다. 또는 www.woot.com을 보세요. 일일 특가 사이트인데, 광고 카피가 자조적이고 기발한 유머로 가득 차 있습니다.
놀랍고 멋진 행복의 순간으로 사용자를 놀라게 하려고 노력하세요. (그것이 기쁨의 정의 아닌가요?) 구글이 하드 컴퓨터 과학의 강자임에도 불구하고, 사용자들을 가장 흥분시키는 것은 휴일이나 기념일을 표현하는 가끔씩 나오는 "두들"입니다. 사람들의 하루에 주입되는 아주 작은 작품일 뿐인데도 끝없는 피드백 편지와 사무실 담소거리를 만들어냅니다.
물론 유머스럽게 처리한다면 약간의 공포도 사용자에게 영감을 줄 수 있습니다. 소셜 네트워크를 시작하려던 한 회사가 새 사용자들이 자신의 사진을 올리도록 격려하고 싶어했는데, 결국 그 회사는 사진을 올리지 않은 모든 사용자에게 으르렁거리는 딕 체니의 사진을 보여주기로 했습니다—그러자 사진 업로드가 갑자기 쏟아져 들어오기 시작했습니다!
기쁨과 유머의 요소를—적절히—추가하는 것은 실제로 사용자에게 관심을 기울이고 그들과의 관계를 소중히 여긴다는 것을 보여주는 데 큰 도움이 됩니다.
사용자를 잊지 말라
이 장에서 많은 아이디어를 다뤘지만, 결국 주머니에 넣고 다닐 수 있는 세 가지 간단한 개념으로 요약됩니다:
- 마케팅
-
사람들이 당신의 소프트웨어를 어떻게 인식하는지 알아두세요; 그것이 시도해볼지를 결정합니다.
- 제품 설계
-
소프트웨어가 시도하기 쉽지 않고, 빠르지 않고, 친근하지 않고, 접근 가능하지 않다면 사용자는 떠날 것입니다.
- 고객 서비스
-
장기 사용자와의 적극적인 참여는 소프트웨어의 진화와 사용자 유지에 영향을 줍니다.
프로그래머로서 우리의 일상은 산만함으로 가득합니다—코드 리뷰, 설계 리뷰, 도구와의 싸움, 운영 관련 불끄기, 버그 분류—그래서 우리가 소프트웨어를 만드는 이유를 잊기 쉽습니다. 그것은 당신이나, 당신의 팀이나, 당신의 회사를 위한 것이 아닙니다. 사용자의 삶을 더 쉽게 만들기 위한 것입니다. 사용자들이 제품에 대해 무엇을 생각하고 말하는지, 장기적으로 어떻게 경험하는지에 주의를 기울이는 것이 중요합니다. 사용자는 소프트웨어 성공의 생명선입니다. 뿌린 대로 거둡니다.
Appendix A: Epilogue
지금쯤이면 이 책의 조언이 프로덕트 디벨롭먼트에만 적용되는 것이 아니라는 사실이 꽤 명확해졌을 것이라 생각합니다.
저희가 들려드린 이야기들은 본질적으로 건강하고 기능적인 커뮤니티, 어떤 커뮤니티든, 를 유지하는 기술에 관한 것입니다. 저희의 일화에서 프로덕트 개발과 관련된 부분을 제거하고 다른 어떤 활동으로 대체해도 됩니다. 동네 클럽이든, 교회 모임이든, 동아리든, 건설팀이든 상관없이, 동일한 사회적 문제들이 존재하고 동일한 해결책들이 적용됩니다. 인간은 상황에 관계없이 예측하기 어렵고 다루기 까다로운 존재입니다. 프로덕트 개발은 다른 모든 그룹 활동과 동일한 커뮤니티 건강성 문제를 가지고 있습니다.
그러므로 일상의 업무에서 HRT를 열심히 적용해 나가면서, 그것이 삶의 다른 영역에도 적용된다는 점을 기억해 두시기 바랍니다.
누가 알겠습니까? 어쩌면 저희의 진정한 소명은 교회 설교문을 쓰는 것일지도 모르겠습니다. 하지만 지금은 소프트웨어를 개발하고 협업에서 최고의 성과를 내는 일에 집중하겠습니다. 그리고 이제 여러분도 그렇게 할 수 있는 힘을 갖게 되었습니다.
마지막 생각
저희는 이 책에서 정말 많은 주제들을 다뤘습니다. 책을 덮고 나면 일상 생활에서 어떤 부분을 받아들일지 파악하기 어려울 수도 있습니다. 결국, 일하는 방식에 어떤 변화도 가져오지 않는다면 이런 책을 읽는 의미가 무엇이겠습니까? 이제 무엇이 일어날까요?
간단하게 생각해봅시다. 저희 이야기에서 무엇이든 기억한다면, HRT를 기억하세요: 겸손(humility), 존중(respect), 그리고 신뢰(trust)입니다.
첫 번째 장에서 설명했듯이, 이 세 가지 핵심 특성은 여러분이 취하는 모든 사회적 행동과 여러분이 가꿔나가는 모든 관계의 기반이 되어야 하는 것들입니다. 그리고 자세히 살펴보면 거의 모든 사회적 문제가 이러한 특성들 중 하나의 부족에서 비롯된다는 것을 알게 될 것입니다.
HRT는 여러분의 다양한 "영향의 영역"에 모두 적용된다는 점을 기억하세요. 무엇보다도 여러분 자신에게 적용됩니다: 이러한 특성들은 여러분이 하는 모든 개별적인 의사소통에 영향을 미칩니다. 여러분의 팀에도 적용됩니다: 겸손, 존중, 신뢰에 기반한 문화는 코딩에 가장 많은 시간을 할애하고 내부 갈등에는 가장 적은 시간을 할애할 것입니다. 사람들이 팀을 이끄는 방식에도 적용됩니다: 숙련된 리더는 자신의 팀에 봉사하며, 그 반대가 아닙니다. HRT는 또한 여러분이 팀 밖의 임시 협력자들과 상호작용하고 그들과 함께 생존해 나가는 방식에도 적용됩니다. 그들이 좋은 사람들이든, 까다로운 사람들이든, 기능장애가 있는 관료조직이든 말입니다. 그리고 마지막으로, 이러한 원칙들은 가장 중요한 그룹인 여러분 프로덕트의 사용자들과 상호작용하는 방식에 직접적으로 적용됩니다.
일하는 방식에서 HRT를 최우선에 둔다면, 훨씬 적은 노력으로 더 큰 영향을 미칠 수 있을 것입니다. 저희는 이것이 여러분이 사랑하는 일(프로덕트 출시)에 가장 많은 시간을 할애하고, 사회적 갈등이나 관료주의, 기타 인간적 드라마를 다루는 데에는 가장 적은 시간을 할애하는 최선의 방법이라고 생각합니다.
Appendix B: Further Reading
We created this book based on our experiences writing software with numerous teams and people, but we’ve also read many books and articles that have helped us formulate the thoughts that we laid out on these pages. Here are a few of the books and articles that influenced us along the way:
-
Peopleware: Productive Projects and Teams, 2nd Edition, by Tom DeMarco (Dorset House)
-
Drive: The Surprising Truth About What Motivates Us by Daniel H. Pink (Riverhead)
-
"You and Your Research" by Richard Hamming
-
Predictably Irrational: The Hidden Forces That Shape Our Decisions by Dan Ariely (HarperCollins)
-
The Mythical Man-Month: Essays on Software Engineering, 2nd Edition, by Frederick P. Brooks (Addison-Wesley Professional)
-
Startup Engineering Management by Piaw Na (self-published)
-
Rework by Jason Fried and David Heinemeier Hansson (Crown Business)
-
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye (O’Reilly)
-
Quiet: The Power of Introverts in a World That Can’t Stop Talking by Susan Cain (Crown)
-
Fearless Change: Patterns for Introducing New Ideas by Mary Lynn Manns (Addison-Wesley)
-
The Art & Adventure of Beekeeping by Ormond Aebi (Rodale Press)
-
"Maker’s Schedule, Manager’s Schedule" by Paul Graham
-
The Art of Readable Code by Dustin Boswell and Trevor Foucher (O’Reilly)
-
Mastery: The Keys to Success and Long-Term Fulfillment by George Leonard (Plume)
-
"The Significance of Task Significance: Job Performance Effects, Relational Mechanisms, and Boundary Conditions" (2008) by Adam M. Grant (Journal of Applied Psychology 93:1, pp. 108–124)
-
Project Retrospectives: A Handbook for Team Reviews by Norman L. Kerth (Dorset House)
-
The Luck Factor by Richard Wiseman (Miramax)
-
Search Inside Yourself by Chade-Meng Tan (HarperOne)
-
Being Geek by Michael Lopp (O’Reilly)
-
The Paradox of Choice: Why More Is Less by Barry Schwartz (Ecco)
-
Critical Chain by Eliyahu M. Goldratt (North River Press)
-
Delivering Happiness: A Path to Profits, Passion, and Purpose by Tony Hsieh (Hachette Book Group)