1네 모듈
| 모듈 | 답하는 질문 | 결과물 | 시간 |
|---|---|---|---|
| A1 측정 체계 설계 | 이 지표는 어떤 결정에 쓰이는가. 같은 이름의 지표를 두 사람이 계산하면 같은 값이 나오는가 | 지표 정의서 5개, 측정 계획 | 180분 |
| A2 변동 읽기: 통계적 공정 관리 | 이번 주 처리량이 지난주보다 적은 것은 신호인가, 늘 있는 흔들림인가 | 관리도 2개(처리량, 첫 리뷰 대기), 팀의 신호 판정 규칙 | 180분 |
| A3 추정, 예측, 보정 | “90% 확률로 이날까지”라고 말한 예측들은 실제로 몇 %가 맞았는가 | 예측 보정 기록, 팀의 추정 규칙 | 180분 |
| A4 개선 효과 판정 | 리뷰 당번이 효과가 있었다고 말하려면 무엇과 비교해야 하는가. 두 규칙을 같은 날 시작했으면 무엇을 포기해야 하는가 | 개선 실험 설계서, 효과 판정 보고서 | 180분 |
모듈은 앞 모듈의 결과를 쓴다. A1에서 정한 처리 시간과 첫 리뷰 대기의 정의를 A2의 관리도가 쓰고, A2에서 안정된 기간으로 판정한 처리량을 A3의 예측이 쓰고, A2의 주별 값과 관리도를 A4의 효과 판정이 쓴다. 모듈마다 진행 시간은 설명 45~50분, 실습 110~115분, 정리 20분이다.
2먼저 끝낸 실습
트랙 A는 1·2단계의 작업 폴더(~/gh-pm-lab)와 결과물을 그대로 쓴다. 아래 실습의 결과가 있어야 한다.
| 실습 | 트랙 A에서 쓰는 것 | 모듈 |
|---|---|---|
| 4, 13 | Project의 Priority, Estimate 필드와 gh project field-create | A1 |
| 10 | 결정 기록 댓글 양식 | A3 |
| 14, 15 | EVM의 BAC와 EAC, flow-metrics.sh의 주별 처리량, forecast.sh의 몬테카를로 예측, 리틀의 법칙 | A2, A3 |
| 18, 20 | Project 스냅숏과 작업 시작 시각, 이벤트 로그의 시간대 | A1 |
| 22 | 원본 로그와 정리한 로그(pm-lab/orbit-event-log.csv, pm-lab/orbit-event-log-clean.csv), 관측 기간 끝의 문제 | A1, A2, A4 |
| 25, 26 | 단계별 대기와 리뷰 집중도, 기간별 로그(pm-lab/orbit-a.csv, pm-lab/orbit-b.csv) | A2, A4 |
| 27, 28, 29 | 6월 1일 전후 비교, 같은 날 시작한 두 규칙, 개선안 A, 개선 확인 계획, 정기 분석 워크플로 | A2, A4 |
3데이터
| 데이터 | 내용 | 모듈 |
|---|---|---|
| Orbit 이벤트 로그 | 2단계의 합성 로그. 업무 260건(정리한 로그 257건), 2026-03-03 ~ 09-04 | A1, A2, A3, A4 |
samples/a-project-items.tsv | 우선순위를 P0~P3으로 쓰는 팀의 Project 항목 22건(예시). 척도 실습용 | A1 |
samples/a-forecast-history.tsv | Orbit 팀의 마일스톤 예측 기록 26건(합성 데이터). 마일스톤마다 팀 추정과 처리량 몬테카를로 | A3 |
samples/a-experiment-weekly.csv | 리뷰 당번을 저장소 두 개에 차례로 도입한 시나리오의 주별 첫 리뷰 대기(합성 데이터, 26주 × 2) | A4 |
| 학습자 저장소와 Launchpad Project | Project 필드를 GraphQL로 읽는 명령, 예측을 결정 기록으로 남기는 명령 | A1, A3 |
합성 데이터는 정해진 규칙과 난수로 만들었고 실제 팀의 기록이 아니다. 2단계와 같이 규칙은 공개하지 않으며, 분석으로 찾는다.
4키트 파일과 실행 환경
트랙 A의 스크립트는 모두 GitHub에 접속하지 않고 파일만 읽는다. 키트를 새 판으로 받는 방법은 실습 키트 페이지에 있다.
| 파일 | 하는 일 | 모듈 |
|---|---|---|
duration.sh | 시작 사건, 끝 사건, 시간 종류를 정해 사례별 기간을 계산하고 분포를 요약한다 | A1, A2 |
templates/metric-spec.md | 지표 정의서 양식 | A1 |
xmr.sh | 주별 처리량, 처리 시간, 첫 리뷰 대기(또는 주어진 값 목록)의 XmR 관리도와 신호 | A2, A3, A4 |
little.sh | 기간 안에서 리틀의 법칙(L = λW)과 그 조건을 점검한다 | A2 |
forecast-check.sh | 예측 기록의 구간 적중률, 브라이어 점수, 참조 집단 보정 계수, 범위 증가 | A3 |
forecast-scope.sh | 표본 기간, 업무 분할, 범위 증가를 넣은 몬테카를로 예측. 예측 기록 한 줄 출력 | A3 |
effect.py | 이중차분, 중단 시계열, 비율의 이중차분과 신뢰구간, 검정력 | A4 |
km.py | 끝나지 않은 사례를 포함한 카플란·마이어 처리 시간 분포 | A4 |
templates/experiment-design.md | 개선 실험 설계서 양식 | A4 |
셸 스크립트는 2단계와 같이 bash와 jq 1.6 이상이 필요하다. A4의 Python 스크립트는 pandas, numpy, scipy, statsmodels가 필요하고, km.py --svg로 그림을 저장할 때만 matplotlib가 필요하다. 수업 전에 확인한다.
jq --version
python3 -c "import pandas, scipy, statsmodels; print('ok')"
두 번째 명령이 ModuleNotFoundError를 내면 python3 -m pip install pandas scipy statsmodels로 설치한다. 2단계에서 PM4Py를 설치했다면 pandas, numpy, scipy는 이미 있다.
5참고 자료
모듈 본문에서 인용한 자료다. 표준 원문은 유료이며, 이 교안은 표준의 용어와 구조만 옮겼다.
| 모듈 | 자료 |
|---|---|
| A1 | Basili, Caldiera, Rombach, “The Goal Question Metric Approach”, Encyclopedia of Software Engineering, Wiley(1994) |
| A1 | ISO/IEC/IEEE 15939:2017 Systems and software engineering, Measurement process |
| A1 | Stevens, “On the Theory of Scales of Measurement”, Science 103(2684)(1946). Deming, Out of the Crisis(1986) |
| A1 | DORA, 소프트웨어 전달 성과 지표 dora.dev/guides/dora-metrics, 지표의 변천 dora.dev/guides/dora-metrics/history |
| A1 | Kersten, Project to Product(2018). Forsgren, Storey, Maddila, Zimmermann, Houck, Butler, “The SPACE of Developer Productivity”, ACM Queue 19(1)(2021). Noda, Storey, Forsgren, Greiler, “DevEx: What Actually Drives Productivity”, ACM Queue 21(2)(2023) |
| A1 | Goodhart, “Problems of Monetary Management: The U.K. Experience”(1975년 발표, 1976년 수록). Strathern, “‘Improving ratings’: audit in the British University system”, European Review(1997). Campbell, “Assessing the impact of planned social change”, Evaluation and Program Planning 2(1)(1979, 1976년 발표) |
| A2 | Shewhart, Economic Control of Quality of Manufactured Product(1931). Western Electric, Statistical Quality Control Handbook(1956). Wheeler, Understanding Variation(1993) |
| A2 | Vacanti, Actionable Agile Metrics for Predictability(2015). Little, “A Proof for the Queuing Formula: L = λW”, Operations Research 9(3)(1961) |
| A3 | ISO/IEC 20926:2009(IFPUG 기능 점수). ISO/IEC 19761:2011(COSMIC). Malcolm, Roseboom, Clark, Fazar, “Application of a Technique for Research and Development Program Evaluation”, Operations Research 7(5)(1959) |
| A3 | Kahneman, Tversky, “Intuitive prediction: Biases and corrective procedures”, TIMS Studies in Management Science 12(1979). Flyvbjerg, “From Nobel Prize to Project Management: Getting Risks Right”, Project Management Journal 37(3)(2006). Tetlock, Gardner, Superforecasting(2015) |
| A3 | Brier, “Verification of forecasts expressed in terms of probability”, Monthly Weather Review 78(1)(1950). Klein, “Performing a Project Premortem”, Harvard Business Review(2007). Hulett, Practical Schedule Risk Analysis(2009) |
| A4 | Galton, “Regression towards mediocrity in hereditary stature”(1886). Card, Krueger, “Minimum Wages and Employment”, American Economic Review 84(4)(1994). Efron, “Bootstrap methods: another look at the jackknife”, Annals of Statistics 7(1)(1979) |
| A4 | Bernal, Cummins, Gasparrini, “Interrupted time series regression for the evaluation of public health interventions: a tutorial”, International Journal of Epidemiology 46(1)(2017). Kaplan, Meier, “Nonparametric estimation from incomplete observations”, Journal of the American Statistical Association 53(282)(1958). Kohavi, Tang, Xu, Trustworthy Online Controlled Experiments(2020) |
트랙 A의 지표는 흐름과 규칙을 판단하려고 잰다. 처리 시간이나 리뷰 대기를 사람별로 계산해 평가에 쓰면, 굿하트 법칙(Goodhart's law)대로 숫자가 재려던 일 자체를 바꾼다. 2단계와 같이 사람별 숫자는 일이 한쪽에 몰리는지 볼 때만 쓴다.
- 네 모듈의 질문과 결과물을 확인했다.
- 작업 폴더에 실습 22의 두 로그와 실습 26의 기간별 로그가 있다.
- 키트를 새 판으로 받고
duration.sh,xmr.sh가 있는 것을 확인했다. jq --version과 Python 패키지 확인 명령이 오류 없이 끝났다.
마치며...
트랙 A는 2단계에서 계산한 숫자를 판단에 쓰는 방법을 다룬다. 정의가 같아야 숫자를 비교할 수 있고, 변동을 읽어야 신호를 고를 수 있고, 예측을 기록해야 보정할 수 있고, 대조군이 있어야 효과를 말할 수 있다. 첫 모듈 A1에서는 Orbit의 목표 하나에서 질문과 지표를 끌어내고, “리드 타임”의 정의 네 가지가 같은 로그에서 서로 다른 숫자를 내는 것을 확인한 뒤 지표 정의서를 쓴다.