캐파시티 플래닝

Capacity Planning

개념

다음 주기에 팀이 계획한 작업에 실제로 쓸 수 있는 시간을 세어, 그 주기에 무엇을 얼마나 담을지 정하는 일입니다.

등장 배경

팀이 얼마나 일할 수 있는지는 오랫동안 인원과 기간의 곱으로 계산됐습니다. 개발자 다섯 명에 2주면 영업일이 열흘이니 50인일, 그러니 50인일어치 일을 담으면 된다는 식입니다. 산수는 간단했고, 그 산수대로 끝나는 주기는 드물었습니다.

빠진 것이 많았기 때문입니다. 사람이 자리에 있다고 해서 그 시간이 전부 계획한 작업으로 가지는 않습니다. 휴가가 있고, 채용 면접이 있고, 다른 팀이 막혀서 도와 달라는 요청이 있고, 지난달에 내보낸 기능에서 장애가 납니다. 회의에 앉아 있는 시간도 있습니다. 이 가운데 어느 것도 계획표에는 적히지 않는데 실제로는 시간을 가져갑니다. 그래서 50인일로 세운 계획이 실제로는 40인일 남짓한 그릇에 담기고, 남은 10인일어치가 매 주기 다음으로 밀립니다.

밀린 일이 다시 다음 주기 계획 위에 얹히니 문제는 한 번으로 끝나지 않습니다. 이번에 못 끝낸 것을 다음 주기 맨 앞에 넣고 그 뒤에 또 50인일어치를 담으면, 그 주기는 시작부터 초과입니다. 두세 번 반복되면 팀은 계획을 지킬 수 없는 것으로 여기기 시작합니다. 어차피 못 지킬 것을 적는 자리가 되면 스프린트 플래닝에서 항목을 고르는 일도 형식만 남습니다.

그 형식은 회의에서 이렇게 들립니다. 지현이 "이번 주기에 이거 다 들어가죠?" 하고 묻고, 개발팀은 다음 주에 사흘이 휴가로 빠진다는 것을 알면서도 "해 보겠습니다" 라고 답합니다. 안 된다고 말할 근거가 시간표 어디에도 없어서입니다. 2주 뒤에 세 건이 남으면 누구도 그 사흘을 기억하지 못하고, 남은 것은 팀이 느리다는 인상뿐입니다.

캐파시티 플래닝은 그 사흘을 계획 앞에 적어 두게 만드는 절차입니다. 총량에서 시작해 실제로 빠져나가는 시간을 하나씩 빼고 남은 값을 계획의 상한으로 삼습니다. 다섯 명에 2주면 50인일이지만 휴가 3일, 면접 2일, 다른 팀 지원 4일을 빼면 41인일이 남고, 계획은 50이 아니라 41에 맞춰 세웁니다.

이 계산은 작업의 크기를 재는 일과 짝을 이룹니다. 애자일 추정이 항목 하나하나가 얼마나 큰지를 재는 쪽이라면, 캐파시티 플래닝은 그 항목들을 담을 그릇이 얼마나 큰지를 재는 쪽입니다. 둘 중 하나만 있으면 계획이 서지 않습니다. 40점어치 항목을 골라 놓고도 그릇이 몇 점짜리인지 모르면 그 40점은 숫자로만 남고, 반대로 그릇 크기만 알고 항목 크기를 모르면 무엇을 빼야 할지 고를 수 없습니다.

분야 구성

캐파시티 플래닝 아래 묶인 용어는 두 갈래로 나뉩니다. 총량에서 무엇을 어떻게 깎아 내는지(계산), 그리고 깎이는 줄도 모르게 시간이 새는 자리가 어디인지(손실)입니다.

계산은 남은 시간을 실제 쓸 수 있는 시간으로 바꾸는 갈래입니다. 둘이 있고, 깎는 이유가 서로 다릅니다.

  1. 포커스 팩터 — 전체 시간 가운데 계획한 작업에 실제로 쓰이는 비율입니다. 주 40시간을 일한다고 해도 정기 회의, 코드 리뷰, 문의 대응, 동료의 질문에 답하는 시간이 섞여 들어가서 계획한 작업에 남는 것은 25~30시간입니다. 이 비율을 0.6이나 0.7처럼 하나의 숫자로 적어 두고 총량에 곱합니다. 값은 추측으로 정하지 않고 지난 주기의 기록에서 꺼냅니다. 30인일을 배정해 21인일어치가 실제로 끝났다면 그 팀의 값은 0.7입니다.
  2. 버퍼 — 무엇에 쓸지 정하지 않은 채 비워 두는 여유입니다. 포커스 팩터가 이미 일어난 일의 평균을 반영하는 값이라면 버퍼는 아직 일어나지 않은 일을 위한 자리입니다. 장애 하나, 급한 고객 요청 하나는 평균에 잡히지 않고 특정 주기에만 몰려서 터집니다. 41인일이 남았다면 그중 5인일 정도를 비워 두고 36인일까지만 항목을 채웁니다. 그 5인일에 아무 일도 안 생기면 밀려 있던 항목을 하나 당겨 옵니다.

두 값은 순서대로 곱하고 뺍니다. 인원과 기간으로 총량을 구하고, 확정된 부재를 먼저 빼고, 포커스 팩터를 곱하고, 마지막으로 버퍼를 덜어 냅니다. 이 순서를 바꾸면 같은 시간이 두 번 빠지거나 한 번도 안 빠집니다. 휴가를 빼기 전에 포커스 팩터를 곱하면 자리에 없는 사람의 회의 시간까지 깎는 셈이 됩니다.

다섯 명이 2주를 일하는 팀으로 끝까지 계산해 보면 이렇습니다. 총량 50인일에서 확정된 휴가 3일과 면접 2일을 빼면 45인일이 남고, 여기에 0.7을 곱하면 31인일이 되고, 버퍼로 4인일을 덜면 실제로 항목을 채울 수 있는 자리는 27인일입니다. 처음의 50과 견주면 절반을 조금 넘습니다. 숫자가 이렇게까지 줄면 계산이 어딘가 잘못된 것처럼 보이지만, 줄어든 23인일은 계산이 깎아 낸 것이 아니라 원래부터 계획에 쓸 수 없던 시간입니다. 달라진 것은 그 사실을 주기가 끝난 뒤에 아는지 시작하기 전에 아는지뿐입니다.

손실은 그 계산이 왜 늘 보수적이어야 하는지를 설명하는 갈래입니다. 컨텍스트 스위칭이 여기 속합니다. 한 사람이 두 가지 일을 맡으면 각각에 반씩 쓰는 것이 아닙니다. 다른 일로 옮길 때마다 어디까지 했는지 다시 떠올리는 시간이 붙고, 일을 세 가지로 늘리면 그 되찾는 시간이 전체의 40퍼센트까지 차지한다는 관찰이 널리 인용됩니다. 표에는 한 사람이 세 칸에 이름을 올린 것으로 보이지만 실제로 나오는 결과는 두 사람 몫에 못 미칩니다.

이 손실이 계산과 이어지는 지점은 분명합니다. 포커스 팩터가 낮게 나오는 팀은 대개 게으른 것이 아니라 한 사람이 동시에 붙들고 있는 일이 많은 것입니다. 그래서 값이 0.5 아래로 내려가면 숫자를 그대로 받아들이기 전에 왜 그런지를 먼저 봅니다. 담당을 나눠 한 사람이 한 주기에 한두 가지에만 붙게 만들면 같은 인원으로도 값이 올라갑니다. 계산은 현재 상태를 반영하는 도구일 뿐이고, 그 상태를 바꾸는 일은 계산 밖에 있습니다.

두 갈래는 방향이 반대입니다. 계산은 이미 새어 나가는 시간을 인정하고 계획을 그만큼 줄이는 쪽이고, 손실은 새는 구멍 자체를 줄이는 쪽입니다. 앞쪽만 하면 계획은 맞지만 팀이 실제로 내보내는 양은 그대로고, 뒤쪽만 하면 구멍을 막는 동안에도 계획은 계속 넘칩니다.

실무 용례

"다음 스프린트는 캐파시티가 30퍼센트 빠집니다. 추석 연휴에 태오 휴가까지 겹쳐서요."

이번에는 평소만큼 담으면 안 되니 항목을 먼저 덜어 내자는 말입니다.

"캐파시티 계산할 때 온콜 당번 시간도 빼 주세요. 그 주는 절반밖에 못 씁니다."

장애 대응처럼 정해진 시간을 잡아먹는 역할이 계산에서 누락됐다는 지적입니다.

"이 계획은 캐파시티 98퍼센트예요. 하나만 늦어도 전부 밀립니다."

여유가 남아 있지 않아 작은 지연도 흡수하지 못하는 상태라는 경고입니다.

페이지덱에서는 스프린트 시작 이틀 전에 지현이 다음 주기의 가용 시간을 먼저 셉니다. 달력에서 휴가와 공휴일을 꺼내고, 규원이 잡아 둔 채용 면접 일정을 확인하고, 태오가 이번 주기에 온콜 당번이라는 것을 반영합니다. 그렇게 나온 숫자를 스프린트 플래닝 첫 화면에 띄워 두고 항목을 고르기 시작합니다. 숫자가 먼저 보이면 무엇을 뺄지 이야기하기가 훨씬 쉬워집니다.

숫자를 만드는 데 드는 시간은 길지 않습니다. 달력과 지난 주기 기록만 있으면 20분이면 끝납니다. 오래 걸리는 쪽은 언제나 그다음, 남은 자리에 무엇을 넣을지 정하는 대화입니다. 계산을 건너뛴다고 그 대화가 없어지지는 않고 2주 뒤로 미뤄질 뿐인데, 그때는 이미 항목 세 개가 밀린 상태라 이야기가 훨씬 어려워집니다.

같은 자리에서 자주 부딪히는 것은 수아가 가져오는 요청입니다. 계약을 앞둔 고객이 특정 기능을 물어 오면 그 건을 이번 주기에 넣어야 하는데, 넣을 자리가 없으면 무엇을 빼는지를 그 자리에서 정합니다. 예전에는 "일단 넣어 두죠" 로 끝났고 2주 뒤에 세 건이 남았습니다. 지금은 남은 시간이 숫자로 떠 있어서 넣는 순간 빠져나갈 항목이 같이 정해집니다. 계산이 한 일은 우선순위를 대신 정해 준 것이 아니라, 우선순위를 정해야 한다는 사실을 그 자리에서 드러낸 것입니다.

흔한 오해

가장 흔한 오해는 가용 시간을 남김없이 채운 계획이 좋은 계획이라는 생각입니다. 41인일이 나왔으면 41인일어치를 담아야 팀을 제대로 쓰는 것처럼 보이니 이렇게 생각하기 쉽습니다. 특히 계산에 공을 들인 뒤일수록 그 숫자를 정확한 한도로 대접하고 싶어집니다. 실제로는 그 숫자 자체가 평균에서 나온 추정치라서, 반은 그보다 나쁘게 끝납니다. 빈틈없이 채운 계획에는 장애 하나를 흡수할 자리가 없어서 첫 사고에 그 뒤가 전부 밀립니다. 그대로 두면 주기마다 두세 건이 넘어가고, 넘어간 항목이 다음 주기의 앞자리를 차지하면서 계산은 맞는데 계획은 계속 어긋나는 상태가 됩니다. 채우는 목표는 보통 80퍼센트 선에서 멈춥니다. 남은 20퍼센트는 놀리는 시간이 아니라 밀리지 않기 위해 지불하는 값이고, 그 자리가 비어 있으면 급한 건이 들어와도 다른 항목을 밀어내지 않습니다.

두 번째는 한 번 구한 값을 계속 쓰는 상수로 여기는 것입니다. 포커스 팩터 0.7을 힘들게 뽑아내고 나면 다음부터는 총량에 0.7만 곱하면 되니 간편합니다. 하지만 그 값은 그때 그 인원과 그때 그 업무 구성에서 나온 결과입니다. 신입이 두 명 합류하면 가르치는 시간이 붙어 값이 내려가고, 붙잡고 있던 기술 부채를 정리하고 나면 장애 대응이 줄어 값이 올라갑니다. 지난 분기 값을 그대로 쓰면 계획은 매번 조금씩 빗나가는데 어디서 빗나갔는지는 보이지 않습니다. 매 주기 끝에 배정한 양과 실제로 끝난 양을 나란히 적어 두고 값을 다시 매기는 편이 낫습니다. 한 주기에 팀이 실제로 끝낸 양의 평균인 벨로시티를 함께 쌓아 두는 팀이 많은데, 시간으로 센 그릇과 스토리 포인트로 센 그릇을 둘 다 갖고 있으면 한쪽이 흔들릴 때 다른 쪽으로 확인할 수 있기 때문입니다.

같이 보면 좋은 페이지

  • 일하는 방식

    계획을 세우는 일이 회의·역할·추정과 어떻게 맞물리는지를 한 번 위에서 내려다보면 이 계산이 어느 자리에서 쓰이는지가 분명해집니다

  • 포커스 팩터

    계산의 한가운데 있는 값이라, 이 숫자를 어떻게 구하는지 알면 나머지 절차는 더할 것이 별로 없습니다

하위 용어

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