1.0

View in English

1.0 1부 소개: 사람

소프트웨어는 사람이 만들고, 사람은 문화와 구조와 프로세스로 조직됩니다. 그래서 코드나 아키텍처나 도구를 이야기하기 전에, 이 부에서는 그 모든 것을 만들어 내는 인간의 시스템을 먼저 살펴봅니다. 팀이 함께 지키는 가치, 팀을 나누는 방식, 경력을 키우는 방법, 매일 조율하는 방식, 그리고 결정을 내리고 기억하는 방법입니다. 이 책의 나머지는 모두 이 토대 위에 서 있습니다. 두려움에 차 있거나, 흩어져 있거나, 잘 잊어버리는 조직이 만든 훌륭한 아키텍처는 현실과 부딪히면 살아남지 못합니다.

큰 팀에서는 이 토대가 직관적인 것이 아니라 구조적인 것이 됩니다. 한 방에 있는 여덟 명 사이에서는 자연스럽게 퍼지는 관행도, 전 세계에 흩어진 팔백 명 사이에서는 무너집니다. 그래서 문화를 명시적으로 만들고, 팀의 경계를 의도를 가지고 설계하고, 성장에 대한 기대를 문서로 남기고, 조율을 복도의 대화에서 오래 남는 문서로 옮기고, 결정의 이유가 그 결정을 내린 사람들보다 오래 남도록 결정을 기록해야 합니다.

기업과 정부 조직은 이런 압력을 각각 최대 강도로 느낍니다. 이들은 대규모로, 감사와 감독을 받으며, 긴 시간에 걸쳐, 정규 직원과 계약자와 공급업체가 섞인 채로 일합니다. 오늘 여러분이 만든 시스템이 10년 동안 운영되고, 여러분을 만난 적 없는 사람들이 유지보수할 수도 있습니다. 이런 환경에서 이 부의 토대는 소프트 스킬도, 있으면 좋은 것도 아닙니다. 그것은 조직의 기억과 책임성과 위험 관리를 이루는 기계장치 그 자체입니다.

이 부의 장

  • 1.1 소프트웨어 엔지니어링의 가치: 소프트웨어가 실제로 어떻게 만들어지는지를 좌우하는 공유된 신념과 일상의 행동. 심리적 안전, 비난 없는 학습, 분명한 소유권, 글 쓰는 문화, 지속 가능한 속도를 중심으로 다룹니다.

  • 1.2 팀 토폴로지와 조직 설계: 사람을 팀으로 나누는 방식이 만들 수 있는 소프트웨어를 어떻게 형성하는가(콘웨이의 법칙: 조직은 자신의 의사소통 구조를 닮은 시스템을 만듭니다). 스트림 정렬 팀, 플랫폼 팀, 이네이블링 팀, 복잡한 서브시스템 팀을 사용해 인지 부하를 최소화하고 팀 간 의존성을 줄입니다.

  • 1.3 역할, 커리어 사다리, 성장: 개인 기여자 경로와 관리자 경로가 나란히 있는 명시적이고 보정된 커리어 프레임워크를 만들어, 등급 부여와 승진과 채용과 보상이 대규모에서도 공정하고 일관되며 설명 가능하게 합니다.

  • 1.4 일하는 방식: 팀이 매일 어떻게 조율하고, 계획하고, 전달하는가. 의식보다 원칙을 우선하고, 시간대와 다양한 고용 형태를 가로질러 확장되는 비동기적이고 문서를 먼저 쓰고 성과에 집중하는 관행을 기본으로 삼습니다.

  • 1.5 의사결정과 거버넌스: 포장된 길(paved road), 적정 규모의 리뷰, 되돌릴 수 있는 결정과 없는 결정의 구분, 포트폴리오로서의 기술 부채 관리를 통해 팀의 자율성과 조직의 정렬 사이에서 균형을 잡습니다.

  • 1.6 결정 기록: 결정 기록, 가장 흔하게는 아키텍처 결정 기록(ADR)을 쓰고, 보관하고, 유지하는 방법. 선택의 이유가 인력 교체를 넘어 살아남고 감사를 충족하게 하며, 결정을 찾을 수 있고 심지어 테스트할 수 있게 만드는 방법도 다룹니다.

  • 1.7 엔지니어링 표준과 예외: 조직이 엔지니어링 표준을 어떻게 작성하고, 공개하고, 시행하고, 발전시키는가. 그리고 통제되고 문서화된 예외(waiver) 절차로 일탈을 어떻게 다루어, 표준이 경직되지 않으면서도 신뢰를 유지하게 하는가.

  • 1.8 채용, 면접, 온보딩: 포용적인 인재 탐색, 편향을 줄이는 구조화되고 보정된 면접, 그리고 알아서 헤엄치게 내버려 두는 대신 새 엔지니어가 빠르게 성과를 내고 소속감을 느끼게 하는 진짜 온보딩 계획으로 팀을 의도적으로 만들어 갑니다.

  • 1.9 분산 근무와 원격 근무: 비동기적이고, 글로 남기고, 문서를 먼저 쓰는 협업을 기본으로 삼고, 의도적인 겹침 시간과 인수인계를 설계하고, 근무 시간이나 눈에 보이는 정도가 아니라 성과로 사람을 평가함으로써 여러 지역과 시간대에 걸쳐 운영합니다.

  • 1.10 엔지니어링 효과성과 개발자 생산성: 조작하기 쉬운 단일 숫자 대신 다차원 프레임워크(SPACE와 개발자 경험)를 사용해 엔지니어가 최선의 일을 해낼 수 있는 정도를 측정하고 개선하며, 팀을 느리게 만드는 마찰과 잡무를 제거합니다.

  • 1.11 엔지니어링 관리: 커리어 사다리 자체가 아니라, 엔지니어를 관리하는 기술. 1:1 면담, 피드백, 코칭의 순환, 권한 위임, 인간적인 성과 관리, 그리고 자신의 산출물이 아니라 팀의 승수로서 평가받는 것.

  • 1.12 다양성, 형평성, 포용, 소속감: 차이가 존재하고, 공정하게 대우받고, 적극적으로 포용되고, 자신이 속해 있다고 느끼는 팀을 만듭니다. 포용적인 팀이 더 나은 소프트웨어를 만들기 때문이기도 하고, 그것이 옳은 일이기 때문이기도 합니다. 정직하게 측정하고, 형식적인 구색 맞추기는 하지 않습니다.

  • 1.13 멘토링, 코칭, 지식 공유: 멘토링, 코칭, 후원(sponsorship), 실천 공동체, 사내 발표, 페어링, 가르침으로서의 문서화를 통해 사람을 키우고 전문성을 의도적으로 퍼뜨려, 지식이 어느 개인보다 오래 남고 버스 팩터 위험이 낮게 유지되도록 합니다.

이 장들은 어떻게 서로 연결되는가

이 장들은 하나의 줄기로 이어집니다. 가치는 조직이 무엇을 소중히 여기는지를 정의합니다. 구조와 역할은 누가 일을 하고 어떻게 성장하는지를 정합니다. 일하는 방식은 사람들이 어떻게 조율하는지를 다스립니다. 거버넌스와 결정 기록은 선택 뒤의 이유를 보존합니다. 의존 관계는 이 순서로 흐릅니다. 1.1장의 글 쓰는 문화와 심리적 안전은 1.3장의 정직한 보정, 1.4장의 문서 우선 협업, 1.6장의 오래 남는 결정 기록의 전제 조건입니다. 1.2장에서 설계하는 팀 경계는 1.4장에서 조율을 확장하는 주된 지렛대이며, 1.4장은 더 무거운 프레임워크를 얹기보다 조율의 필요 자체를 줄이는 쪽을 분명히 선호합니다. 1.5장과 1.6장은 의도적인 한 쌍입니다. 앞의 것이 거버넌스의 철학을 정하고, 뒤의 것이 그것을 지속적인 실천으로 바꿉니다.

이 부의 영향은 책 전체에 미칩니다. 1.2장의 팀 토폴로지는 8.4장의 플랫폼 엔지니어링과 9.1장의 신뢰성 소유권을 형성합니다. 여기서 소개하는 결정 기록은 3.1장의 아키텍처 기본부터 10.3장의 자체 개발 대 구매와 조달에 이르기까지, 중요한 선택이 이루어지는 모든 곳에서 되풀이되며, 그 피트니스 함수 보증은 8.1장의 전달 파이프라인으로 이어집니다. 1.1장의 비난 없는 학습은 9.3장의 인시던트 관리를 떠받치고, 이 부 전반에서 확립하는 방어 가능하고 문서화된 의사결정은 10.2장의 위험, 감사, 보증 업무가 바로 의존하는 것입니다. 토대를 제대로 세우면 책의 나머지는 훨씬 적용하기 쉬워집니다.