불확실성과 화해하는 프로젝트 추정과 계획, "6장: 추정의 기술"을 정리해본다.
수확 체감의 원칙
일정 크기의 토지에 노동력을 추가로 투입할 때, 수확량의 증가가 노동력의 증가를 따라가지 못하는 현상
- 즉, 노동을 더 투입한 만큼에 비례하여 결과가 늘어나지 않음을 말한다.
- 계획 추정에 있어서도 비슷하다. 적은 시간 투자를 통해 얻는 결과와 많은 시간 투자를 통해 얻은 결과가 크게 다르지 않다.
- 너무 적거나, 너무 많은 시간을 쏟는 것은 좋지 않다. 적당한게 최고다.
- 다만, 이 추정의 노력의 정도는 추정의 목적에 따라 달라진다.
- 이 점에서 알 수 있는 것은, 노력을 많이 한다고 해서 정확한 추정치를 얻을 수는 없다는 사실이다.
- 그렇기에 애자일 팀은 극댓값 기준 왼쪽 어딘가를 목표로 삼는다.
- 불확실성은 제거할 수 없다는 것을 인정하고, 작은 노력들이 모여 큰 효과를 가져다줄 것이라는 사고방식을 믿는다.
추정치의 공유
- 추정치는 팀에 속한 어느 한 개인에 의해 만들어지지 않는다.
- 모두가 한 자리에 모여 추정하는 것이 더 좋다. 이 이유는 두가지다.
- 누가 어떤 과제를 할지 알 수 없다.
- 추정치에 의의를 제기할 수 있다.
추정치의 범위와 값
- 연구 결과에 따르면, 추정치의 범위가 한차수 (최대값이 최소값의 10배에 해당하는 범위: 1과 10, 10과 100)이내에 들어오도록 추정하는 것이 좋다고 한다.
- 추정치의 예시
- 피보나치 수열: 1, 2, 3, 5, 8
- 2의 제곱수: 1, 2, 4, 8
- 여기서 제안한 단위는 양동이라 생각하자.
- 그리고 실제로 처리하는 일은 "물"이 아니고 "모래"라 생각하자. 모래는 꽉채웠다고 해서 바로 넘치지 않는다.
- 즉, 5와 8사이에 있는 7정도의 일이라고 생각했을 때, 이 경우는 8로 가는게 좋다.
- 하지만 5보다 약간 큰 느낌이라면, 그냥 5에 줘도 무방하다.
- 너무 작은 일의 경우는 어떻게 할까? 0을 쓰는 방법도 있다. 이런 경우
n * 0 == 0
이 아님을 분명히 모든 팀원이 알아야 한다.
- 여러 작은 스토리를 묶어 1이라는 단위로 묶을 수도 있겠다.
사용자 스토리와 에픽 그리고 테마
- 사용자 스토리 하나를 한 차수의 추정치 안에 넣지 못할 수도 있다.
- 가까운 미래에 구현될 것 같지 않은 경우
- 너무 사용자 스토리가 큰경우
- 원하는 기능인지 확신하지 못하는 경우
- 이런 경우 에픽을 사용할 수 있다.
- 일련의 관련성 있는 사용자 스토리들을 한데 묶어 추정이나, 릴리스 계획 과정을 진행하는 경우도 있다.
- 이러한 것을 테마라고 부른다.
- 어떻게 보면 에픽도 일종의 테마이다.
추정치 이끌어 내기
세가지 방법이 있다.
전문가의 의견
- 해당 분야의 전문가에게 물어보는 방법이다.
- 당연히 전문가이기 때문에 경험을 기반으로 한 직감, 본능으로 추정치를 만들어 줄 것이다.
- 하지만 애자일 프로젝트에서는 전통적 프로젝트에서 만큼의 효용을 바랄 수 없다.
- 애자일에서는 사용자 스토리를 기반으로 가치 평가한 기능에 추정치를 부여하게 되는데, 그렇기 때문에 다양한 기술이 필요하다.
- 즉, 이러한 상황에서 전문가의 도움을 받으려면, 이러한 모든 부분에 대해 능통한 사람을 찾아야하는데 쉽지 않다.
- 다만, 이럼에도 불구하고 전문가를 활용할 경우 추정 기간이 길지 않다는 장점을 가진다.
비교
- A 스토리, B 스토리를 보며 비교하는 방법이다.
- 다만, 이 때, 하나의 기준 스토리에 비추어 비교해서는 안된다.
- 여러 추정된 스토리를 두고, 이 사이에서 해당 스토리의 추정치를 바라보아야 한다.
- 즉, 5점짜리 스토리 인지 알고 싶다면, 이보다 작은, 이보다 큰 스토리를 두고 평가해야 한다는 것이다.
분해
- 대부분의 스토리는 작은 단위에서 끊기기 마련이다.
- 그런데 갑자기 큰 스토리가 있다면 어떻게 추정할 수 있을까?
- "A 스토리는 B 스토리 대비 1.5배정도인 것 같아" 와 "50배 정도 되는 것 같아"는 전혀 다른 불확실성을 갖는다.
- 그렇기 때문에 이런 경우 하나의 스토리나 기능을 여러 개의 작은 항목들로 나누고 각각을 추정한다.
- 하지만 과도할 경우 문제가 생긴다.
- 분해 과정에 있어, 특정 작업을 빼먹을 가능성이 높아진다.
- 그 작은 작업들의 추정치를 합하는 과정에서 문제가 생긴다. 불확실성이 겹치면서 증폭되어 전체적으로 잘못된 결과를 가져올 수 있다.
플래닝 포커
모든 사람들의 의견을 바탕으로 수렴된 추정치를 내는 방법
위의 여러 방법들을 섞어볼 수 있는 방법으로 "플래닝 포커"가 있다. 다음과 같은 원칙이 있겠다.
- 모든 개발자가 참여한다. (개발자: 제품에 직접적으로 관여하는 모두)
- 참여자들은 가능한 추정치가 표시된 카드들을 한 묶음씩 받는다. (0, 1, 2, 3, 5 ...)
- 보통 제품 책임자나 분석가가 게임 진행자를 맡는다.
- 진행자는 참여자들에 대한 질문을 받는다.
- 이 스토리에 대해 이해되지 않는점에 대해 질문한다.
- 모든 참여자는 일정 추정에 있어 "수확 체감의 원칙"을 알고 있어야 한다.
- 즉, 노력 대비 리턴이 극대점이 있다는 것을 인지하고, 적당한 노력에 대한 효율을 얻어야 한다는 생각이다.
- 지나치게 과열되어 일정을 책정하는 것에 매달리면 안된다는 뜻이다.
- 모든 질문에 대한 답을 들었다면, 각 참여자들은 해당 스토리에 대한 추정치를 정하고 카드를 낸다.
- 추정치의 min, max에 해당하는 카드를 낸 참여자는 이러한 추정치에 대한 이유를 설명한다.
- 이 과정을 서로의 생각을 배울 수 있는 기회로 삼는다.
- 이 이유를 바탕으로 참여자들은 토론을 진행한다. 이 때, 진행자는 유용한 정보들에 대해 메모한다.
- 토론이 끝나면 다시 한번 카드를 고른다. 결과가 수렴되지 않았다면 다시 진행한다.
더 작은 세션
- 팀원 모두가 참여해야 한다고 했지만, 일부만으로도 할 수는 있다.
- 다만, 이 과정에서 나눈 팀에서 합의한 일관된 추정치가 있어야 한다.
- 즉, 여러 팀에서 각각 추정치를 산출했는데 이 결과를 취합하는 과정에서 사용하는 단위가 다른 것을 경계해야 한다는 말이다.
어느 정도의 토론이 적당한가
- 토론하다보면 중간에 끼어들기 힘든 상황들이 종종있다.
- 그래서 이 경우에는 모래시계를 사는 것이 좋다.
- 저자는 2분짜리를 사라한다.
언제 플래닝 포커를 할 것인가
- 프로젝트가 공식적으로 시작되기 전, 혹은 첫 이터레이션에 많은 양의 항목을 추정해야 하는 경우
- 시간과 횟수는 추정 항목 수, 팀 규모, 요구사항의 명료성에 따라 달라진다.
- 이터레이션 동안 발견된 새로운 스토리를 추정하기 위한 경우
- 계속되서 스토리는 발생할 수 있다. 이러한 부분에 대해 지속적으로 노력해야 한다.
- 이터레이션 말미에 이러한 미팅을 가지면, 새로 등장한 일감에 대해 추정할 수 있다.
플래닝 포커가 효과적인 이유
- 여러 전문가의 의견을 추정 과정에 모으는 효과가 있다.
- 소프트웨어의 기능 간 경계를 넘어 한 팀으로 모인다.
- 활발한 대화를 바탕으로 추정치의 정확도를 향상시킬 수 있다.
- 자신의 추정치를 정당화하는 과정에서 추정치의 정확도를 높일 수 있다.
- 개개인의 결과를 평균함으로써 보다 편향이 적은 결과를 얻을 수 있다.
- 재미있다.
요약
- 노력과 추정치의 정확성은 선형관계가 아니다. 극댓값이 존재한다.
- 노력의 양은 추정의 목적을 기반으로 결정되어야 한다. 목표 지향적으로 사고하라.
- 가장 좋은 추정치는 해당일을 하는 사람에게 나온다. 하지만 애자일의 경우는 누가 하게될지 알 수 없다. 따라서 함께 해야 한다.
- 추정치는 지정된 값을 사용해야 한다.
- 1, 2, 3, 5, 8 과 같은 비선형 수열 중의 일부를 사용하고, 여기서 선택해야 한다.
- 큰 기능의 경우 큰 추정치를 부여해도 좋다.
- 작은 기능의 경우 0을 사용할 수도 있다.
- 추정치를 내기 위해 전문가, 비교, 분해라는 방법을 사용하면 용이한다.
- 이 모든 것을 아우를 수 있는 플래닝 포커라는 방법이 있다.
토론거리
- 오늘 내놓은 내 추정치는 얼마나 좋을까?
- 추정치를 내놓는 방법으로 선호하는 방법이 있다면 무엇인가? (비교, 전문가, 분해)
- 추정치의 값으로 피보나치가 좋은가 2의 등비수열이 좋은가?
- 우리 프로젝트의 플래닝 포커에는 누가 참석해야 할까?
Reference