애자일 학습을 하면서 기존의 방법을 통해 느끼는 대한 안티패턴을 공유해 봅니다.

 

. 회사의 업무처럼 한다.

저는 회사에서 업무를 할 때, 미리 계획을 세우고 진행합니다. 물론 계획이 필요 없다는 것은 아닙니다. 하지만, 상황이 바뀌더라도 기존에는 그 계획대로 하려는 경향이 있었습니다. 애자일 학습에서도 제가 하려는 활동을 잘 하려고 그렇게 했던 경향이 있습니다.

애자일 해지기 위해서는 상황에 대응(adaptation)하기 위해서 협업을 강조하고 피드백을 중요하게 생각합니다. 그러므로, 빠르게 실패하는 것을 권장하며 실패를 통해서 피드백을 받고 배움을 얻는 것을 중요하게 생각합니다. 이를 위해서 같이 하는 사람들과의 회고 및 추가 활동을 통해서 더 배워야 합니다. 지속적이고 의도적인 연습 및 실행을 통해서 성장을 꾀해야 합니다.

그러므로, 애자일 학습을 하는 동안에는  기존에 하던 것과 같은 방법 혹은 그렇게 하지 못해서 그와 완전히 반대로 한다거나 하기 보다는 애자일하게 하던 방법과 하지 않던 방법을 섞어서 하는 것을 좋습니다. 이러한 학습에서도 업무에 어려움을 반영하여 내 실재 문제를 해결하거나, 배운 것을 업무에 적용해 보는 것도 좋습니다.

 

. 혼자 하려고 한다.

새로운 것을 배울 때 저는 우선 관련된 강의나 책을 먼저 찾았습니다. 특히, 책을 읽고 전문성을 높여서 문제를 해결하려고 했습니다.

하지만, 애자일 학습에서는 책만 읽는 것을 것을 권하지는 않습니다. 애자일적인 접근 방법으로 협력을 탐색해야 한다는 측면에서는 자신이 가지고 있지 않은 그것을 얻기 위해 책을 읽는 방법만 있는 것이 아니기 때문입니다. 것을 잘하는 사람을 찾고, 그 활동을 같이 하기도 하고, 같이하면서 배우고, 배운 것을 연습하는 것을 권합니다. 저도 최근에 새롭게 배운 동기 면담의 경우, 다른 분들과 자주 연습하려고 하고 있습니다.

 

. 중요하다는 것의 관점

최근에 코칭을 받고 있습니다. 애자일 학습을 하시는 분들께서 중요하다고 이야기 해주시는 내용 중에 하나입니다. 또한, 본인에게 중요한 문제를 가지고 코칭 받으라고 합니다.

그런데, 이 중요한 문제의 관점이 달라 졌습니다. 제가 느끼는 감정의 문제, 회사 업무에서의 문제들 중에서 여러 고민을 하고 고르고 골라 코칭을 받았습니다. 하지만, 정작 그 코칭을 통해서 어떻게 도움이 될까라는 문제로 돌아가 보면 선정한 문제가 중요한 문제인가에 대해 다시 질문할 수 밖에 없었습니다. 왜냐하면, 이미 코칭 받았던 문제들이 1년 아니 3~4년에 한 번 발생하는 문제 그리고 분기 혹은 많아야 한달에 한번 있을까 말까 하는 문제였거든요.

코칭 내용을 선정하는 가이드 중에서, 시간적 스펙트럼이 매주, 매일, 매시간에 나를 괴롭히고 있는 것이 무엇인지 묻습니다. 문제가 더 중요한 문제일 수 있다는 것입니다. 즉, 내, 수면, 음식, 건강의 문제, 내 평상시의 루틴한 업무와 관련된 문제가 더 중요할 수 있다는 것입니다. 집중력의 문제, 음주로 인한 에너지 문제, 혹은 음식의 자제가 되지 않아 어려운 다이어트 문제, 아침에 일어났을 때의 에너지 문제가 중요할 수도 있다는 것입니다.

 

. 피드백을 구하지 않는다.

애자일 학습을 하면서 멘토링 그리고 코칭의 기회가 많았습니다. 이 것이 자체로 이미 좋은 피드백이지만 애자일의 측면에서 우리가 학습하는 것들에 대해서 피드백을 찾아야 합니다(Feedback-seeking). 물론 기존에 애자일로 업무를 하는 사람들이 많기 때문에 회고를 가지면서 피드백을 찾는 것이 어느 정도 몸에 배어 있어 보입니다. 하지만, 이 피드백을 통해서 Action Plan이 나오고, 이를 추적하여 개선하는 것까지가 피드백 구하기라고 생각됩니다. 최근에 좋은 모임에 대한 번개에 대해서 진행할 , 쌓기 게임을 하였습니다. 우리 팀은 서로 경쟁해 보면서 누가 잘하는지 비교하기 바빴는데, 잘하시는 분들은 팀원들이 다른 사람 하는 것을 관찰하고 피드백 하던 것을 보았습니다. 우리가 업무에 적용해 본다면 어떨까요

사전적인 정의/애자일의 간단한 역사

. 군사 과제 . Waterfall 형식 (불확실성이 작음)

. 90년대 넓어지면서 일반 대중을 위한 소프트웨어 (불확실성이 커짐)

  새로운 소프트웨어 개발 방식. 너무 계획 중심이 아닌, 해보면서 고쳐 나가는 방식.

  경량방법론 주의자 Lightweight methodologist

. 2001년도 만나서 애자일 선언문(Agile Manifesto)

  부터 애자일이 특별한 의미를 가지게 .

 

애자일의 에센서(김창준님의 정리, 실재적 정의)

. 협력(collaboration): 자기 업무 영역을 넘어서의 협력. 불확실성이 높을 때에는 협력을 잘해야 .

  협력을 하면 좋은 일은 곱하기, 나쁜 일은 나누기가 .

  터널 비전(Tunneled vision) ==> 다른 사람들과의 협력이 필요함

. 피드백(feedback)

  내부적인 : 

  외부적인 것을 포함: 내가 만든 것을 다른 사람들이 만들고 의견을 받을 있음.

  내가 것을 보고 배우는 .

  일을 잘하는 사람들의 특징은 피드백 시킹 (Feedback seeking) 능력이 좋다.

 

. 학습

  동양문화 공부=독서라고 정형화해서 생각

  불확실성이 작업을 , 얻어내는

 

참고

https://www.podbbang.com/channels/14757/episodes/22365173

"애자일이 고생한다"
 
현대 산업 개발에서 시공하고 있는 광주 아이파크가 붕괴된 사고가 발생하고 이러한 메시지를 담고 있는 여러 번의 포스팅을 보았다.
 
애자일을 지지하는 입장에서 나도 동어반복을 하고 싶다는 생각이 먼저 들었다. 하지만, 변호 혹은 변명이라는 것이 우리가 해야 하는 일일까?
 
어떤 기사에서는 건설사가 애자일을 인력 효율화를 위해서 사용해서 그렇다고 한다. 또 다른 기사에서는 수십톤의 콘크리트 받침대 구조물을 설치했는데 이를 받치는 임시 지지대를 무단 철거한 것이 원인이라고 추정한다고 한다. 콘크리트 양생 시간을 충분히 해야 하는데, 겨울이고 해서 그렇다는 기사도 보인다.
 
이 사고 이야기를 듣고 가장 먼저 떠오른 것은 김양민 교수의 "불확실을 이기는 전략: 센스메이킹" 책에서 읽었던 챌린저호의 폭발 사건에 대한 것이었다.
 
책에서는 다이엔 본의 "챌린저호 발사결정: 나사의 위험한 기술 문화, 그리고 일탈"이라는 글의 내용을 주로 다룬다.
 
기술적인 결론은 외부 추진용 로켓에는 문제 발생 시 경고를 보내기 위한 센서가 없었으며, 오른쪽 추진용 로켓의 불소고무로 만들어 진 O링이 차가운 온도에 탄력성을 잃어 제 기능을 하지 못해서 폭팔이 발생했다고 한다.
 
하지만, 다이앤 본은 발사를 결정한 것에 대해서 더 집중한다. 놀라운 것은 발사의 결정은 나사의 지극히 '합리적인 근거'로 리스크를 계산하여 내린 판단이라는 것이다.
 
NASA의 의사 결정 구조를 잠시 살펴 보자. 의사 결정자는 대부분 기술자들이고, 조직의 피라미드 밑에서 위로 결정이 이루어지는 방식이었고, 공개된 토론을 통해 결론에 도달한다. 그들의 결정은 일상적으로 되풀이 되고 철저하게 기술적인 것들이라는 것이다. 아주 정상적이고 올바르게 동작할 것처럼 보인다.
 
NASA에서 이러한 의사 결정을 할 때, '수용 가능한 위험'이라고 믿는 기준에 따른다고 한다. 다이엔 본은 여기에 비정상 또는 일탈(deviance)에 너무 익숙해져서 최소한의 안전기준을 충족하지 못하는 상황이 되어도 이상하게 생각하지 않는 일탈의 보편화(Normalization of deviance)과정이 관련되어 있다고 이야기 한다.
 
발사 결정 전에 NASA에서 50번 이상이나 O링과 직간접적으로 연관된 문제를 다뤘다고 한다. 여기에는 실무와 매니저들이 참여해서 리스크가 수용 가능한지 리뷰를 한다고 한다. 실재로 여러 시험 비행을 통해서 O링과 관련된 문제는 수용 가능하다고 결론이 났다. 하지만, 허용 온도가 있었다.
 
문제는 발사 당일의 날씨와 이 문제가 만나서 발생했다고 볼 수 있다. 발사 당일은 허용 날씨 기준에서 벗어난 온도였다고 한다. 이 부분도 실무나 매니저 단에서 놓친 것일까?
 
그렇지 않다. 발사 전날에도 이건은 이슈화가 되었지만, 최종 결정에서는 "우리는 이제 경영상이 결정을 내려야 합니다." 그리고 "이제는 엔지니어의 모자를 벗고 경영자의 모자를 써야할 시간"이라는 말로 발사가 결정되었다고 한다.
 
경영진도, 매니저도, 실무도 모두 올바르게 한 것 같은데 그럼 무엇이 문제였던가? 유명한 물리학자 리차드 파인만도 이 사고 분석에 관련이 있었다고 한다. 그는 관리자들이 치명적 고장 발생 확률이 1/10만이라고 주장했지만, 실무는 1/200이라고 추정한다는 부분을 발견했다고 한다. 즉, 소통 및 이해의 정도에서 차이가 쌓이면서 발생한 것으로 보인다. 김양민 교수의 "불확실을 이기는 전략: 센스메이킹" 책에서의 결론은 소수 의견에 대한 처리 방식에 문제가 있다고 지적한다. 김교수의 책에서는 악마의 변호인을 소수 의견에 대한 처리 방식으로 제안을 하고 있다.
 
다시 돌아와 보자. 우리는 아파트 붕괴 사고에서 자세히 살펴 봐야할 것은 무엇일까? 부실 시공과 같은 기술적인 디테일도 중요하다. 지켜야 하는 건설의 절차와 관련된 프로세스도 중요하겠다. 하지만, 챌린저 호 사건에서 지적되었던 것 처럼 소통의 문제 혹은 우리가 모르는 것에 대한 센스메이킹에 대한 것들과 같은 것도 살펴바야 할 것이다.
이 부분은 애자일을 따르던 기존 방식을 따르던 상관없이 중요한 것이다.
 
나는 애자일에서 회고를 가장 중요하게 본다. 그리고, 특히 빠르게 실패하고 배우자는 모토를 좋아한다. 이미 실종자가 6명인 상태에서 이렇게 이야기 하는 것 차체도 많이 조심스럽다. 하지만, 우리가 여기서 배우지 못한다면 이러한 사고가 반복될 것이고 그것이 더 불행한 상황을 맞으신 분들에게 더 송구한 일이라는 생각이다.
 

개요

이 글은 재미있고, 꽤 알려진 애자일의 법칙들을 모아 놓은 글이다. 사실 이야기를 기존에 알고 있던 것은 콘웨이 법칙 뿐이었고 내용을 들은 것은 "프로젝트가 지연될 때 인력을 추가하면 더 늦어 진다"라는 것인데, 이 것이 맨먼스 미신의 저자인 브룩의 법칙이라고 불리는지 몰랐다. 또한, 다른 법칙들도 통찰이 있는 말들이다. 그래서, 곱씹어 보고 생각도 해볼 만한 내용들이다.

 

글은 [1]에서 가져온 것이다.

 

애자일 법칙: 콘웨이, 브룩, 해크먼, 굿하트, 라만 그리고 파킨슨 법칙

심리학, 조직 설계 또는 소프트웨어 공학의 관찰, 휴리스틱 및 멘탈 모델의 긴 리스트의 분야에서 분산 애자일 팀과 특히 관련이있는 6 가지 "애자일 법칙"을 선정한다. 

콘웨이의 법칙

멜 콘웨이(Mel Conway)는 1968년 그의 논문에서 처음으로 다음과 같이 주장했다.

"(광범위하게 정의된) 시스템을 설계하는 조직은 조직의 커뮤니케이션 구조의 동일한 구조를 가지는 시스템 디자인을 만든다." (출처.)

다시 말해, 두 팀이 응용 프로그램의 일부를 별도로 구축하는 경우 해당 시스템에는 두 가지 구성 요소가 있을 수 있으며 이로 인해 종속성과 추가 통신 오버 헤드가 발생한다.

그것은 항상 도전이었다. 팀이 함께 있으면 커피 또는 워터 쿨러를 통해 비공식적으로 문제를 협상할 수 있다. 분산 된 팀의 경우 기회가 줄어 들고, 추가적인 커뮤니케이션 오버 헤드가 발생하며, 또한 추가적인 원격 회의를 공식적으로 진행해야 한다. 

이 문제를 해결하는 한 가지 방법은 역 콘웨이 작전을 사용하는 것이다. "… 팀이 효과적으로 공동 작업 할 수 있는 능력을 제한하는 사일로를 분해하는 것이 좋다." (또한 참조 : Torbjörn Gyllebring : 리버스 콘웨이-기술자를위한 조직적 해킹)

 

제품 요구 사항에 따라 팀을 설계하고 가치 제안과 조직의 지속 가능성 관점에서 최상의 솔루션을 만들 수있는 자율성을 제공한다는 아이디어는 몇 년 동안 있었다. 

(HBS의 콘웨이 무료 논문 : Exploring the Duality between Product and Organizational Architectures: A Test of the “Mirroring” Hypothesis. )

 

브룩스의 법칙

페더릭 브룩스(Frederick Brooks)는 1975년 저서 "맨먼스 미신(The Mythical Man-Month : Essays on Software Engineering)"에서 “소프트웨어 프로젝트에 인력을 늦게 추가하면 프로젝트가 더 늦어 질 수 있다."라고 했다. 

지금 당면한 도전은 새로 분산된 팀의 생산성이 저하 될 가능성이 있다는 것이다. “원격 작업자 생산성 및 만족도에 대한 보고서의 충돌(Conflicting Reports on Remote Worker Productivity and Contentment.)”을 참조하도록 하자..

주도권을 보여주고, 위기에 맞서 싸우고, 통제력 상실을 극복하기위한 행동으로 편향되어 움직이는 중간 관리자들의 전형적인 반응은 아마도 더 자율적으로 팀이 스스로 조정하고 맡기는 대신에 더 많은 사람들을 신생 프로젝트에 배정하는 것이다.

 

해크먼의 법칙

팀이나 프로젝트에 더 많은 사람을 추가하여 전달 속도를 높이는 것은 또 다른 애자일 법칙 인 해크먼의 법칙과 모순된다 "그룹이 클수록 구성원이 공동 작업을 수행 할 때 직면하는 프로세스 문제가 더 많으며 […] 규모가 커짐에 따라 어려움이 급격히 증가한다.”

원격 근무 상황에서 설상가상으로 통신 오버 헤드 증가로 인한 복합적인 효과가 있다. 따라서 이러한 영향에 대응하기위한 적절한 전략은 정렬되어 있지만 자율적인 작은 애자일 팀과 팀의 팀으로 설계된 조직을 채택하는 것이다.

굿하트의 법칙

1975년 영국 경제학자 찰스 굿하트(Charles Goodhart)는 통화 정책에 대해 글을 썼을 때 자신의 이름을 딴 아이디어를 처음으로 발표했다. 인류 학자 마릴린 스트래선(Marilyn Strathern)은 나중에 이를 다음과 같이 요약했다. "측정이 목표가되면 좋은 측정이되지 않는다.(When a measure becomes a target, it ceases to be a good measure)" (독 노튼(Doc Norton): "그러므로 목표는 더 이상 그럴 것이라 생각하는 바를 의미하지 않는다.(And the target therefore no longer means what you think it does.)")

 

이를 분산된 애자일 팀에 적용하려면 중간 관리자와 조직이 맏닥뜨린 실제 또는 인지된 위기로 돌아가야 한다. 원격 및 종종 비동기식 통신으로 인해 감지된 통제력 상실과 통신 문제에 대해서 가시성을 확보하려는 충동은 더 많은 보고서, 더 많은 지표 및 더 많은 회의와 같이 더 타이트하게 조직을 운영하려는 경향이 있다.

 

다시 말하지만, 불확실한 결과와 함께 거대하고 복잡한 변화 (외부에서 부과 된) 중에 이런 방식으로 과정을 반전하는 것은 적절한 조치의 반대이다. 숙련된 리더가 언급 한 것처럼 복잡성에 대응하기 위해 더 많은 명령 및 제어를 수행하는 것은 동작하지 않는다. (엘리 골드렛(Eli Goldratt) : "당신이 저를 어떻게 측정하는지 말해 주시면 제가 어떻게 행동할지 말씀 드리겠습니다. 당신이 저를 비논리적으로 측정한다면 […] 비논리적 인 행동에 대해 불평하지 마십시오.(Tell me how you measure me and I will tell you how I will behave. If you measure me in an illogical way […] do not complain about illogical behavior.)")

이에 대한 대안은 자율성을 위한 여지을 만들고 사람들에게 신뢰를주는 것이다. "사람들에게 어떻게 일을 하는지 말하지 말고, 무엇을 해야 하는지 말하고, 그들이 당신을 결과에 놀라게 하라.(Don't tell people how to do things, tell them what to do and let them surprise you with their results.)"

(커티스 칼슨(Curtis Carlson): "이제 너무 많은 사람들이 교육과 저렴한 혁신 도구를 이용할 수있는 세상에서(In a world where so many people now have access to education and cheap tools of innovation), 상향식 혁신은 혼란 스럽지만 똑똑한 경향이 있다. 하향식 혁신은 질서 정연하지만 멍청한 경향이 있다.")

라만의 법칙

이제 조직이 유연하면서도 탄력적인 조직 구조를 만드는 데 실패하는 이유가 무엇인지 물어볼 수 있다. 크레이그 라만(Craig Larman)은 그 이유를 다음과 같이 공식화하여 만들었다.

"조직은 중간 및 1차 관리자 와"전문가"직위 및 권력 구조를 현 상태에서 변경하지 않도록 암묵적으로 최적화되어 있다." (출처.)

 

이 관찰은 변화에 대한 시스템 사고 방식을 반영한다. 사람들의 행동을 바꾸려면 먼저 시스템을 변경해야 한다. 기본 시스템을 변경하지 않고 조직의 문화를 변경하려는 시도는 실패한다. 따라서 위기에 대응하기 위해 현재 부과된 변화의 필요성은 단순히 운영 또는 전술적 절차가 아닌 시스템 자체를 목표로 해야한다.

파킨슨의 법칙

애자일 팀에서 시간 제한이 그토록 가치있는 관행 인 이유는 간단하다. "작업은 완료 할 수있는 시간을 채우기 위해 확장된다.(Work expands so as to fill the time available for its completion)" (Parkinson의 법칙.)

복잡한 환경에서 가치 있고 지속 가능하며 수익성이있는 제품을 만들려고 할 때 빠른 피드백 루프가 필수적이다. 구축, 측정, 학습. 출시 전에 너무 오래 기다리거나 완벽을 추구하는 것은 선택 사항이 아니다. 대신 스프린트, 사이클, 반복, 검사 및 적응이 사용되는 실천 사항들의 이름이다. 우리는 시장과 동기화 할 수있을 만큼 빠르게 반복하는 것을 목표로하지만 너무 짧은 스프린트로 너무 많은 오버 헤드를 피하는 것을 목표로 한다.

분산된 애자일 팀의 문제는 출시 루틴이 때로 학습 부분보다 더 가치가 높은 경향이 있다는 것이다. 물론 "학습"은 원격 환경에서 더 어렵지만 불가능하지는 않다. 그러나 불확실성을 해결하기 위한 행동에 대한 편견을 완화하기 위해 출시 부분에 초점을 맞추면서, 우리는 고객을 대신하여 문제를 해결하는 자율팀 팀을 구성하는 것과 반대되는 기능 공장이되는 데 더 가까워지고 있다.

 

애자일 법칙-결론

분산된 애자일 팀으로 일하는 것은 많은 조직에서 기존의 조직, 기술 및 문화적 문제를 증폭한다. 그런 점에서 '애자일 법칙'을 재검토하는 것은 이러한 장애를 해결하는 데 도움이되는 것으로 입증되었다. 아마도 이러한 문제를 유리하게 사용할 수도 있다. 사람들이 말하듯이, "모든 문제는 기회이다.(Every problem is an opportunity.)"

최근에 이러한 애자일 법칙을 경험 한 적이 있는가? 그렇다면 우리와 당신의 의견을 공유부탁한다. 

번역을 마치고...

서두에도 적었지만, 알고 있었지만 출처가 불명확했던 것들도 많이 있다. 이러한 원칙들을 살펴 보는 것은 실재로 조직을 애자일하게 운영하는데 도움이 되는 기본 원리를 이해하는데도 도움이 된다고 볼 수 있다.

 

참고 문헌

[1] 애자일 법칙: 콘웨이, 브룩, 해크먼, 굿하트, 라만 그리고 파킨슨, age-of-product.com/agile-laws-distributed-teams/amp/

들어가며...

아래 글은 Facebook에 썼다가 기억이 나서 블로그에도 옮겨 적어 본다.

 

간한절 협업에 대하여...

오늘 일간 애자일의 글 중 가장 쇼킹한 글[1]. 간헐적 협업. 처음 읽을 때는, 혼자 일 할 때 가장 창의적이 된다라는 이야기로 내 뒷통수를 때리는 글이었다.

 

원본을 봐야겠다 해서 검색하다 찾은 DBR의 글[2]에서는 조금 더 명확하다. 나는 네트워크에서 연결이 중요하다 생각했다. 그렇게 믿고 있었다. 반은 맞고 반은 틀렸다. 글의 실험에서는 '사실 발견'은 연결이 높을 때 결과가 좋다고 한다. 반대로, 솔루션 찾을 때는 과도한 연결이 않좋다고 한다.

 

다이어트에 운동이 좋다는 믿음으로 식단을 무시하거나, 반대로 식단 만으로 운동이 부족해 에너지를 소모하지 않는 몸을 만들면 요요가 찾아온다.

 

갑자기 예전에 TF를 하면서 기술 리더들을 하루에 4~5번 씩 불러 미팅하던 TF 리더가 생각났다. 그 때 나는 그것이 과하다 생각했다. 하지만, 정보가 부족했던 초창기에는 그게 맞았던 것일 수도 있겠다 생각이 봐뀌었다. 아쉬었던 것은 그것에 대한 설명이다.

 

'피드백', 그것이 있었다면, 그 TF 리더도 말해주지 않았을까? 한번 뵙기로 약속은 했는데, 오늘은 날짜라도 확정지어 봐야겠다.

 

참고 문서

[1] 하루 종일 메신저하고 회의해봐야 소용 없다. 제대로 협업하는법, https://m.blog.naver.com/PostView.nhn?blogId=businessinsight&logNo=221994080342&proxyReferer=http:%2F%2Fblog.naver.com%2Fbusinessinsight%2F221994080342&fbclid=IwAR0XGhuXc-Y7Oyj_eS8X4yS5wxQXidkPLY7uDqdoHP_dYAWpXdPIj2x4wMs

[2] 간헐적인 협업 리듭이 더 효율적인 이유, https://dbr.donga.com/article/view/1201/article_no/9349

 

 

자기조직화(Self-Organizing)은 자연 스러운 것이다. 옛말에도 삼인행이면 필유아서헌이라고 했다. 왜 2명도 4명도 아닌 3명이면 선생이 있을까? 2명이면 상호작용이 간단할 것이고 3명이 되면 상호작용이 복잡해 지면서, 자연스럽게 리더가 생긴다는 것으로 이해할 수 있다.

 

그런데, 애자일 방법론에서 왜 자기 조직화를 강조할까? 자연스럽고 효과적인 팀인데? 실재 조직에서는 이와는 다르게 인위적으로 Hierarchy를 만들기 때문에 Self-Organizing과는 괴리가 생길 수 있다. 그렇다면, 어떻게 운영하는 것이 좋을까?

 

마침, 인터넷에서 재미있는 글[1]을 찾아서 번역해 본다.

 

왜 자기 조직화 팀이 나은가?

많은 사람들이 자기조직화 팀의 개념에 대해 혼란스러워합니다. 그들은 무정부 상태와 동일시되거나 자기조직화를 자기 형성(self-forming), 자기주도(self-directed) 또는 자기관리(self-managing)와 혼동합니다. 자기 조직화란 무엇을 의미하며 다른 모든 용어와 어떻게 다른가요?

 

자기 조직화 팀이란 무엇입니까?

자기조직화 팀의 개념부터 시작하겠습니다. 이 용어는 2001년에 발표된 애자일 선언문 뒤에 있는 12 가지 애자일 원칙에 포함되었습니다.

"최고의 아키텍처, 요구 사항 및 디자인은 자기조직화 팀에서 나옵니다."

일부 사람들은 이를 다음과 같이 특성화합니다. 자기조직화  팀은 스스로 작업을 수행하고 프로세스를 관리하며 진행 상황을 모니터링하는 방법을 스스로 결정합니다. 저는 이것은 자기 관리 팀(Self-managed team)이 더 적절한 표현이라고 생각합니다. 저는 그것이 선언문의 저자들이 의미 한 것이라고 생각합니다. 팀의 문제는 "팀을 구성(Organize)하는 방법"이 아니라 "작업 방법(How)"을 파악하는 것이기 때문입니다. 

마찬가지로 가장 최신 Scrum Guide[2]는 "자기조직화 팀"을 6번 언급합니다(2019/01/04에 확인한 결과 2번, Self-Organizing은 4번 언급합니다.). 이 용어가 팀 구성 방법이 아니라 팀이 작업을 수행하는 방법을 의미하고 있음이 분명합니다.

 

애자일과 스크럼에서 자기 조직화의 근원

2001년 애자일 선언문과 스크럼 가이드에서 자기조직화가 언급되었지만 실제로는 두 가지보다 이 용어가 먼저 나왔습니다. "자체 조직화"가 가장 먼저 사용된 곳 Scrum에 영감을 준 1996 년 HBR 기사 인 "The New Product Development Game"[3]으로 거슬러 올라갑니다. 이 기사에서는 자기조직화가 세 가지 주요 특징을 갖는 것으로 설명했습니다.

“그룹은 자율성(Autonomy), 자기 초월성(Self-transcendence) 및 교차 수정(Cross-fertilization)의 세 가지 조건을 보일 때 자기 조직화 능력을 보유합니다. 다양한 신제품 개발 팀에 대한 연구에서 우리는 세 가지 조건을 모두 발견했습니다." 

 

자기조직화 팀의 수준

실제로, 자기 조직화는 온/오프와 같은 이진 개념이 아닙니다. 더 일반적인 구분 방법은 다른 수준의 자기조직화의 구성이 있다는 것입니다.

Richard Hackman은 자신의 저서 인 The Wisdom of Teams(아마도 [4]를 잘못 언급한 것으로 보임) 에서 자기 조직화를 살펴볼 수있는 유용한 프레임 워크를 제공합니다. Hackman은 누가 방향을 제시하는가, 누가 팀 구성원 구성을 디자인하는가, 누가 작업을 모니터링 및 관리하는가, 그리고 누가 실행하는가를 포함하여 팀 감독 및 관리를 위한 4 가지 요소를 살펴 봅니다. 아래 다이어그램에 표시된 것처럼 관리자(Manager) 또는 팀(Team)이 각 작업을 수행하는지에 따라 팀 이름이 다르게 지정됩니다.

Hackman의 프레임워크를 기반으로 작업하는 대부분의 Agile 및 Scrum 팀은 아래의 자체 관리 팀 범주에 속합니다.

 

Hackman의 프레임워크[1]

 

자기조직화 팀과 자기형성(Self-forming)의 약간의 혼동

나는 최근에 자기 조직화라는 용어를 자기형성 팀을 의미하는 것으로 해석 한 고객이있었습니다. 그들은 새로운 문제가 생길 때마다 조직 내 팀이 구성 될 것이라고 생각했습니다. Richard Hackman은 이를 자기설계 팀(Self-designing Team)을 호출합니다.

새로운 문제가 생길 때마다 고객이 자기설계 팀을 구성 할 수는 있지만 어떤 팀이 존재할 것인지 한 번만 결정할 가능성이 높습니다. 일반적으로 경영진은 어떤 팀이 필요하고 누가 팀을 구성 할 것인지 결정합니다.

그러나 관리자가 팀에 할당하지 않고 팀 구성원이 작업 할 팀을 결정할 수 있도록하여 민첩한 전환을 시작하기로 선택한 일부 조직이 있습니다. 권한 부여 및 의사 결정 및 팀 구성원이 그러한 결정을 내릴 수 있도록하는 것입니다.

저는 두 개의 다른 조직에서 팀의 자기형성(Self-forming) 연습을 촉진하는 특권을 가졌습니다. 팀 자체 구성은 개별 팀 구성원이 작업 할 팀을 선택할 수 있는 시점입니다. 이는 일반적으로 필요한 팀 비전과 필요한 작업 로그 및 원하는 팀 수를 설명하고 개별 팀 구성원이 팀을 구성하는 방법을 결정할 수있게하여 수행됩니다.

Ahmad Fahmy는 Bank of America에서 이러한 유형의 운동에 관한 훌륭한 기사[5]를 썼습니다. 벤 코펠 (Ben Kopel)은 시카고 스타트 업 업 테크 (Chicago Startup Uptake)에서 자체 선택 팀화 (self-selection teamification)[6]라고하는 유사한 운동에 관한 기사를 썼습니다. 이것을 볼 대, 아직 혼돈란을 해결하지 못한 것 같습니다.

무정부 상태(Anarchy) 아닌가요? 누가 책임자인가요?

어떤 사람들은 자기조직화가 무정부 상태와 같다고 생각합니다. 그들은 사람들이 실제로 옳은 일을 할 것이라고 믿지 않으며, 상황이 맞다면 그들에게 기대되는 것을 믿지 않습니다.

보다 전통적인 리더는 팀 전체를 다루기보다는 목을 조를 사람(The single throat to choke)[7]을 가지기를 기대합니다. 

제 경험 상 이런 일이 결코 일어나지 않습니다. 팀에는 가이드 레일 위를 달립니다. 우선 순위는 프러덕트 오우너(Product Owner)가 설정합니다. 팀 구성원은 일반적으로 리더십(저는 경영층이나 중간 관리자라는 의미로 이해됩니다)에 의해 선택되며, 일반적으로 애자일 프레임워크 (예 : Scrum 또는 Kanban)도 설정합니다. 무정부 상태가 아닙니다.

 

 

참고문헌

[1] Why Self-Organizing Teams are Better, https://vitalitychicago.com/blog/why-self-organizing-team-are-better/  

[2] The Scrum Guide, https://www.scrumguides.org/docs/scrumguide/v2017/2017-Scrum-Guide-US.pdf#zoom=100

[3] The New Product Development Game, https://hbr.org/1986/01/the-new-new-product-development-game

[4] J. Richard Hackman, "Leading Teams", 2002

[5] How to Form Teams? A Story of Self-Designing Teams, http://www.ahmadfahmy.com/blog/2013/12/5/the-rise-of-the-team

[6] Teamification: Agile Team Self-Selection, https://www.linkedin.com/pulse/teamification-agile-team-self-selection-ben-kopel/

[7] https://vitalitychicago.com/blog/single-throat-choke-agile/

 

개요

애자일 서적 등에서 많이 사용되는 설명 방법 중 비유(Metaphor)가 있다. 가치와 원칙 관련한 글에서도 빙하 비유(Iceburg Metaphor)를 소개하기도 했다. 여기서는 여러 서적에서 사용한 정원 가꾸기 비유 관련 내용을 정리해 보려 한다. 정원사, 정원 가꾸기와 같은 비유는 일상에서 접하기 쉬운 내용을 통해서 애자일 이론을 쉽게 이해할 수 있는 설명 방법이기도 하다. 이러한 비유가 좋은 점 중에 하나는 비유는 그곳에서 이어지는 생각의 타래, 즉 더 깊은 이해로 가는 입구이기 때문이다.

 

창덕궁 후원(Secret Garden of ChangDeokGoong Palace)

 

"XP Explained"에서의 비유

익스트림 프로그래밍(Extream Programming, XP)은 내가 가장 처음 접한 애자일 개발 방법이었다. 짝 프로그래밍(Paired Programming)에 탐복하고 지금도 정말 익스트림(Extream)하게 개발과 배포를 동시에하는 데브옵스(DevOps)와 같은 맥락의 지속 통합(Continous Integration)의 개념을 소개했던 방법론이었다. 무엇 보다도 프로젝트의 일정과 목표도 중요하지만, 개발자 중심으로 관점을 바꾸게 해준 중요한 방법론이었다.

 

XP Explained(한국에는 익스트림 프로그램으로 번역[1])은 Manifesto for agile software development의 초기 서명자 중 한명이면서 JUnit으로도 유명한 Ken Beck이 저자인 책이다. 이 책에서는 운전하는 방법에 대한 비유도 있지만, 내가 처음 보았던 정원 가꾸기 비유가 포함되어 있다. 원본의 일부를 잠시 살펴 보면 다음과 같다.

 

No book of gardening, however complete, makes you a gardener. First you have to garden, then join the community of gardeners, then teach others to garden. Then you are a gardener. So it is with XP. Reading the book won't make you an extreme programmer. That only comes with programming in the extreme style, participating in the community of people who share these values and at least some of your practices sharing what you know with others.

 

애자일 해지기(Being Agile) 위해서는 책에 있는 이론만 한다거나 읽어서만은 안된다는 것이다. 실재로 실행(Practice)도 하고, 다른 애자일 커뮤니티에 참석하고, 애자일 방법론에 대해서 가르치기도 해야 한다. 그래야, 애자일리스트(Agilist)가 될 수 있다.

 

소프트웨어 장인정신에서의 비유

소프트웨어 장인정신[2][3]은 애자일 접근방법 중 개발자들의 역량을 강조하면서 나오는 활동 중에 하나이다. 많은 애자일 방법론에서는 훌륭한 동료들과 일하는 것을 강조하지만, 어떻게 훌륭한 개발자가 되는지에 대해서는 이야기 하고 있지 않다. 소프트웨어 장인[3]에서도 정원가꾸기에 비유가 있다. 여기서는 코드 개발하는 것이 정원 가꾸기와 유사하다고 설명하고 있다.

 

Code is organic, not mechanical. Like a garden, code needs constant maintenance. Look after its soil, Remove weeds, Water it, Remove dead plants, plant new ones, and trim or rearrange existing to make healthy, looking nice and whole. With basic and regular maintenance, the garden will always look great if we neglect it, it will require much more effort to make it look good again. Code is no different. we don’t look after it constantly, the code starts to deteriorate as changes and new features are added. Bad design choices, lack of tests, and poor use of languages and tools will make the code rot faster. Gradually, other parts of the code will also be contaminated up to the point that the whole code base is extremely ill, making it painful and costly to maintain it.

 

소프트웨어 제품을 만들 때, 계속 새로운 기능만 추가 하는 것이 고객을 만족시키는 일이 아닐 것이다. 잡초도 제거하고 물도 주고, 죽은 화초들은 제거하고 새로운 화초를 심기도 해야 한다. 단순히 코드라고 했지만, 소프트웨어 제품으로 본다면 정말 크고 훌륭하게 관리되어 사람들이 돈을 지불하고 관람하는 식물원과 같은 수준을 고려한다면, 어떻게 관리하여야 할지 생각해 볼일이다.

 

맨먼스 미신에서의 비유

맨먼스 미신은 후배의 책장에 꼽혀 있던 책으로 처음 접했다. 어디선가 보았던 제목이지만, 잠시 펼쳐 보았을 때에는 저자의 내공이 느껴지는 오래된 책이었다. 역시 다시 검색해 보니, 1975년의 책이다. 한글판은 번역이 된지는 얼마 되지 않았다. 이 책에 포함된 점진적 개발(Incremental Development)에서는 소프트웨어를 살아있는 생물에 비유 했다. 그래서, 구축(Build)하는 것이 아니고 키우는(Grow)한다고 이야기 하고 있다. 오래된 책이지만, 현재에도 통용될만한 지혜를 전달하고 있다고 할 수 있다.

 

So it must be with our software systems (In other words, software system is similar to complex system such as living things). Some years ago Harlan Mills proposed that any software system should be grown by incremental development. That is, the system should first be made to run, even though it does nothing useful except call the proper set of dummy subprograms. Then, bit by bit it is fleshed out, with the subprograms in turn being developed into actions. 

 

피플웨어에서의 비유

피플웨어[5]에서는 팀 빌딩을을 농업(Argiculture)로 비유 한다.

 

We stopped talking about building teams, and talked instead of growing them. The agricultural image seemed right. Agriculture isn’t entirely controllable. You enrich the soil, you plant seeds, you water according to the latest theory, and you hold your breath. You just might get a crop; you might not. If it all comes up roses, you’ll feel fine, but next year you’ll be sweating it out again. That’s pretty close to how team formation works. 

 

농업에서 전체를 통제하지 못한다. 대신, 근간이 되는 토양을 푸엉하게 하고, 씨를 뿌리고, 이론에 따라 물도 주고 가꾼다. 하지만, 어떻게 될지는 숨죽이고 기다리는 수 밖에 없다. 수확이 있을 때도 있지만, 그렇지 않을 때도 있다. 안되었다고, 실망하고 있을수만은 없다. 왜 그랬는지 고민도 해야 하지만, 결국 다시 시도해 보는 것이 정답일 것이다.

 

매니지먼트 3.0에서의 비유

매니지먼트 3.0[6]에서도 조직관련해서 정원에 비유를 제공하고 있다.

 

. Living systems grow fast in the beginning and then reach a level of maturity. Mature systems don’t need to be looked after as often as the young systems.
. When a garden is not managed, it will simply keep growing but in another direction than what was intended. It’s the same with software systems and teams.
. Many growing systems have a certain life expectancy. They have a tendency to wither away and die.

생명체가 가지는 특징을 소프트웨어 혹은 조직이 유사하게 가진다는 것이다. 처음 태어났을 때, 급격히 성장하고 성숙하게 된다는 것이다. 또한, 관리하지 않으면 원하는 방향으로 발전하지 못한다는 것이다. 생명체와 같이 마지막에는 죽음을 맞이한다는 경향을 설명한다.

 

또한, 개발자와 관리자가 정원사와 같이 해야 하는 활동도 설명하고 있다.

. Seed, feed, and nurture the systems
. Young systems need more care than mature ones.
. 
Weed out everything that draws energy away from our healthy growing systems
When the time has come, we recognize when to replace the old with the new.

정원에 있는 식물의 생명 주기를 알고 시기에 맞는 관리를 해주고, 필요한 교체 시점 또한 파악해야 한다는 것을 이야기 한다.

 

정리하면서...

정원의 비유는 소프트웨어 제품, 소프트웨어 개발 조직에 대해서 이해하기 쉬우면서도 명료하게 특징을 잘 설명해 준다. 하지만, 이 비유만으로 모든 것이 설명되지는 않는다. 기본적으로 애자일 이론들과 더 나아가서는 소프트웨어와 개발 조직이 복잡 시스템(Complex System)임을 이해 해야 한다는 것을 한번 더 깨닫게 한다.

참고 문헌

[1] 익스트림 프로그래밍 (Extreme Programming) - 변화를 포용하라 2판, 켄트 벡,신시아 안드레스 저/ 정지호, 김창준 역, 2006년 7월

[2] Manifesto for Software Craftsmanship, http://manifesto.softwarecraftsmanship.org/#/en

[3] 소프트웨어 장인 프로페셔널리즘, 실용주의, 자부심, 산드로 만쿠소 저 / 권오인 역, 길벗, 2015년 09월 25일

[4] 맨먼스 미신, 프레더릭 브룩스 저 / 강중빈 역, 인사이트(insight), 2015년 03월 23일

[5] 피플웨어 3판, 톰 드마르코, 티모시 리스터 공저 / 박재호, 이해영 공역, 인사이트(insight), 2014년 07월 15일

[6] 매니지먼트 3.0 - 새로운 시대, 애자일 조직을 위한 새로운 리더십, 위르헌 아펄로/조승빈 역, 에이콘출판, 2018년12월 27일

 

Management 3.0[1, 2]은 기존의 경영/관리에 대해서 Agile의 측면에서 지금가지의 이론(Theory)와 실천(Practice)를 제안한다. 여기서 제안하는 Management 1.0은 사람을 부품으로 보고, 효율적인 운용을 위한 방법을 이야기하고 있지만, 창의성을 필요로 하는 업무를 위해서는 적절치 않았다. 2.0에서는 이를 개선하는 제안들이 있었지만, 여전히 1.0을 기반으로 한 것이다. 3.0은 SW 개발과 같은 팀으로 하는 창의적인 작업이 복잡계(Complexity) 혹은 복잡 적응 시스템(Complex Adaptive System, CAS)과 같다는 이론적(Theoredical) 배경을 가지고 어떻게 조직을 운영과 관리할지에 대한 사고 방식 (Midset)이라고 할 수 있다.

 

여기서는 책[2]에 설명되어 있는 Managment 3.0과 관련된 이론들을 정리한 Management 3.0의 System Body of Knowledge (SBOK)에 대해 살펴 보고, 이를 실천하기 위한 Mideset의 모델은 Martie에 대해서 살펴 본다. 책의 구조는 이론(Theory)와 실천(Practice, 책에서는 실용으로 번역하고 있다)을 병립하며 설명하고 있다. 크게 보면 복잡계 그리고 SBOK가 큰 이론(Theory)라고 하면, 나머지 6가지 관점(View)의 모델로 관리하는 방법(Practice)를 제안한다. 그리고는 6개의 관점에서 다시 이론과 실행에 대해서 반복해 가며 이야기 한다. 마치 프랙탈을 따르는 듯이 책이 흘러간다. 

 

System Body of Knowledge (시스템 지식 체계, SBOK)

System Body of Knowledge

위의 그림은 Management 3.0에서 기본이 되는 System의 BOK이다. 즉, SW 개발 시스템을 위의 이론들을가지고 이해할 수 있다는 것이다. 즉, SW 개발팀 혹은 Creative한 업무를 하는 팀의 속성을 이해하는 이론(Theory)라고 할 수 있다.

 

우선 시스템을 받치고 있는 두 다리는 일반 시스템 이론(General System Theory)와 Cybernetics(사비버네틱스, 인공 두뇌학) 그리고 Social Network Theory (사회망 이론)이다. 몸을 차지하고 있는 것은 Chaos Theory (혼돈 이론, 카오스 이론)이다. 팔에는 Game Theory(게임 이론), Dynamic System Theory(동적 시스템 이론) 그리고 Artificial Intelegence (인공 지능)이 자리 잡고 있다. 머리에는 Evolutionary Theory (진화 이론), Cellular Automata(세포 자동자), Dissipative Systems(소산계) 등을 설명하고 있다.

 

위에 이론들은 수학, 물리학, 생물학 등 다양한 분야의 이론들이지만 결국은 복잡계(Complexity System)을 설명합니다. 이는 Software를 계발하는 팀이 Complex Adaptive System(CAS, 복잡적응계)임을 설명하고, 현상들을 설명하게 되는 것입니다.

 

SBOK가 마룬 인형과 같이 깔끔하고 예쁜 형태가 아닌 덕지덕지 붙여 놓은 모습인 이유는 여러 가지 이론 들 때문에 틀리고 비판 받을 부분이 많다는 것을 의미하기도 한다. 하지만, 다행히도 우리가 이해하지 못했던 여러 가지 내용들을 설득력있게 설명한다는 부분이 매력적이다. 다른 말로 하면, 여전히 부족하고 다듬과 발전시켜가야 하지만 '동작하는' 소프트웨어 알파 버전 같다는 것이다.

 

Management 3.0 Model: Martie

Martie: 6 View of Management 3.0

위의 Martie는 Management 3.0의 6가지 측면, 뷰(View)를 설명하는 눈이 6개 달린 귀여운 괴물이다. 현재 버전은 초창기 버전보다는 조금 더 귀엽게 생긴 모습으로 바뀌었습니다. 

 

  • Energize People: 사람들에게 동기부여(Motivation)하기 위한 이론과 실천에 대한 관점.
  • Empower Team: 팀에게 권한을 부여하며 위임(Delegation)을 하기 위한 이론과 실천에 대한 관점.
  • Align Constraint: 팀이 자기 조직화 (Self-organizing)하기 위해 경계(Boundary)를 정하기 위한 이론과 실천에 대한 관점.
  • Develop Competence: 팀원의 역량(Competence)에 대한 이론과 발전 방법에 대한 관점
  • Grow Structure: Functional Team, Cross-functional team에 대한 설명, 계층(Hierarchy) 그리고 네트워크(Network)에 대한 이론과 팀의 구조 발전에 대한 실천.
  • Improve Everything: 변화 관리(Change Management)에 대한 이론과 실천

정리해 보면...

Management 3.0에서는 정말 많은 이론과 실천과 관련된 언급을 하고 있어서 필요한 것을 찾기 쉽지 않다. 그리고, SBOK 혹은 Model에서 볼 수 있 듯이 징그럽게 꿰맨 인형이나 팔이 6개인 괴물과 같아 친숙해 보이지 않을 수 있다. 하지만, 어쩌면 우리가 살아가는 현실에 대한 이해에 대한 상황을 잘 묘사하는 것일 수도 있지 않을까?

 

Management 3.0의 작가는 마지막에 고백한다. 자신이 책에서 이야기 한 것은 틀렸다 라고.

그래도, 배움을 얻었기 때문에 의미가 있다. 즉, 더 이해하려고 해야 한다. 그리고, 행동해야 한다. 왜?

 

Experience without theory is blind, but theory without experience is mere intellectual play

 

임마누엘 칸트가 한말이라고 한다. 우리는 여기서 Exprience를 Practice와 대치해도 큰 문제가 없어 보인다. 즉, 이론 없는 경험은 위태롭고, 경험 없는 이론은 공허하다. 그래서, 애자일을 받치는 2개의 큰 대들보로서, 이론과 실천 병행해야겠다.

References

[1] Management 3.0: The furture of Management and Leadership, https://management30.com/

[2] 매니지먼트 3.0: 새로운 시대, 애자일 조직을위한 새로운 리더십, 위르헌 아펄로 지음, 조승빈 옮김

[4] Martie, https://management30.com/workshops/foundation-workshop/#martie

 

애자일 능숙도 모델 간략 소개

마틴 파울러는 Refactoring으로 유명한 분이다. 그런데, 웹사이트를 운영하며, Agile Software Development에 관해서도 애자일 능숙도 모델(Agile Fluency Model)[1]이라는 재미있는 의견을 내놓았는데, 아래와 같다.

 

 

 

즉, Agile의 능숙도(Fluency)에도 단계가 있다는 것이다. 뒤의 단계가 앞의 단계보다 성숙한 것이라는 것 보다는 팀의 특징에 따라서 적절한 것이 있다는 것이다. 물론 뒤의 단계로 가는 것이 의미는 있지만, 꼭 이득이 있는 것은 아니라는 것이다. 

 

각 단계에 대해서 조금 더 상세히 설명하는 것이 아래 표이다. 익숙한, Scrum, Kanban도 있고, XP, DevOps도 소개 되어 있다. 마지막 Zone인 Strengthening 팀은 아직 명확하지는 않지만 이상향 처럼 보여 진다.

Zone   Benefit  Investment  Learn From  Time to Fluency
Focuing 팀의 업무에 대한 더 큰 가시성; 리디렉션 기능 팀 개발 및 작업 프로세스 설계 Scrum, Kanban, non-technical XP  2-6 months
Delivering 낮은 결함과 높은 생산성 기술 스킬 개발 중 생산성 저하 Extreme Programming, DevOps movement  + 3-24 months
Optimizing 가치가 높은 딜리버리 및 나은 제품 결정 비즈니스 의사 결정과 전문성을 팀으로 옮기는 데 소비되는 사회적 자본 Lean Software Development, Lean Startup, Beyond Budgeting  +1-5 years
Strengthening 팀 간 학습 및 보다 나은 의사 결정.  조직 관리에 대한 새로운 접근법을 개발할 시간과 위험 Organization design and complexity  unknown

 

글에서는 어느 것을 선택하든 능숙도(Fluency)를 심화하고 다음 단계로 갈지 고민해야 한다고 한다. 이 때에는 해당 단계 Zone의 Benefit만 볼 것이 아니라, 투자 해야 하는 Investment도 봐야 한다. 그렇지 않으면, 이것이 부채가 되어 어려움을 만들기 때문이다.

 

References

[1] Agile Fluency Model, https://www.martinfowler.com/articles/agileFluency.html

내가 회사 다니기 시작했을 때, 나의 직속 선배 분이 Software Engineering을 전공한 선배였다. 그 분은 전통적인 Waterfall 방식에서 Analysis와 Design을 강조하였던 것을 기억한다. 그래서, 당시 개발하던 Software도 요구 사항을 분석 하고 설계하는데 대부분의 시간을 투여 하고 구현에는 적은 노력을 투여 하려고 하였다. 하지만, 이러한 방법으로 제품을 개발할 때 성공하기 어려운 점이 많았다. 이후에는 솔루션을 기반으로 제품화를 많이 했지만, 많은 밤샘과 비효율이 많았다. 그러는 와중에도 여러가지 Agile Methodology를 알게 되었고, 효율적으로 일하는 방법으로서 어떻게 이를 활용할지 고민하였다.  


아래 그림은 간략한 Agile Software Development 방법들의 역사[1]에 대해 정리한 것이다. 여기서는 간략한 Agile Software Development 방법론들에 대해서 소개하고 어떻게 나는 이를 활용 혹은 참고해 왔는지 정리해 본다.








eXtreme Programming (XP)

Extreme Programming(XP)은 내가 가장 먼저 알게 된 Agile Software Development 방법론이었다. 이 때에는 Agile이라는 말도 없을 때였다. XP는 극단적으로 개발자 중점이라는 생각이 든다. 그리고, 기존 개발 프로세스가 있는 회사에는 적용하기 어려웠다. 그리고, 실천(Practice)해야 할 것들이 많아서 실행이 쉽지 않다.


아래 그림[2]은 XP에 관해서 검색하면 가장 많이 볼 수 있는 것 중에 하나이고, 가장 XP의 Process를 잘 표현한 그림 중에 하나라고 생각된다. Agile Software Development 의 원칙과 같이 짧은 주기와 반복(Iteration)을 통해서 Software를 개발하는 것을 알 수 있다. 여기서 여러가지 재미있는 용어 들이 나이기 때문에 각각 살펴 본다.






XP의 오리지널 사례에서 요구 되는 엄격함때문에, XP를 채용하는 경우는 더 이상 채용하지 않거나 많은 변형이 일어나는 경우가 많다고 한다[2]. 하지만, XP는 Continuous Integration이나 Test-Driven Development와 같이 개발의 중요한 개념을 탄생시켜 지금까지도 Software 개발에 많은 영향을 끼치고 있다.


가장 첫 번째가 Pair Programming[3]이다. 이는 2명의 프로그래머가 한 개의 컴퓨터를 가지고 한가지 프로그램을 짜는 것을 말한다. 한명은 Driver로 실재로 프로그램을 짜고, 다른 한명은 Navigator로 Driver가 짜는 프로그램에 대해서 질문하고 의견을 제시한다. 때때로 역할을 바꿔가면서 프로그램을 작성한다. 이 방법은 여러 가지 장점을 가지고 있다. 한 명이 작성할 때 보다 실수가 적고, 실력 차가 나는 경우에는 훈련용으로도 좋다. 또한, Code Review가 실시간으로 이루어 진다는 장점도 있을 수 있다.


또 다른 특징 중의 하나가 Unit Testing이다. 사실 XP에서 중요한 개념은 Unit Testing이 아니고, Test-Driven Development(TDD)이다. 이는 초창기 부터 제안되었으며 이제는 Software의 독립적인 화두로 최근까지 논의 되고 있다. 프로그램을 구현하기 전에 Test 부터 작성 하고 실재 구현을 하게 된다. 이는 요구 사항에 대해서 이해를 높이고 Unit Test Case를 확보하게 하여 Software 구조를 좋게 만들어 준다. 하지만, 이러한 실천법이 쉽지 않아서 아직도 많은 사람들이 채용하지는 못하고 있는 것이 현실적이다.


내가 XP관련해서 처음 봤던 책이 Extreme Programming Installed[4] 였던 것으로 기억한다. 실재로 어떻게 XP가 적용되는지에 대해서 잘 설명이 되어 있는 책이다. 이 후 잊고 있다가, 4명 정도의 후배가 생겼던 나에게 과제 진행의 책임이 맡겨졌을 때, 신규 인력들을 역량을 키우면서도 개발을 하려고 해야 하는 쉽지 않은 상황이었다. 이 때, Pair Programming이 생각이 났고, 그 방법을 적용해 볼 수 있었다. 이를 통해서 얻은 가장 큰 장점은 신규 인력들을 트레이닝하는 것이었고 또한 인력들이 할 수 있는 업무량에 대한 예측도 쉬웠다.

Scrum

이 후,  학교에 가서 공부를 하게 되면서 학생 자격으로 Microsoft사에 초대 받아 간적이 있다. 2007년 경으로 기억한다. 이 때, Microsoft도 Scrum을 채용하고 있다는 소개를 받게 되면서 Scrum에 대해서는 처음 알게 되었다. Scrum은 산업계에서 가장 많이 채용되어 사용되는 Agile Software Development 이다[5]. 2018년도 기준으로는 Agile Software Development를 채용한 기업에서 56%가 Scrum을 채용하고 있다고 한다. 이는 개발자로서 이는 기술적인 것 보다는 관리적인 측면에서 이해하기 쉽고 추적하기 쉽기 때문이라고 생각한다.


아래 그림[6]은 여러 Scrum의 흐름도 중에서 Animation 버전이다. Scrum은 Sprint라는 Iteration이 반복되며 Sprint Backlog를 개발한다. 이 때, Daily Scrum을 통해서 매일 Scrum에 포함된 작은 숫자(일반적으로 피자 2판을 먹을 수 있을 정도의 인원)의 팀이 어제 했던 일과 오늘 해야 할일을 점검하면서 Potentially Shippable Product를 만든다. 제일 처음에는 Product에서 개발해야 할 항목을 Product Backlog로 만들고 일부를 Sprint Backlog로 추출해서 1~4주 정도 1번의 Sprint를 돌게 된다. 마지막에는 Sprint마다 회고(Retrospective)를 하게 된다.




Scrum은 나 보다는 후배들이 채용하자고 하였다. 하지만, 휴대폰을 만드는 회사이고 우리 팀의 역할이 휴대폰의 Middleware이기 때문에 신기능을 Scrum으로 개발한다고 하더라도 Scrum이 지속적으로 동작하지 않고 신규 기능을 개발하는 동안에만 동작한다. 그 이후에는 유지 보수(Maintenance)를 해야 하는 과정으로 주로 문제점(Defect)을 수정하는 것이 주요 업무였다. 특히, 여기서 나에게 인상적이었던 것은 Daily Scrum과 Retrospective였다. 이를 통해서 팀의 점진적인 발전을 꾀할 수 있었기 때문이다.

Kanban

팀의 일부 인원들이 Scrum을 채용하면서 문제 되었던 것은 신규 기능 보다는 제품의 유지 보수(Maintenance) 역할을 담당하는 팀의 사기였다. 팀의 많은 인원들이 중에는 신규 기능을 개발하는 경우도 있었지만, 대부분의 업무는 유지 보수를 담당하는 인력들도 있었다. 이 들은 반복적인 업무만 하고 자신들은 발전이 없다는 생각에 많이 빠져 있었다. 이 때, 알게 된 것이 칸반(Kanban)이었다.


Kanban관련해서 처음 접한 자료는 Scrum과 Kanban을 비교한 자료[7]였다. 여기에는 여러 개발 방법론을 아래와 같이 비교 하고 있다. Kanban에서는 다른 방법들과는 달리 3가지만 고려하면 되었다. 그것은 Visualize the workflow와 Limit WIP(Work In Progress) 그리고 Measure and optimize lead time이 있다. 이런 측면에서는 매우 간단한 방법일 수 있다. 하지만, 실재 Kanban은 이렇게 간단하지 않다. 이는 기존 프로세스 없이 새롭게 Kanban을 적용하는 경우에 해당된다고 할 수 있다.




Kanban은 David J. Anderson[8]에 의해서 소개되었다. Anderson은 여러번의 시도를 통해서 기존에 존재하는 프로세스를 개선하는 방법을 고민하였다. 이것을 정리하여 처음 적용한 것이 Microsoft사에서 처음 적용하였다. 이 때에는 Drum-Buffer-Rope방식[9]을 Software 개발 방법에 적용하였다. 그런데, 이 것이 실재로 Toyota 자동차의Kanban과 더 유사하다는 것을 파악하고 이를 Kanban이라 명명하게 되었다. 즉, 기존에 있는 개발 프로세스를 개선해 나가는 방법이 실재 Kanban인 것이다.

Back to basics: Agile Manifesto

앞에서 이야기 한 것 처럼 나는 Kanban을 유지보수 사람들에게 적용하였고, 간헐적 Scrum을 자체 모듈 개발 하는 사람들에게 적용하였다. 또한 이것도 하기 힘들어 하는 사람들에게는 회고와 계획만 진행하게 하면서 조금 더 발전할 수 있도록 선택하게 하였다. 이는 Agile Software Development가 팀의 커뮤니케이션을 증대하고 실질적으로 동작하는 Software 제품을 만들며, 고객과 더 가까이 일하며, 점진적으로 발전해가는 것이라 믿었기 때문이다. 즉, Agile Manifesto[10]가 정말 고민해야 하는 가장 기본이되는 가치(Value)들을 포함하기 때문이다. 정말 재미있는 것은 처음에는 뒤에 항목들만 중요하다는 생각이었다. 하지만, 그것을 틀린 생각이었다. 실재로는 앞에 것도 중요하지만, 뒤에 것이 더 중요하다는 것임을 더 깨닳아 갔다.

  • 공정과 도구보다 개인과 상호작용
  • 포괄적인 문서보다 작동하는 소프트웨어
  • 계약 협상보다 고객과의 협력
  • 계획을 따르기보다 변화에 대응하기를

좀 더 깊게는 Agile Manifesto에서는 원칙(Principle)을 포함하고 있다. 이 12가지 원칙은 적어 놓고 반복적으로 읽어 보며, 여러 가지 판단을 내릴 때 떠올리려서 활용하는 것이 유요하다. 

  • 우리의 최우선 순위는, 가치 있는 소프트웨어를 일찍 그리고 지속적으로 전달해서 고객을 만족시키는 것이다.
  • 비록 개발의 후반부일지라도 요구사항 변경을 환영하라. 애자일 프로세스들은 변화를 활용해 고객의 경쟁력에 도움이 되게 한다.
  • 작동하는 소프트웨어를 자주 전달하라. 두어 주에서 두어 개월의 간격으로 하되 더 짧은 기간을 선호하라.
  • 비즈니스 쪽의 사람들과 개발자들은 프로젝트 전체에 걸쳐 날마다 함께 일해야 한다.
  • 동기가 부여된 개인들 중심으로 프로젝트를 구성하라. 그들이 필요로 하는 환경과 지원을 주고 그들이 일을 끝내리라고 신뢰하라.
  • 개발팀으로, 또 개발팀 내부에서 정보를 전하는 가장 효율적이고 효과적인 방법은 면대면 대화이다.
  • 작동하는 소프트웨어가 진척의 주된 척도이다.
  • 애자일 프로세스들은 지속 가능한 개발을 장려한다. 스폰서, 개발자, 사용자는 일정한 속도를 계속 유지할 수 있어야 한다.
  • 기술적 탁월성과 좋은 설계에 대한 지속적 관심이 기민함을 높인다.
  • 단순성이 -- 안 하는 일의 양을 최대화하는 기술이 -- 필수적이다.
  • 최고의 아키텍처, 요구사항, 설계는 자기 조직적인 팀(Self Organizing Team)에서 창발한다.
  • 팀은 정기적으로 어떻게 더 효과적이 될지 숙고하고, 이에 따라 팀의 행동을 조율하고 조정한다.

예를 들면, 최근에는 "면대면 대화"의 중요성도 많이 깨닳았다. 우리는 전화와 카카오톡과 같은 메신저와 같은 소통 도구의 홍수에 살고 있다. 하지만, 면대면대화와 같이 협업을 증대시키는 도구는 없다. 지속적으로 주기적으로 면대면대화를 통해서 프로젝트의 진전을 가져올 수 있음을 계속 깨닳게 된다. 또한 단순성, 즉 하지 않는 일의 양을 최대화 하는 것도 아이러니 해보이지만, 정말 의미 있는 부분이다. 이를 통해서 팀은 여유를 가지게 되고 좀 더 창의적이거나 프로세스를 개선하는데 이 여유, 여력을 활용할 수 있다.

벌써 몇년에 고민하고 적용하고 있지만, 아직까지도 이 원칙과 가치에 대해서 100% 이해하고 있다고 생각하지 않는다. 아직 접근해 가는 과정이다. 우리는 아직도 성장하고 있는 것이다.

References

[4] Ron Jeffries et al., "Extreme Programming Insalled," Addison-Wesley (번역본 Insight)
[6] Scrum Overview - Anime version, http://scrumprimer.org/anime
[7] Kanban and Scrum - Making the Most of Both, https://www.infoq.com/minibooks/kanban-scrum-minibook
[8] David J. Anderson, "Kanban: Successful Evolutionary Change for Your Technology Business," Blue Hole Press, 2010 
[9] 제프 콕스, 엘리 골드렛, "더 골 The Goal (만화판) - 당신의 목표는 무엇인가?" 동양북스(동양문고)

[10] Manifesto for Agile Software Development, http://agilemanifesto.org/

+ Recent posts