Techniques For Estimating

최완식·2022년 7월 18일
0
post-thumbnail

불확실성과 화해하는 프로젝트 추정과 계획, "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배 정도 되는 것 같아"는 전혀 다른 불확실성을 갖는다.
  • 그렇기 때문에 이런 경우 하나의 스토리나 기능을 여러 개의 작은 항목들로 나누고 각각을 추정한다.
  • 하지만 과도할 경우 문제가 생긴다.
    • 분해 과정에 있어, 특정 작업을 빼먹을 가능성이 높아진다.
    • 그 작은 작업들의 추정치를 합하는 과정에서 문제가 생긴다. 불확실성이 겹치면서 증폭되어 전체적으로 잘못된 결과를 가져올 수 있다.

플래닝 포커

모든 사람들의 의견을 바탕으로 수렴된 추정치를 내는 방법

위의 여러 방법들을 섞어볼 수 있는 방법으로 "플래닝 포커"가 있다. 다음과 같은 원칙이 있겠다.

  1. 모든 개발자가 참여한다. (개발자: 제품에 직접적으로 관여하는 모두)
  2. 참여자들은 가능한 추정치가 표시된 카드들을 한 묶음씩 받는다. (0, 1, 2, 3, 5 ...)
  3. 보통 제품 책임자나 분석가가 게임 진행자를 맡는다.
  4. 진행자는 참여자들에 대한 질문을 받는다.
    • 이 스토리에 대해 이해되지 않는점에 대해 질문한다.
  5. 모든 참여자는 일정 추정에 있어 "수확 체감의 원칙"을 알고 있어야 한다.
    • 즉, 노력 대비 리턴이 극대점이 있다는 것을 인지하고, 적당한 노력에 대한 효율을 얻어야 한다는 생각이다.
    • 지나치게 과열되어 일정을 책정하는 것에 매달리면 안된다는 뜻이다.
  6. 모든 질문에 대한 답을 들었다면, 각 참여자들은 해당 스토리에 대한 추정치를 정하고 카드를 낸다.
  7. 추정치의 min, max에 해당하는 카드를 낸 참여자는 이러한 추정치에 대한 이유를 설명한다.
    • 이 과정을 서로의 생각을 배울 수 있는 기회로 삼는다.
  8. 이 이유를 바탕으로 참여자들은 토론을 진행한다. 이 때, 진행자는 유용한 정보들에 대해 메모한다.
  9. 토론이 끝나면 다시 한번 카드를 고른다. 결과가 수렴되지 않았다면 다시 진행한다.

더 작은 세션

  • 팀원 모두가 참여해야 한다고 했지만, 일부만으로도 할 수는 있다.
  • 다만, 이 과정에서 나눈 팀에서 합의한 일관된 추정치가 있어야 한다.
  • 즉, 여러 팀에서 각각 추정치를 산출했는데 이 결과를 취합하는 과정에서 사용하는 단위가 다른 것을 경계해야 한다는 말이다.

어느 정도의 토론이 적당한가

  • 토론하다보면 중간에 끼어들기 힘든 상황들이 종종있다.
  • 그래서 이 경우에는 모래시계를 사는 것이 좋다.
  • 저자는 2분짜리를 사라한다.

언제 플래닝 포커를 할 것인가

  • 프로젝트가 공식적으로 시작되기 전, 혹은 첫 이터레이션에 많은 양의 항목을 추정해야 하는 경우
    • 시간과 횟수는 추정 항목 수, 팀 규모, 요구사항의 명료성에 따라 달라진다.
  • 이터레이션 동안 발견된 새로운 스토리를 추정하기 위한 경우
    • 계속되서 스토리는 발생할 수 있다. 이러한 부분에 대해 지속적으로 노력해야 한다.
    • 이터레이션 말미에 이러한 미팅을 가지면, 새로 등장한 일감에 대해 추정할 수 있다.

플래닝 포커가 효과적인 이유

  1. 여러 전문가의 의견을 추정 과정에 모으는 효과가 있다.
    • 소프트웨어의 기능 간 경계를 넘어 한 팀으로 모인다.
  2. 활발한 대화를 바탕으로 추정치의 정확도를 향상시킬 수 있다.
    • 자신의 추정치를 정당화하는 과정에서 추정치의 정확도를 높일 수 있다.
  3. 개개인의 결과를 평균함으로써 보다 편향이 적은 결과를 얻을 수 있다.
  4. 재미있다.

요약

  • 노력과 추정치의 정확성은 선형관계가 아니다. 극댓값이 존재한다.
  • 노력의 양은 추정의 목적을 기반으로 결정되어야 한다. 목표 지향적으로 사고하라.
  • 가장 좋은 추정치는 해당일을 하는 사람에게 나온다. 하지만 애자일의 경우는 누가 하게될지 알 수 없다. 따라서 함께 해야 한다.
  • 추정치는 지정된 값을 사용해야 한다.
    • 1, 2, 3, 5, 8 과 같은 비선형 수열 중의 일부를 사용하고, 여기서 선택해야 한다.
  • 큰 기능의 경우 큰 추정치를 부여해도 좋다.
  • 작은 기능의 경우 0을 사용할 수도 있다.
  • 추정치를 내기 위해 전문가, 비교, 분해라는 방법을 사용하면 용이한다.
  • 이 모든 것을 아우를 수 있는 플래닝 포커라는 방법이 있다.

토론거리

  1. 오늘 내놓은 내 추정치는 얼마나 좋을까?
  2. 추정치를 내놓는 방법으로 선호하는 방법이 있다면 무엇인가? (비교, 전문가, 분해)
  3. 추정치의 값으로 피보나치가 좋은가 2의 등비수열이 좋은가?
  4. 우리 프로젝트의 플래닝 포커에는 누가 참석해야 할까?

Reference

profile
Goal, Plan, Execute.

0개의 댓글