소프트웨어 프로젝트를 진행할 때 여러가지 이유로 추정을 하게 됩니다. "이 일을 하는 데 시간이 얼마나 걸릴까요?" 이 질문에 답을 하는 행위를 추정(estimation)이라고 합니다. 보통 계획은 추정 결과로 나온 추정치를 보고 잡습니다.
추정이 실패하는 데에는 여러가지 이유가 있습니다. 가장 최근의 사례를 예로 들어볼까요? 어떤 작업을 하는데 A라는 사람이 한 달이 필요할 거라고 추산했습니다. A는 해당 팀에서 소프트웨어 개발에 가장 정통한 사람이라고 부를 만한 능력을 가진 사람이었습니다. 그런데 막상 뚜껑을 열고 보니,그 일은 네 시간 만에 끝났습니다. 이런 경우, 추정은 실패했다고 보아야 합니다. 하지만 실제 업무 시간이 단축된 경우이니, 정말로 부정적인 효과로 이어진 추정이라고 보긴 힘듭니다. 만일 추정 대상이 된 업무가 프로젝트의 critical chain에 물려 있는 업무였다면, 이 실패한 추정은 프로젝트 기간 단축으로 이어졌을 것이고, 아무도 피를 보지 않았을 겁니다. 하지만 반대였다면?
위에서 예로 든 업무의 경우, 추정 실패 원인으로는 다음과 같은 것들을 들 수 있었습니다.
- cross-compiling에 대한 이해 부족
- autoconf와 같은 툴에 대한 이해 부족
따라서, 지식(knowledge)또는 노하우(know-how)가 부족했던 것을 추정 실패의 원인으로 추상화해 볼 수 있습니다. 대부분의 프로젝트가 그렇습니다. 추정은 '잘 모르기 때문에 하는' 행위라고 생각할 수 있습니다. 잘 알고 있다면, 추정할 필요가 없습니다.
소프트웨어 개발에서, 추정의 정확도를 높이는 가장 좋은 방법은 실험(experiment)입니다. 제 경험상, 실험은 다음과 같은 범주로 나누어볼 수 있었습니다.
- 구조 실험 (experiment on architecture)
- 성능 실험 (experiment on performance)
구조를 실험하는 것은 소프트웨어의 구조의 정당성을 확인하는 행위이고, 성능 실험은 어떤 소프트웨어가 실제 쓰이기에 합당한 성능을 보여주는지 알아보는 행위입니다. 이런 실험은 종종 테스트(test)와 혼동되기도 합니다만, 실험이 포괄하는 범위가 좀 더 넓기 때문에, 테스트는 그 하위 개념인 것으로 보는 것이 타당합니다.
에자일 세계에서는 실험을 종종 spike라고 부릅니다. 스파이크는 뭔가 잘 모를 때, 뭘 모르는지, 그리고 무엇을 몰랐는지 알아내기 위한 유용한 도구입니다. 소프트웨어 프로젝트를 진행하는 데 있어 가장 문제가 되는 지식의 불확정성(uncertainty)을 해결하는 가장 좋은 방법 중에 하나입니다.
스파이크를 진행하고 추정을 하면 추정의 정확도를 높일 수 있지만, 불확실성이 극도로 높을 때에는 스파이크를 진행하는 데 얼마나 걸릴 지 아는 것도 어렵다는 것이 문제가 되곤 합니다. 따라서 스파이크는 굉장히 숙련도가 높고 경험이 많은 사람들 한 두 명 정도가 모여 진행하는, 굉장히 집중적인 활동이 되어야 합니다. 아니면 프로젝트 후반부에 들어가는 시간과 맞먹을 정도의 오버헤드를 낳을 수도 있습니다.
추정이 보통 프로젝트나 스프린트 초반에 일어나는 행위라는 점을 감안하면, 스파이크도 가급적이면 사전적인 활동이 되어야 합니다. 그래야 추정치의 정확도를 높일 수 있고, 추정이 실패할 확률을 낮출 수 있습니다.
그러니, 무언가를 추정해야 하는데 그 무언가가 굉장히 중요하다면, 가급적 빨리 실험을 진행하는 것이 좋습니다. 회의를 해서 해결되는 문제라면 모두 모여서 머리 싸매고 해결책을 논하는 것이 좋겠습니다만, 회의를 해서 해결될 문제가 아니라면 무작정 비관적인 추산을 하는 것 보다는 하루라도 빨리 컴퓨터 앞에 앉아서 여러가지 대안들을 검증해 보는 것이 전체 프로젝트 진행을 위해서도 바람직합니다.
소중한 의견, 감사합니다. ^^
^^ 언제나!! 응원합니다.
2015.08.01 20:51 신고 [ ADDR : EDIT/ DEL : REPLY ]너무 감사합니다. :-)
2015.08.03 09:40 신고 [ ADDR : EDIT/ DEL ]오르막길있고
2015.08.03 15:17 신고 [ ADDR : EDIT/ DEL : REPLY ]내리막길 있잖아요 ^^
힘 내세요 ~ !
고맙습니다~
2015.08.03 23:55 신고 [ ADDR : EDIT/ DEL ]응원합니다.
2015.08.03 22:05 신고 [ ADDR : EDIT/ DEL : REPLY ]감사합니다~
2015.08.03 23:54 신고 [ ADDR : EDIT/ DEL ]Etri 다니셨던게 문제네요 ㅋㅋ...공무원 같은 엔지니어에서 세상에 변화를 줄 수 있는 엔지니어로 거듭나시는 상황이니 축하드립니다....그리고 1주에 술 한번 먹는거기자고 건강 잃었다고 하시면 술을 아예 드시드지 마시던지....더 열심히 드셔서 1주에 3,4번 먹고도 괜찮게 "개발"시키세요
2015.08.03 23:24 신고 [ ADDR : EDIT/ DEL : REPLY ]감사합니다. 그나저나 죄송한데 술주정은 딴데 가셔서 좀...
2015.08.03 23:53 신고 [ ADDR : EDIT/ DEL ]우연찮게 블로그에 담겨진 글들을 읽게 되었는데, 연배도 그렇고 같은 엔지니어로서 공감되는 점이 많았습니다. 멀리가셔서도 꼭 건승하시고, 몸건강하세요. 사실 OLYMPUS는 오늘 읽으려고 남겨두었는데.. 삭제되서 아쉬웠어요. 글 너무 잘쓰시네요 재미있게 읽었습니다. 감사합니다.
2015.08.04 16:57 신고 [ ADDR : EDIT/ DEL : REPLY ]고맙습니다. 건승하세요~
2015.08.04 18:15 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2015.08.06 14:45 [ ADDR : EDIT/ DEL : REPLY ]글쎄요 퍼가실만한 글이 있으실지 모르겠으나.. ㅎㅎ 그러고 싶으시다면 상관 없습니다. 감사합니다.
2015.08.06 21:43 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2015.08.07 14:21 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2015.08.15 09:33 [ ADDR : EDIT/ DEL : REPLY ]네 그런 용도라면 편하게 하셔도 됩니다. 감사합니다.
2015.08.17 10:34 신고 [ ADDR : EDIT/ DEL ]