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

마틴 파울러는 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/

아래 글은 Agile Coach하시는 분의 웹페이지의 글[1]을 가져다가 번역한 건입니다. 


Agile Software Development의 여러 실천법을 살펴 보았고, Scrum이나 간헐적으로 실행해 보고, 또한 Kanban을 실행해 보았다. 하지만, 큰 조직 내에서 프로세스가 있어고 이에 맞추어 Agile Software Development를 적용하는 것은 쉽지 않다 또한, 처음은 가능하지만, 지속 가능하게 만드는 것은 어렵다. 그래서, 최근에 고민하고 있는 사항은 Agile에 숨어 있는 철학 혹은 핵심이 무엇인가 하는 의문이다. 아래 글은 이와 일맥상통하는 부분이 있어 번역해 본다.


=========

실천, 원리, 가치

나는 결코 애자일 실천법(Recipes)의 팬이 아닙니다. 내가 책을 읽고 적용해봐야하겠다고 생각이 든 것 또한 매우 낮습니다. 제가 수년 동안 발견 한 사실은, 그 책이 필자의 실재 상황과 유사한 상황을 설명하는 경우도 거의 드뭅니다. 그리고, 특정 솔루션은 책에 쓰여져 있는 원래 상황에서도 동일한 방식으로 적용되지 않을 수 있습니다.


이것이 내가 일반적으로 실질적인 조언보다는 보다 추상적인 지식을 찾고 영감을 주는 말로서의 맥락 의존적 조언(context dependent advice)을 다루는 이유입니다.


제가 보기에도 이것은 일반적인 태도는 아닙니다. 저는 애자일 컨퍼런스에서 얼마나 자주 실천법이 포함되지 않았기 때문에 세션이 충분히 실용적이지 못했다는 논쟁을 보아서 놀랍니다. 하지만, 이것은 현상에 지나지 않습니다.


그 근본 원인은 사람들의 일반적인 사고 방식과 접근 방식 때문 입니다. 우리가 온갖 종류의 변화 프로그램(Transformation and Change progmras)을 살펴 볼 때 반복해서 볼 수있는 것입니다.


"사람들은 가장 눈에 잘 띄고 분명하며 종종 제일 중요하지 않은 실천법을 따릅니다."
Jeffrey Pfeffer & Robert Sutton


실천법에 대한 우리의 편견은 이유가 없는 것이 아닙니다. 결국 우리는 성공 사례로만 듣기 때문입니다. Toyota가 자동차 산업에서 선두 자리를 차지하기 위해 무엇을했는지. 애자일 방법론을 채택한 기업의 초기 성공 사례. 이러한 사례에는 많은 실천법이 언급 되고 있었습니다. 결국 이것이 우리가 성공한 조직을 볼 때 처음 보게되는 것입니다.

 

빙산

까다로운 부분은 실천, 기법, 도구 및 방법이 빙산의 일각에 불과하다는 것입니다. 즉 바다를 볼 때 우리에게 눈으로 보이는 것과 정확히 같습니다. 다른 쪽에는 이 보다 10배 큰 부분이 물 아래 있습니다. 수중에 가려진 부분은 이미 거기에 있고 정확하게 물 위에 일부분만 보이는 것입니다.
다시 말해서 눈에 보이는 빙산의 부분을 때어 내어 물에 다시 넣으면 그 결과는 그리 인상적이지 않을 것입니다.
이 메타포는 조직 변화가 일어나는 방식과 매우 관련이 있습니다. 경험 보고(exprience report) 및 성공 사례(success stories)에서 계속 듣게 되는 것은 전체 상황의 일부에 지나지 않는다는 것입니다. 수면 아래에 무엇이 숨겨져 있는지 이해하지 못한다면 보이는 부분을 복사하는 것은 말이 되지 않습니다.


원칙

어떤 실천이든 그것을 넘어서는 것이 원칙입니다. 우리가 시각화(Visualization: Kanban에서 현재 업무 프로세스를 눈에 보이게 만드는 실천법입니다.)에 대해 이야기하고 있다면 우리는 투명성(Transparency)을 제공하고 이를 통해 작업에 대한 이해를 향상시키는 것을 암묵적으로 이야기하고 있는 것입니다. 투명성을 제공하는 것은 실천법이 아닙니다. 그것은 많은 실행에 의해 체화(embodied)될 수있는 원칙인 것입니다.
흥미로운 부분은 원칙은 실천 뒤에 숨어 있지만, 조직에 의해 체화 되어 있는 원칙도 있다는 것입니다. 이 두 가지가 정렬되지 않으면 특정 실천법을 적용해도 동작하지 않습니다.
이야기로 설명해 드리겠습니다. 여러 팀으로 사이에 칸반(Kanban)이 적용되어 있는 회사 안에 소프트웨어 아키텍트 팀이 있었습니다. 그 팀에는 초기 단계였음에도 불구하고 거대한 저항이 있었습니다. 그 이유는 단순히 작업을 시각화하는 것입니다.
복면 뒤에서 일어난 일은 시각화가 제공하는 투명성이 팀에서 일하는 사람들에게 위협이된다는 것입니다. 일의 대부분이 회의, 토론 등에 시간을 할애 할 것이어서 성취를 눈으로 보여주기가 어려운 것들이었습니다. 투명성은 안전 감각에 대한 위협이어서, 저항을 발생시켰습니다.
더 깊은 맥락을 이해하지 못 하면, 도대체 무슨 일이 벌어지고 있는지와 왜 다른 환경에서와 같은 결과가 나오지 않는지 이해할 수 없는 것입니다.


가치

보다 더 깊이 들어가는 부분이 가치입니다. 가치에 관해 이야기 할 때, 일반적으로 바로 떠오르는 한 가지가 있습니다. 여러 종류의 비전과 사명 선언문입니다. 이것은 회사가 집중하는 가치를 찾을 수있는 곳입니다. 더 정확하게 말하자면, 조직이 집중한다고 주장하는 것입니다.

이것의 문제점은 통상 리더와 조직의 사람들의 보여주기식 행동과 실재 일상 행동 사이에 커다란 진정성 차이가 있다는 것입니다.
꽤나 보편적으로 언급되는 한 가지 가치는 품질입니다. 거의 모든 단일 조직은 높은 품질에 관심이 있습니까? 글쎄요, 많은 분들은 적어도 그렇게 말합니다.

이때, 우리가 해볼 수 있는 좋은 질문은 바로, "매일의 행동으로 표현되는 가치가 무엇인가?" 하는 것입니다. 개발자가 유닛 테스트를 작성할 시간이 없이 기능을 구현축해야한다고 이야기를 듣거나, 아무도 빌드가 초록색인지 빨간색인지를 신경 쓰지 않는다면 그 회사의 진정한 가치가 무엇인지 알 수 있을까요?
사실, 보여 주기식 행동은 거의 중요하지 않습니다. 그것은 메시지에 숨어 있는 허위를 간파하는 사람들에게 좌절감만 줄 뿐입니다. 중요한 것은 행동에 의해 설명되는 가치입니다. 많은 경우에, 효용 최적화(Utilization Optimization), 사람 무시(Disrespecting People), 투명성 부족(Lack of Transparency) 등이 이러한 예가 될 수 있습니다.
다시 말하지만, 이것은 우리가 실천법 뒤에 숨어 있는 가치를 찾을 수 있기 때문에 중요합니다. Kanban을 채택한다면, 예로 들자면 Mike Burrows의 "take on Kanban's values"를 채용할 수 있습니다. 흥미로운 질문은 이러한 가치가 조직에서 수용하는 가치와 어떻게 조화를 이루는가하는 것입니다.
도입할 때 영향이 없다면, 그 방법(Method)는 매우 제한적이거나 의미가 없거나 심지어 부정적일 것입니다.


사려깊음

우리가 실천법, 도구 그리고 방법론(Method)을 적용할 때, 가장 최소한으로 지켜야 하는 것은 사려깊게 접근하는 것입니다. 이것은 우리가 사용하고 자 하는 도구에 대한 초기의 심도 깊은 이해뿐 아니라 우라 자신의 조직을 이해하는 것도 포함한다는 의미입니다.
이것은 제가 종종 보아 오는 "그것을 만들기 전까지 꾸며라(fake it till you make it)"과는 상반되는 것입니다. 실재로, 특정 상황에서는 "만드는 것(making it)"이 실재로 불가능할 수도 있습니다. 빙하의 아래 부분에 무엇이 있는지 이해하지 못하면 무엇이 잘못되고 있는지 그리고 왜 우리의 노력이 실패하는지 알 수 없습니다.
원칙과 가치에 집중하는 것은 또한 학습을 가능하게 합니다. 이것 없이 우리는 기존에 알고 있는 도구를 단순히 모사해서 사용합니다. 어떠한 맥락에 어떻게 활용해아 하는지 관계 없이 말이죠. 이는 많은 애자일 코치들이 하고 있는 방법입니다.
사려 깊은 실천법의 적용은 학습으로 이끕니다. 사려 없는 실천법은 맹신(Cargo cult)로 이끕니다.


Reference

[1] Practices, Principles, Values, http://brodzinski.com/2014/08/practices-principles-values.html

+ Recent posts