13P by neo 14시간전 | ★ favorite | 댓글 1개
  • 소프트웨어 프로젝트의 정확한 기간 추정은 불가능하며, 대부분의 작업은 예측 불가능한 ‘미지의 일’에 의해 지배됨
  • 추정치는 엔지니어가 아니라 경영진의 정치적 도구로 사용되어, 프로젝트의 우선순위와 자금 배분을 결정하는 역할을 함
  • 실제로는 추정이 작업을 정의하며, 팀은 주어진 기간 안에 가능한 기술적 접근 방식을 찾아내는 형태로 일함
  • 효과적인 추정을 위해 엔지니어는 정치적 맥락 파악, 미지의 위험 평가, 복수의 실행 시나리오 제시에 집중해야 함
  • 이러한 접근은 정확성보다 신뢰와 현실적 협업을 중시하며, 조직 내 의사결정 구조를 이해하는 엔지니어링 역량을 강조함

소프트웨어 추정의 허구

  • 업계에서는 숙련된 팀이 충분한 노력으로 정확한 일정 예측이 가능하다는 ‘예의 있는 허구’ 가 존재
    • 실제로는 대부분의 엔지니어가 정확한 예측이 불가능함을 인식하고 있음
  • 일부 팀은 티셔츠 사이즈 방식으로 추정하지만, 이는 결국 시간 단위로 환산되어 관리 계층에 전달됨
  • “초기 추정의 두 배에 20%를 더하라” 같은 비현실적 휴리스틱이 사용되기도 함

왜 추정이 불가능한가

  • 작고 명확한 작업은 예측 가능하지만, 대부분의 프로젝트는 불확실하고 복잡한 시스템에서 수행됨
    • 예: 단순한 링크 텍스트 변경은 45분으로 예측 가능하지만, 대규모 시스템 변경은 불가능
  • 대다수의 프로그래밍은 탐색적 연구 행위로, 사전 계획만으로는 필요한 작업을 알 수 없음
  • 과거의 중앙집중식 아키텍처 설계 방식은 실패했으며, 실제 코드를 다루는 개발자가 의사결정해야 함
  • 결과적으로 알려진 작업은 전체의 10%에 불과, 나머지 90%는 미지의 영역으로 인해 추정 불가

추정은 엔지니어가 아닌 경영진의 도구

  • 추정은 팀의 생산성 향상과 무관하며, 많은 효율적인 팀은 추정 없이도 일함
  • 경영진은 원하는 결과에 맞게 추정을 조정하려 하며, 긴 일정은 단축 압박을, 짧은 일정은 버퍼 추가를 받음
  • 기술적으로 불가능한 프로젝트만이 예외적으로 현실적 판단을 이끌어낼 수 있음
  • 조직 내 관심이 낮은 영역에서는 형식적 절차가 그대로 유지되기도 함
  • 따라서 추정은 비엔지니어가 프로젝트를 선택·취소하는 정치적 수단으로 작동

추정이 작업을 정의한다

  • 일반적 인식과 달리, 작업이 아니라 추정이 먼저 정해지고, 그에 맞는 기술적 접근이 결정됨
    • 예: “PDF와 대화하기” 기능을 6개월 안에 구현할 때와 하루 안에 구현할 때의 접근 방식은 완전히 다름
  • 시간 제약이 코드 설계의 깊이와 품질을 결정하며, 엔지니어는 주어진 기간 내 가능한 해법을 선택

실제 추정 방식

  • 먼저 정치적 맥락을 파악해 프로젝트의 중요도와 기대 일정을 이해
  • 이후 이미 정해진 기간을 기준으로 가능한 접근법을 탐색
  • 미지의 영역(unknowns) 이 많을수록 추정치는 커지고, 접근 범위를 좁혀야 함
  • 최종적으로는 정확한 기간 대신 위험 평가와 여러 실행 시나리오를 제시
    • 예: 모든 요소를 직접 해결, 일부 우회, 다른 팀 지원 요청 등
  • 엔지니어의 역할은 “얼마나 걸릴까”가 아니라 “주어진 기간에 가능한 방법은 무엇인가” 를 찾는 것

반론과 대응

  • 일부 엔지니어는 불확실한 조건에서의 추정을 회피하지만, 이는 비기술적 인물이 대신 추정하게 만듦
  • 경영진과 협력하지 않고 항상 대립하는 태도는 비생산적이며, 신뢰를 약화시킴
  • 압박을 느끼지 않는 팀은 단지 조직 내 관심 밖의 영역에 있을 가능성이 높음

결론

  • 실제로는 관리자가 이미 염두에 둔 기간을 가지고 팀에 접근하며, 팀은 그 안에서 가능한 기술적 해법을 찾음
  • 추정은 경영진 간 협상 도구이며, 불가능한 프로젝트만이 예외적으로 현실을 전달하는 수단이 됨
  • 올바른 추정은 정확한 수치가 아니라 위험과 선택지의 제시를 포함해야 함
  • 소프트웨어 작업의 정확한 추정은 불가능하며, 성공적인 추정은 미지의 위험을 인식하고 이를 관리하는 능력에 달려 있음
Hacker News 의견들
  • 약간 농담 섞인 내 프로젝트 추정 기준표를 공유함
    내부 프로젝트(예: 벤더 이전 등 사용자 영향 없음)는 상사에게 설득 가능한 만큼의 기간을 잡음
    사용자에게 영향이 있는 프로젝트(예: 신규 기능 추가)는 ROI가 양수인 동안 진행함
    외부 파트너와 협업이 필요한 프로젝트는 영업팀이 납기를 정하고, 엔지니어링팀은 그 일정에 맞춰 MVP 정의를 살짝 조정

  • 왜 아무도 planning pokerstory point 얘기를 안 하는지 의문이었음
    완벽하진 않지만 꽤 괜찮은 방법임. 모든 작업은 스프린트 내에 끝나야 하고, 크면 쪼개야 함
    팀원 전원이 포인트에 합의해야 하며, 그 과정에서 진짜 논의의 가치가 생김
    몇 달 지나면 팀의 속도가 안정되어 ±10% 정도의 정확도로 예측 가능해짐
    마법은 아니지만, 꾸준히 가치를 전달하고 매 스프린트마다 비용 대비 효용을 재검토하게 해줌

    • 여러 추정 방식을 시도해봤지만, 결국 경험 많은 사람의 의견에 따라가는 경향이 있음
      새로 합류한 사람은 같은 티켓이라도 2배 이상 걸릴 수 있음
      게다가 조직은 PR 리뷰를 24시간 내에 끝내라 같은 규칙을 만들어서 현실과 괴리가 생김
    • 우리 팀도 비슷하게 하지만 스프린트를 버전 단위로 유연하게 운영함
      개발자와 QA가 함께 복잡도를 비교하며 추정하고, QA는 테스트 난이도나 자동화 가능성을 평가함
      덕분에 개발 속도 지표가 안정적이고 버전별 추정도 꽤 정확함
    • story point는 단위가 아니기 때문에 합산이 불가능하다고 생각함
      팀 전체가 최소 단위에 대한 공통 이해가 있고, 그것을 시간으로 변환할 수 있을 때만 의미가 있음
      결국 그때는 그냥 시간을 쓰면 되므로 포인트 자체가 불필요함
    • 한 가지 추정치로 팀원 간 숙련도 차이를 어떻게 반영하냐는 의문이 있음
    • 우리 소규모 팀은 피보나치 수열로 추정하는데 꽤 잘 맞음
  • 나는 “2시간, 2일, 2주, 2개월, 2년” 단위로 질문하며 신뢰 구간 기반 추정을 함
    범위가 너무 넓으면 더 쪼개고, 불가능하면 정보 수집에 시간 쓸 가치가 있는지 판단함
    아니라면 프로젝트를 폐기함

    • 나도 비슷하게 하지만 1시간/1일/1주 단위로 세분화함
      결과를 명확히 정의하고, 아이디어를 세부 단계로 나누면 현실적인 추정이 가능함
      하루나 일주일 단위로 쪼갤 수 없다면 아직 계획이 부족한 상태
    • 만약 일주일 시도 후 방향을 바꿔야 하는 탐색형 프로젝트라면?
      이런 경우엔 계속 다른 접근을 시도하며 배우는 과정이므로 추정이 어렵다고 생각함
    • “내일까지 끝낼 수 있나?” 같은 구체적 질문이 훨씬 실질적임
      단순한 길이 추정보다 행동 중심으로 생각하게 만듦
    • 이 방식이 티셔츠 사이징보다 정확하다고 느낌
  • 예전에 단순히 비밀번호를 평문에서 해시로 마이그레이션하는 작업을 한 스프린트로 잡았는데, 실제로는 6개월 걸림
    고객이 비밀번호를 대소문자 구분 없이 쓰던 걸 영상으로 보여줘서 알게 됨
    게다가 PHP 이미지가 삭제되어 빌드 실패까지 겹침
    추정은 언제나 즐거운 모험임

    • 그 얘기를 듣고 How Big Things Get Done 책이 떠올랐음
      실제 프로젝트 데이터를 기반으로 예산 초과율 통계를 보여줌
      IT 프로젝트는 평균 73% 초과로, 원자력 저장소·올림픽·수력발전 다음으로 나쁨
      18%의 IT 프로젝트가 50% 이상 초과하며, 그들의 평균 초과율은 447%임
      결국 대부분의 산업에서 추정은 구조적으로 낙관적일 수밖에 없음을 보여줌
  • 많은 엔지니어와 매니저가 과거 프로젝트의 메트릭을 기반으로 추정하지 않는 게 신기함
    팀의 처리량 데이터를 보면 대략적인 기간과 신뢰 구간(예: 90%, 70%, 50%) 을 계산할 수 있음
    이렇게 하면 외부 이해관계자에게도 확률적 맥락을 제공할 수 있음

    • PMI의 프로젝트 관리 방법론에서도 과거 데이터를 기반으로 추정하라고 명시함
      하지만 많은 엔지니어가 이를 행정적 부담으로 여김
      좋은 관행은 구간 추정을 사용하는 것이며, PERT 방식처럼 최선·예상·최악 세 가지를 모델링함
      최고의 기술자일수록 자기 시간 추정에 과신하는 경향이 있음
      각자 추정 후 20% 보정하는 방식이 꽤 잘 맞았음
      경영진이 일정을 강요하면, 그 시간 안에 가능한 범위를 설명하거나 명확한 스코프 후 재추정을 제안해야 함
      참고: PMI PMP, PMBOK의 Lessons Learned Repository
    • 크로스워드 퍼즐이나 체스 한 판은 얼마나 걸리나?”라는 비유로, 추정의 불확실성을 풍자함
    • 예측(prediction)과 지시(prescription) 의 차이로 설명함
      예측은 오차를 통해 학습하지만, 지시는 오히려 생산성 압박으로 이어짐
  • 나는 추정을 협상 과정으로 봄
    자동차 트림처럼 Economy, Mid-tier, Luxury 세 가지 옵션을 제시함
    비즈니스는 항상 3번의 기능성과 1번의 예산을 원하므로, 결국 내가 상황에 맞게 조정함
    #1 플랜을 준비해두면 위기 시 빠르게 전환 가능하고, 협상 중 지름길의 대가를 시각화할 수 있음
    덕분에 당황한 PM이나 임원의 비합리적 결정을 여러 번 피할 수 있었음

  • 나는 FAANG급 대규모 분산 시스템을 다루는데, 여기선 정확한 추정이 거의 불가능함
    unknown-unknowns가 너무 많고, 프로토타입만으로도 막대한 데이터와 시간이 필요함
    그래서 추정보다는 불확실성 관리에 초점을 맞춤

    • 현재 추정의 신뢰 수준
    • 불확실성을 줄일 수 있는 작업(프로토타입, 실험, 전문가 투입 등)
    • 새로운 일이 발견될 경우의 대응 계획
  • 가장 신뢰할 수 있는 방법은 유사 프로젝트와 비교하는 것임
    “이건 프로젝트 X보다 20% 복잡하니 20% 더 걸릴 것”처럼
    단, 이를 위해선 과거 프로젝트의 실제 소요 데이터를 꾸준히 기록해야 함

  • 처음엔 “추정은 불가능하다”는 주장에 반대하려 했지만, 실제로는 조직 내 역할이 더 중요하다는 걸 깨달음
    팀이 추정 대비 용량을 보고 불가능하다고 해도, 일정은 바뀌지 않음
    결국 스코프 축소나 품질 절충으로 맞추게 됨
    그래서 “추정은 쓸모없다”는 말이 더 정확할지도 모름

  • 추정의 핵심은 모호성(ambiguity) 이라고 느낌
    UI 미세 조정처럼 작아 보이지만 실제로는 하면서 배워가는 작업이 많음
    반대로 큰 변경이라도 명확히 정의되어 있으면 빠르게 끝남
    LLM 시대에는 변화의 크기보다 불확실성의 정도가 소요 시간을 결정짓는 요소가 될 것임