Accelerate
이 글은 Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations를 번역, 의역, 재구성한 글입니다.
[조직문화를 정의하는 세 가지 요소]
조직문화는 다음과 같은 세 가지 요소로 이루어진다.
(1) 기본 전제(basic assumption)
- 기본 전제란 조직의 구성원이 일련의 활동을 겪고 이해하는 과정에서 자연되는 보이지 않는 요소이자, 오랜 시간 팀에 속해있다 보면 자연스레 인식되는 것들로, 명확히 말로 설명하기 어려운 것들을 의미한다.
(2) 가치(value)
- 가치는 기본 전제에 비해 비교적 눈에 보이는 요소로, 구성원들간에 논의될 수 있는 규범들을 의미한다.
- 가치는 조직원들이 관계, 사건들을 바라보고 해석하는 렌즈의 역할을 하며, 행동의 기준으로 역할한다.
(3) 인공물(artifact)
- 인공물이란 가장 눈에 띄는 요소로, 서면으로 서술된 신조, 기술, 공식적 절차, 행사들을 의미한다.
[세 가지 요소의 특성에 따라 나오는 세 가지의 조직]
사회학자 론 웨스트럼(Ron Westrum)는 복잡하고 위험성이 높은 기술 환경에서 발생하는 사고, 시스템 안전, 인공적 요소들을 연구하여 조직 문화를 세 가지 유형으로 분류했다. 특히, 웨스트럼은 문화의 세 가지 요소 중 '가치' 요소에 집중했다.
(1) 병리적(pathological) 조직
- 병리적 조직은 권력 지향적이며, 두려움과 위협이 만연한 것이 특징인 조직이다. 정보는 특정 구성원들만 독점하거나 정치적인 이유로 공유하지 않으며, 자신의 입지를 강화하기 위해 정보를 왜곡하기도 한다.
(2) 관료적(bureaucratic) 조직
- 관료적 조직은 부서를 보호하는 데에 초점을 맞춘다. 각 부서는 자신의 영역을 유지하고 지키기 위해 노력하며, 자체적인 규칙을 고수하며 모든 일을 부서만의 방식대로 처리하려 한다.
(3) 생산적(generative) 조직
- 생산적 조직은 조직의 목표 및 목적에 초점을 맞추며, "어떻게 하면 목표를 달성할 수 있을까?"를 중심으로 성과를 극대화하는 방향으로 조정된다.
빠르게 변화해야 하고 높은 위험 환경을 마주쳐야 하는 기술 조직에서는, 원활한 정보 흐름이 조직의 효과적이고 안전한 운영을 위해 필수적인 것이다. 그렇기에 기술 조직은 좋은 정보는 무엇인지, 그리고 그 정보를 어떻게 전달할 수 있는 환경을 구축할지 고민해야한다. 조직문화는 조직 내 정보 흐름 방식에 아주 큰 영향을 미치기 때문에, 조직문화에 대한 깊은 고민이 필요하다.
좋은 정보는
(1) 수신자의 질문에 본질적인 해결 방법을 내포한 답을 제공한다.
(2) 적시에 전달된다.
(3) 수신자가 효과적으로 활용할 수 있는 방식으로 제공될 수 있어야 한다.
즉, 이러한 정보들은 리스크를 선제적으로 대처할 수 있게 만드는 역할을 수행하며, 이 역할을 제대로 수행하기 위해 조직원들이 얼마나 빠르게 이 정보를 접근할 수 있느냐에 대한 것이 핵심적인 논의점이 된다. 병리적인 조직이나 관료적인 조직은 이 정보를 개인적인 이해나 우위를 위해 악용하는 경우가 많기 때문에, 조직문화적으로 좋지 않은 영향을 끼치는 경우가 많다.
물론, 관료주의가 반드시 나쁜 것은 아니다. 관료주의의 본래의 목표는 행정적인 활동(administrative behavior)에 규칙을 적용하여 '공정성'을 보장하는 것이다. 즉, 사업적 활동 내에서 누군가 특혜를 받는 등의 불공정이 발생하여 조직의 목표 달성이나 조직 문화에 악영향을 끼치는 경우를 막기 위해서다.
하지만 주객전도가 되어 규칙을 따르기 위해 목표 달성을 포기하는 경우가 빈번하게 발생하는 경우도 발생한다는 점을 주의해야한다. 바로 이 악용 사례가 웨스트럼이 설명한 규칙 지향적인 '관료적 조직'의 정의다. 또한, 미국 연방 정부와 같은 공직이라고 해서 반드시 관료주의적이라고 할 수 없으며, 스타트업이라고 해서 반드시 생산적이라고 칭할 수 없다. 이 세 가지의 분류는 조직이 만든 시스템과 문화적 규범으로 정의되는 것이다.
[정보 흐름이 원활한 조직의 세 가지 특징]
(1) 신뢰와 협력
- 건강한 조직 문화는 조직 전반에 걸쳐 사람들 간의 신뢰와 협력을 기반으로 하며, 따라서 조직 문화 수준은 조직 내부의 협업 및 신뢰도를 반영하는 요소가 됩니다.
(2) 더 나은 의사 결정
- 좋은 조직 문화에서는 더 나은 정보가 의사 결정에 활용될 수 있으며, 잘못된 결정이 내려지더라도 팀이 개방적이고 투명하기 때문에 쉽게 수정할 수 있다.
(3) 문제 해결 능력 향상
- 생산적인 조직 문화에서는 문제나 위험들이 더 빠르게 발견되고 해결된다.
- 이는 직원 관리에서도 긍정적인 영향을 미쳐, 팀이 보다 효과적으로 운영될 수 있도록 돕는다.
[성과가 좋은 기술 조직의 공통점: 팀의 역학]
2015년에 구글은 최고 성과를 내는 팀들의 공통적 요인이 무엇인지를 2년간 연구를 진행했다. 연구진은 개인의 역량과 기술이 고성과 팀의 핵심 요소일 것이라고 예상했지만, 팀원들이 어떻게 상호작용하고, 업무를 구조화하며, 자신의 기여도를 어떻게 인식하는 지가 더 중요하다라는 결과를 발견했다. 즉, 팀의 역학(team dynamics)이 가장 중요한 것이었다.
팀의 역학에서 가장 중요한 부분은 '실패를 어떻게 다루냐'에 있다. 병리적 조직에서는 실패가 발생하면 목을 조를 사람(throat to choke)을 찾으며, 문제의 원인을 찾아서 해결하는 것이 아니라 책임자를 색출하고 처벌하거나 비난하는 것이 목표가 된다.
이와 달리 건강한 조직은 '복잡 적응 시스템(complex adaptive system)'을 갖추어 실패를 대처한다. 건강한 조직은 정보 흐름을 개선하여 모든 구성원들이 좋은 정보를 적시에 받을 수 있도록 하며, 더 나은 도구와 시스템을 도입하여 치명적인 위험이나 오류를 미리 포착할 수 있도록 설계한다. 그렇기에 누구 한 명의 잘못이 되는 것이 아니라, 여러 요인이 얽히며 발생할 수 있다는 점을 인정하고, 문제가 발생하면 누구를 질책하기보다 조직을 더 나은 방향으로 개선시킬 방법을 찾는다.
[조직문화를 변화시키는 본질적인 방법]
"문화 변화를 이루는 방법은 먼저 사람들의 생각을 바꾸는 것이 아니라, 먼저 행동을 바꾸는 것이다. 즉, 사람들이 ‘어떤 일을 하느냐’부터 바꿔야 한다."
"What my experience taught me that was so powerful was that the way to change culture is not to first change how people think, but instead to start by changing how people behave—what they do"
- 존 슈크 (John Shook)
조직문화를 바꾸려면 사람들의 사고방식을 바꾸려하기보다는 행동을 변화시키는 것이 핵심적이다. 어떤 것이 나은 것인지 추상적인 말들보다, 일하는 방식과 규칙을 명확히 하는 실천 방식들이 실제로 조직문화에 영향을 크게 미친다.
[기술 조직의 조직문화를 변화시키는 핵심 원칙: 지속적 전달]
탁월한 기술 조직은 '지속적 전달(Continuous Delivery, CD)를 트징으로 한다. 지속적 전달이란, 모든 종류의 변경 사항(기능 추가, 설정 변경, 버그 수정, 실험 등)을 빠르고 안전하게 지속 가능한 방식으로 프로덕션 환경 또는 사용자에게 제공할 수 있도록 해주는 역량을 의미한다. 지속적 전달의 핵심 원칙은 다음과 같다.
(1) 품질을 내재화한다.
- 문제를 빠르게 탐지하고 즉시 해결할 수 있는 문화와 도구를 구축하는 데 투자하여, 문제로 인한 비용이 적게 드는 조기에 문제를 해결한다.
(2) 작은 단위로 작업한다.
- 목표 시장의 일부 고객에게 먼저 제공하여 빠르게 효과를 확인하여 빠른 비즈니스 성과 창출을 목표로 한다.
- 잘못된 방향이라면 빠르게 수정하여 불필요한 작업을 피하여 즉각적인 피드백 반영이 가능하다.
- 조직에 제로(0) 또는 마이너스(-) 가치를 주는 작업을 방지할 수 있다.
(3) 반복적인 작업은 컴퓨터가, 문제 해결은 사람이 한다.
- 반복적인 작업을 자동화하여 시간을 절약하고, 개발자는 더 높은 가치를 창출하는 문제 해결에 집중할 수 있도록 한다.
- 예시: 자동화된 테스트와 배포 자동화
(4) 지속적으로 개선한다.
- 그들은 개선을 조직의 일상적인 업무로 만들며, 모든 구성원이 개선에 책임을 갖고 참여하는 문화를 조성한다.
(5) 모두가 시스템 전체를 책임진다.
- 시스템 전반의 상태를 투명하게 공유할 수 있도록 한다.
- 관리자는 측정 가능한 목표를 설정하고, 팀이 목표를 달성할 수 있도록 지원하는 역할을 수행한다.
위의 원칙을 수행하려면 다음과 같은 핵심 역량 및 업무 수행이 필요하다.
(1) 버전 관리 활용: 애플리케이션 코드, 시스템 구성, 애플리케이션 구성, 빌드 및 구성 스크립트를 버전 관리 시스템에 저장하고 활용
(2) 포괄적인 테스트 자동화: 신뢰성이 높고, 수정이 쉬우며, 정기적으로 실행되는 자동화 테스트
(3) 배포 자동화(Deployment Automation): 배포 프로세스를 자동화하여 빠르고 안전한 배포 가능
(4) 지속적 통합(Continuous Integration, CI): 작은 변경 사항을 자주 병합하고 자동 테스트를 실행하여 코드 품질 유지
(5) 시프트 레프트 보안(Shifting Left on Security): 보안을 후반부 단계가 아니라 소프트웨어 전달 프로세스의 초반에 통합
(6) 트렁크 기반 개발(Trunk-Based Development): 단기적인 브랜치보다는 지속적으로 통합되는 메인 브랜치(trunk) 중심 개발
(7) 효과적인 테스트 데이터 관리: 테스트 데이터를 체계적으로 관리하여 테스트 품질과 신뢰성을 향상
(8) 느슨하게 결합된 아키텍처 Loosely Coupled Architecture): 독립적인 서비스 운영이 가능하도록 아키텍처 설계를 최적화, 모놀리식(monolithic) 아키텍처보다 변경 사항을 신속하게 배포 가능
(9) 자율적인 팀원: 팀이 최적의 도구를 직접 선택하여 효율성을 극대화할 수 있도록 함
[지속적 전달을 구현하기 위한 핵심 기반: 포괄적인 구성 관리와 지속적 통합]
(1) 포괄적인 구성 관리 (Comprehensive Configuration Management)
- 환경 구성(Environment Configuration)과 소프트웨어 빌드(Build), 테스트(Test), 배포(Deploy)는 모두 완전히 자동화되어야 하며, 이 모든 과정은 버전 관리 시스템(Version Control, VCS) 에 저장된 정보를 기반으로 이루어져야 한다.
- 즉, 환경 변경 및 소프트웨어 변경 사항은 모두 버전 관리 시스템에서 시작되고, 자동화된 프로세스를 통해 적용 되어야 한다. 물론 수동 승인(Manual Approval)의 여지는 남아 있다.
(2) 지속적 통합 (Continuous Integration, CI)
- 개발자들이 작은 단위의 변경 사항을 자주 메인 브랜치에 병합하도록 유도하며, 자동화된 빌드 및 테스트 시스템을 통해 문제가 즉시 탐지되고 수정될 수 있도록 한다.
- CI를 제대로 구현하면, 소프트웨어 통합 비용을 줄이고, 빠르고 안정적인 개발이 가능해진다.
[지속적 전달은 조직의 성과와 문화를 바꾼다.]
지속적 전달은 단순한 기술적 구현을 넘어, 조직의 소프트웨어 전달 성과, 개발 문화, 그리고 전체적인 업무 방식을 혁신하는 접근 방식이다. 연구 결과, 지속적 전달을 성공적으로 도입한 팀은 더 빠르고 안정적으로 소프트웨어를 배포할 수 있을 뿐만 아니라, 개발자 경험 개선, 조직 문화 향상, 그리고 성과 지향적인 환경 조성에도 긍정적인 영향을 미쳤다.
(1) 소프트웨어 전달 성과 향상: 리드 타임 단축, 배포 빈도 증가, 서비스 복구 시간 단축
(2) 배포 부담 감소 및 팀 번아웃 완화: 배포가 대규모 이벤트가 아니라, 일상적인 업무 프로세스의 일부가 되어 배포 관련 스트레스와 실수 가능성이 줄어듦
(3) 개발자 경험 개선 및 조직 문화 강화: 개발자가 문제를 빠르게 감지하고 직접 해결할 수 있는 환경 조성, 품질과 안정성에 대한 책임감 증가 및 조직 전반의 협업과 투명성 향상
(4) 팀의 목표 달성 역량 강화: 프로덕션 환경 또는 최종 사용자에게 언제든 즉시 배포 가능하게 되며, 품질과 배포 가능성에 대한 피드백을 팀 전체가 공유하고, 즉각적인 개선에 집중
지속적 전달은 일회성 프로젝트가 아니라 지속적인 개선과 학습이 필요한 끊임없는 과정이다. 효과적인 버전 관리, 자동화된 테스트, 지속적 통합(CI), 보안 내재화 등의 핵심 역량을 구축하고, 팀이 자율적으로 최적의 도구를 선택할 수 있도록 지원하는 것이 필수적이다.
앞으로 기술과 시장 환경이 더욱 빠르게 변화할수록, 지속적 전달을 기반으로 한 유연한 개발 및 운영 체계는 조직의 경쟁력을 결정하는 중요한 요소가 될 것이다. 이제 지속적 전달을 단순한 목표가 아닌, 조직 성장과 혁신을 위한 핵심 원칙으로 자리 잡도록 해야 할 때다.