»
S
I
D
E
B
A
R
«
스크럼 주의점 몇 개
Jul 23rd, 2014 by Wegra Lee
최근 팀에서 태스크보드를 쓰기 시작하면서 스크럼 용어가 언급되어
몇 가지 중요한 것 당부한 글…
스크럼에서는 기본적으로 ‘개인’은 별 의미가 없습니다. ‘팀’만 생각합니다.
누구 한 사람이 특정 작업을 완료하지 못했어도 결국 팀의 책임입니다.
누군가에게 잡무가 너무 많다면 이를 막거나 줄여주거나 대신 해주어야 하며, 방도가 없다면 어쩔 수 없는 거죠.
기술 문제에 봉착해 있다면 해법이나 길을 알려줘야 합니다.
팀은 공동 운명체..!!
이를 위해선
누가 뭘 하고 있는지, 어떤 문제가 있는지 활발히 공유하고 서로 도와야 합니다.
그 방법으로 태스크보드, 일일 스크럼 회의, 회고 같은 도구 쓰게 됩니다.
태스크보드는 팀의 목표와 진척 현황을 상시로 한 눈에 살펴보고, 목표를 상기하기 위한 도구입니다. 무언가 제대로 안되고 있다면 표가 나겠죠. 일일 스크럼 때 활용하기도 하고요.

보드에 붙이는 업무는 가능하면 (집중했을 때) 4시간 안에 끝낼 수 있는 단위로 나누는 게 좋습니다. 하루하루 지날 때 Done으로 옮기는 포스트잇이 있고 없고가 성취감에 큰 영향을 주기도 하고, 며칠이 지나도 계속 Doing 상태면 다른 이뿐 아니라 자신도 현황 파악이 안되고 목표도 불분명해져 관리가 안 됩니다.

일일 스크럼은 보다 적극적인 상황 공유 수단입니다.
매일 ‘같은 시간’에 ‘모든 팀원’이 모여 각자 다음 ‘세 가지’를 이야기합니다.
  • 어제 한 일
  • 오늘 할 일
  • 봉착한 문제
이중 가장 중요한 것이 봉착한 문제입니다. 모든 팀원은 이 문제를 해결할 방법을 고민하고 알려줘야 합니다. ‘고민, 잘 모르겠는 것, 실수 등을 편하게 털어 놓으면 누군가가 노하우를 알려준다’는 분위기가 형성되지 않으면 서로 벽이 생기고 사람들이 위축됩니다.
회의 시간은 최대 15분으로 제한합니다. 길어질 이슈는 일일 스크럼 후에 담당자만 따로 모여 이야기합니다.
<같은 시간, 15분 이내, 상황 공유>를 통해 다른 회의를 최소화하고 각자 일에 집중할 수 있게 합니다. 따라서 시작 시간이 들쑥날쑥 하거나 회의가 길어지면 효과가 반감됩니다.
회고는 주로 더 큰 관점의 노하우 공유나 제도 개선 방안 등을 논하는 자리입니다. 자아 비판이 아닙니다. 주로 이런 논의가 이루어집니다.
  • 평소 이런 게 좀 잘 안된다고 생각했는데, 이렇게 하면 나아질 것 같다
  • 이번에 이렇게 해봤는데 괜찮았으니 계속 해보자.
  • 이 아이디어는 막상 해보니 처음 생각같은 효과가 없었다. 취소하거나 방식을 바꿔서 다음엔 이렇게 해보자.
[u] [Tip] Rational Team Concert – 작업 항목과 일정 수립
Aug 11th, 2010 by Wegra Lee

[u] Story 의 naming convention 을 Story 방식으로 변경함.

팀 내 Rational Team Concert 적용을 위한 가이드 제작 중 유용한 팁이 있어 공유한다.

RTC 에서 Scrum 템플릿을 사용할 경우, 플래닝에 사용되는 work item 타입은 기본적으로 (범위가 큰 것부터 차례로) Epic, Story, Task, 이렇게 세 가지이다. Scrum에 문외한인 사람들뿐 아니라, Scrum 에 나름 익숙한 사람들도 계획을 잡기에 익숙해지기까지는 제법 많은 난관에 부딪힌다. 이에 내 경험을 바탕으로 나름의 노하우를 정리해보았다. 이 방식을 잘 익히고 따른다면 계획을 잡는데 많은 도움이 되리라 확신한다.

Work Item Hierarchy vs. Iteration Hierarchy

Work Item Hierarchy vs Iteration Hierarchy

  • Epic 은 Release Backlog 이상 레벨에만 존재한다. Product Backlog 는 당연히 이에 해당되며, Sprint(Iteration) Backlog 에 나타나면 안된다.
  • Story 는 Sprint Backlog 에 할당된다.
  • Story 가 한 Sprint 에 끝낼 수 없을만큼 크다면 타입을 Epic 으로 변경한다.
  • 반대로, Epic 이 한 Sprint 에 끝날 수 있을만큼 작다면 Story 로 변경한다.
  • Task 는 당연히 Sprint Backlog 에 할당된다.

덤으로..

  • Epic/Story 에는 owner 를 할당하지 않는다. (Task 에만 owner 를 할당하라.)
  • Task 의 크기는 4시간 이내가 적당하다. (이를 초과하면 두 개 이상의 더 작은 Task 로 분할하라.)
  • Task 밑에 하위 Task 가 존재할 수 없다.

Work Item Hierarchy and Progress

Work Item Hierarchy and Progress

  • Backlog 진척도 = Backlog 안의 모든 Story 들의 Story Point 총합.
  • Epic 진척도 = 모든 하위 Story 들의 Story Point 총합.
  • Story 진척도 = 모든 하위 Task 들의 작업 시간 총합.

추가로..

  • Story Point 는 Release Burndown 차트 생성의 기초 자료가 된다.
  • 작업 시간은 Sprint Burndown 차트 생성의 기초 자료가 된다.

Work Item Naming Conventions

Work Item Naming Conventions

  • Epic: 고수준 요구사항 – ‘명사’ 혹은 ‘명사구’.
  • Story: 저수준 요구사항 – ‘주어 + { MUST | SHOULD | MAY } + be able to..’.
  • Task: 명령문 – ‘동사 + 목적어’.

스크럼이나 유사 Agile 방식에 익숙하지 않다면 Story 의 naming 이 생소할 수 있다. 생각해보면 간단하다. ‘고객/사용자가 이 제품(Product)으로 무엇을 할 수 있다.’ 의 형태이다. Story 를 이렇게 작성할 때 얻게되는 대표적인 이점은 아래와 같다.

  1. 사용자와 고객의 관점에서 요구사항이 정리되므로, 커뮤니케이션 로드와 오해를 최소화시킨다.
  2. 개발자에게는 구현 목적을 명확히 해준다. (이 기능이 고객에게 어떤 가치를 제공하는지 쉽게 알 수 있다.)
  3. 고객에게 불필요한 요구사항이 포함되는 것을 최소화시킨다. (주로 엔지니어의 흥미나 욕심이 반영될 경우 발생한다.)
  4. Story 그대로 사용자 테스트 항목이 되고 데모 시나리오가 된다.

혹 스크럼 형태의 Story 네이밍에 익숙하지 않다면 아래와 같은 방식도 시도해볼 수 있다. 하지만 처음 러닝 커브는 작을 지라도, 경험상 정통 스토리 방식이 더욱 효과적이다.

  • Story: 저수준 요구사항 – ‘주어 + { MUST | SHOULD | MAY } + 동사 + 목적어’.
Rational Team Concert 적용 일지
Mar 15th, 2010 by Wegra Lee

새로 옮긴 팀에 Rational Team Concert [1] (이하 RTC) 를 적용하기 위해 노력 중이다. 지난 팀에서는 이러저런 이유들로 보수적인 성향이 너무 강해 중도 포기했었지만, 지금의 팀은 가능성이 높아 보인다. 특정 툴을 적용하다는 것이 중요한 것이 아니라 적절한 인프라를 구축하여 팀의 협업 능력을 극대화시킨다는데 목적이 있고, 현 시점에서 가장 훌륭한 툴이 Rational Team Concert 라 판단되어 진행중이다[2].

최근엔 지난 팀에서 RTC 를 전파할 때 한꺼번에 너무 많은 것을 이해시키려 한 경향이 컸었다는 생각이 든다. 따라올 수 있는 사람들은 따라왔지만, 제법 많은 사람들은 너무 많은 변화에 기겁을 하고 섵불리 도전하지 못했을 수도 있다. 여기에는 RTC 의 다양한 기능뿐 아니라 방법론과 사상도 포함된다. 예를 들어, 기본적인 개발 방법론에도 익숙치 않은 사람들에게 애자일이니 스크럼이니 하는 이야기까지 짧은 시간에 전파하려 한 것은 좋지 않은 시도였던듯 싶다.

그래서 이번엔 이런 이질적인 내용을 최소화하는 방법을 채택해보기로 하였다. 팀에서 업무를 진행하며 이루어지는 실제 활동들을 use case 로 잡아, RTC 를 사용했을 때의 모습을 긴 시간에 걸쳐 조금씩 보여주려 한다. 현재 잡아놓은 use case 들은 아래와 같다.

  • MBO 관리
    • 그룹장의 MBO 에서 각 사원의 세부 task 까지 한 눈에 확인 가능.
    • 자신이 하고 있는 일이 팀의 어떤 목표와 관련되어 있는지 항시 인지할 수 있다.
  • 주간 보고 (Weekly Meeting)
    • Scrum 의 Sprint 주기를 1주로 하면 현행 주간 보고 시스템과 차이가 최소화된다.
    • 현 시스템을 대체하는 것으로 시작해 진입 장벽을 낮추고, 차차 개선시킨다.
    • 현 주간 보고 방식에 비해 context-awareness 가 월등히 높다.
  • 일일 작업 관리 (개발자 관점)
    • 개발자 관점에서 매일매일 자신의 task 를 효율적으로 관리하는 방법을 보여준다.
  • 일일 작업 관리 (리더 관점)
    • 리더 관점에서 팀의 업무 진행 상황을 빠르게 파악하여, 부하 분산, 우선 순위 조정, 이슈의 빠른 해결 등을 도와주는 방법을 보여준다.
  • 실시간 리포팅 (Work Load, Progress, Risk, Open Issues and Defects, ..)
    • 팀원과 리더뿐 아니라  모든 stake holder 들이 별도의 보고 요청 없이 실시간으로 과제의 진행사항을 파악할 수 있는 방법을 다룬다.
  • Review & Planning & Retrospective
    • RTC 활용으로 정보 공유가 원활해지므로, weekly meeting 을 현행 주단위 업무 보고 성격에서 스크럼 형태의 효율적 회의로 변화시킨다.
    • 이 과정에서 회고 (retrospective) 의 중요성을 강조한다.
  • 요구사항부터 구체적 기능 태스크, 구현, 빌드, 검증까지..
    • 태스크와 그 구현에 따른 코드 변경, 빌드, 테스트, 결함 등록, 수정 완료 에 이르는 과정을 데모를 통해 보여준다.

기본적인 활용에 익숙해지면 여러 동영상 자료들도 활용해 볼까 생각중이다.


References

  1. IBM Rational Team Concert (jazz.net)
  2. Choose Right Tools for Efficient Collaboration (wegra.org)
명시적 공정 제어 모델과 경험주의적 공정 제어 모델
Mar 8th, 2010 by Wegra Lee

거의 아무런 정보도 없이 이제 시작하는 프로젝트에 대해 일정을 내놓으라는 이야기를 너무 많이 들어왔고, 그 때마다 신뢰 구간 -50% ~ + 300% 의 일정이 그렇게 중요하냐고 묻으며 항의해보았다. 돌아오는 답변은, ‘그래도 일정은 필요하지 않느냐?’ 정도.. -_-a 결국 ‘일정을 위한 일정’ 만들기를 하게 된다.

어쩔 수 없이 일정을 내어주며, ‘이것은 신뢰성 10% 에요’ 라고 강조해보지만 절대 귀담아 듣지 않는다. 그 일정을 기준으로 종속된 모듈/기능 등을 고려한 전체 일정이 산출되고 임원들에게까지 보고된다. 그리고 기획과 마케팅 부서 역시 이를 기준으로 상품화 일정과 마케팅 일정을 등을 잡아 놓는다.

조금만 지나면 ‘신뢰성 10%’ 일정은 부메랑이 되어 개발자들을 옭아매기 시작한다. 진행중 (예외 없이) 예상치 못했던 문제들이 붉어져 나와도 ‘이미 윗선에 보고가 되어 있고 다른 부서들이 그에 맞춰 움직이고 있기 때문에 어쩔 수 없다. 무슨 수를 써서라도 이 때 끝내야 한다’는 식이다.

중간 관리자 몇 명만 설득해서 될 일은 아니다. 그들 대부분도 스스로를 피해자라 생각하고 있다. (틀린 말은 아니지만, 그들 중 윗사람들의 인식을 바꿔보려고 노력하는 사람은 단 한 명도 만나보지 못했다. 아쉽다.) 그래서 적어도 임원들까지는 제대로된 소프트웨어 개발 모델을 이해시킬 필요가 있다.

하지만 권위도 없고 직급도 낮은 사람들이 아무리 떠들어봐야 먹힐리 만무하다 (당장 바로 윗사람도 귀담아 듣지 않는데 -_-a). 책 좀 보라고 던져 주는 것도 아닌 듯 싶고.. 이런저런 생각을 해보다 우선 참조하기 좋은 블로그에 괜찮은 글을 하나 발췌해 놓기로 했다.

이 글은 스크럼 : 팀의 생산성을 극대화시키는 애자일 방법론 [1] (원서: Agile Software Development with Scrum [2]) 에서 발췌한 내용이다. 2장 ‘스크럼 준비 – 스크럼은 다르다’ 중 프로세스 제어 모델에 대한 블록으로, 저자가 왜 전통적인 프로세스들이 계속 실패하는지에 대한 통찰을 얻게된 계기를 이야기한 부분이다.

나는 1990년대 초반에 MATE라고 불리는 프로세스 관리 제품을 개발하고 라이선스하던 소프트웨어 업체를 운영했다. 우리의 최대 고객은 쿠퍼스 & 라이브랜드와 IBM 이었는데, 그들은 우리가 그들의 방법론을 사용해서 MATE를 개발하기를 원했다. 몇 차례 시도하긴 했으나 그 결과는 전적으로 불만족스러웠다. 당시, 우리 회사의 요구사항은 끊임없이 변하고 있었고 우리는 계속 신기술들을 도입하로 있었는데, 그 방법론은 우리를 도와주기는커녕 오히려 장애물을 만들고 유연성을 떨어뜨리는 등 마치 우리의 발목을 잡는 것과 같았다.

나는 왜 우리 고객들의 방법론이 우리 회사에는 효과가 없는지를 알고 싶었다. 그래서 1995년, 듀폰 연구소의 공정 제어 이론 전문가에게 시스템 개발 방법론에 대한 자문을 구했다. 바바툰데 ‘툰데’ 오거나이케(Babatunde ‘Tunde’ Ogannaike) 박사가 이끄는 전문가들은 산업 공정 제어 분야(industrial process control)에서 가장 존경 받는 이론가들이었다. 그들은 공정 제어에 대해 속속들이 알고 있었다. 심지어 연구자들의 일부는 유명 대학들에서 해당 주제에 대한 강연을 하기도 했다. 그들 모두가 시장 예측에서부터 제품 주문과 배달에 이르기까지 듀폰의 제품 생산 전 공정을 자동화하는데 관여하고 있었다.

듀폰의 연구자들에게 우리의 시스템 개발 프로세들을 살펴보도록 한 것은 듀폰의 연구자들에게 엄청난 우스갯거리를 선사한 거나 마찬가지였다. 그들은 우리 시스템 개발 산업이 전적으로 부적절한 공정 제어 모델에 따라 개발을 하고 있다는 사실에 깜짝 놀랐고 매우 의아해 했다. 듀폰의 연구자들은 시스템 개발이 너무 복잡하고 예측하기 힘들기 때문에, ‘경험주의적’이라고 부르는 다른 공정 제어 모델을 사용해야 한다고 말했다. 그들은 내가 왜 올바르지 못한 길로 가고 있는지를 이해시키기 위해서, “프로세스 역학, 모델링과 제어(Process Dynamics, Modeling and Control)” 라는 산업 공정 제어 이론의 필독서를 권했다.

간단히 말하자면 공정 제어에는 두 가지 주요 접근법이 있다. 하나는 ‘명시적인(defined)’ 공정 제어 모델로서 작업자들이 작업의 모든 부분을 완전히 이해해야 하는 것이다. 사전에 잘 정의된 일련의 입력들이 주어지면 매번 동일한 결과물이 산출된다. 명시적인 프로세는 완료 시점마다 매번 동일한 결과물을 내놓는 경우에 적용 가능하다. 툰데 박사는 내가 그에게 보여준 방법론들이 앞서 설명한 명시적인 프로세스를 사용하려고 했지만, 어느 프로세스나 태스크도 반복 가능하며 예측 가능할 정도로 충분히 명시되어 있지 않다고 말했다. 또한 그는 우리 산업이 명시적인 접근법을 쓰기에는 너무 많은 사고와 창조성을 요구하는 지식 집약적인 사업이라고 했다 툰데 박사는 우리 산업이 명시적인 방법론을 사용할 경우, 통제력 상실과 불완전한(혹은 잘못된) 제품 생산을 초래할 것이라는 사실을 이론적으로 증명해 보였다. 그럼에도 우리 분야의 여러 태스크들이 마치 시작과 종료가 예측 가능하기라도 한 듯이 명시적인 공법 프로세스처럼 서로 종속적으로 연결되어 있다는 점을 놀라워했다.

한편, 툰데 박사는 불확실성을 기반으로 하는 경험주의적인 공정 제어 모델에 대해서도 설명해 주었다. 경험주의 모델은 불완전하게 정의되어 예상 못한 결과를 만들어내는 프로세스를 빈번하게 검사하고 적응하는 방식을 통해 프로젝트를 제어하는 방법을 제공한다. 그는 내게 이 모델을 연구해서 시스템 개발 프로세스에 적용해볼 것을 권유했다.

듀폰 연구소 방문 기간 동안 나는 이 문제에 대한 진정한 통찰을 얻었다. 갑자기 내 안의 무엇인가가 번뜩이더니, 왜 우리 산업의 모든 사람이 시스템을 구축하는 데 그런 문제를 겪는지를 알게 되었다. 즉, 왜 우리 산업이 그런 곤경에 처했고, 형편없는 명성을 갖게 되었는지를 깨달은 것이다. 우리에게 필요한 것은 빈번하고 직접적인 테스트와 그에 뒤이은 즉각적인 수정임에도 불구하고 우리는 마치 조립 라인에서 일하는 것처럼 업무를 처리하는데 시간을 낭비하고 있었던 것이다.

경험주의적 공정 제어 모델은 애자일 측에서 목에 핏대가 서도록 강조하는 것들이다. 빈번한 검사와 즉각적인 적응 과정. 이를 위해 항시 동작 가능한 제품을 만들고 고객과 직접 ‘이것이 원하는 것이 맞는가?’를 확인하고 조정하는 것이다.

전통적인 프로세스에서도 이를 간과하고 있지는 않다. 다만 그 중요성을 제대로 인지하지 못하고 충분히 강조하지 못하고 있었다고 말할 수 있겠다. 그리고 안타깝게도 내가 만나본 SE 전공자들 대부분은 스스로도 깨닫지 못하고 있어 잘못된 사상과 프로세스를 전파하고 강요하고 있었다.


References

  1. 스크럼: 팀의 생산성을 극대화시키는 애자일 방법론 (켄 슈와버, 바이클 비들 | 박일, 김기웅 | 인사이트)
  2. Agile Software Development with Scrum (Ken Schwaber, Mike Beedle | Pearson Education, Inc)
[updated] 직접보기.. 혁신을 이끌어내는 방법
Feb 2nd, 2010 by Wegra Lee

쉬어가기.. 혁신을 이끌어내는 방법 [1]‘ 에서는 개발자들에게 쉬어갈 수 있는 시간을 제공함으로써 창의와 혁신을 이끌어는내는 이야기를 해보았다. 이번에는 ‘직접보기’라는 주제로 비슷한 이야기를 해보려 한다.

‘직접보기’ 가 필요한 이유는 아래의 그림을 보고 생각해보자. 이 그림이 말하고자 하는 원목적은 완전히 동일하진 않지만, 실물을 보지 않고 커뮤니케이션 했을 때의 문제를 효과적으로 말해주고 있다.

정리하면 고객이 원하는 것을 각 사람/조직마다 다르게 이해하고 있으며 심지어 고객 스스로도 자신이 무엇을 필요로 하는지 알지 못한다 것이다.

시장 조사를 토대로 고객의 needs 를 모두 만족시킨 제품의 출시 후 반응이 그리 좋지 않은 수많은 사례들을 잘 설명할 수 있는 논리이기도 하다.

혁신적인 제품을 잘 만들어내기로 유명한 애플(Apple)사의 경우, 신제품을 만들 때 시장 조사를 아얘 하지 않는 것으로도 유명하다(You Can’t Innovate Like Apple [2]). 시장에 존재하지 않는 제품에 대해 물어봐야 가치 있는 대답을 구하기 어렵기 때문이다. 대신 스스로 계속해서 실제품 수준의 프로토타입을 수없이 만들어보면서 직접 만져보고 써보며 자신들이 정말 이 제품을 원하는가를 판단한다. 그 결과 애플의 제품들은 종종 시장에서 당연히 필요하다고 생각하는 기능이 빠지기도 하고 이미 더 나은 제품들이 수두룩한데~ 라고 평가절하되곤 한다.

이미 만들어진 제품에 대해서는 다르다. 직접 사용해본 사용자들의 피드백은 소중하다. 애플 리테일 스토어가 중요한 역할을 수행하는데, 리테일 스토어의 직원들은 고객이 와서 들려준 이야기들을 놓치지 않고 본사로 보고하게 되어 있다. 그래서 스티브 잡스는 아이디어 도둑(유명 마케터 이해선 대표의 메시지 [3])이라는 말이 나오기까지 했다.

고객의 소리를 듣는 방식에 있어 두 경우가 다르다고 이야기했지만, 사실 그 원리는 동일하다. 바로 제품을 직접 만져보고 사용해본 사람들의 소리를 듣는다는 것이다.

이는 사실 애자일, 전통 할 것 없이 거의 모든 소프트웨어 개발 방법론에 중요하게 다루는 주제이고, 결론 또한 항시 동일하다. 짧은 반복 주기로 매 주기마다 동작 가능한 제품을 내놓고, 이를 고객에게 보여주고 피드백을 받는다. ‘당신이 말한 것을 우리는 이렇게 이해했는데, 이것이 정말 당신이 원했던 것이오?’ 를 확인하는 가장 중요한 절차인 것이다. 진정 공존을 원한다면 이 과정에서 쓸데없는 과장과 화려한 프리젠테이션은 없어져야 한다. 그리고 프로젝트 진행에 관련된 주요 인력들이 다 참석하는 것이 좋다. 고객, 프로젝트 리더, 영업 담당자, 주요 개발자들 등이 포함된다. 이들이 자주 모여 현실을 냉정하게 보고 허물없는 이야기를 하다보면 다음과 같은 반응들을 심심치 않게 목격할 수 있을 것이다.

  1. 내가 말했던 건 이게 아니었어요. 이러저런 모습을 상상했었는데요. 다음 릴리즈땐 이렇게 고쳐봐주세요.
  2. 내가 의도했던게 이게 맞긴 한데.. 직접 써보니 좀 이상하군요. 다른 아이디어가 있을까요?
  3. 이 부분은 제 생각과 다르긴 하지만.. 솔직히 지금이 더 좋아 보이는군요. 이대로 갑시다.

직접 보기는 서로의 생각을 확인하고 공유할 수 있는 가장 좋은 방법이며, 다음 방향을 결정짓기 위한 논의를 시작하기 위한 믿음직한 베이스가 되어준다.

또한 개발자들에게는 자신들의 창의력과 열정을 어필할 수 있는 절호의 기회가 되기도 한다. 직접 구현하면서 가장 먼저 써보게 되는 개발자들은 가장 빠르게 피드백을 줄 수 있는 훌륭한 고객인 셈이다. 이해한 요구사항대로 구현했을 시 불편한 부분이 있거나 더 나은 안이 떠오르면 릴리즈 전에 그 아이디어를 정리해두자. 가능하다면 직접 구현해서 보여주는 것이 가장 좋다. 직접 사용해본 고객과 말이나 문서 정도로만 본 고객은 확연히 다른 반응을 보인다.

이런식으로 개발자들의 능력을 인정받고 발언권을 강화해두는 것이 조직 전체의 커뮤니케이션과 생산성 향상, 제품 혁신에 긍정적인 영향을 줄 것이다. 개발자들은 기본적으로 창의적인 인력들이며, 이에 더해 현실적이다. Sci-fi 영화에나 나올 법한 허무 맹랑한 꿈을 꾸지도 않고, 일부러 과장하려는 경향도 적다. 먼 과거와 달리 골방의 괴짜들이 모여 있는 집단도 아니다. 윗사람들보다 신세대이며 소비의 주체라는 장점도 있다.

결론?

조직은 제품을 직접 보고 함께 이야기하는 문화를 정착시킴으로써 많은 것을 얻을 수 있다. 단, 어설프게 릴리즈 압박용으로만 오용하지 않도록 주의하자. 상향식 변화는 실패할 것이며, 하향식 변화는 성공한 것 처럼 보일 것이다. ^^ [4]

[updated]

사례를 몇 가지 추가해보기로 하였다.

  • Developing Torchlight [5] – Runic Games 사에서 Torchlight 라는 게임을 제작하는 방식을 이야기한다. 그들은 짧은 주기로 항시 play 가능한 게임을 만들어 개발자, QA 팀, 심지어 그드의 가족, 친구들까지 초대해서 게임을 즐기게 했다고 한다. 시장에서의 성공 여부는 아직 판가름하기 이르지만 기대를 가지고 지켜보고 있다.
  • 와우 성공 요인은? [6] – 초창기 와우 개발을 이끌었던 블리자드의 수석 PD 인 셰인 다비리 를 인터뷰한 내용이다. 초창기 가장 어려웠던 점 중 하나는 블라지드로써는 낯선 장르였던 MMORPG 의 비전을 경영진에 설득하는 것이었다고 한다. 직접 만들어 알파 버전을 보여주니, 절대 성공할 수 없다고 말하던 사람마저 하루 아침에 자신의 편이 되었다 한다.
  • Eclipse [7] 와 Jazz/RTC [8] – 오픈소스 개발 환경 프로젝트 중 역사상 가장 성공적인 프로젝트 중 하나인 Eclipse 와 그 개발 과정에서 얻은 노하우까지 툴에 녹이고 있는 Jazz/RTC 프로젝트도 좋은 예가 될 수 있다. 이들은 1년 주기의 정식 릴리스 사이에 6주 정도의 간격으로 다수의 안정적인 Milestone 버전을 내놓는다. 그리고 이전 릴리스 대비 어떤 기능이 개선되었는지 알기 쉽게 보여주는 New & Noteworthy 를 함께 알려주어서 사용자들이 정식 릴리스를 기다리지 않고도 새로운 기능들을 빠르게 접해볼 수 있다. Milestone 버전은 충분히 안정적이기 때문에 critical 한 프로젝트가 아니면 큰 부담 없이 새 milestone 을 테스트해본다. 이런 방식으로 사용자 커뮤니트의 빠른 피드백을 유도해 지속적으로 다음 릴리스에 반영해나간다.
  • Mobile SecondLife [9] – 내가 참여해 진행하다 중단된 프로젝트다. 과제 초창기부터 개발진에서는 도저히 성공 가능성이 없다고, 이걸 누가 쓰겠냐며 과제의 의미를 찾지 못하고 있었다. 링크의 데모는 연구 성격의 개념적 시연이어서 상당히 제한적인 환경에서만 동작 가능했다. 이를 바로 상품화하려 하니 현실적인 제약들 때문에 흥미로운 개념들의 거의 모두를 다 들어낼 수 밖에 없었다. 남은 것만으로는 정말 시도할 가치가 없는 과제였다. 하지만 그 목소리가 경영진에까지 전파되지는 못했다. 수개월간의 고생 끝에 만들어진 베타 버전을 임원에게 시연한 바로 다음날 과제는 바로 중단되었다.

References

  1. 쉬어가기.. 혁신을 이끌어내는 방법 (wegra.org)
  2. You Can’t Innovate Like Apple (Pragmatic Marketing)
  3. 유명 마케터 이해선 대표의 메시지 (제레미의 TV 2.0 이야기기)
  4. Bad Team Culture – 변화의 시작.. 상향식? 하향식? (wegra.org)
  5. Agile Approach in Game Development (wegra.org)
  6. 와우 성공 요인은? 전 수석 PD 셰인 다비리 인터뷰 (Inven Communications)
  7. Eclipse (Eclipse Foundation)
  8. Jazz/RTC (IBM Rational)
  9. Mobile SecondLife (Samsung)
[나쁜 팀 문화] 변화의 시작.. 상향식? 하향식?
Feb 1st, 2010 by Wegra Lee

조직의 변화에 대해 이야기할 때, 상향식(bottom-up), 하향식(top-down) 운운하면서 서로 책임을 회피하는 경향이 심하다는 느낌이다.

상향식은 조직의 아랫사람들부터 변화의 물결이 일어 결국 윗사람들까지 동참시키는 경우이고, 하향식은 반대로 윗사람의 의지에 의해 아래까지 변화를 일으키는 방식이다.  어느 방식이 더 나은 선택이 될 것인가? 만약 어느 한쪽을 운운하는 사람은 변화도입에 대한 전문성이 부족하거나(하향식 변화 도입에 대한 환상[1] – 김창준), 혹은 자신의 책임을 회피해보려는 시도를 하고 있다고 볼 수 있을 것이다.

하향식 변화 도입에 대해선 위 김창준씨의 글을, 상향식 변화 도입에 대해서는 일전에 내가 작성해둔 글 – Show Me The Magic[2]을 참고하면 좋을 것이다. 그리고 그 둘의 결론 역시 Show Me The Magic 에 잘 나타나 있다.

그럼에도 이 글을 적는 목적은, 조직에서 자신의 위치, 자신의 역할에 대한 자각의 필요성을 느껴서이다.

내가 변화시켜보려 했던 팀에서 가장 큰 문제들은 바로 하급 관리자가 조직의 머리에 해당하는 사람들의 논리를 대변한다는 것이었다. 대략 8 단계로 이루어진 조직 피라미드의 밑에서 3번째에 위치한 사람들에 해당하는 이야기이다.

아래에서 3번째이면 말단 관리자, 즉 아래에서부터 올라가 최초로 ‘관리자’라는 타이들을 달아볼 수 있는 직급이다. 이 계층의 구성원들이 ‘먼저 다른 사람들을 다 설득시키고 나한테 오라’, ‘정말 좋으면 내가 참여 안해도 다들 하겠지’ 라는 말을 하고, 뒷짐진채 ‘자! 재주껏 나를 설득해봐!’ 라는 자세를 취한다. 그러면서 ‘역시 상향식 변화는 안되’라고 말하는 모습을 보며 ‘당신이 현 조직에서 윗사람에 해당한다고 생각합니까?’라는 말이 목구멍까지 올라왔지만 참은 적도 몇 번 있다. ^^

그 계층에서부터 공감대를 형성하고 의지를 다져 변화를 이야기해야 비로서 ‘상향식 변화의 첫 발을 내딛었다’ 라고 할 수 있다. 아랫 사람들의 목소리를 전파해줄 수 가장 낮은 위치의 사람들이 그 위치에 올라서자마자 이런 마음자세로 돌변한다면, 그 조직은 절대 변화할 수 없다. 그렇다면 하향식 변화를 기대해야 할까? 그것 역시 환상이다[1].

이 글을 읽는 분들은 자신이 조직에서 어느 위치에 있는지, 그 위치에서 어떤 역할을 해주어야 더 나은 조직으로 변화할 수 있을지 찬찬히 생각해보았으면 한다.


References

  1. 하향식 변화 도입에 대한 환상 (애자일 이야기, 김창준)
  2. Bad Team Culture – Show Me The Magic (wegra.org)
[나쁜 팀 문화] 안티 투명성
Jan 7th, 2010 by Wegra Lee

몇달 전에 프로젝트 투명성(Project Transparency)에 대한 글[1]을 올린 적이 있다. 당시에는 프로젝트에 투명성을 부여함으로써 얻을 수 있는 장점을 중심으로 설명하면서, 이를 읽은 프로젝트 팀들에서 투명성 확보를 위해 노력해주길 바라며 글을 적었다. 하지만 최근에 들어서는 관리자들이 일부러 과제를 불투명하게 만들고 있는 것이 아닌가 하는 의구심이 들기 시작했다. 아니! 감시 받는게 아니냐는 느낌을 떨치기 어려운 실무자들도 아니고, 오히려 현 상황을 정확히 알고 싶어할 듯한 관리자들이 도대체 왜? 지금부터 천천히 이야기 해보기로 하자.

나는 Rational Team Concert (RTC) [2] 라는 Application Lifecycle Management 시스템은 팀 내에 소개/교육/운영하고, 몇 차례에 걸처 그 결과를 공유한 적이 있다. 당시 (지금까지도) 우리 팀은  과제 시작 후 크고 작은 릴리스 중 단 한 번도 목표일을 지켜본 적이 없었고, 지연 기간도 들쑥날쑥 예측이 어려웠다.  릴리스가 끝나고 나서야 비로서 ‘아! 이번엔 이만큼 지연됐구나’를 알 정도였다[3].

수 개월 동안 몇 차례의 릴리스 기간을 거치면서 RTC 가 보여주는 정보는 항시 일관적이고 명확했다. ‘현 상태로는 일정을 맞출  확률은 0% 이다.’ ‘당신의 팀은 task를 끝내기도 전에 끊임없이 새로운 task들을 더 추가한다.’ ‘당신 팀의 업무 수행 능력은 이 정도이다.’ ‘따라서 목표를 다 이루려면 x 일 정도 지연될 것이다.’ ‘일정에 맞추려면 a, b, c 등의 task 를 뒤로 미뤄야 한다.’ 이런 정보들을 한 눈에 확인할 수 있는 실시간으로 그래프를 제시해준다. 대표적인 그래프인 burndown chart 의 예[4]는 아래와 같다.그림과 같이 프로젝트의 현 상황과 진행 추이, 예상 완료 시점 등을 바로 확인할 수 있는 그래프를 전체 팀은 물론 서브팀별로 만들어주고, 누구나 보고 싶으면 언제든 웹을 통해 접근할 수 있다.

(Note: 위 그림은 우리 과제에서 얻은 실제 데이터 도, RTC 가 생성한 그래프도 아니다. 이해를 돕기 위한 단순 참고용이다. 또한 burndown chart 의 개념은 RTC 라는 특정 툴에 종속적이지 않다. Agile/Scrum 쪽에서 널리 활용하는 프로젝트 관리 기법으로 툴 없이도 쉽게 만들어 활용할 수 있다. RTC는 단지 이를 지원할 뿐..)

자! 어떤 결과가 예상되는가? 실무자들 중에는 사용해보고 싶다는 사람들이 조금씩 늘어났다. 반면 관리자들 중에서 관심을 가지는 사람은  거의 전무했다(그나마 계정만 만들고 실제 사용은 안함). RTC 라는 새로운 환경에 적응하기 위해 가장 많은 변화와 노력을 기울여야 하는 실무자들이 관심을 더 보이는 이유는 무엇일까? 역으로, 프로젝트의 목표와 일정을 세우고, 우선 순위를 조정하고, 업무 부하를 관리해야 하는 관리자들은 도데체 무엇 때문에 관심 자체를 보이지 않았던 것일까?

실무자들이 쓰는 이유는 주로 이러했다.

  • 자신에게 할당된 task 들을 효율적으로 관리/진행/보고하기 위해
  • 상사의 말도 안되는 업무 요청에 대한 방어/협상 자료로 활용키 위해
    • 내가 놀고 있나요? 그 일을 하길 원한다면, 여기 쌓여 있는 현 일들 중 어떤 것을 미룰까요?

관리자들이 쓰는 이유는 알 수 없다. 쓰는 사람이 없으니 -_-a

그렇다면 관리자들이 외면하는 이유는? 물론 수많은 요인들이 복합적으로 작용했고, 사람들마나 차이도 많다. (Note: 설문조사를 한 것은 아니고.. 대부분은 이런저런 주변 정황과 평소의 대화들을 토대로 유추해본 것 뿐이다.)

  • 현 상태에 만족해서 (여러 사람과 이야기해보았는데, 우리팀에는 해당되지 않는다. 모두가 불만이다.)
  • 단지, 새로운 것을 익힐 심적/시간적 여유가 없어서 (제법 많다. 위에서 시키지 않은 일에 에너지를 할애하길 꺼려한다.)
  • 다년간 체득한 ‘나서서 좋을 것 없다’ 는 경험 때문에 (조금 있다. 정말 좋으면 남들이 써보고 전파해주겠지 하는 생각.)
  • 귀찮아서 (역시 제법 되어 보인다. 새로운 것은 익히기 보단 다소 불편하더라도 익숙한 것에 머무르려 한다. 시도조차 안해본다.)
  • 투명해지면 안된다고 생각한다. (조금 있어 보인다. 이 글의 주제이므로 바로 뒤에 별도로 설명하겠다.)
  • 기타.. (여러가지 더 떠오르지만 주제와 큰 관련이 없으므로 생략)

투명해지면 안된다고 생각하는 사람들은 상위 지배층과 외부 사람들(stakeholder, customer 등)을 대하는 사람들일 경우가 많다. 이들에게 투명한 과제가 장점을 발휘하려면, 그 과제가 정말 잘 진행되고 있어야 한다는 전제가 깔린다. 이러저러한 문제들이 산적한 상태에서 잘못 공개되면 지원이 줄어들고 대기 수요가 빠져나간다. 이들에게는 안좋은 것을 숨기고 희망찬 메시지만 전달해주어야 한다. 단번에 ‘3달쯤 지연될 겁니다’라고 얘기하면 ‘그렇게까지는 못 기다립니다’라고 하지만, ‘1주일만 더 기다려주세요’를 여러차례 반복하면 ‘이왕 기다린 거, 이번엔 꼭 된다니깐 조금만 더 기다려보지.  등 돌리기도 늦은 것 같고..’ 하는 반응을 이끌어낼 수 있다.

위와 같은 이유로 의도적으로 투명성을 제한하려는 사람들이 있다고 믿는 근거는.. ‘팀 리더로써 가장 중요한 것은 프로젝트를 부러뜨리지 않는 것’ 이라거나, ‘이런 건 누구누구가 알면 안되는데’ 라며 정보 공개를 불편해하는 발언 등을 하는 윗 사람들을 종종 보았기 때문이다. 프로젝트를 계속 유지하는 것은 물론 중요하다. 하지만 외부에 알려진 것 대비 심각하게 안좋은 상황에서도 무리하게 정보를 숨기는 것은 과연 어떨까? 상황을 만회하기 위해 뒤에서 열심히 고생하는 개발자들과 이를 믿고 투자하는 사람, 제품을 기다리는 고객 모두에게 악영향을 미치게 된다. 투자자가 개발팀이 속한 회사 자체라면(내부 프로젝트), 그 팀은 프로젝트를 유지할 수록 회사의 경쟁력을 떨어뜨리게 된다.

다른 관점에서도 불투명한 과제가 (부정적인 의미에서) 도움이 될 때가 있다. 우리 팀의 모습을 앞서의 그림에 맞춰 비유해보면, 윗사람은 day 10 에 ‘자! 내일이 드디어 릴리스 날입니다. 오늘 저녁까지 남은 일들을 모두 완료해 주시고, 검증이 완료될 때까지 자리를 지켜주세요.’ 라고 당당히 요구하고, 또 그것이 개발자들에게 먹힌다. ‘얼마나 걸릴까요?’ 라는 질문은 없다. ‘반드시 끝내세요.’ 라는 요청이 전부이다. 실무자들은 불만이 있어도 드러내놓고 표출하지도 못하고, 밤 늦게나 자정을 넘어서까지 일을 한다. 당연히 기적은 일어나지 않는다. 만약 위와 같은 정보가 다 공개되어 있다면? 윗사람이 앞서와 같은 요구 자체도 할 수 없겠지만, 만약 그런 요구를 한다면 ‘당신은 눈이 없소?’ 라고 반박해도 할 말이 없을 것이다. 즉 과제가 투명해지면 지금까지와 같은 무리한 명령을 내릴 수 없다.

이상의 이유들로, 수단 방법을 가리지 않고 과제를 살리려 한다거나 전통적(?) 지배체제를 유지하고자 한다면, 프로젝트가 투명해지는 것은 커다란 위험요소가 될 수 있다. 이에 해당하는 사람들은 의도적으로 진행상태를 숨길 수 있다.

만약 이런 현상이 정말로 의도적으로 이루어진 것이라면 개선하기란 정말 쉽지 않다. 앞서 언급했듯, 팀을 이렇게 만든 사람들은 대부분 프로젝트 방향을 좌지우지할 수 있는 힘있는 사람들이기 때문이다. 자료를 아무리 제시해도, 개선의 움직임이 보이긴 커녕 거들떠도 보지 않는다면 실무자들도 제풀에 지쳐 변화를 포기한다. 힘있는 자들의 마인드가 바뀌지 않으면 조직의 문화를 바꾸는 것은 거의 불가능하다.

정리: 관리자들 대부분이 이와 같다는 의미는 절대 아니지만, 그 중 일부가 이런 생각을 어느 정도 가지고 있는 것은 분명한 것 같다. 따지고 보면 비단 특정 팀이나 회사, 소프트웨어 개발에만 국한된 현상도 아니다. 정보를 통제하는 언론, 기업의 홍보 부서, 조직의 대변인, 심지어 모든 사람 개개인이 외부로부터 자신을 지키기 위해 어느 정도는 이런 성향을 가지고 있다. 하지만 숨기는 대상에 외부 경쟁자들뿐 아니라 자신들을 믿고 따르는 조직원들까지 포함시켜 그들에게까지 희생을 강요하는 상황에 이른다면 문제는 심각하다. 이런 조직에서 과연 얼마나 많은 사람들이 진심으로 자신의 역량을 모두 쏟아 부어줄까? 하나의 팀이라고 말하기조차 부끄럽다.


References

  1. 프로젝트 투명성 (wegra.org)
  2. Rational Team Concert (IBM Rational)
  3. [나쁜 팀 문화] 점진적 지연 (wegra.org)
  4. Burndown chart (wikipedia)
[나쁜 팀 문화] 유언이 되어 버리는 Lessons Learned
Nov 20th, 2009 by Wegra Lee

Lessons Learned

그간 이 팀 저 팀에서 발간(?)한 수많은 소위 Lessons Learned 라는 것을 봐온바 있다. 과제를 진행하면서 느끼고 배운 것을 정리하여 다음 과제 진행시 참고하거나 진행중인 다른 과제에서 참고할 만한 좋은 정보들이 적혀 있다. 자신이 걸어온 길을 되돌아보는 것은 좋은 경험이고, 그 결과를 정리해 놓는 것 역시 권장할 만한 일이다.

문제는 그 시점이 항상 과제가 뿌러지는 등 완전히 종료되는 시점에 일어난다는 것이다. 많은 경우 팀 자체가 뿔뿔이 흩어지거나 축소된다. 다음에 진행할 과제도 이전 과제와 성격이 달라지기 쉽다. 얻은 것이 있어도 그것을 적용해볼 상황이 못되는 것이다.

과연 이전 과제에서 깨우친 것들이 새로운 과제 새로운 팀에서 제대로 먹혀들 수 있을까? 시행착오를 거쳐보지 않은 새 팀 멤버들이 가슴 깊이 공감하고 따라줄 것인가? 배경이 다른 사람들에게도 똑같은 처방이 여전히 유효할까? 내가 얻은 결론은 정말 더 나은 개선책인가? 아니면 단지 ‘다음엔 이렇게 해봐야지’ 정도인가? 검증되지 않았고 경험해보지도 못한 방법을 새 팀 새 과제에서 시험해볼 용기는 있는가?

위와 같은 고민들도 어느 정도 영향력이 있는 윗사람들에게 해당하는 것이지, 중간 이하의 힘없는 관리자나 실무자들은 새로운 리더가 시키는데로 그냥 따를 수 밖에 없는 것이 또 현실이다.

결국 이런 식의 Lessons Learned 는 읽을 거리나 유언장 이상의 실질적 가치를 갖지 못한다.

Retrospective

Retrospective 는 Lessons Learned 의 Agile 식 표현 정도로 생각하면 좋을 것이다. 하지만 많은 차이를 안고 있음을 잊어서는 안된다. Agile 이 강조하는 iterative, responsive, incremental 같은 속성을 Lessons Learned 에 부여해보자. 짧은 간격으로 주기적으로 회고하며(iterative), 현 시점에 필요한 이슈에 대한 개선안 만들어 다음 개발 주기에 적용해보아 좋은 것을 취하고 잘못된 것은 버리거나 다른 안을 찾아본다(responsive). 팀은 과제가 진행될 수록 조금씩 조금씩 더 나은 방향으로 발전해 간다(incremental).

이미 끝나버린 과거에 대한 무책임한 회상록이 아닌, 지금 살아서 꿈틀대는 과제에 대한 진중한 고민을 경험해볼 수 있다. 바로 그 시점에 팀원들 스스로가 개선이 필요하다고 느끼는 이슈들이 다뤄지고 합의된 개선책을 시행한다는 점에서 참여율이 높아지고, 높은 성공 확률은 덤으로 얻게된다. 혹 실패한다면 바로 다음 회고 때 그 원인과 또 다른 개선안을 찾게될 것이다. 시행착오를 통해 더 많은 경험을 얻게되고, 미처 고려하지 못했던 요소들이 있음을 깨닫게 된다. 넓고 세심해진 시야는 다른 문제에 직면했을 때도 좀 더 빠르게 더 효과적인 개선안을 찾게 도와준다. 반면 Lessons Learned 방식에서는 실패한 처음 안만이 남겨질 가능성이 농후하다. 회고가 거듭될 수록 팀의 생산성이 향상됨을 느낄 수 있을 것이다.

Barriers and Ways to Overcome

다 좋고 완벽해 보이는 회고도 무턱대고 적용하려 하면 말처럼 쉽지 않음을 깨닫게 된다. 내가 지금까지 발견한 중요 요인은 3 가지 이다.

첫째, 일정에 쫓겨서 회고에 할애할 시간적 여유가 없다.

이런 답변을 많이 들었는데, 시간적 여유가 없는 것이 아니라 회고의 효과에 대한 믿음이 부족하거나 새로운 것을 시도하는 것을 꺼리는 보수적 마인드의 팀일 가능성이 높다. 이런 경우엔 분위기 조성을 위한 물밑 작업부터 시작해야 한다. 말이 통하고 깨어있는 사람들이라면 직접적인 대화로 돌파할 수 있겠다. 뜻이 맞는 팀원이 소수라도 존재한다면 솔선수범해서 더 나아지는 모습을 직접 보여줄 수도 있을 것이다. 상황이 다양한 만큼 방법도 다양할 터이니 숙고해서 도전해보자. 단, 상대를 공격하는 것은 확실한 실패 방법이니 절대 피하길 바란다.

참고로 회고에 필요한 시간은 보통 2~4주에 1시간 정도면 충분하다. 물론 처음 시작할 때는 좀 더 많은 시간이 필요할 것이지만 두세번만 해보면 익숙해지고 소요 시간도 줄어든다.

둘째, 팀원들의 참여가 저조하다.

기껏 회고를 해보자는 허락을 받았는데, 정작 모인 사람들이 꿀먹은 벙어리 마냥 침묵으로 일관한다. 회고를 처음 시도하는 조직에서는 대부분 겪게 되는 인기 코스일 것이다. 그들이 침묵하는데에는 여러 가지 이유가 있을 것이다. 무슨 얘길 하면 되는거지? 예제 같은 거 없나? 얘기한다고 정말 개선해 주나? 말 꺼내면 나보고 꺼낸 사람이 하라고 하겠지? 불평하면 괜시리 밉보일 거야.. 등등.

이런 우려를 해소하고 적극적인 참여를 유도하려면 맛을 보여줘야 한다. 사소한 것부터라도 정말 개선되는 모습을 보여주는 것이다. 첫 회의에서 아무런 아이디어가 없을 것을 대비해 문제점과 개선안까지 몇 가지를 준비해둔다. 뜻이 맞는 사람이 한 명이라도 있다면 역할극을 해보는 것도 좋다. 혼자 북치고 장구치는 것보다 훨씬 효과적으로 분위기를 이끌어 갈 수 있을 것이다. 그리고 개선안이 없더라도 불편한 사항을 자유롭게 이야기하도록 하고, 그에 대해 반박을 하거나 방어적인 모습을 보여서는 안된다. Brain storming 방식으로  문제들을 나열하고 중요도와 시급성, 파급 효과 등을 생각해 이슈를 선별해서 개선안을 모색해보자.

셋째, 팀에 부여된 권한이 너무 작다.

열심히 분위기 잡고 멋진 개선안들도 마련했다. 그런데 그 개선안들이 우리힘으로 할 수 있는 일들이 아니라면? 운영부서는 돈 들어가는 일은 절대 허락을 안해주고, 보안 부서는 개발자 편의성은 절대악으로 규정짓고, 프로세스 팀은 표준 프로세스에 어긋난 어떠한 시도도 용납하지 않고, 기획/마케팅 부서는 자신들이 바라는 모든 기능을 역시 자신들이 정한 시한까지 완수해야 한다고 못박고, 책상 앞에 앉아 있는 시간과 개발진도는 정비례한다고 철석같이 믿고 있는 임원이 군림하고 있다면?

회고는 불평불만을 토로하고 남들 뒷담화가 남무하는 장이 되던가, 소꼽장난하듯 사소한 문제들만 다뤄지는 비중없는 시간으로 전락할 것이다. 물론 작은 개선들이 차곡히 쌓여 큰 도움을 줄 수도 있을 것이고, 공동의 적을 향한 불평불만과 뒷담화는 팀원들을 단합시켜주는 효과도 있기는 하다. ^^

모든 것을 통틀어 가장 큰 장벽으로, 딱히 뾰족한 해결책도 없다. 때마침 임원 인사가 단행되어 깨어 있는 사람으로 교체되던가, 무슨 바람이 불어서 아주 권위 있는 컨설턴트의 도움을 받을 수 있다면 큰 힘이 될 것이다. 하지만 모두 다 운에 기대는 것이고.. 리더나 팀원들이 몸소 나서서 설득하고 싸우는 적극적 쟁취 방법도 물론 있다. 하지만 생태계에서 식물 급으로 취급되는 힘없는 개발팀이 얻어낼 수 있는 것은 많지 않을 것이다.


References

  1. Retrospectives by RTC dev. teams
  2. Agile Retrospective – Lessons Learned
10분만에 배우는 스크럼
Oct 5th, 2009 by Wegra Lee

스크럼의 기본을 짧은 시간 안에 아주 잘 명쾌하게 설명하고 있는 자료 중 하나이다.
전통적인 방식에만 익숙해 있던 사람들에겐 이것만으론 스크럼의 정신과 진정한 가치를 깨닫게 하기엔 턱없이 부족하겠지만, 애자일에 관심이 있고 또 어느 정도 스크럼을 접해본 사람들에겐 개념 정리에 도움이 될 것이다.

TDD, Refactoring and Scrum – Part II
Sep 9th, 2009 by Wegra Lee

내가 지금까지 접해본 여러 이론/실천법 들을 통틀어 가장 맘에 드는 것들을 세 가지 고르라면 TDD, Refactoring, Scrum, 이렇게 세 가지를 뽑겠다. (우리 조직에선 이 중 단 하나도 하지 않고 있어서 참으로 답답하고 안타깝다.) 다른 사람들과는 좀 다른 관점일 수 있겠는데, 이들에 애착이 생기는 내 나름의 이유는 간략히 정리해본다.

  • Part I – TDD
  • Part II – Refactoring (this article)
  • Part III – Scrum (not available yet)

Refactoring – Refactoring은 현재의 잘못된 점이나 부족한 부분을 식별하여 더 나은 형태로 개선하는 작업이다. 따라서 Refactoring 은 일종의 회고이며, 그 주된 관점은 설계/코드의 효율성, 가독성, 명확성 등이다. 사람이나 조직이 회고를 통해 교훈을 얻고 성장하듯, 개발자도 Refactoring 을 통해 역량을 키워나간다. 여건이 되지 않으면 혼자서라도 틈틈히 수행해야 하며, 다행히 지도해줄 경험 많은 동료가 함께한다면 그 효과는 배가된다. 팀의 리더라면 팀원간의 이런 교류가 자연스레 일어날 수 있도록 이끌어 주어야 한다.

Refactoring은 개발 기간 내내 리듬을 가지고 정기적으로 수행되어야 한다. 리펙토링 문화가 충분히 자리잡지 못했다면 프로세스에 명시해두는 것이 좋다. 시점은 매 반복 주기(iteration/milestone)가 끝나고 다음 주기가 시작되는 시점이다. 새로운 기능을 넣기 전에 기반을 단단히 다진다거나, 구조적 문제를 조기에 다잡아 추후 대규모 수정을 예방한다는 점도 물론 중요하지만, 사람(개발자)의 역량 성장 측면에서도 반드시 요구되는 프로세스이다.

배우고 경험하고 배우고 경험하고.. 두 과정이 주기적으로 반복되어야 머리로 익힌 것이 체화되고, 그것이 실생활에서 어떤 가치가 있는지 진정한 의미를 깨닫게 된다. 처음에 좋아보였던 것도 생각지 못했던 숨은 이슈나 과소 평가했던 측면 때문에 실제로는 역효과가 더 큰 경우도 많다. 또한 체험 없이 계속해서 머리로만 익히다 보면 모든 것이 쉽고 단순해 보이는 경향이 있다. 이렇게 해서 다음 리펙토링을 수행할 때에는 이전 수행 시보다 향상된 시각으로 구조를 바라볼 수 있게 된다. 설계와 코드를 보는 눈이 향상되고, 시행착오가 줄어들고, 다양한 경험을 통해 확신을 가질 수 있다. 주기적인 Refactoring은 프로젝트가 진행될 수록 Refactoring의 품질과 그것을 수행하는 개발자 역량을 함께 성장시킬 수 있는 멋진 제도적 장치가 될 것이다.

Refactoring 시 주의점

리펙토링 시 가장 신경써야할 부분은 역시 side effect 다. 때문에 전문 툴 활용과 풍부한 테스트 케이스가 준비가 큰 도움을 준다. 툴의 Refactoring 지원 정도는 언어별로 편차가 심하다. Small Talk, Java 언어는 Refactoring 이 지원되지 않는 툴은 오래전에 자취를 감췄을 정도로 대중화되어 있고, C#, Visual Basic 등은 중간 정도.. C/C++ 계열은 아직 많이 부족하며 발전 속도도 더디다.

툴이 해주는 일은 다양한 리펙토링 기법들을 마우스 클릭 몇 번으로 관련된 모든 코드를 자동 변경해주는 편리함과, 이 때 발생할 수 있는 구조적 충돌을 사전 검증하여 side effect 을 최소화시켜주는 효과가 있다. 소프트웨어 규모가 커지면 수십명이 일주일 동안 해야할 변경량을 한 사람이 반나절 만에 처리할 정도로 극적인 효과를 볼 수도 있다.

툴이 구조적인 side effect를 예방해준다면, 테스트 케이스는 기능적인 side effect 를 예방해준다. 테스트 케이스가 충분치 않다면 변경의 잘못된 영향을 먼 훗날에야 발견하게 되고, 무엇이 그 원인이었는지 파악하기 어렵게 된다.

Refactoring 과 TDD
테스트의 대표 주자는 역시 TDD 이다. 현실적으로 거의 불가능하지만, TDD 를 100% 잘 따랐다면 작성된 코드 중 테스트 케이스가 커버하지 못하는 영역은 존재하지 않는다. 따라서 Refactoring 을 가장 안전하게 하기 위한 좋은 지침은 TDD 를 잘 따르는 것이다. 역으로 TDD 의 과정에서 새로운 테스트 케이스(요구사항)가 추가되면, 그 케이스를 만족시키기 위해 기존 코드를 Refactoring 해야한다. 이렇든 이 둘은 거의 바늘과 실 관계이다. 다만 Refactoring 없는 TDD 는 그 효과가 급감하지만, TDD 없이도 테스트 케이스는 작성할 수 있으므로 Refactoring 은 독자적으로도 충분한 가치가 있다.

»  Substance: WordPress   »  Style: Ahren Ahimsa