풀 시스템
Pull System
개념
일을 위에서 배정하지 않고, 여유가 생긴 사람이 대기 열에서 다음 일을 직접 가져가게 하는 규칙입니다.
등장 배경
일을 나눠 주는 쪽에서 보면 배정은 자연스러운 방식입니다. 할 일이 여덟 개 있고 사람이 넷이면 둘씩 나눠 주면 됩니다. 문제는 받는 쪽의 상태가 계산에 들어가지 않는다는 점입니다. 이미 셋을 붙잡고 있는 사람에게도 넷째가 갑니다. 배정하는 쪽에서는 그 셋 가운데 둘이 남의 응답을 기다리며 멈춰 있다는 사실이 보이지 않습니다.
페이지덱이 그랬습니다. 지현이 주 초에 개발자 넷에게 항목을 배정했습니다. 주 끝에 세어 보니 시작된 항목은 여섯이고 끝난 항목은 하나였습니다. 태오 혼자 세 항목을 동시에 들고 있었는데, 하나는 코드 리뷰를 기다리는 중이었고 하나는 디자인 확정을 기다리는 중이었고 실제로 손을 대고 있는 것은 하나였습니다. 나머지 둘은 시작된 상태로 멈춰 있었습니다.
시작된 일은 끝나기 전까지 아무 값도 내지 않습니다. 그런데도 관리해야 하고, 다른 사람이 물으면 설명해야 하고, 며칠 지나면 다시 붙잡을 때 맥락을 되짚어야 합니다. 풀 시스템은 시작 시점을 정하는 권한을 배정하는 쪽에서 하는 쪽으로 옮깁니다. 아무도 일을 주지 않고, 끝낸 사람이 다음 일을 직접 가져갑니다.
작동 방식
일이 흐르는 방향과 반대로 신호가 갑니다. 앞 단계가 밀어 넣는 것이 아니라 뒤 단계가 끌어갑니다. 정할 것은 다섯 가지입니다.
- 대기 열을 만듭니다. 다음에 할 일을 순서대로 세워 둡니다. 순서를 정하는 일은 여전히 사람이 하고, 대개 제품을 맡은 사람이 정리합니다. 이 열이 없으면 여유가 생긴 사람이 무엇을 가져갈지 그 자리에서 판단해야 하고, 그러면 목소리 큰 요청이 먼저 들어옵니다.
- 끌어가는 조건을 정합니다. 지금 들고 있는 일을 끝낸 사람만 다음을 가져갑니다. 동시에 몇 개까지 들 수 있는지는 WIP 제한으로 못 박습니다. 동시에 진행할 수 있는 작업 수의 상한인데, 이 상한이 없으면 끌어가는 규칙이 있어도 한 사람이 계속 가져갑니다.
- 빈 자리를 신호로 씁니다. 칸반 보드에서 한 열의 카드 수가 상한 아래로 내려가면 그것이 곧 끌어갈 수 있다는 표시입니다. 작업을 상태별 열에 놓아 흐름을 보여 주는 판인데, 신호를 따로 만들지 않고 판의 상태가 신호가 되는 것이 이 방식의 특징입니다.
- 맨 위에서 가져갑니다. 열에 있는 것 가운데 마음에 드는 것을 고르지 않고 맨 위를 가져갑니다. 고를 수 있게 두면 어려운 항목이 계속 밀려 맨 아래에 남습니다.
- 끌 수 없을 때를 정합니다. 앞 열이 비어 있는데 내 열은 상한에 차 있으면 새 일을 가져오지 않습니다. 이때 하는 일은 기다리는 것이 아니라 막힌 항목을 푸는 쪽으로 붙는 것입니다. 여러 사람이 한 항목에 붙어 먼저 흘려보내는 방식이 여기서 나옵니다.
배정 방식과 갈리는 지점은 하나뿐입니다. 시작 시점을 누가 정하는지입니다. 무엇을 만들지와 어느 순서로 할지는 여전히 배정하는 쪽이 정합니다. 그래서 이 규칙을 도입해도 우선순위 결정 권한은 옮겨 가지 않습니다.
쓰이는 곳
가장 먼저 쓰이는 자리는 보드를 쓰는 팀의 일상입니다. 아침 회의에서 누가 무엇을 할지 나누지 않고, 각자 자기 열이 비면 가져갑니다. 회의 시간이 줄어드는 것은 부수 효과이고, 실제로 달라지는 것은 동시에 열린 항목 수입니다.
나머지 세 자리는 이렇습니다.
- 단계 사이 — 개발이 끝난 항목을 검수 쪽에 밀어 넣는 대신 검수 쪽이 여유가 생기면 가져갑니다. 이렇게 두면 검수 앞에 쌓인 항목 수가 눈에 보이고, 그 숫자가 병목이 어디인지 알려 줍니다. 전체 흐름의 속도를 결정해 버리는 가장 느린 구간입니다.
- 문의 응대 — 들어온 문의를 담당자별로 나눠 주는 대신 하나의 열에 쌓고 끝낸 사람이 다음을 가져갑니다. 사람마다 처리 속도가 다른 업무에서 배정 방식은 반드시 한쪽에 밀립니다.
- 팀 사이 요청 — 다른 팀에 일을 넘길 때 던지지 않고 그 팀의 열에 넣습니다. 열이 길면 받는 쪽이 지금 무엇을 처리 중인지 묻지 않아도 언제쯤 될지 가늠할 수 있습니다.
절충이 필요한 자리도 있습니다. 주기를 끊어 계획하는 팀은 주기 시작에 할 일을 미리 정해 둡니다. 이때는 주기 안에서만 끌어가는 방식으로 씁니다. 마감이 고정된 외부 약속이 걸린 항목은 맨 위로 올리는 예외를 함께 정합니다.
실무 용례
"배정하지 말고 열에 올려 두세요. 끝낸 사람이 가져갑니다."
시작 시점을 하는 쪽에 맡기자는 제안입니다.
"지금 셋 들고 있으면 새로 가져가지 마세요. 리뷰 기다리는 것부터 밀어 주세요."
상한에 찼으니 막힌 것을 푸는 쪽에 붙으라는 요청입니다.
"검수 앞에 열두 개가 쌓였어요. 병목이 거기입니다."
열에 쌓인 양을 신호로 읽는 말입니다.
페이지덱은 그 주 이후로 배정을 멈췄습니다. 지현이 열을 정리하고 순서를 매기는 일까지만 하고, 누가 무엇을 언제 시작할지는 정하지 않습니다. 개발 열의 상한은 사람 수와 같게 두었습니다.
두 달 뒤 동시에 열린 항목이 여섯에서 넷으로 줄었고, 실제 작업을 시작한 뒤 끝낼 때까지 걸린 시간인 사이클 타임이 평균 9일에서 5일로 내려갔습니다. 한 주에 끝나는 항목 수를 세는 처리량은 거의 같았습니다. 더 많이 끝낸 것이 아니라 시작한 것을 더 빨리 끝낸 셈입니다.
흔한 오해
각자 하고 싶은 일을 고르는 방식이라고 보는 경우가 가장 많습니다. 끌어간다는 말이 선택처럼 들리기 때문입니다. 하지만 가져가는 것은 열의 맨 위이고, 그 순서는 여전히 제품을 맡은 사람이 정합니다. 선택으로 다루면 각자 익숙한 영역만 가져가게 되고, 아무도 손대고 싶지 않은 항목이 몇 달째 아래에 남습니다. 그 상태가 되면 열의 순서가 아무 의미도 갖지 않습니다.
이 방식으로 바꾸면 일이 빨라진다고 보는 것도 흔합니다. 사이클 타임이 내려가니 그렇게 읽힙니다. 그런데 한 주에 끝나는 항목 수는 대개 그대로입니다. 사람이 늘지 않았으니 총량이 늘 이유가 없습니다. 달라지는 것은 같은 일이 여섯 개로 나뉘어 멈춰 있는 대신 넷으로 줄어 먼저 흐른다는 점입니다. 빨라진다고 기대하고 도입하면 두 달 뒤에 처리량을 보고 실패로 판정하게 되고, 정작 개선된 예측 가능성은 계산에 들어가지 않습니다.
같이 보면 좋은 페이지
마지막 업데이트 2026-09-16