작은 스토리 만들기
Getting Small Stories
시간 단위 추정(estimation)과 그것이 과연 좋은 아이디어인지(제 생각엔 절대 아닙니다만)에 관한 토론 타래에서, 오늘 아침 Robin Dymond가 제게 이런 도전을 던졌습니다:
"당신은 팀이 하루 만에 완료할 수 있을 정도로 스토리를 작게 쪼개야 한다고 수년간 주장해 왔습니다. 제 요청은, 실제로 사소하지 않은 예제(non trivial examples)를 사용하여 그 방법을 글로 쓰고 연습 예제를 통해 애자일 커뮤니티에 보여달라는 것입니다. 당신이 어떻게 하는지 더 배우고 싶습니다."
여기, 즉흥적으로 작성한 답변 하나가 있습니다.
단일 인수 테스트 (Single Acceptance Test) 제가 아는 가장 우아한 방법은 해당 기능에 대한 인수 테스트(Acceptance Tests)를 고려하는 것입니다. 그런 다음 가장 간단한 것부터 하나씩 해나가는 거죠. 저는 이 아이디어를 Neil Killick(#NoEstimates 운동을 하는 사람 중 한 명)으로부터 처음 알게 되었지만, 저도 모르게 수백만 번은 이미 그렇게 해왔다고 생각하고 싶네요.
하지만 또 다른 재미있는 방법이 있습니다.
바보 같은 아이디어 하나 (One Dumb Idea) 저는 종종 일주일 안에 완료할 수 있으면서도 제품처럼 보일만한 것을 만들어보라는 도전을 받습니다. 제가 뭔가를 생각해내지 못하는 경우는 드뭅니다. 하지만 흥미로운 건 그 다음에 일어나는 일입니다. 기억을 더듬어, 사실 관계를 크게 해치지 않는 선에서 이야기를 명확히 하기 위해 조금 다듬은 예시를 들어보겠습니다.
Chet과 제가 어느 케이블 TV 회사를 방문했을 때였습니다. 그들의 과제는 이미 기존 방식대로 구현해 둔 것에 대한 것이었죠. "만약 우리 제품이 유료 시청(pay-per-view) 영화라면 어떨까요? 시청자는 메뉴에서 영화를 선택하고, 시청하고, 일시 정지하고, 되감기 등을 할 수 있어야 합니다..." 그들은 계속해서 설명했습니다. 그러고는 이렇게 말했죠. "그중 일주일 만에 할 수 있는 부분(slice)은 하나도 없습니다."
우리는 대화를 좀 나눴습니다. 제가 물었죠. "이 프로젝트 시작할 때, 채널을 통해 영화를 재생하는 기능은 있었나요?" 그들은 당연히 영화 채널들이 계속 돌아가고 있었으니 그렇다고 했습니다.
그래서 제가 말했습니다. "첫 번째 조각(slice)으로, 비밀 채널에서 특정 영화를 계속 틀어놓고 시청자가 보고 싶으면 그 채널을 클릭하게 하는 건 어떨까요? 그건 거의 이미 되어 있는 거나 마찬가지잖아요."
개중에는 그 예시를 싫어하는 사람도 있었고 좋아하는 사람도 있었습니다. 그걸 어떻게 "완료(done)"라고 볼 수 있냐는 반대 의견이 많았습니다. 반대 의견은 전부 유료 시청의 추가 기능에 관한 것이었습니다. "영화 처음부터 못 보잖아요." "다른 영화 보고 싶으면요?" "신용카드를 모르면요?"
Chet과 저는 아마 몇 번이고 이렇게 말했을 겁니다. "음, 영화 되감기는 새로운 스토리예요." 또는 "신용카드 없이 비밀 채널로 전환 안 되는 것도 새로운 스토리죠." 한 번은 우리가 "그럼 일단 사장님 법인카드로 모두 결제하는 걸로 시작하면 어때요?"라고 했던 기억도 나네요.
곧이어 — 몇 시간이나 며칠이 아니라, 몇 분 만에 — 방에 있던 어떤 엔지니어가 말했습니다. "음, 그건 안 되겠지만, 우리가 할 수 있는 건 이런 겁니다..." 그러고는 그들이 실제로 할 수 있었던 무언가를 설명했습니다.
항상 이런 식입니다. 누군가가 하루나 일주일(당시의 목표 기간이 뭐든 간에) 만에 할 수 있는 바보 같은 스토리 예시를 내놓습니다. 그 누군가는 보통 저입니다. 저는 바보 같은 아이디어로 가득 차 있고, 그걸 내뱉는 걸 꺼리지 않거든요.
갑자기 상황이 바뀝니다. 우리는 한 단계만에 "불가능"에서 바보 같지만 "가능한" 무언가를 아는 상태로 넘어갑니다. 회의 분위기는 순식간에 "그건 할 방법이 없어"에서 아이디어를 개선하거나 더 나은 방법을 찾는 쪽으로 바뀝니다.
Chet과 저는 온갖 종류의 도메인에서 따로 또 같이 이 방법을 수없이 사용해 왔습니다. 거의 작동할 뻔한 '바보 같은 아이디어 하나'면, 팀을 "할 수 없어"에서 "그래, 하지만 이게 더 나은 방법일 거야"로 전환시키기에 충분합니다.
현실 세계 (The Real World) Alistair Cockburn의 "코끼리 카르파초(Elephant Carpaccio)" 연습을 언급하며 Robin은 이렇게 말했습니다:
"저는 Alistair의 코끼리 카르파초를 잘 알지만, 그 연습은 계산기를 사용하기 때문에 개발자들은 그 예제가 자신들의 문제에는 적용되지 않는다고 생각합니다."
그들은 항상 그렇게 생각합니다. 그들의 도메인이 아닌 예제를 백만 개 가져와도 여전히 그렇게 생각할 겁니다.
네, 맞아요. 하지만 "현실 세계"에서는, 지금까지 녹화된 모든 영화를, 전 세계 누구의 집으로든 실시간으로 전송해야 하죠. 주요 매체의 모든 리뷰를 포함하고, 서라운드 사운드가 있든 없든, 와이드 스크린이든 아니든, 3D든 평면이든, 포트란(FORTRAN)을 포함한 알려진 모든 언어의 자막을 지원하고, 적록색맹을 위해 색상을 보정하고, 모든 주요 신용카드와 캐나다 식료품점 쿠폰까지 사용 가능해야 하며, 야한 장면은 가리거나 더 잘 보이게 하고, 일시 정지와 줌인을 지원하고, 배속 재생과 슬로우 모션은 물론 일반 속도도 지원해야 하며, 어떤 전선이나 케이블도 사용하지 않고, 어떤 스펙트럼의 전자기파도 방출하지 않으면서, 태양계 내 어느 위치에 있든 TV, 컴퓨터, 태블릿, 폰, 시계, 혹은 새끼손가락 반지 등 어떤 기기로든 지연 시간 없이 전송해야 합니다. 현실 세계에서는 절대 못 하죠.
네, 뭐, 방금 우리가 해냈네요. 한 시간도 안 걸렸을걸요.
그럼에도 불구하고 (Nonetheless) 필요한 건 바보 같은 아이디어 하나, 혹은 단 하나의 인수 테스트뿐입니다. 저는 보통 PO(Product Owner)가 거의 "엔드 투 엔드(End-to-End)"라고 상상할 수 있는, 일주일 안에 끝낼 수 있는 스토리 하나를 찾으려고 노력하는 것으로 시작합니다. 팀이 당장 하루 만에 할 수 있는 건 아닐 수도 있습니다.
과연 그럴까요? 우리 CSD 수업에서는 실제 애플리케이션을 만들고 90분짜리 스프린트를 돌립니다. 팀들은 그 스프린트 내에 여러 개의 스토리를 배포합니다. 뭐, 첫 번째 스프린트는 아니겠지만요. :)
그렇긴 하지만... (Yabbut ...) 물론 Robin은 스토리 자르기 방법에 대한 더 포괄적인 모음집을 요청한 것 같습니다. 제 생각엔 그냥 제가 잠시 자리를 비워주길 바란 것 같기도 하고요. 예시 목록을 만드는 것도 재밌을 것 같네요. 하지만 그것들은 모두 같은 특징을 가질 겁니다. 팀과 함께 앉아서 이야기를 나누거나, 적어도 그들끼리 이야기하게 만들어야 한다는 것이죠.
제 방식은 누군가가 바보 같은 아이디어를 내야 하는데, 그건 어렵지 않지만, 그걸 입 밖으로 꺼내는 게 더 어렵습니다. 그리고 — 추측하건대 — 그 아이디어가 즉시 무시당하지 않고 논의되려면, 그 사람이 충분히 존경받거나, 아니면 아예 낯선 사람이어야 할 겁니다.
Neil의 방식인 '단일 인수 테스트'를 수행하는 게 더 나을 수도 있습니다. 몇 번 시도해 보면 알겠죠. 하지만 제 방식이 더 재미있는 건 확실합니다. 그건 장담해요.