재고는 만들어 놓고 아직 팔지 못한 제품을 말한다. 소프트웨어 회사에도 재고가 있다. 시디로 만들어 종이 박스에 넣은 채 창고에 쌓아놓은 것들을 말하는 게 아니라 소프트웨어 개발의 공정 과정에서 발생하는 산출물 중 쓰이지 않은 것들을 말한다. 소프트웨어 재고는 회계장부 상에 잡히지는 않지만 분명히 존재하며, 높은 비용을 초래한다.
소프트웨어 개발에서 재고는 다음과 같은 것들이다.
- 제품 개발 단계로 넘어가지 못한 사업 기획서
- 디자인 단계로 넘어가지 못한 제품 명세서
- 구현 단계로 넘어가지 못한 디자인 산출물
- 제품에 통합되지 못한 코드들
- 고객에게 전달되지 못한 제품들
소프트웨어이기 때문에 더 나쁜 점도 있다. 재고를 ‘떨이’로 털어버릴 수 없다는 점이다. 만약 가죽을 사서 가방이나 지갑을 만들어 파는 사업을 한다면, 창고에 쌓인 원자재들을 헐값에라도 처분할 수 있다. 하지만 소프트웨어의 산출물들은 그냥 방치된다. 하드디스크 한 구석에 버려지는 것이다.
그래도 다른 원자재처럼 시간이 지날수록 부식되어 쓸 수 없게 되진 않잖냐라고 할 수 있다. 그렇다. 디지털로 저장된 산출물은 훼손되지 않는다. 하지만 그게 산출물들의 가치가 그대로 유지된다는 뜻은 아니다. 디지털 세상의 발전은 워낙 빠르기 때문에 감가상각이 더 크게 발생한다.
그래서 소프트웨어 개발에서 발생하는 재고는 고스란히 회수되지 못하는 비용이 될 가능성이 아주 높다. 무형 자산의 재고 처리는 무척 어렵기 때문에 차라리 재고를 0 으로 만드는 노력을 하는 것이 훨씬 합리적인 것이다. 그리고 이런 접근법을 Lean methodology 라고 부른다.
자 그럼 재고 0 에 도전하기 위해 각 단계의 산출물을 만들어 내는 사람들은 어떻게 작업해야 할까? 사업 기획서를 쓰는 사람은 제품명세서에 필요한 만큼만 작업한다. 제품 명세서를 쓰는 사람은 디자인에 필요한 만큼만 명세한다. 디자인을 만들어 내는 사람들은 구현이 가능한 만큼만 디자인 한다. 코드를 만들어 내는 사람들은 고객이 원하는 출시 기준에 딱 맞는 정도로만 코딩한다. 원칙은 이러하다. 하지만 현실에서 불가능한 이야기라는 것은 더 설명할 필요가 없다.
그래서 린개발방법론 등에서 말하는 접근은 먼저 공정의 맨 앞과 맨 끝을 이어놓는 것 부터 시작한다. 사업 기획을 할 때 출시할 제품의 모습을 미리 그려 놓는다. 그리고 이 모습이 고객이 원하는 것인지 확인 작업을 거친다. 맨 앞과 맨 끝을 확실히 잡고 있으면 중간 공정에서는 단 하나의 원칙만 있으면 된다.
다음 단계에서 요청한 작업을 우선적으로 실행한다.
고객이 필요로 하는 제품의 청사진이 나오면 여기에서 필요한 기능들을 추려내 코딩을 한다. 하지만 걔중 어떤 기능들은 디자인 작업을 필요로 하게 되어 디자이너에게 전달된다. 디자인을 바로 착수 할 수 있는 일들은 바로 착수하지만 어떤 디자인 작업들은 그 전에 기능 및 요구사항에 대한 정리를 필요로 한다. 이렇게 역방향으로 필요한만큼의 요청이 전달되면, 불필요한 재고의 발생을 상당히 억제할 수 있는 것이다.
물론 실제로 린접근을 하게 되면, 다음 공정의 요청사항에 기대서만 작업할 순 없다. 실제로 각 단계별 작업자가 필요로 하는 정보는 이전 공정에서 와야 되기도 하고, 다음 공정에서 와야 되기도 한다. 유연히 대처할 필요가 있다.
요즘 유행하는 린스타트업도 이와 동일한 접근방법이다. 세부 사항에서는 보다 공학적, 과학적 접근을 하기 위한 실천법들이 있지만 본질은 동일하다. 재고를 줄여 놓는 다는 것은 회사가 유연해질 수 있다는 말이고, 이는 피벗팅을 통해서 다양한 시도를 해볼 수 있는 기회를 더 가질 수 있다는 말이다. 결과적으로 생존 활로를 찾아낼 가능성이 더 높아지게 될 것이다.