Close

마이너스 속도: 복잡성 한계를 높이는 방법

소프트웨어 팀이 조직의 복잡성을 너무 많이 헤쳐나가고 있다는 신호 및 개선 방법

Andrew Boyagi 얼굴 사진
Andrew Boyagi

선임 에반젤리스트


엔지니어링 조직의 가장 일반적인 목표는 높은 품질의 소프트웨어를 빠르게 제공하는 것입니다.

CIO 또는 CTO의 비전 선언문을 살펴보세요. 아마 그들은 이 목표의 어떤 순열을 추적하고 있을 것입니다. 공동의 목표이긴 하지만 천국에 도달하는 팀과 소프트웨어 제공의 지옥에 갇히는 팀 사이에는 넓은 스펙트럼이 있습니다. 인시던트가 거의 발생하지 않거나 고객에 부정적인 영향을 미치지 않으면서 지속해서 새 코드를 프로덕션에 전달하는 팀도 있고 분기별 릴리스에 대한 어려움을 겪는 팀도 있습니다.

성능 불일치의 원인은 무엇입니까?


소프트웨어 전송의 복잡성은 높은 품질의 소프트웨어를 빠르게 제공하는 것과 그러지 못하는 것 사이의 차이입니다. 매주 릴리스한 후 승리의 종을 울리는 팀과 몇 달 동안 최신 릴리스를 개발했지만 여섯 개의 새로운 버그와 롤백이 발생해서 좌절한 소프트웨어 제공 팀 간의 차이입니다.

스타트업이 신제품 및 새로운 기능을 제공하는 속도 및 품질을 기존 대규모 조직과 비교해 보세요. 예를 들어 금융 업계에서 핀테크 스타트업은 지난 10년간 기존 대형 은행의 시장 점유율을 떨어뜨렸습니다. 대형 은행은 핀테크 스타트업의 경우 보통 규제 감시가 덜하고 관리할 레거시 방식의 모놀리식 애플리케이션 자산 없이 운영하므로 유리한 점이 있어 불공평하다고 언급합니다. 팀 규모가 작을수록 애질리티와 고객 요구에 따라 방향을 전환하는 능력이 높아질 수 있습니다. 기본적으로 핀테크는 기존 은행처럼 복잡하지 않으므로 더 적은 위험으로 더 빠르게 움직일 수 있습니다. 복잡성은 소프트웨어 팀의 속도를 늦출 수 있지만 복잡성이 항상 나쁜 것만은 아닙니다.

글로벌 네트워크
관련 자료

소프트웨어의 무작위 확장을 관리

세 개의 고리 아이콘
솔루션 보기

Compass를 사용하여 구성 요소 관리

소프트웨어 제공의 복잡성


복잡성은 좋은 것일 수 있습니다. 까다로운 문제를 해결하면 엄청난 보람이 있죠. 팀이 도전에 맞서고 어려운 문제를 해결하고 업계를 정반대로 뒤집어 놓도록 동기를 부여합니다. 반대로 복잡성이 더 이상 어려운 문제 해결에 대한 것이 아니라 소프트웨어 팀에 부정적인 영향을 미치는 시점도 있습니다.

조직의 복잡성은 소프트웨어 팀의 효율성을 줄이는 데 핵심 역할을 합니다. 콜린스 영어 사전에서는 복잡성“여러 부분이 복잡하게 연결되거나 관련된 상태”라고 정의합니다. 실질적으로 말하자면 조직 차원의 복잡성은 소프트웨어 팀이 나머지 조직과 인터페이스할 때 탐색해야 하는 정보, 종속성, 변경, 다른 팀, 도구, 요청의 총합입니다.

조직이 복잡하면 까다로운 문제를 해결하는 것보다 조직을 탐색하는 데 더 많은 시간을 소비하게 되므로 당연히 고품질 소프트웨어를 빠른 속도로 제공하기가 더 어렵습니다. 성장하는 조직은 복잡성 한계에 곧 소프트웨어 팀이 도달한다는 사실을 알게 됩니다. 복잡성 한계는 복잡성이 업무 만족도와 만들어지는 소프트웨어의 품질 및 속도에 영향을 미치기 전에 팀이 헤쳐나갈 수 있는 복잡성의 양입니다. 그렇다면 조직의 복잡성을 줄이면 팀이 까다로운 문제를 해결하고 소프트웨어를 더 빠르게, 더 높은 품질로 제공하는 데 집중할 수 있다는 것이 논리적으로 보일 것입니다. 항상 그렇지는 않은 이유를 알아보겠습니다.

복잡성이 소프트웨어 팀에 미치는 영향


마이크로서비스 아키텍처 도입은 복잡성이 소프트웨어 팀에 미치는 영향을 잘 보여줍니다. 복잡성의 정의는 마이크로서비스 아키텍처에 대한 완벽한 설명이기도 하며 “여러 다른 부분이 복잡하게 서로 연결되거나 관련된 상태”라고 정의됩니다. 마이크로서비스를 통해 팀이 독립적으로 움직이고 더 빠르고 안전하게 시스템을 확장할 수 있는 것은 맞습니다. 저는 마이크로서비스를 아주 좋아하지만 상당히 복잡하다는 사실은 부정할 수 없습니다.

마이크로서비스 아키텍처를 채택하는 수년에 걸친 여정에서 Atlassian의 소프트웨어 팀의 효율성을 생각해 보세요.

Atlassian 마이크로서비스 여정을 시작할 때 DORA 메트릭은 훌륭해 보였습니다! 코드 덩어리가 작아서 테스트와 배포가 쉬웠기 때문에 팀이 안전하게, 더 빠르게 움직일 수 있었고 업무 만족도가 높았습니다. 이 단계에서 팀은 마이크로서비스 아키텍처의 기대되는 이점을 누렸습니다. 복잡성은 높아졌지만 팀에 부정적인 영향은 없었습니다.

마이크로서비스 여정의 시작

그림 1. 마이크로서비스 여정의 시작

조직에서 더 많은 구성원이 마이크로서비스 아키텍처의 이점을 감안하여 채택하기 시작했고 자연스럽게 조직의 복잡성이 증가하기 시작했습니다. 자율적인 팀이 많아질수록 공동 작업이 더 많이 필요했고 마이크로서비스가 많을수록 종속성이 많아졌습니다. 변화의 속도도 급상승하며 이 모든 것은 소프트웨어의 무분별한 확장의 조짐이었습니다. 복잡성이 높아지면서 소프트웨어 팀의 효율성 그래프가 평평한 선을 그리기 시작했고 이것은 변경 속도가 떨어지고 인지 부하가 소프트웨어 팀에 문제가 되는 것으로 나타났습니다.

그림 2. 복잡성이 한계에 가까워질수록 평평해지는 팀 효율성

그림 2. 복잡성이 한계에 가까워질수록 평평해지는 팀 효율성

개입이 없는 상황에서 조직은 결국 복잡성 한계에 도달했고 소프트웨어 팀 효율성은 떨어졌습니다. 마이크로서비스 여정 초기에 경험했던 속도, 자율성, 품질의 이점이 역전되어 개발자 만족도가 상당히 떨어졌습니다. 이 신호는 조직이 복잡성 한계에 도달했다는 것을 가리킵니다. 소프트웨어 팀은 복잡한 문제를 해결하는 것보다 조직의 복잡성을 헤쳐나가는 데 더 많은 노력을 기울이게 되어 바람직하지 않습니다.

복잡성 한계에 도달

그림 3. 조직이 복잡성 한계에 도달하면 퇴보하는 팀 효율성

복잡성 한계에 가까워지는지 확인하는 방법


복잡성 한계에 도달하는 것은 어쩔 수 없다고 느껴질 수도 있지만 팀이 한계에 가까워지고 있다는 몇 가지 지표가 있습니다. 설명하기에 앞서 복잡성 한계에 얼마나 가까워졌는지 알려주는 절대적 척도는 없다는 것을 알려드립니다. 하지만 이 메트릭을 통해 복잡성 한계에 얼마나 가까워졌는지 파악할 수 있습니다.

팀이 복잡성 한계에 도달했다는 가장 분명한 지표는 집중해야 할 복잡한 문제를 해결하는 것보다 조직의 복잡성을 탐색하는 데 더 많은 시간을 들일 때입니다. 변경(속도)에 대한 DORA 리드 타임 동향과 변경 실패율(품질) 메트릭을 보면 시간이 지나면서 팀의 속도가 느려지거나 빨라지는 것을 알 수 있습니다. 이 메트릭에 영향을 미치는 다른 요인도 있지만 이 메트릭은 팀 효율성을 나타내는 좋은 지표입니다.

개발자 만족도는 소프트웨어 팀이 조직 차원의 복잡성을 얼마나 헤쳐나가고 있는지 보여주는 또 다른 지표입니다. 다른 어떤 역할보다도 개발자는 까다로운 문제를 해결하는 데 시간을 쓰는 것을 좋아하는 동시에 방해가 되는 불필요한 작업도 싫어합니다. 낮은 개발자 만족도는 조직의 복잡성이 소프트웨어 팀에 문제를 유발하고 있다는 것을 보여주는 좋은 증거입니다.

단순화, 실패하는 전략


팀이 복잡성에 빠져 있다는 것을 깨닫는 회사는 조직의 단순성을 회복하는 것을 목표로 "단순화 프로젝트"를 시작하는 경우가 많습니다. 단순화가 실패하는 전략인 이유로는 두 가지가 있습니다. 복잡성은 조직이 환경을 단순화할 수 있는 속도보다 빠르게 증가하고 "단순화 프로젝트"는 단순화하려는 바로 그 복잡한 환경에서 운영되기 때문입니다.

단순화의 일반적인 출발점은 가능한 경우 애플리케이션을 폐기하거나 통합하여 그 수를 줄이는 것입니다. 애플리케이션을 폐기하려면 팀이 모든 업스트림 및 다운스트림 종속성, 애플리케이션을 누가 사용하는지, 기능을 어떻게 교체하는지, 데이터를 어디에 어떻게 보관 또는 마이그레이션할지 이해하고 이것과 같은 유형의 작업에서 발생하는 여러 복잡한 문제를 처리해야 합니다. 안타깝게도 이렇게 하는 데 필요한 노력을 많이 투자해도 복잡성이 그만큼 크게 줄어들지는 않습니다. 회사가 핵심 비즈니스나 사용자 경험에 영향을 주지 않고 폐기할 수 있는 애플리케이션의 양에는 제한이 있지만 엔지니어가 새로 만들 수 있는 소프트웨어 컴포넌트의 수에는 제한이 없습니다. 애플리케이션 하나를 폐기하는 데 걸리는 12개월 동안 수백 개의 새로운 마이크로서비스가 만들어질 수 있습니다. 건전한 기술 환경은 시간이 지나면서 성장하므로 복잡성을 줄이기 위해 환경에서 고정된 수의 애플리케이션 또는 소프트웨어 컴포넌트만 유지하는 것은 실용적이지 않습니다.

단순화 프로젝트에는 보통 커뮤니케이션 흐름의 복잡성을 없애기 위한 조직 구조 재작업이 포함됩니다. 가장 덜 복잡한 조직 구조는 모든 직원이 같은 위치에 있는 대규모 계층형 팀입니다. 가장 복잡한 조직 구조는 소규모의 분산된 자율적인 팀입니다. 콘웨이의 법칙에 따르면 계층적으로 구성된 대규모 팀은 모놀리식 애플리케이션을 만들 가능성이 높은 반면, 분산된 소규모 팀은 마이크로서비스 같은 모듈식 아키텍처를 사용하여 애플리케이션을 만들 가능성이 높습니다. 높은 품질의 소프트웨어를 빠른 속도로 생산하는 것은 마이크로서비스 아키텍처와 같은 모듈식 아키텍처 패턴에 의해 가능합니다. 즉, 조직 구조가 복잡할수록 성공으로 이어질 가능성이 높습니다. 조직 구조를 "단순화"하면 이해하기는 더 쉬워지지만 단순화 프로젝트의 최종 목표에는 역효과를 낳습니다.

단순화는 중요하고 가치 있는 일이지만 한 번 하고 끝나는 활동이 아니라 소프트웨어 팀(및 팀들의 팀)을 위한 지속적인 개선으로 기본 제공되는 것이 가장 좋습니다. 단순화는 복잡성 한계에 도달하는 것을 지연시킬 수 있지만 스타트업 환경에서 누리는 빠른 속도의 자유를 조직에 회복해 주지는 못합니다.

복잡성 한계 높이기


소프트웨어 팀 효율성에 대한 이야기로 돌아가자면 조직은 복잡성 한계를 높여야 합니다. 복잡성 한계를 높인다는 것은 기본적으로 복잡성이 업무 만족도와 팀이 소프트웨어를 제공하는 품질 및 속도에 영향을 미치기 전에 각 팀이 헤쳐나갈 수 있는 조직 차원의 복잡성을 높이는 것을 의미합니다.

플랫폼 엔지니어링은 조직의 복잡성 한계를 높이는 데 중요한 개념입니다. 강력한 플랫폼 엔지니어링 팀은 일상 업무에서 조직의 복잡성을 추상화하여 소프트웨어 팀의 인지 부하를 줄이는 데 집중합니다. 플랫폼 엔지니어링을 제대로 구현하면 팀이 조직 차원의 복잡성을 헤쳐나가는 데 들이는 시간을 줄이면서 까다로운 문제를 해결하는 데 드는 노력의 균형을 다시 조정할 수 있습니다.

복잡성 한계 높이기

그림 4. 복잡성 한계 높이기

Atlassian이 개발자 경험 플랫폼인 Compass를 만든 것도 바로 이 이유 때문입니다. Compass를 통해 소프트웨어 팀이 컴포넌트 카탈로그, 메트릭 및 성과 기록표로 조직의 복잡성을 쉽게 탐색하고 건전한 엔지니어링 문화를 만드는 데 집중할 수 있도록 하여 복잡성 한계를 높일 수 있습니다. 여기서 중요한 점은 Atlassian 내에서는 조직의 복잡성이 줄어들지 않았다는 것입니다. 실제로 점점 더 많은 조직이 마이크로서비스 아키텍처로 전환하면서 복잡성은 계속 높아졌습니다. Atlassian은 소프트웨어 팀이 그 복잡성을 헤쳐나가는 데 들이는 시간을 줄였으며 단순화 프로젝트와 복잡성 한계를 높이는 것 간의 차이를 볼 수 있습니다.

Atlassian은 10,000명이 넘는 직원과 17,000개 이상의 소프트웨어 컴포넌트를 보유하고 있지만 Atlassian의 소프트웨어 팀은 대체로 스타트업처럼 자유롭게 운영하며 높은 품질의 소프트웨어를 빠르게 제공합니다. 성공의 열쇠는 소프트웨어 팀 효율성을 개선하기 위해 복잡성 한계를 높인 것입니다.

복잡성 한계를 높이기 위한 두 가지 작업은 다음과 같습니다.

  • DORA 메트릭을 추적하고 평가합니다. 팀의 DORA 메트릭은 어떻습니까? 아직 이 메트릭을 추적하고 있지 않으시다면 DORA 메트릭은 Compass와 함께 즉시 사용할 수 있도록 제공됩니다.
  • 개발자 만족도를 이해하고 평가합니다. 개발자는 소프트웨어 팀에 대해 어떻게 생각하고 있습니까? 대부분의 조직에서는 직원 만족도 설문조사를 실시합니다. 개발자 만족도에 대한 인사이트를 확보하기 위해 직무 영역별로 분류한 결과를 물어보세요. 주요 질문에는 다음과 같은 문장에 점수를 매기는 것이 포함됩니다.
    • 나는 제품을 자랑스럽게 제공한다
    • 내 일에서 받는 스트레스는 감당할 수 있는 정도이다
    • 나는 내가 하는 일이 회사 목표에 어떻게 기여하는지 이해한다

또는 Compass에서 CheckOps 리추얼 중에 이 정보를 캡처할 수 있습니다. CheckOps 리추얼에서는 팀이 지난주에 대해 어떻게 생각하는지와 어떤 점을 개선할 수 있는지에 대한 세부 정보를 공유합니다.

복잡성 한계를 높이려면 도구, 프로세스, 리추얼을 함께 사용해야 합니다. Compass와 같은 개발자 경험 플랫폼으로 시스템 상태를 이해하고 종속성을 매핑하고 지속적인 계획을 세울 수 있어 복잡성 한계를 높이고 조직 내 소프트웨어 제공 팀의 잠재력을 발휘할 수 있습니다.

지금 Compass를 무료로 사용해 보세요.

Andrew Boyagi
Andrew Boyagi

Andrew는 Atlassian의 애자일 및 DevOps 팀의 선임 에반젤리스트입니다. 엔터프라이즈 조직에서 소프트웨어 제공 및 운영 모두에 걸친 폭넓은 경험을 쌓은 Andrew는 실제 경험을 바탕으로 팀과 조직이 애자일 DevOps의 이점을 최대화할 수 있는 방법에 대한 실용적인 관점을 제시합니다. Andrew는 또한 호주 최대 금융 기관인 호주 커먼웰스은행 내에 7,000명의 엔지니어를 지원하는 플랫폼 엔지니어링 부서를 세우고 발전시켰습니다. Andrew는 소프트웨어 제공 팀의 잠재력을 활용하는 데 열정을 가지고 최신 기술 환경에서 성공의 핵심 요소는 플랫폼 엔지니어링이라고 믿고 있습니다.

일 외적으로는 세계 10대 오토바이 라이드 중 10개를 모두 타는 것을 목표로 삼고 있습니다. 현재 호주 시드니에서 아내 및 두 자녀와 함께 살고 있습니다.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

Compass 커뮤니티

장애물 극복 일러스트레이션

자습서: 컴포넌트 만들기

맵 일러스트레이션

Compass 무료로 시작하기

DevOps 뉴스레터 신청

Thank you for signing up