개발 시간 추정이 항상 틀리는 이유

숨은 작업 찾기

by 전규현 Raymond
002-2-time-estimation-hidden-work.png

"이 기능 개발하는데 얼마나 걸릴까요?"


"음... 한 3일?"

5일 후에도 아직 개발 중입니다.

왜 우리의 추정은 항상 틀릴까요?

이 질문을 수없이 받아봤고, 수없이 틀려봤습니다. 그리고 깨달았죠. 우리가 놓치는 것들이 너무 많다는 걸.

시간 추정이 틀리는 5가지 이유

첫 번째는 코딩 시간만 생각하는 것입니다. "로그인 API? 코드는 2시간이면 충분해"라고 많은 개발자가 생각합니다. 하지만 실제로는 요구사항 파악 0.5시간, 설계 고민 0.5시간, 환경 설정 0.5시간, 코딩 2시간, 디버깅 1시간, 테스트 작성 1시간, 코드 리뷰 0.5시간, 리뷰 반영 0.5시간, 문서 작성 0.5시간, 배포 0.5시간, 모니터링 확인 0.5시간이 필요합니다. 총 8시간으로 추정 2시간의 4배입니다. 실제로 "순수 코딩"은 전체 시간의 25-30%에 불과합니다.

두 번째는 최선의 시나리오만 상상하는 것입니다. 우리 뇌는 놀랍도록 낙관적입니다. 개발자의 상상 속 세계에서는 버그가 당연히 없고, 요구사항 변경도 확정됐으니 안 바뀌겠지, 외부 API도 문서대로 잘 작동하겠지, 코드 리뷰도 한 번에 통과하겠지, 테스트도 모두 성공하겠지, 배포도 문제없이 되겠지라고 생각합니다. 하지만 현실 세계에서는 예상치 못한 엣지 케이스 5개가 발견되고, "아, 이것도 추가해주세요"라는 요구사항 변경이 발생하고, 외부 API 문서가 틀렸거나 Rate limit이 있었고, 코드 리뷰에서 "이 부분 다시 작성해주세요"라는 피드백이 오고, CI에서만 실패하는 이상한 버그가 발견되고, 배포 후 롤백하고 다시 수정하고 재배포해야 합니다.

세 번째는 컨텍스트 스위칭을 무시하는 것입니다. "하루 8시간 근무니까 8시간 작업 가능"이라고 생각하시나요? 실제로는 일일 스탠드업 0.5시간, 이메일과 슬랙 확인 1시간, 예상치 못한 질문과 도움 요청 0.5시간, PR 리뷰 0.5시간, 갑자기 잡힌 회의 1시간, 빌드와 테스트 대기 0.5시간, 집중력 회복 시간 0.5시간, 커피와 화장실과 스트레칭 0.5시간이 빠집니다. 충격적인 사실은 대부분의 개발자가 하루에 2-4시간만 집중해서 코딩한다는 것입니다.

네 번째는 통합과 디버깅을 과소평가하는 것입니다. "내 코드는 완벽해. 한 번에 될 거야"라고 생각하지만, 단위 기능 개발 시간과 통합할 때 발생하는 추가 시간을 보면 다릅니다. 결제 모듈 16시간, 장바구니 12시간, 상품 목록 8시간, 검색 10시간으로 총 46시간이지만, 통합할 때는 결제와 장바구니 데이터 동기화 이슈로 8시간, 장바구니와 상품 재고 관리 충돌로 4시간, 검색과 상품 인덱싱 문제로 3시간, 전체 통합 테스트 12시간, 버그 수정 16시간, 성능 최적화 8시간으로 총 51시간이 추가됩니다. 통합이 개발보다 오래 걸리는 것입니다.

다섯 번째는 남의 코드 이해 시간을 빼먹는 것입니다. "그냥 저 함수 호출하면 되겠지"라고 생각하지만, 실제로는 문서 읽기 2시간, 예제 코드 찾기 1시간, 로컬에서 테스트 2시간, 예상과 다른 동작 디버깅 3시간, 우리 코드에 맞게 래핑 2시간, 엣지 케이스 처리 2시간이 필요합니다. "그냥 Stripe 연동하면 되겠지"라고 생각했지만 실제로는 12시간이 걸립니다.

숨은 작업 체크리스트

개발 시간을 추정할 때 이 체크리스트를 사용하세요. 개발 전 작업은 전체의 20%를 차지합니다. 요구사항 명확화 미팅, 기술 스택 조사, 설계 문서 작성, 개발 환경 셋업, 더미 데이터 준비, API 스펙 정의가 포함됩니다.

개발 중 작업은 전체의 40%를 차지합니다. 실제 코딩, 단위 테스트 작성, 로컬 테스트, 디버깅, 리팩토링, 주석 및 문서화가 포함됩니다.

개발 후 작업은 전체의 40%를 차지합니다. 코드 리뷰 요청, 리뷰 피드백 반영, 통합 테스트, 버그 수정, 성능 최적화, 배포 준비, 스테이징 테스트, 프로덕션 배포, 모니터링 설정, 롤백 계획이 포함됩니다.

현실적인 추정을 위한 곱셈 규칙

개발자 경험별 계수를 보면, 처음 하는 작업은 시니어가 예상 시간의 2배, 주니어가 4배가 필요합니다. 유사 경험 있음은 시니어가 1.5배, 주니어가 2.5배가 필요하고, 여러 번 해본 작업은 시니어가 1.2배, 주니어가 1.8배가 필요합니다. 예를 들어 8시간으로 추정한 작업을 주니어가 처음 할 때는 실제 32시간이 걸립니다.

작업 복잡도별 계수를 보면, 단순 CRUD는 1.2배, 비즈니스 로직은 1.8배, 외부 API 연동은 2.5배, 결제나 보안은 3.0배, 실시간 처리는 3.5배, 분산 시스템은 4.0배가 필요합니다. 예를 들어 "결제 시스템 8시간"으로 추정하면 실제로는 24시간이 걸립니다.

팀 차원의 숨은 작업도 있습니다. 개인 작업 외에도 일일 스탠드업은 팀원 수 곱하기 0.5시간, 주간 회의는 팀원 수 곱하기 1시간, 코드 리뷰는 PR 수 곱하기 0.5시간, 지식 공유는 주 2시간, 문서 업데이트는 주 1시간, 긴급 이슈 대응은 주 3시간 평균, 배포 준비와 모니터링은 주 2시간이 필요합니다. 10명 팀 기준으로 주당 오버헤드가 12시간으로, 주 40시간 중 30%가 팀 활동입니다.

버퍼 전략: 현실적인 일정 만들기

PERT 기법으로 과학적 추정을 할 수 있습니다. Program Evaluation and Review Technique은 NASA가 사용하는 추정 방법입니다. PERT 공식은 (최선 + 4×현실 + 최악) 나누기 6입니다. 예를 들어 로그인 기능에 최선 8시간, 현실 12시간, 최악 24시간을 추정하면 (8 + 4×12 + 24) 나누기 6 = 13.3시간이 됩니다. 표준편차를 계산하면 불확실성을 측정할 수 있고, 68% 확률 구간과 95% 확률 구간을 구할 수 있습니다.

리스크 기반 버퍼를 계산하면, 기본 10%에 외부 의존성이 있으면 추가 20%, 신기술을 사용하면 추가 25%, 통합이 필요하면 추가 15%, 요구사항이 불명확하면 추가 30%, 주니어에게 할당하면 추가 20%를 더합니다. 높은 리스크 작업 예로 외부 결제 API 연동은 16시간으로 추정했지만 외부 의존성, 신기술, 통합이 모두 필요하므로 총 버퍼 70%를 더해 27.2시간이 됩니다.

추정 개선을 위한 실전 팁

첫 번째는 추정 회고를 하는 것입니다. Sprint 회고에서 이번 스프린트 추정 정확도를 확인하고, 차이 발생 원인을 분석하며, 다음 스프린트 개선 사항을 도출합니다. 예를 들어 외부 의존성이 있는 작업은 기존 추정의 2배를 잡고, 리팩토링 가능성이 있는 레거시 코드는 50% 버퍼를 추가합니다.

두 번째는 히스토리 데이터를 활용하는 것입니다. 과거 비슷한 작업의 실제 시간을 평균과 최악 사이의 중간값으로 사용합니다. 예를 들어 로그인 기능이 과거 4번에 8, 12, 10, 14시간이 걸렸다면 평균 11시간과 최악 14시간의 중간값인 12.5시간을 사용합니다.

세 번째는 플래닝 포커를 활용하는 것입니다. 팀 추정 세션에서 각자 독립적으로 추정한 후 토론하여 합의합니다. 시니어는 8시간, 주니어는 16시간, 미드레벨은 12시간, 디자이너는 20시간으로 추정했다면 토론 후 14시간으로 합의할 수 있습니다.

마무리: 정직한 추정이 최고의 추정

"개발자는 낙관주의자다"라는 말이 있습니다. 하지만 정직한 추정이 결국 모두를 살립니다. PM은 현실적인 일정을 세울 수 있고, 개발자는 야근 없이 집에 갈 수 있고, 고객은 믿을 수 있는 약속을 받을 수 있습니다.

다음에 추정할 때는 순수 개발 시간을 추정하고, 3배를 곱해 숨은 작업을 고려하고, 리스크 버퍼를 추가하고, 팀과 검증하세요. 처음엔 "너무 보수적인 거 아니야?"라는 소리를 들을 수 있습니다. 하지만 3번만 정확한 추정을 해내면, 모두가 당신을 신뢰하게 될 것입니다.

추정은 예술이 아니라 과학입니다. 데이터를 모으고, 패턴을 찾고, 개선하세요.

_정확한 프로젝트 추정과 관리가 필요하신가요? Plexo를 확인해보세요._

#시간추정 #숨은작업 #프로젝트관리 #개발일정 #PERT



작가의 이전글5단계로 완성하는 개발 프로젝트 WBS