개념
이 레슨의 자리 — 리드의 계기판이 아니라 팀의 대화 재료
모듈 43 레슨 5(s2-m43-l05)는 리드가 매일 아침 혼자 보는 계기판 이었다 — 번업, 결함 유입·해결 곡선, 재오픈율, 위험 목록. 이 레슨은 같은 숫자를 팀이 2주에 한 번 함께 읽는 자리 로 옮긴다. 리드의 지표는 경보, 팀의 지표는 가설 이다. 성공 조건은 "지표를 잘 그렸다"가 아니라 회고 끝에 다음 스프린트에 시도할 변경 한 줄이 남았는가 다.
지표 1 — 번다운과 번업
번다운(burn-down) 은 남은 일을, 번업(burn-up) 은 완료한 일과 전체 범위를 두 줄로 그린다. 계산은 잔여(D일) = 총 포인트 − D일까지 완료 뺄셈 하나다. 스프린트 24(2주, 10일, 5명)의 값이다.
| 일차 | D1 | D2 | D4 | D5 | D6 | D7 | D8 | D9 | D10 |
|---|---|---|---|---|---|---|---|---|---|
| 범위(포인트) | 34 | 34 | 34 | 39 | 39 | 39 | 39 | 39 | 39 |
| 완료 누적 | 0 | 3 | 6 | 6 | 9 | 12 | 17 | 25 | 31 |
| 번다운 잔여 | 34 | 31 | 28 | 33 | 30 | 27 | 22 | 14 | 8 |
D5에 긴급 정책 변경으로 범위가 5포인트 늘었고, D10에 스토리 1건이 이월됐다.
첫째, D5의 잔여가 28에서 33으로 올라갔다. 번다운만 보면 팀이 뒤로 간 것처럼 보이지만 원인은 속도가 아니라 범위다. 번업에서는 범위 선이 34에서 39로 오른 것이 그대로 보인다. 번다운 단독으로는 "느린 것"과 "늘어난 것"이 구분되지 않는다.
둘째, 완료 31점 중 22점(71%)이 D8~D10 사흘에 몰렸다. 전형적인 하키스틱이다. 앞 절반 동안 개발은 돌았지만 완료의 정의를 충족한 것이 없었다 는 뜻이고, 테스트가 끝에 압축됐다는 신호다. 번다운의 모양은 진척이 아니라 흐름의 구조 를 보여 준다.
셋째, 완료 31점 대 계획 34점은 실패가 아니다. 직전 세 스프린트가 29, 32, 31이면 31은 그 범위 안이다. 속도는 예측용 관측치이지 달성 목표가 아니다 — 이 구분이 지표 오염의 출발점이다.
지표 2 — 리드타임과 사이클타임
둘은 자주 혼용되지만 재는 구간이 다르고, 구간이 다르면 개선 주체도 달라진다.
리드타임 = 완료 − 요청(백로그 등록) ← 고객이 체감하는 시간
사이클타임 = 완료 − 착수(In Progress) ← 팀이 통제하는 시간
리드타임 = 백로그 대기 + 사이클타임스프린트 24에 완료된 스토리 7건이다(단위: 영업일).
| 스토리 | 백로그 대기 | 개발+테스트 | 테스트 대기 | 사이클 | 리드 |
|---|---|---|---|---|---|
| S-101 | 20 | 2.5 | 0.5 | 3.0 | 23.0 |
| S-102 | 17 | 4.0 | 1.0 | 5.0 | 22.0 |
| S-103 | 5 | 4.0 | 3.0 | 7.0 | 12.0 |
| S-104 | 36 | 4.5 | 2.5 | 7.0 | 43.0 |
| S-105 | 5 | 3.0 | 2.0 | 5.0 | 10.0 |
| S-106 | 18 | 3.0 | 2.0 | 5.0 | 23.0 |
| S-107 | 14 | 2.5 | 1.5 | 4.0 | 18.0 |
| 합계 | 115 | 23.5 | 12.5 | 36.0 | 151 |
계산해 보면 이렇다.
사이클타임 평균 36.0/7 = 5.14일, 중앙값 5.0일
리드타임 평균 151.0/7 = 21.6일, 중앙값 18.0일, 85퍼센타일 ≈ 43일(S-104)
흐름 효율 (36.0 − 12.5) / 36.0 = 65.3%
테스트 대기 12.5 / 36.0 = 34.7%평균과 중앙값이 벌어지면 평균을 버린다. S-104 하나가 43일이라 평균이 21.6일로 끌려 올라갔고 대부분은 18일 안팎에 끝났다. 리드타임 분포는 거의 언제나 오른쪽으로 긴 꼬리를 갖기 때문에 중앙값과 85퍼센타일을 함께 본다.
가장 눈에 띄는 숫자는 테스트 대기 12.5일, 사이클타임의 34.7% 다. 아무도 그 스토리를 만지지 않은 시간 — 개발이 끝났는데 테스트가 시작되지 않은 시간이다. 개발을 빨리 하는 것보다 대기를 줄이는 쪽이 훨씬 크다.
둘을 나눠 쓰는 두 번째 이유는 책임 소재 다. S-104의 리드타임 43일 중 36일은 백로그 대기였고, 이건 팀이 아니라 우선순위 결정의 문제다. 회고에서 팀이 바꿀 수 있는 것은 사이클타임이고 리드타임은 PO와 함께 보는 숫자다.
배포 빈도·변경 실패율 등의 DORA 지표는 레슨
s6-m38-l06에서 다룬다. 그쪽은 배포 파이프라인을, 이 레슨은 스토리 한 건이 팀 안에서 흐르는 시간을 본다.
지표 3 — 결함 유출률(Defect Escape Rate)
결함 유출률 은 "못 잡고 내보낸 비율"이고, 반대로 읽은 것이 결함 제거 효율(DDE) 이다. 기간 정의가 빠지면 숫자가 의미를 잃으므로 "릴리스 후 30일 이내 운영 발견" 처럼 창을 고정한다.
결함 유출률 = 운영 발견 / (내부 발견 + 운영 발견) × 100
DDE = 내부 발견 / 전체 발견 × 100 = 100 − 결함 유출률
스프린트 24: 내부 발견 23건, 릴리스 후 30일 내 운영 발견 4건
결함 유출률 = 4 / (23 + 4) = 14.8%
DDE = 23 / 27 = 85.2%총량으로는 어디를 고칠지 알 수 없으므로 결함이 어느 단계에서 잡혔는지 세어 단계별로 쪼갠다.
| 발견 단계 | 건수 | 누적 DDE |
|---|---|---|
| 리파인먼트·예제 매핑 (설계 전) | 6 | 6/27 = 22.2% |
| 개발 (단위 테스트·코드 리뷰) | 9 | 15/27 = 55.6% |
| 팀 테스트 (스프린트 내) | 8 | 23/27 = 85.2% |
| 운영 (유출) | 4 | — |
이 표가 총량보다 유용한 이유는 "더 왼쪽으로 옮길 수 있는가"를 물을 수 있기 때문 이다. 팀 테스트에서 잡힌 8건 중 몇 건이 리파인먼트 질문이나 단위 테스트로 잡힐 수 있었는지를 묻는다. 유출 4건은 지나간 일이지만 8건의 왼쪽 이동은 다음 스프린트에 걸 수 있는 변경 이다.
유출 4건은 반드시 원인별로 한 줄씩 남긴다. 숫자 4는 아무 정보도 주지 않는다.
| 유출 결함 | 스토리 | 왜 못 잡았나 → 어디로 옮기나 |
|---|---|---|
| 쿠폰 중복 적용 | S-104 | 마지막 날 테스트, 조합 미확인 → 완료 시점 분산 |
| 정산 반올림 오차 | S-104 | AC에 반올림 규칙 없음 → 리파인먼트 질문 |
| 환불 실패 시 잔액 | S-104 | 예외 경로 미설계 → 예제 매핑 |
| 푸시 미발송(iOS 17) | S-106 | 해당 OS 기기 없음 → 기기 매트릭스 |
4건 중 3건이 S-104 한 스토리 에서 나왔다. 백로그에 36일 묵었고, 사이클타임이 가장 길었고, 유출도 가장 많았다. 세 지표가 한 스토리를 가리킬 때가 회고의 가장 좋은 재료다.
스프린트 24 회고 — 숫자에서 실험으로
여기까지가 측정이고 여기부터가 중심이다. 숫자 → 읽어낸 것 → 바꿀 것 을 채우지 못하면 그 지표는 수집하지 않는 편이 낫다.
| 숫자 | 읽어낸 것 | 다음 스프린트 실험 | 성공 판정 |
|---|---|---|---|
| 테스트 대기 = 사이클타임의 34.7% | 가장 큰 단일 낭비. 개발이 끝난 일이 줄 서 있다 | WIP 상한 3. 개발 완료가 2건 이상이면 새 착수 대신 테스트 참여 | 테스트 대기 25% 이하 |
| 완료 31점 중 22점이 D8~D10 | 완료가 끝에 몰림. 유출 3건이 마지막 날 테스트한 스토리에서 나옴 | D5까지 DoD 충족 스토리 1건 이상 을 목표에 명시 | D5에 완료 1건 이상 |
| 유출 4건 중 3건이 S-104 | 오래 묵은 큰 스토리에 위험 집중 | 백로그 대기 20일 초과 스토리는 착수 전 슬라이싱 재검토 (s2-m48-l03) | 단일 스토리 유출 2건 미만 |
| DDE: 설계 22.2% → 개발 55.6% → 테스트 85.2% | 절반 가까이가 개발 이후에 잡힌다 | 리파인먼트 질문에 "경계값·반올림·실패 경로" 3문항 추가 | 설계 발견 비중 30% 이상 |
네 줄을 전부 실행하면 아무것도 안 된다. 회고에서는 하나만 고른다. 스프린트 24 팀은 첫 줄(WIP 상한 3)을 골랐다 — 영향이 가장 크고 다음 회고에서 참·거짓이 판정되기 때문이다. 나머지는 "대기 중인 가설"로 남긴다. 실험 형식은 고정해 둔다.
[관측] 테스트 대기가 사이클타임의 34.7%를 차지한다
[가설] 개발자가 다음 스토리를 먼저 착수해서 테스트가 밀린다
[실험] 다음 스프린트 동안 진행 중 스토리 상한을 3으로 둔다
[측정] 테스트 대기 비중 (지금 34.7%)
[판정] 스프린트 25 회고에서 25% 이하면 유지, 아니면 가설을 버린다
[기한] 1스프린트판정 줄과 기한 줄이 없으면 실험이 아니라 다짐이다. "대기를 줄이자"는 참·거짓을 가릴 수 없어 세 번째 회고까지 같은 문장으로 살아남는다.
지표는 어떻게 오염되는가 — 굿하트의 법칙
사람은 자기가 측정된다는 것을 알면 행동을 바꾼다. 이것이 굿하트의 법칙(Goodhart's Law) 이고, 널리 인용되는 문장은 인류학자 Marilyn Strathern이 1997년에 정리한 형태다.
"측정이 목표가 되면, 그것은 좋은 측정이 아니게 된다(When a measure becomes a target, it ceases to be a good measure)."
원 명제는 경제학자 Charles Goodhart가 1975년 통화정책 논문에서 낸 것으로, 통계적 규칙성은 통제 목적으로 쓰는 순간 무너진다는 내용이었다. 애자일 지표에서는 매 스프린트 재현된다.
| 목표로 삼은 지표 | 팀이 하게 되는 일 (지표 결과) | 실제로 일어난 일 |
|---|---|---|
| 속도 올리기 | 3점짜리를 5점으로 추정 (30 → 41) | 같은 양의 일. 포인트 인플레이션, 예측 기능 파괴 |
| 결함 수 줄이기 | 티켓 없이 구두로 고침 (23 → 9건) | 추적 불가, 재발 감지 불가, 유출률 계산 불능 |
| 유출률 0% | 운영 이슈를 "개선 요청"으로 재분류 (0%) | 라벨만 바뀜. 고객이 겪은 일은 그대로 |
| 사이클타임 단축 | 티켓을 늦게 열고 일찍 닫음 (5.1 → 2.3일) | 측정 창만 좁아짐. 대기는 티켓 밖으로 이동 |
| 커버리지 80% | 단언 없는 테스트 추가 (62→82%) | 코드가 실행만 되고 검증은 안 됨 |
공통 구조가 보인다. 숫자를 움직이는 가장 값싼 방법은 일을 잘하는 것이 아니라 계수 규칙을 바꾸는 것이고, 그 규칙을 쥔 쪽이 팀이다. 악의도 필요 없다 — 압력이 반복되면 규칙은 저절로 느슨해진다. 방어 장치는 다섯이다.
- 쌍으로 본다. 하나만 보면 조작되지만 짝을 이루면 조작 비용이 급격히 올라간다 — 속도↔유출률, 사이클타임↔재오픈율, 완료 스토리 수↔스토리당 평균 포인트, 결함 수↔단계별 DDE.
- 목표가 아니라 질문으로 쓴다. "속도 35 달성"이 아니라 "속도가 두 스프린트째 떨어졌는데 무슨 일이 있었나"다.
- 소유권을 팀에 둔다. 직접 수집·해석하면 조작할 이유가 줄고, 외부에서 내려와 평가에 쓰이는 순간 조작이 합리적 선택이 된다.
- 정의를 문서화하고, 바꿀 때는 회고에서 공개적으로 바꾼다. "유출 판정 창은 며칠인가"가 조용히 바뀌면 추세선 전체가 거짓말이 된다.
- 사람 단위로 쪼개지 않는다. 개인별 발견 수나 완료 포인트를 집계하는 순간 팀 지표는 평가 도구가 되고, 위 표의 모든 행이 한꺼번에 일어난다.
팀이 보는 지표와 팀 밖으로 내보내는 지표
같은 숫자라도 누가 보느냐 에 따라 안전한 것과 위험한 것이 갈린다. 기준은 하나다 — 팀 간 비교에 쓰일 수 있는 지표는 밖으로 내보내지 않는다.
| 팀 내부 (회고·데일리) | 팀 밖 (이해관계자·경영진) | |
|---|---|---|
| 목적·단위 | 개선 가설 / 스토리·단계 세부 | 의사결정 / 집계와 추세 |
| 속도(velocity) | 본다 (예측·계획용) | 내보내지 않는다 |
| 스토리별 사이클타임 | 본다 | 리드타임 중앙값·85퍼센타일만 |
| 결함 건수·담당자 | 본다 | 내보내지 않는다 |
| 유출률·DDE, 운영 영향 | 본다 | 본다 (추세로) |
포인트는 팀마다 다른 단위라 비교 가능한 척도가 아니다. A팀 40점과 B팀 25점은 비교할 수 없는데도 표에 나란히 놓이면 비교가 시작되고, 다음 스프린트에 B팀의 추정이 부푼다. 밖으로 내보낼 것은 과정 지표가 아니라 결과 지표 다 — 리드타임 중앙값, 유출률 추세, 운영 영향. 이 셋은 조작하려면 실제로 결과를 바꿔야 한다. 경영진 보고의 형식과 언어는 모듈 26에서 따로 다룬다.
실무에서 왜 필요한가
회고가 시들해지는 이유는 대개 재료 부족이다. "이번 스프린트 어땠나요"로 시작하면 기억에 남은 사건 두세 개와 감정만 오가고, 목소리 큰 사람의 인상이 팀의 결론이 된다. 숫자는 그 자리에 공통의 사실을 놓는다 — 테스트 대기가 사이클타임의 3분의 1이라는 문장은 반박하려면 데이터가 필요하고, 대화가 구조로 옮겨간다.
두 번째 이유는 QA를 테스트 실행자가 아니라 흐름 개선자로 만드는 것 이다. 유출률 14.8%를 보고할 수 있는 QA는 많지만, 4건 중 3건이 백로그에 36일 묵은 스토리에서 나왔다는 것을 연결하고 "20일 넘은 스토리는 착수 전에 쪼개자"까지 가져오는 QA는 드물다. 앞은 결과 보고이고 뒤는 프로세스 설계다. 여기에 방어의 몫이 붙는다 — "다음 분기 유출률 5% 이하"가 내려올 때 그것이 왜 유출 정보를 파괴하는지 설명할 수 있어야 한다.