빙산의 70%를 찾아서
"개발 다 끝났는데 왜 아직도 출시를 못하죠?"
PM이 답답해하며 묻습니다. 개발자는 한숨을 쉬며 대답합니다.
"아, 이제 테스트하고, 문서 쓰고, 배포 준비하고, 모니터링 설정하고..."
이게 바로 숨겨진 작업의 함정입니다.
프로젝트를 빙산에 비유하면, 보이는 부분은 30%에 불과합니다. 나머지 70%는 수면 아래 숨어있죠.
실제 프로젝트의 작업 분포를 보면 충격적입니다.
보이는 작업은 30%에 불과합니다. 기능 구현, UI 개발, API 개발만 보이죠.
숨겨진 작업은 70%입니다. 코드 리뷰, 테스트 작성, 버그 수정, 문서화, 배포 준비, 모니터링 설정, 성능 최적화, 보안 점검, 데이터 마이그레이션, 팀 미팅까지 포함됩니다.
첫 번째는 개발자의 낙관적 사고입니다. 개발자들은 본능적으로 코딩 시간만 생각합니다. "로그인 API? 반나절이면 충분해!"라고 생각하지만, 실제로는 코딩 4시간 + 디버깅 2시간 + 테스트 2시간 + 코드 리뷰 1시간 + 문서화 1시간 + 배포 1시간 + 버그 수정 2시간 = 총 13시간(3배 이상)이 걸립니다.
두 번째는 PM의 경험 부족입니다. PM은 개발 과정의 세부사항을 모를 수 있습니다. "로그인 기능"이라고 하면 단순히 ID/PW 체크만 생각하지, 세션 관리, 보안, 로깅, 에러 처리까지는 떠올리지 못하죠.
100개 이상의 프로젝트를 분석한 결과입니다.
첫 번째는 코드 리뷰입니다. 코딩 시간의 20-30%가 소요됩니다. PR 작성하고, 리뷰 기다리고, 피드백 반영하고... 이 모든 게 시간입니다.
두 번째는 테스트 작성입니다. 코딩 시간의 30-50%가 소요됩니다. "나중에 테스트 추가하면 되지"라고 생각했다가, 그 '나중'이 언제인지 정하지 않아 프로젝트가 지연됩니다.
세 번째는 버그 수정입니다. 전체 개발의 15-20%가 소요됩니다. 버그가 안 생길 거라고요? 그런 코드는 이 세상에 없습니다.
네 번째는 회의 시간입니다. 주간 회의 오버헤드로 스프린트 계획 2시간, 데일리 스탠드업 15분 × 5 = 1.25시간, 스프린트 리뷰 1시간, 회고 1시간, 임시 미팅 2시간, 총 주당 7.25시간입니다. 주 40시간 중 18%가 회의입니다.
다섯 번째는 문서화입니다. API 문서는 "나중에 Swagger 붙이면...", README는 "코드 보면 알잖아...", 운영 매뉴얼은 "내가 직접 배포하면..."이라고 미루다가 프로젝트가 망칩니다.
여섯 번째는 환경 설정입니다. 로컬은 잘 돌아가는데 서버에서 안 돌아요! Docker 설정, CI/CD 파이프라인, 환경 변수... 이것만 하루 종일 걸립니다.
일곱 번째는 데이터 관련 작업입니다. 테스트 데이터 생성, 마이그레이션, 백업 설정까지 많은 시간이 소요됩니다.
여덟 번째는 보안 작업입니다. OWASP Top 10 체크, 취약점 스캔, SSL 인증서... 출시 직전에 발견하면 대참사입니다.
아홉 번째는 성능 최적화입니다. "왜 이렇게 느려?" 프로파일링하고, 병목 찾고, 캐싱 추가하고, DB 인덱스 튜닝... 끝이 없습니다.
열 번째는 예외 처리입니다. Happy Path만 생각했는데, 사용자는 상상도 못한 방법으로 시스템을 사용합니다.
한 스타트업의 실제 이야기입니다.
초기 계획은 보이는 작업만 포함했습니다. 결제 시스템 40시간 중 결제 API 개발 16시간, 결제 UI 개발 16시간, PG사 연동 8시간이었습니다. "일주일이면 끝나겠네요!"
실제 작업은 숨겨진 작업까지 포함했습니다. 결제 시스템 96시간 중 보이는 작업 40시간(결제 API 개발 16시간, 결제 UI 개발 16시간, PG사 연동 8시간), 숨겨진 작업 56시간(보안 검토 8시간, PCI DSS 준수 8시간, 테스트 시나리오 작성 4시간, 통합 테스트 8시간, 에러 케이스 처리 6시간, 로깅 및 모니터링 4시간, 문서화 4시간, 코드 리뷰 6시간, 환불 프로세스 4시간, 관리자 도구 4시간)이었습니다.
2.4배 차이가 났습니다!
결제 시스템이라는 특성상 보안과 안정성에 많은 시간이 들어갔는데, 이걸 처음에는 아무도 생각하지 못했습니다.
첫 번째는 체크리스트 활용입니다. 새로운 기능을 추가할 때마다 핵심 개발(기능 구현, UI 개발, API 개발), 품질 보증(유닛 테스트, 통합 테스트, E2E 테스트, 코드 리뷰), 문서화(API 문서, 사용자 가이드, 코드 주석, README 업데이트), 배포 준비(환경 설정, CI/CD 파이프라인, 모니터링 설정, 롤백 계획), 보안(입력 검증, 인증/인가, 보안 스캔, OWASP 체크), 성능(성능 테스트, 최적화, 캐싱 전략)을 확인하세요.
두 번째는 과거 프로젝트 분석입니다. 이전 프로젝트의 실제 시간을 분석해보세요. 패턴이 보일 겁니다. 예를 들어, 우리 팀의 지난 3개 프로젝트는 프로젝트 A: 계획 100시간 → 실제 145시간(45% 초과), 프로젝트 B: 계획 200시간 → 실제 310시간(55% 초과), 프로젝트 C: 계획 50시간 → 실제 72시간(44% 초과)였습니다. 평균 48% 초과. 다음부터는 예상 시간에 1.5를 곱합니다.
세 번째는 팀원들에게 물어보기입니다. 각 역할별로 구체적으로 물어보세요. 개발자에게는 "코드 짜는 것 외에 뭘 더 하시나요?", QA에게는 "테스트 준비하는데 뭐가 필요한가요?", DevOps에게는 "배포할 때 체크하는 게 뭐가 있나요?"라고 물어보면, 놀랍도록 많은 작업이 나올 겁니다.
제 경험을 바탕으로 만든 공식입니다. 전체 시간 = 보이는 작업 + 숨겨진 작업입니다. 숨겨진 작업은 코드 리뷰 20%, 테스트 30%, 버그 수정 15%, 문서화 10%, 회의 10%, 배포 준비 5%, 기타 10%로 총 100% 추가됩니다. 따라서 보이는 작업의 2배가 총 예상 시간이고, 여기에 20% 버퍼를 추가하면 안전한 예상 시간이 됩니다.
경험칙: 보이는 작업의 2-2.5배를 잡으세요.
Step 1은 기능 정의입니다. "사용자 프로필 수정 기능"이라고 정의합니다.
Step 2는 보이는 작업 나열입니다. API 개발 8시간, UI 개발 8시간입니다.
Step 3은 숨겨진 작업 추가입니다. 체크리스트를 돌면서 하나씩 추가합니다. 사용자 프로필 수정 총 38시간 중 보이는 작업 16시간(API 개발 8시간, UI 개발 8시간), 숨겨진 작업 22시간(DB 스키마 수정 2시간, 이미지 업로드 처리 3시간, 입력 검증 2시간, 테스트 작성 4시간, 코드 리뷰 3시간, 버그 수정 3시간, 문서 업데이트 1시간, 캐시 무효화 2시간, 배포 및 모니터링 2시간)입니다.
처음 예상(16시간)보다 2.4배 늘어났지만, 이게 현실적인 일정입니다.
완전히 없앨 수는 없지만 줄일 수는 있습니다. 자동화(CI/CD, 자동 테스트, 문서 자동 생성), 템플릿(코드 템플릿, 문서 템플릿), 체크리스트(반복되는 작업 표준화), 페어 프로그래밍(코드 리뷰 시간 단축), TDD(테스트와 개발 동시 진행)를 활용하세요.
"개발 끝났는데 왜 출시 못하냐"는 질문을 받고 싶지 않다면, 처음부터 모든 작업을 계획에 포함시키세요.
숨겨진 작업을 무시하면 프로젝트는 반드시 지연되고, 팀원들은 야근에 시달리며, 품질은 떨어지고, 신뢰를 잃습니다.
보이는 작업의 2배를 잡으세요. 처음엔 과하다고 느껴지겠지만, 결국 맞아떨어질 겁니다.
프로젝트의 70%는 수면 아래 있다는 걸 잊지 마세요.
프로젝트의 숨겨진 작업까지 체계적으로 관리하고 싶으신가요? Plexo를 확인해보세요.