빠뜨린 일은 '계획에 없던 일'이 아니다
착수 3주 뒤에 "이 작업은 누가 하기로 했죠?"라는 질문이 나온다. WBS의 100% Rule·8/80 Rule·상호배제로 빠뜨린 일을 계획 단계에서 잡는 방법.
착수 3주 차 주간회의다. 개발 리드가 조심스럽게 손을 든다. "저, 데이터 마이그레이션은 누가 하기로 했죠?" 회의실이 조용해진다. 계획서 어디에도 그 작업은 없다. 견적에도, 일정에도, 담당자 배정에도 없다. 하지만 그 일을 하지 않으면 오픈할 수 없다.
PM은 이 순간을 "예상 못 한 변수"라고 부르고 싶어진다. 하지만 냉정하게 보면 데이터 마이그레이션은 변수가 아니었다. 시스템을 교체하는 프로젝트에서 데이터를 옮기는 일은 처음부터 있었다. 계획에 없었을 뿐이다. 빠뜨린 일은 계획에 없던 일이 아니라 계획이 놓친 일이다. 이 차이가 프로젝트의 성패를 가른다. 앞의 것은 리스크 관리의 영역이지만 뒤의 것은 계획 품질의 영역이기 때문이다.
왜 일을 빠뜨리는가
WBS(Work Breakdown Structure)를 만들어 본 PM이라면 안다. 트리를 그리는 것 자체는 어렵지 않다. 어려운 것은 이 트리가 프로젝트의 전부를 담고 있는지 확신하는 일이다.
일을 빠뜨리는 패턴은 대개 3가지다.
첫째, 눈에 보이는 산출물 중심으로만 분해한다. 화면, 기능, 문서처럼 손에 잡히는 것은 잘 쪼갠다. 그러나 마이그레이션, 권한 셋업, 성능 테스트 환경 구축, 이해관계자 교육처럼 작업 사이에 끼어 있는 일은 트리에 오르지 못한다.
둘째, 분해 수준이 들쭉날쭉하다. 어떤 가지는 4단계까지 파고들었는데 어떤 가지는 "백엔드 개발" 한 덩어리로 남아 있다. 큰 덩어리 안에는 언제나 빠진 일이 숨어 있다.
셋째, 같은 일이 두 가지에 걸쳐 있다. "API 개발"과 "연동 개발"에 같은 작업이 반쯤 걸쳐 있으면 서로 상대가 하는 줄 알고 아무도 하지 않는다.
60년 전에 이미 나온 답
이 3가지 패턴에는 검증된 처방이 있다. PMBok(PMI의 프로젝트 관리 지식체계 표준)이 정리한 WBS 원칙이다.
100% Rule. WBS의 각 상위 노드는 하위 노드의 합과 정확히 100% 일치해야 한다. 하위를 다 합쳤는데 상위에 못 미치면 빠진 것이고, 넘치면 범위 밖의 일이 들어온 것이다. 이 규칙 하나만 검토 회의의 기준으로 삼아도 작업 사이에 끼어 있던 일의 상당수가 드러난다. 실천법은 단순하다. 트리의 모든 부모 노드 옆에 "자식의 합이 나와 같은가?"라고 묻는 체크를 붙인다.
8/80 Rule. 최하위 작업 단위(Work Package)는 8시간보다 작지도, 80시간보다 크지도 않게 쪼갠다. 80시간이 넘는 덩어리는 아직 분해가 끝나지 않은 것이다. "백엔드 개발 6주"는 계획이 아니라 희망이다.
상호배제(Mutually Exclusive). 어떤 작업도 두 노드에 동시에 속하면 안 된다. 겹침이 보이면 경계를 다시 긋는다. "서로 상대가 하는 줄 알았다"는 사고를 막는 규칙이다.
원칙은 명쾌하다. 문제는 이 원칙이 사람의 집중력에 의존한다는 점이다. 노드가 30개일 때는 눈으로 검토할 수 있다. 300개가 되면 불가능하다. PM 도구를 만들며 수십 개의 실제 WBS를 검증해 보니, 노드 100개가 넘는 트리에서 100% Rule 위반이 하나도 없는 경우는 드물었다. 사람의 문제가 아니라 방법의 문제다. 규칙 검증은 원래 사람이 아니라 시스템이 할 일이다.
100% Rule을 적용하기 전과 후
말로만 하면 추상적이니, 사고가 자주 나는 노드인 "Go-live(서비스 오픈) 준비"로 비교해 보자.
검토 전
Go-live 준비 = 운영 배포 + 오픈 공지
"자식의 합이 나와 같은가?"를 물은 후
Go-live 준비 = 운영 환경 구성 + 데이터 마이그레이션·정합성 검증 + 계정·권한 셋업 + 배포 리허설(컷오버 시나리오) + 롤백 계획 수립 + 운영 이관 교육 + 운영 배포 + 오픈 공지
작업 6개가 새로 드러났다. 전부 3주 차 회의에서 손을 들게 만드는 유형의 일이다.
큰 덩어리 쪼개기: 8/80 적용 예시
"백엔드 개발 6주(240시간)"를 Work Package로 분해하면 이렇게 된다.
| Work Package | 공수 | 산출물 | 완료 기준 |
|---|---|---|---|
| 인증·회원 API | 40h | API 명세 + 코드 | 통합테스트 통과 |
| 정산 배치 | 64h | 배치 잡 + 재처리 로직 | 3개 시나리오 검증 |
| 외부 연동 어댑터 | 56h | 어댑터 모듈 | 샌드박스 연동 성공 |
| 관리자 API | 40h | API 명세 + 코드 | 통합테스트 통과 |
| 성능 개선·튜닝 | 40h | 튜닝 리포트 | 응답시간 목표 충족 |
분해하면서 따라오는 효과가 있다. 쪼개는 순간 산출물과 완료 기준을 묻게 된다. 그 질문에 답할 수 없는 덩어리가 바로 빠진 일이 숨어 있는 곳이다.
30분 WBS 완전성 리뷰
지금 진행 중인 프로젝트의 WBS를 열고 다음을 점검한다.
구조 점검 (10분)
- 80시간이 넘는 최하위 노드가 있는가 → 분해가 덜 됐다
- 부모와 자식의 합이 어긋나는 노드가 있는가 → 100% Rule 위반
- 같은 작업이 두 가지에 걸쳐 있는가 → 상호배제 위반
숨은 작업 체크리스트 (10분). 시스템 프로젝트에서 가장 자주 빠지는 8가지다.
- 데이터 마이그레이션·정합성 검증
- 계정·권한·SSO 셋업
- 테스트 환경 구축·테스트 데이터 준비
- 보안 검토·취약점 점검
- 이해관계자 교육·매뉴얼
- 운영 이관·모니터링 셋업
- 내부·고객사 승인/결재 절차
- 전환(cut-over) 리허설·롤백 계획
책임 경계 점검 (10분). 각 Work Package에 3가지를 묻는다.
- 이 작업의 산출물은 무엇인가? 답이 없으면 작업이 아니라 활동이다.
- 완료를 누가 승인하는가? 승인자가 없으면 영원히 진행 중으로 남는다.
- 두 팀이 걸친 작업의 최종 책임자는 누구인가? 한 명이 아니면 아무도 아니다.
PM의 실행 블록
내일 바로 할 일 3가지
- 위 30분 리뷰를 캘린더에 지금 등록한다(팀 말고 혼자, 먼저).
- 80시간 초과 노드 상위 3개를 골라 담당자와 함께 분해한다.
- 숨은 작업 체크리스트에서 걸린 항목을 WBS에 추가하고 공수를 배정한다.
회의에서 던질 질문
- "이 부모 노드, 자식을 다 합치면 정확히 100%가 됩니까?"
- "이 240시간짜리 작업의 첫 번째 산출물은 언제 무엇으로 나옵니까?"
- "마이그레이션·권한·교육은 어느 노드에 있습니까?"
좋은 신호와 나쁜 신호
| 좋은 신호 | 나쁜 신호 |
|---|---|
| 최하위 노드마다 산출물·완료 기준이 있다 | "개발", "지원" 같은 동사 없는 덩어리가 있다 |
| WBS 검토에서 매번 뭔가 새로 발견된다 | "WBS는 킥오프 때 끝났다"고 말한다 |
| 겹치는 작업의 경계를 놓고 논쟁한다 | 두 팀이 서로 상대 일이라 생각하는 작업이 있다 |
도구가 해결해야 하는 부분
이 리뷰의 병목은 판단이 아니라 대조 작업이다. 노드 300개의 합산·중복·크기 검증은 사람이 아니라 시스템이 할 일이다. wbsgantt에 100% Rule과 8/80 위반을 저장 시점에 자동으로 잡아내는 기능을 가장 먼저 넣은 이유다. 규칙 검증에 시간이 들지 않으면 PM의 30분은 전부 판단에 쓸 수 있다.
빠뜨린 일은 반드시 돌아온다. 계획에 없던 얼굴로, 예산에 없던 청구서를 들고 온다.