"이 작업 몇 퍼센트 완료됐나요?"
"음... 한 70%쯤?"
이런 애매한 대답, 이제 그만합시다.
0% 아니면 100%. 중간은 없습니다.
0/100 규칙이란?
작업의 상태를 단 두 가지로만 표현하는 규칙입니다.
def get_task_progress(task):
# 전통적 방식
# return "대충 60~70% 정도?" # 애매함
# 0/100 규칙
if task.is_complete():
return 100
else:
return 0
# 끝. 간단명료!
왜 0/100 규칙인가?
주관을 배제한다
개발자 A는 "70% 완료"라고 하고, 개발자 B는 같은 작업을 보고 "40% 완료"라고 합니다.
PM은 "50% 정도?"라고 생각하죠.
같은 작업인데 왜 다 다르게 볼까요?
각자의 기준이 다르기 때문입니다.
0/100 규칙은 이런 주관을 완전히 배제합니다.
완료했거나, 안 했거나. 단순명료합니다.
진실을 직시한다
# 착각
illusion = {
"UI 90% 완료": True,
"로직 80% 완료": True,
"전체 진행률": "85%" # 거의 다 됐네!
}
# 현실 (0/100 규칙)
reality = {
"UI 완료": False, # 0%
"로직 완료": False, # 0%
"전체 진행률": "0%" # 아직 완성된 게 없네...
}
잔인하지만 정직합니다.
0/100 규칙 적용하기
Step 1: 작업을 작게 쪼개기
# ❌ 나쁜 예: 큰 덩어리
big_task = {
"name": "사용자 관리 시스템",
"estimate": "2주",
"status": 0 # 2주간 0%...
}
# ✅ 좋은 예: 작은 조각들
small_tasks = [
{"name": "회원가입 API", "hours": 4, "done": True}, # 100%
{"name": "회원가입 UI", "hours": 3, "done": True}, # 100%
{"name": "로그인 API", "hours": 4, "done": True}, # 100%
{"name": "로그인 UI", "hours": 3, "done": False}, # 0%
{"name": "프로필 API", "hours": 3, "done": False}, # 0%
{"name": "프로필 UI", "hours": 3, "done": False} # 0%
]
# 진행률 = 3/6 = 50% (명확!)
Step 2: 완료 기준 정의하기
작업: 로그인 API
완료 체크리스트: □ 기능 구현
□ 입력 검증
□ 에러 처리
□ 단위 테스트
□ 코드 리뷰
□ 문서 작성
규칙: 모든 항목 체크 = 100% / 하나라도 미체크 = 0%
Step 3: 일일 추적
매일 스탠드업에서:
const dailyUpdate = () => {
console.log('=== 오늘의 상태 ===');
tasks.forEach((task) => {
console.log(`${task.name}: ${task.done ? '✅ 100%' : '⭕ 0%'}`);
});
const completed = tasks.filter((t) => t.done).length;
const total = tasks.length;
console.log(`전체: ${completed}/${total} 완료`);
};
숫자가 명확하니 논란이 없습니다.
실제 프로젝트 적용 사례
이커머스 결제 시스템
## 프로젝트: 결제 시스템 (총 32시간)
### 카드 결제 (12시간)
- [x] PG사 연동 (4h) ✅ 100%
- [x] 결제 검증 (3h) ✅ 100%
- [ ] 에러 처리 (3h) ⭕ 0%
- [ ] 테스트 (2h) ⭕ 0%
진행률: 2/4 = 50%
### 간편결제 (8시간)
- [ ] 카카오페이 (4h) ⭕ 0%
- [ ] 네이버페이 (4h) ⭕ 0%
진행률: 0/2 = 0%
전체 진행률: 2/10 = 20% (정확!)
팀 전체가 같은 숫자를 봅니다. 해석의 여지가 없습니다.
0/100 규칙의 변형
0/50/100 규칙
중간 마일스톤이 필요한 경우:
def fifty_percent_rule(task):
"""코드 리뷰 통과 시 50% 인정"""
if task.is_complete():
return 100
elif task.code_review_passed():
return 50 # 중간 인정
else:
return 0
20/80 규칙
시작을 인정하는 방식:
function twentyEightyRule(task) {
if (task.isComplete) return 100;
if (task.isStarted) return 20; // 시작 보너스
return 0;
}
하지만 주의하세요. 모든 작업이 20%에서 멈출 수 있습니다.
0/100 규칙의 장점
예측 가능성
애매한 "거의 완료", "조금 남음" 대신,
"5개 중 3개 완료, 2개 남음"이라고 말할 수 있습니다.
남은 작업이 명확하니 완료 시점도 예측 가능합니다.
투명성
const teamDashboard = {
김개발: {
assigned: 5,
completed: 3,
progress: '3/5 (60%)',
},
이디자인: {
assigned: 4,
completed: 4,
progress: '4/4 (100%) 🎉',
},
박QA: {
assigned: 6,
completed: 1,
progress: '1/6 (17%)',
},
};
누가 어떤 상태인지 한눈에 보입니다.
동기부여
매일 완료되는 작업이 보입니다.
체크박스에 ✅가 하나씩 늘어가는 것만으로도 성취감을 느낍니다.
애매한 퍼센트가 조금씩 올라가는 것보다 훨씬 만족스럽습니다.
팀에 도입하기
Week 1: 파일럿
월요일: 1개 프로젝트 선택, 작업 10개로 분해
수요일: 0/100 규칙 적용, 기존 방식과 비교
금요일: 팀 피드백, 개선점 논의
Week 2-3: 확대
전체 팀에 적용, 도구 도입, 프로세스 개선
주의사항
너무 큰 작업
2주간 0%는 팀 사기를 떨어뜨립니다.
작업을 더 작게 쪼개세요.
형식적 체크리스트
# ❌ 나쁜 체크리스트
- [ ] 코딩 완료 # 너무 모호
# ✅ 좋은 체크리스트
- [ ] POST /api/login 엔드포인트 구현
- [ ] 이메일 형식 검증 (regex)
- [ ] 비밀번호 bcrypt 해싱
- [ ] JWT 토큰 생성 및 반환
- [ ] 401/403 에러 처리
구체적일수록 좋습니다.
도구와 자동화
Git 커밋과 연동
#!/bin/bash
# commit message에 따라 자동 체크
if [[ $1 == *"[done]"* ]]; then
echo "✅ Task marked as 100% complete"
elif [[ $1 == *"[wip]"* ]]; then
echo "⭕ Task still at 0%"
fi
간단한 트래커
class SimpleTracker {
getProgress() {
const total = this.tasks.size;
const done = [...this.tasks.values()].filter((v) => v).length;
return {
tasks: `${done}/${total}`,
percentage: Math.round((done / total) * 100),
remaining: [...this.tasks.entries()].filter(([_, done]) => !done).map(([name, _]) => name),
};
}
}
성과 측정
Before vs After
한 스타트업의 실제 결과:
metrics_before = {
"프로젝트_지연율": 65,
"예측_정확도": 45,
"팀_신뢰도": 6.2
}
metrics_after_3months = {
"프로젝트_지연율": 25, # 62% 개선
"예측_정확도": 82, # 82% 개선
"팀_신뢰도": 8.5 # 37% 개선
}
마무리
0/100 규칙은 단순하지만 강력합니다.
핵심 원칙:
- 작업은 완료 아니면 미완료
- 애매한 퍼센트 금지
- 작업을 작게 쪼개기
- 명확한 완료 기준
처음엔 극단적으로 느껴질 수 있지만,
곧 이 명확함이 얼마나 편한지 알게 될 겁니다.
"70% 완료"같은 애매한 말 대신,
"10개 중 7개 완료"라고 말하세요.
훨씬 정확하고 신뢰할 수 있습니다.
명확한 프로젝트 추적이 필요하신가요? Plexo를 확인해보세요.
댓글 없음:
댓글 쓰기