LabHub
Get started
배우기 러닝패스 코스

Founding as a Developer — Validate Before You Build

Measure the Interest on Debt from Deploy Records and Decide When to Pay

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 입니다.