Client는 왜 늘 "간단한 기능" 이라고 말하는가?
자체 제작하는 프로그램 혹은 내부 하드웨어 제품을 개발하기 위한 프로그램이 아닌 이상에는 대부분 프로그램 개발에는 클라이언트라는 사람들이 존재한다. 속된말로 “갑” 혹은 물주, 발주처, 돈을 주는 사람 이런 사람들로 불리우는 사람들 말이다. 프로그램 외주 일을 몇번 하면서 몇명의 클라이언트들을 만나 보았다. 사장님도 있었고, 발명가도 있었고, 교수님도 있었는데, 그들의 공통점은 첫 마디가
“아주 간단한 거야”
라는 것이다. 처음에 들으면 간단하다. 이리저리 옮길수 있었으면 좋겠고, 사진에 손가락을 누르면 그냥 쫙 넘어가면돼요 등등등. 그들의 설명을 들으면 굉장히 원하는 것은 단순하다. 그리고 나서 얼마가 걸릴지, 어느 정도의 비용이 소요될지를 내게 물어보면, 사실 그 자리에서 확답을 드릴수 없는 것이 현실이다.
외주 일을 하면서, 가장 중요한 것은 바로 그 시점에 절대 비용과 시간에 대한 애기를 해서는 안된다는 것이다. 그것은 마치 고객이 프로그래머에게 마케팅의 주문을 거는 시점이라고 볼 수 있다. 이건 쉬운거니까, 금방 될거다 라고 말이다. 실제로 필자 역시 그 자리에서 확답을 주었다가 나중에 기간을 연장한적도 있다. 이상하게도 그 자리에서는 프로그램을 개발하는 나 역시 그 기능을 가진 앱이나 프로그램이 별거 아니라고 생각해 버린다.
다시 한번 집에 와서, 책상머리에 앉아서 곰곰히 생각해 봐야한다. 이 기능을 위해서 무엇무엇이 필요하고, 또 내가 가지고 있는 혹은 해 본 기능과 겹치는 것이 있는지, 혹은 내 인맥을 통해서 해결할 수 있는 기능이 있는지 말이다. 그리고 나서 시간과 비용을 스스로 측정해 봐야 한다.
비용측정에 있어서 솔직히 내가 해본 기능이라고 해서 싸게 부르진 말자. 너무 싸게 부르는 것은 프로그래머 자신을 위해서 안 좋을 뿐만 아니라, 업계 전체에도 영향을 미친다는 것을 명심하자. 프로는 가격으로 말하는 거라는 명언처럼 말이다.
아무튼, 고객들이 말한 ‘간단한 기능’이라는 것은 전체 프로젝트 기간중 반 이상 혹은 중간 미팅을 할때마다 바뀌어지거나 업그레이드 되기 마련이다. 처음에는 손가락으로 따라 다니기만 하면 된다는 기능에서, 나중에는 멀티터치로 이미지가 확확 리사이징 됐으면 좋겠다는 변경, 분명히 처음과는 확연히 다른 기능이고, 다른 시간과 다른 비용이 소요된다. 그럼에도 불구하고, 우린 어떻게 해왔는가.
별거아니라는 말과 함께, 다음날 부터 코드를 뜯어 고치다 못해, 밤을 새는 자태들을 하고 있지는 않은지. 실제로 많은 요구사항들이 변한다. 어찌보면 요구사항 명세서를 작성하는 것이 가장 바람직하고, 더 바람직한 것은 요구사항 명세서와 변경시에는 추가적인 비용과 시간이 투입된다는 것을 문서로 명시하는게 가장 좋을것이라고 생각되어진다. 물론 현실에서는 쉽지 않겠지만, 이상을 추구하지 않으면 현실은 늘 시궁창일 뿐이다.
어찌보면, 비 프로그래머인 고객들에게 간단한 기능이라고 치부 될수 있는 것들이 우리에게는 개발자 커뮤니티 뒤지고 외국 사이트 뒤지고, 아는 사람에게 물어봐서 해결해야 하는것일지도 모른다. 때론 고객의 간단한 기능에 대해서 왜 어렵고 쉽지 않은지에 대해서 반론을 제기하는것도 나쁘지 않다고 생각한다. 물론 알아 들을지 모르겠지만. 결론은 이세상엔 간단한 기능이란 없다는 것이다. 적어도 프로그래머에겐 말이다. 그러므로 절대 고객들의 ‘간단한 기능’이라는 말에 속지 말자. 정말 간단한 기능이라고 치부해 버린다면, 싸게 측정된 비용만큼이나 싼 프로그램 된다고 생각하면, 우리가 MSDN 뒤져가면서 고생하며 공부했던 시간들이 아깝지 않은가. 나에게 미안해 진다.
PS) 두서없이 썼네요. 주저리주저리. 그래두 간단한 기능은 없습니다.