클린 소프트웨어 - 계획 세우기

계획 세우기

XP에서 일을 계획하는 방식

초기 탐색

처음부터 사용자 스토리를 확정하는 것은 매우 어려운 일이다. 고객은 매번 새로운 사용자 스토리를 작성할 것이며 이는 프로젝트가 완료될 때까지 계속될 것이다.

개발자는 스토리의 구현에 필요한 비용을 상대적으로 계산한다. 각각의 스토리에 몇몇 스토리 포인트를 작성한다. 스토리 포인트가 구현에 필요한 상대적인 비용을 나타낸다.

스파이크, 분할, 속도

스토리는 적절한 크기로 분할되어야 한다. 스토리가 분할되거나 합쳐지면 이에 소요될 비용을 다시 추정해야 한다.

포인트가 5개라고 추정했던 스토리가, 포인트가 10개인 여러 개의 스토리로 분할되는 것은 전혀 이상한 일이 아니다. 오히려 스토리가 좀 더 정확하게 추정된 것이다.

상대적인 추정은 스토리의 절대적 크기를 알지 못하므로 스토리를 분할하거나 합병하는 데 있어서 도움을 주지 못한다. 이 때 속도라는 개념을 사용하여 스토리의 추정에 속도를 곱하면 실제 소요 기간 추정 결과를 알 수 있다.

프로젝트가 진행됨에 따라 각 반복마다 완료한 스토리의 포인트 수를 측정할 수 있으므로 속도는 점점 더 정확하게 측정된다. 처음에는 한두개의 스토리로 프로토타입을 만들어 보면서 팀의 속도를 추정할 수 있다. 이 단계를 스파이크라고 한다.

릴리즈 계획 세우기

릴리즈는 보통 2~4달 간격으로 이루어진다. 고객은 해당 릴리즈에서 구현되었으면 하는 스토리와 대략적인 구현 순서를 선택하며, 현재 속도에 알맞는 수준보다 더 많은 스토리를 선택할 수 없다.

릴리즈 계획은 속도가 더 정확하게 추정되면서 언제든 조정될 수 있다.

반복 계획 세우기

반복은 보통 2주 간격으로 이루어진다. 고객은 해당 반복에 구현되었으면 하는 스토리를 선택하며, 현재 속도에 알맞는 수준보다 더 많은 스토리를 선택할 수 없다.

개발자는 선택된 스토리를 구현하기 위한 가장 합리적인 순서를 찾아서 구현해야 한다.

일단 반복이 시작되면 고객은 그 반복의 스토리를 변경할 수 없다.

모든 스토리 구현이 완료되지 않은 경우에도 반복은 정해진 날짜에 끝난다. 이를 피드백하여 반복의 속도를 계산하고 일정을 조정하여 팀이 계획을 유지할 수 있도록 한다.

태스크 계획 세우기

반복을 새롭게 시작할 때 다시 계획을 세운다. 개발자는 스토리를 분할하여 개발 태스크로 만든다. 각 개발자가 태스크에 참여할 때 개발자는 그 태스크를 임의의 태스크 포인트로 추정한다. 태스크 포인트는 개발자가 온전히 프로그래밍에 집중했을 때 구현 가능한 단위를 말한다.

개발자는 어떠한 종류의 태스크에든 참여할 수 있다. 이는 개발자가 전체 프로젝트에 대해 알 수 있게 되어 팀이 더욱 탄탄해지고 더 많은 정보를 얻는 결과를 가져온다.

어떠한 팀원도 자신이 처리할 수 있는 태스크 포인트보다 더 많은 포인트에 참여하지 않는다.

태스크 선택 과정은 유연하게 이루어질 수 있다. 모든 태스크를 완료할 여유가 없다면 해당 태스크를 취소해 달라고 고객에게 부탁할 수 있고, 여유가 있다면 고객에게 스토리를 더 달라고 요청할 수 있다.

반환점

반복이 반쯤 진행되었을 때 고객과 개발자는 미팅을 갖는다. 이 시점에 해당 반복에서 계획한 스토리의 절반 정도는 구현되어 있어야 한다. 그렇지 않으면 태스크와 책임을 재분배하여 정해진 시간 내에 완료될 수 있게 해야 한다.

태스크를 완료하는 것이 목표가 아니라, 스토리를 완료하는 것이 목표가 되어야 한다.

반복

각 반복의 마지막에는 구현된 것을 고객에게 시연하고 피드백을 받는다.

이를 통해 고객은 진행 상황을 수시로 확인할 수 있고 속도도 측정할 수 있어 계획을 더욱 정확하게 설정할 수 있다.

결론

반복에서 반복으로, 릴리즈에서 릴리즈로, 프로젝트가 진행됨에 따라 예측 가능하고 안정적인 리듬을 찾아간다.

이해당사자는 자주 구현된 것을 확인하여 피드백을 제공한다.

개발자는 마음 편하게 작업할 수 있는 양의 태스크를 할당받고 작업하여 자신의 기량을 최상으로 유지한다.

관리자는 각 반복마다 팀의 속도를 측정하여 프로젝트를 관리한다. 독단적이고 비현실적인 기한을 설정하지 않아야 한다.