사이클 타임

Cycle Time

지표

작업 하나에 실제로 손을 대기 시작한 순간부터 끝낼 때까지 걸린 시간으로, 일의 흐름이 어디서 느려졌는지 찾을 때 씁니다.

등장 배경

같은 일을 두고 두 사람이 전혀 다른 시간을 말하는 일이 흔했습니다. 마케터는 배너 문구 하나 바꾸는 데 2주가 걸린다고 하고, 개발자는 그건 30분이면 된다고 합니다. 둘 다 거짓말이 아닙니다. 요청이 들어온 날부터 세면 2주가 맞고, 손을 댄 시점부터 세면 30분이 맞습니다.

이 차이를 구분하지 않으면 엉뚱한 곳을 고치게 됩니다. 요청자는 느리다고 말하고 팀은 더 빨리 만들려고 애쓰는데, 정작 시간이 사라진 자리는 만드는 구간이 아니라 아무도 손대지 않은 채 줄에 서 있던 열흘입니다. 사람을 더 붙여도 그 열흘은 줄지 않습니다.

사이클 타임은 그 두 시간을 떼어 놓으려고 만든 숫자입니다. 카드가 칸반 보드 위에서 작업 중 칸에 들어간 순간부터 완료 칸에 도착할 때까지만 잽니다. 요청부터 세는 시간과 나란히 놓으면 둘의 차이가 그대로 대기 시간이 되고, 어느 쪽을 고쳐야 할지가 숫자로 드러납니다.

계산 방법

카드 한 장이 작업 중 칸에 들어간 시각과 완료 칸에 도착한 시각을 기록해 그 사이를 재고, 최근에 끝난 카드를 모아 분포로 봅니다.

먼저 시작점을 팀이 하나로 정해 둬야 합니다. 대기 칸에 올라온 때인지, 담당자가 붙은 때인지, 첫 커밋이 찍힌 때인지에 따라 같은 작업의 숫자가 몇 배씩 달라집니다. 끝점도 마찬가지로 완료 정의를 충족한 때로 고정합니다. 완료 정의는 팀이 미리 합의해 둔 체크리스트로, 보통 리뷰를 통과하고 테스트가 돌고 운영 환경에 올라간 상태까지를 말합니다.

계산은 세 단계입니다.

  1. 최근에 끝난 카드를 30장에서 50장쯤 모읍니다. 다섯 장으로는 분포를 볼 수 없고, 반년 치를 모으면 그사이 팀이 달라져 지금을 설명하지 못합니다.
  2. 카드마다 시작과 끝 사이의 영업일을 셉니다. 주말을 빼야 금요일에 시작한 카드와 월요일에 시작한 카드가 같은 숫자를 갖습니다.
  3. 평균 대신 중앙값과 85퍼센타일을 냅니다. 중앙값은 절반이 그 안에 끝난 값이고, 85퍼센타일은 100장 중 85장이 그 안에 끝난 값입니다.

평균을 쓰지 않는 이유는 한두 장이 숫자를 통째로 끌고 가기 때문입니다. 1·1·2·2·3·3·4·7·12·30 이라는 열 장이 있으면 평균은 6.5일이지만 절반은 3일 안에 끝났습니다. 6.5일은 어느 카드의 경험도 설명하지 못하는 숫자입니다. 여기서 중앙값은 3일, 85퍼센타일은 12일이고, 이 두 숫자가 팀의 실제 모습에 훨씬 가깝습니다.

좋은 수준의 기준

짧은 값보다 좁은 분포가 먼저입니다. 중앙값 3일에 85퍼센타일이 5일인 팀은 다음 카드가 며칠 걸릴지 말할 수 있지만, 중앙값이 똑같이 3일인데 85퍼센타일이 21일인 팀은 아무것도 약속하지 못합니다. 뒤쪽 팀에서 실제로 벌어지는 일은 대부분 사흘 만에 끝나고 예닐곱 장 중 한 장이 3주씩 걸리는 것이고, 그 한 장이 어느 것인지는 미리 알 수 없습니다.

그래서 밖에 말하는 숫자는 중앙값이 아니라 85퍼센타일로 잡습니다. 중앙값으로 약속하면 두 번에 한 번은 늦습니다.

값을 줄이는 방법은 대개 더 빨리 만드는 쪽이 아닙니다. 사이클 타임의 절반 이상은 손대지 않고 기다린 시간이라, 줄일 곳도 그쪽입니다. 동시에 붙들고 있는 카드 수를 줄이는 WIP 제한이 가장 먼저 나오는 방법입니다. 차선이 하나인 길에 차를 더 밀어 넣으면 모든 차가 함께 늦어지는 것과 같습니다. 카드를 여섯 장 동시에 열어 두면 각각이 남의 순서를 기다리느라 전부 늦어집니다.

작업을 고르게 쪼개는 것도 분포를 좁힙니다. 한 장이 3주짜리면 그 한 장이 85퍼센타일을 혼자 밀어 올립니다. 어느 칸에서 시간이 가는지는 누적 흐름도로 확인합니다. 상태별 카드 수를 시간축에 쌓아 그린 그래프인데, 어느 칸의 띠가 갈수록 두꺼워지면 그 칸이 병목입니다. 전체 속도를 혼자 결정해 버리는 가장 느린 구간을 가리키는 말입니다.

절대값으로 팀을 견주지는 못합니다. 칸의 정의도 쪼개는 크기도 팀마다 달라서, A 팀의 3일과 B 팀의 3일은 같은 일이 아닙니다.

실무 용례

"사이클 타임 중앙값은 3일인데 85퍼센타일이 21일이에요. 3일로 약속하면 안 됩니다."

절반은 사흘에 끝나지만 나머지가 흩어져 있어 그 값으로는 약속을 못 한다는 뜻입니다.

"리드 타임 9일에 사이클 타임 이틀이면 우리가 고칠 건 개발 속도가 아니에요."

이레를 줄에서 보냈으니 일을 받는 방식을 손봐야 한다는 말입니다.

"이번 달 숫자가 올라간 건 느려져서가 아니라 카드가 커져서예요."

지표가 나빠 보이지만 원인이 속도가 아니라 작업 크기에 있다는 뜻입니다.

페이지덱에서는 태오가 2주에 한 번 보드에서 값을 뽑습니다. 지난 분기 중앙값은 3일이었고 85퍼센타일은 19일이었습니다. 19일짜리 카드들을 따로 모아 보니 대부분 검수 대기 칸에서 멈춰 있었습니다. 만드는 데 이틀, 기다리는 데 열이틀이었습니다.

태오가 그 사실을 들고 오자 지현은 검수 인원을 늘리는 대신 개발 중 칸의 상한을 넷에서 둘로 내리자고 했습니다. 앞에서 덜 열면 뒤에 밀리는 양도 준다는 계산이었습니다. 두 달 뒤 중앙값은 3일 그대로였고 85퍼센타일이 8일로 내려왔습니다.

흔한 오해

사이클 타임을 줄이려면 더 빨리 만들어야 한다고 읽는 경우가 가장 많습니다. 시간을 재는 숫자이니 작업 속도의 문제로 보이는 것이 자연스럽습니다. 그런데 이 시간을 쪼개 보면 실제로 손을 댄 시간은 대개 20퍼센트 안쪽이고 나머지는 무언가를 기다린 시간입니다. 리뷰해 줄 사람이 다른 일을 붙들고 있거나, 앞 카드가 안 끝나 시작하지 못한 시간입니다. 여기에 사람을 더 붙이면 동시에 열린 카드만 늘어 분포가 더 넓어집니다.

개인이나 팀을 견주는 데 쓰는 것도 흔한 오해입니다. 시간이라는 단위가 누구에게나 같아 보여서 비교해도 될 것 같지만, 재는 구간과 쪼개는 크기가 팀마다 다릅니다. 게다가 이 숫자를 평가에 쓰기 시작하면 팀은 카드를 잘게 쪼개고 시작 시점을 늦게 찍는 쪽으로 움직입니다. 반년 뒤에는 숫자만 5일에서 2일로 내려가고 요청자가 체감하는 시간은 그대로인 상태가 됩니다. 나란히 처리량을 함께 보면 이런 왜곡이 드러납니다. 일정 기간에 끝낸 카드 수인데, 사이클 타임이 반으로 줄었는데 처리량이 그대로면 쪼개기만 달라진 것입니다.

자주 헷갈리는 용어

용어언제부터 재는가사이클 타임과의 차이
리드 타임요청이 들어온 순간줄에서 기다린 시간까지 포함해 요청자가 체감하는 전체 길이입니다. 둘의 차이가 곧 대기 시간이라 함께 봐야 어디를 고칠지 갈립니다

같이 보면 좋은 페이지

  • 칸반

    이 숫자가 어떤 규칙과 함께 쓰이는 지표인지 먼저 봅니다

  • 리드 타임

    나란히 놓아야 대기 시간이 보이는 짝입니다

마지막 업데이트 2026-09-16