레이블이 계획오류인 게시물을 표시합니다. 모든 게시물 표시
레이블이 계획오류인 게시물을 표시합니다. 모든 게시물 표시

2025년 12월 2일 화요일

개발자는 왜 항상 일정을 못 맞출까

"이거 얼마나 걸릴 것 같아요?"

"음... 한 3일이면 될 것 같은데요?"

일주일 후...

"아직도 안 끝났어요?"

"거의 다 됐는데... 하루 이틀만 더..."

익숙한 대화죠?

개발자들이 일정을 못 맞추는 건 능력 부족이 아닙니다. 인간의 뇌가 복잡한 작업을 추정할 때 체계적으로 실패하도록 설계되어 있기 때문입니다.

충격적인 통계

Standish Group의 CHAOS 리포트에 따르면:

project_outcomes = {
    "정시 완료": "29%",
    "지연 완료": "52%",
    "실패/취소": "19%"
}

average_delay = {
    "예상": 100,  # 일
    "실제": 189,  # 일
    "초과율": "89%"
}

71%의 프로젝트가 일정을 못 맞춥니다.

추정이 실패하는 5가지 이유

1. 계획 오류 (Planning Fallacy)

노벨상 수상자 대니얼 카너먼이 발견한 인지 편향입니다.

우리는 항상 최선의 시나리오만 상상합니다:

  • 버그가 없을 거야
  • 요구사항이 바뀌지 않을 거야
  • 아무도 아프지 않을 거야
  • 서버가 다운되지 않을 거야

현실은? 머피의 법칙이 지배합니다.

2. 호프스태터의 법칙

"일은 항상 예상보다 오래 걸린다. 호프스태터의 법칙을 고려해도."

재귀적 아이러니입니다. 지연을 예상해도 그보다 더 지연됩니다.

function estimate(task) {
  const initial = calculateTime(task);
  const buffered = initial * 1.5; // 버퍼 추가
  const reality = buffered * 2; // 그래도 부족
  return reality;
}

3. 앵커링 효과

처음 들은 숫자에 집착합니다.

PM: "이거 하루면 되지 않아?"
개발자: (속으로는 3일인데...) "음... 이틀이면 될 것 같아요"

처음 제시된 "하루"가 앵커가 되어 추정을 왜곡합니다.

4. 학생 증후군

마감일까지 시간이 있으면 미룹니다.

5일 여유:
Day 1-3: "아직 시간 많아" (다른 일)
Day 4: "이제 시작해볼까"
Day 5: "헉! 시간이 부족해!"

5. 90% 증후군

마지막 10%가 전체의 90%를 차지합니다.

  • 90% 완료: 기본 기능 구현
  • 나머지 10%: 예외 처리, 테스트, 문서화, 배포, 버그 수정...

개발자 뇌의 추정 메커니즘

def developer_brain_estimation(task):
    # 1단계: 코딩 시간만 계산
    coding_time = estimate_pure_coding()  # 8시간

    # 2단계: 무의식적으로 무시하는 것들
    ignored = {
        "디버깅": 0,      # "버그 안 생길 거야"
        "테스트": 0,      # "나중에..."
        "리뷰": 0,        # "빨리 통과하겠지"
        "문서": 0,        # "코드가 문서야"
        "회의": 0,        # "개발 시간이지"
        "배포": 0         # "그냥 올리면 되지"
    }

    return coding_time  # 8시간 (실제는 24시간)

정확한 추정을 위한 3단계 공식

Step 1: 작업 분해 (최대 4시간 단위)

❌ "로그인 기능" (40시간?)

✅ 분해:
- 로그인 UI (2시간)
- 이메일 검증 (1시간)
- 비밀번호 암호화 (2시간)
- 세션 관리 (3시간)
- API 연동 (2시간)
- 에러 처리 (2시간)
- 테스트 (3시간)

Step 2: 3점 추정법 (PERT)

def pert_estimation(optimistic, realistic, pessimistic):
    """
    O: 낙관적 (모든 게 완벽할 때)
    R: 현실적 (보통의 경우)
    P: 비관적 (모든 게 꼬일 때)
    """
    estimate = (O + 4*R + P) / 6

    # 예: 로그인 API
    O = 4  # 최선: 4시간
    R = 8  # 현실: 8시간
    P = 16 # 최악: 16시간

    result = (4 + 32 + 16) / 6  # 8.67시간
    return result

Step 3: 버퍼 추가

개발 시간: 10일
├── 집중 개발: 7일 (70%)
├── 통합/디버깅: 2일 (20%)
└── 예비 버퍼: 1일 (10%)

실전 체크리스트

일정 추정 전 확인사항:

  •  작업을 4시간 이하로 쪼갰는가?
  •  비개발 시간을 포함했는가? (회의, 리뷰, 문서)
  •  테스트 시간을 별도로 계산했는가?
  •  의존성과 대기 시간을 고려했는가?
  •  팀원 휴가/병가 가능성을 고려했는가?
  •  3점 추정을 적용했는가?
  •  최소 20% 버퍼를 추가했는가?

팀별 추정 개선법

추정 포커

팀원들이 동시에 추정값 공개:
개발자A: 🃏 5일
개발자B: 🃏 3일
개발자C: 🃏 8일

차이가 크면 토론 → 합의 도출

실적 기반 보정

# 과거 10개 프로젝트 분석
historical_data = {
    "평균_초과율": 1.8,  # 1.8배 더 걸림
    "표준편차": 0.3
}

# 다음 프로젝트 추정
raw_estimate = 20  # 일
adjusted = raw_estimate * 1.8  # 36일
confidence_range = (30, 42)  # ±표준편차

마무리: 정직한 추정이 모두를 구한다

"3일이면 될 것 같아요"라고 말하기 전에, 잠시 멈추고 생각해보세요.

정말 3일일까요? 아니면 희망사항일까요?

정확한 추정의 비결:

  1. 작게 쪼개기
  2. 숨은 작업 찾기
  3. 3점 추정 적용
  4. 버퍼 추가
  5. 과거 데이터 참고

낙관적 추정은 모두를 불행하게 만듭니다.
차라리 비관적으로 추정하고 일찍 끝내는 게 낫습니다.


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