LabHub
시작하기
배우기 러닝패스 코스

개발자의 창업 — 만들기 전에 검증하기

배포 기록으로 부채의 이자를 재고 갚을 때를 정한다

LabHub 에서 이어서 보기

목표

배포·작업 기록에서 DORA 지표와 모듈별 이자(계획 밖 작업 시간)를 계산하고, 리팩터링 후보의 회수 기간·순절감·지연 비용으로 "지금 갚을까" 를 규칙대로 결정한다.

왜 중요한가

기술 부채를 갚을지 기능을 낼지는 대개 목소리로 정해진다. 이자와 원금, 미뤄지는 기능의 가치를 같은 단위로 놓으면 그 논쟁이 계산이 된다. 재지 않은 이자는 없는 것처럼 보이다가 어느 날 팀 전체의 시간을 먹는다.

재료

정의(이름은 dora.dev 를 따른다)

단계

  1. /root/founder/debt/dora.pyfrequency(fix, service)(주당 배포 수, 실수)를 만든다.
  2. dora.pylead_time(fix, service){"median_h": x, "mean_h": y} 를 더한다.
  3. dora.pychange_fail_rate(fix, service) 를 더한다.
  4. dora.pyrecovery_median(fix, service)(시간) 를 더한다.
  5. /root/founder/debt/dora.json 에 서비스마다 frequency_per_week, lead_time_median_h, lead_time_mean_h, change_fail_rate, recovery_median_h, rework_rate 를 쓴다.
  6. /root/founder/debt/interest.json 에 모듈마다 mean, first4, last4, rising(last4 > first4) 를 쓴다.
  7. /root/founder/debt/plan.json 에 리팩터링 후보마다 saved_per_week, payback_weeks, net_saved_krw, delay_cost_krw 를 쓴다.
  8. /root/founder/debt/decision.jsondecision(정의의 규칙), worst_service(변경 실패율이 가장 높은 서비스), fastest_payback(회수 기간이 가장 짧은 후보)을 쓴다.

참고

배포 빈도

/root/founder/debt/dora.py 에 frequency(fix, service) 를 만든다 — 그 서비스 배포 수 ÷ 12.

deploys.csv 를 서비스로 거른 줄 수를 12주로 나눕니다.

변경 리드 타임 — 중앙값과 평균

dora.py 에 lead_time(fix, service) → {median_h, mean_h} 를 더한다.

각 배포의 (deployed_at − committed_at) 를 시간으로 바꿔 목록을 만들고 statistics 의 median·mean 을 씁니다.

변경 실패율 — 분모는 배포

dora.py 에 change_fail_rate(fix, service) 를 더한다.

배포 직후 즉시 개입이 필요했던 배포(failed=1)의 수를 그 서비스의 전체 배포 수로 나눕니다.

실패 배포 복구 시간

dora.py 에 recovery_median(fix, service) 를 더한다(실패 배포만, 시간, 중앙값).

failed=1 인 배포의 (recovered_at − deployed_at) 중앙값입니다. 실패가 없으면 None.

서비스별 DORA 한 장

/root/founder/debt/dora.json 에 서비스마다 frequency_per_week·lead_time_median_h·lead_time_mean_h·change_fail_rate·recovery_median_h·rework_rate 를 쓴다.

배포 재작업률 = unplanned=1 ÷ 전체 배포. 시간은 소수 둘째, 비율은 넷째 자리입니다.

모듈별 이자와 추세

/root/founder/debt/interest.json 에 모듈마다 mean·first4·last4·rising 을 쓴다.

week 순서로 정렬한 뒤 앞 4주와 뒤 4주의 평균을 따로 냅니다.

회수 기간·순절감·지연 비용

/root/founder/debt/plan.json 에 리팩터링 후보마다 saved_per_week·payback_weeks·net_saved_krw·delay_cost_krw 를 쓴다.

절감은 최근 이자(last4) × interest_reduction 입니다. 지연 비용은 리팩터링이 팀 시간을 쓰는 주 수 × 기능의 주간 가치.

규칙대로 결정한다

/root/founder/debt/decision.json 에 decision·worst_service·fastest_payback 을 쓴다.

회수 기간이 가장 짧은 후보만 보고, 그 순절감이 지연 비용보다 크면 그 모듈 이름, 아니면 feature_first 입니다.