in 포스트

최고의 목수, 최고의 연장

최고의 목수는 망치질 할 시간에 망치질을 한다. 망치질 할 시간에 최고의 연장을 고른다고 시간 낭비하는 목수는 아마추어다.

물론 최고의 목수는 최고의 연장을 골라 연장통에 넣고 다닌다. 그리고 연장을 고르기 위해 많은 시간을 투자한다. 하지만 그것은 평상시 꾸준히 준비하는 것이다.

연장이라기 보다는 전우라고 하는게 맞겠다. 자신에게 알맞은 최고의 도구는 실제로 망치질하는 과정에서 깨닫는 것이지, 광고회사에서 보내준 카탈로그를 보고 10분만에 알 수 있는게 아니다.

최고의 목수는 당장 사용가능한 연장이 1000원짜리 다이소 중국제 망치라고 해서 당장해야 할일에서 도망가는 법이 없다. 최고의 연장들을 잃어버려도 언제나 자기 자신이 남아있기 때문이다.

아래는 아마추어가 해야할 일에서 도망치는 전형적인 예다.

"~서비스를 만드려고 합니다. 그런데 A, B, C 라이브러리(또는 서비스)가 있던데 A는 어떻고, B는 어떤데 고민이네요. 차라리 C를 쓰는게 나을까요? C를 썼을때 나중에 서비스에서 비용이 너무 많이 나오지 않을까요?"

이런 질문을 하는 사람이 "망치질"을 이미 진행중이거나, 만드려는 서비스의 기술적인 요구사항을 제대로 파악하고 있거나, 질문 뒤에 기술적으로 의미있는 고민을 털어놓는 다면 이건 좋은 질문이 될 수도 있다.

하지만 이런 질문을 하는 사람들 대부분은 자기가 어떤 서비스를 만들것인지 말하지 않는다. 뭉뚱그릴뿐, A, B, C의 특징 중 하나라도 제대로 파악하고 있는것도 없다.

A, B, C에 대한 장단점은 누군가가 인터넷에 분명히 정돈해놨을 것이고 구글 검색으로 쉽게 찾을 수 있을 것이다. 그럴 필요도 없이 A, B, C 웹사이트에 접속해서 프로모션 페이지에 가보는 것 만으로 장단점이 무엇인지 충분히 파악된다.

이런 질문을 묻는 사람들 대부분도 그걸 모를거라고 생각하진 않는다(모른다면 심각한 일이다).  이 질문의 진짜 의도는 해야할 일을 유예하는 자신을 합리화하는 것이다.

최고의 연장을 고르는데 시간을 너무 많이 써서, 무언가 실제로 만들 시간이 없었다고 합리화하기 위한 질문이다.

나야 저런 질문을 받으면 각각의 경우에 가장 최적의 비용으로 개발할 수 있는 도구를 성심껏 추천하긴 한다만, 어떤 일을 시작하기도 전에 그것이 실제로 성공할지 실패할지 어떻게 알 수 있단 말인가?

게다가 성공과 실패가 처음 선택한 "도구" 때문인지는 정말 알 수 없는 일이다.

어떤 일이 성공하거나 실패했을때의 대비책을 준비하는게, 그 일을 실제로 실행하는 것보다 더 중요할 순 없다.

하고자 하는 일을 끝낸 다음의 뒤처리는 나중의 자신에게 맡겨라. 나중의 자신이 과거의 자신을 욕하면서 알아서 치워줄것이다.

제품을 완성했을때, 제품이 너무 인기 많아 비용이 너무 많이 나올까 걱정하는건 꼴사납다.

내 경험상, 최적화를 하나도 안해서 서버 비용이 폭발하면, 부랴부랴 배워서 최적화하게 되어있다. 아니면 인기 덕분에 돈을 벌어 충분히 충당할 수 있게 된다.

악위적인 트래픽이 발생해서 비용이 너무 많이 발생했을때는 해당 플랫폼에 사정을 설명하면 비용을 지워주는 경우가 많다. 아니면 비용을 결제하지 말고 다른 플랫폼으로 튀던가. 하여간 나중의 똥은 어떻게든 치워지게 되어있으니 쓸데없는 고민하지 말라.

어떤 도구를 선택할까 고민하는데 지나치게 시간을 많이쓰는 사람들 대부분은, 사실 '진짜' 필요한 도구가 무엇인지 이미 알고 있다고 생각한다. 단지 도구를 고르는 척하며 할일을 유예하고 싶을 뿐.

그냥 당장 끌리는 도구를 선택해서 당장 망치질하라. 최고의 도구는 망치질 하는 과정에서 알아서 가려진다. 선택한 도구가 싸구려일까 걱정할 필요가 없다. 처음 선택한 도구가 싸구려라는게 나중에 밝혀지면 뭐 어떤가. 여태까지 박아넣은 못들이 사라지는것도 아닌데.

도구를 도중에 바꾸고 싶으면 도중에 바꾸면 된다. 싸구려라도 여태까지 쓰던 도구를 계쏙 쓰고 싶다면, 제품 완성후 다음 프로젝트에서 바꾸면 된다. 하여간 어느쪽이든 선택한 도구가 싸구려일까봐 시작도 못하는 것보단 백배 낫다.


도구를 따지지 말라고 하는게 아니다. 도구를 선택하는 과정과 일을 실행하는 것을 분리해서 생각하고, 도구를 선택하는 과정을 할일을 유예하기 위한 수단으로 삼지 말라는 것이다.

나는 도구를 정말 심하게 따진다. 대부분의 경우, 내가 선택한 도구가 프로젝트를 위한 최고의 도구인것으로 판명된다.

불행하게도 그것을 이해하는 똑똑한 사람들이 많지 않기 때문에 내가 선택한 도구가 아닌 다른 도구를 써야하는 상황을 자주 겪는다. 그리고 그때마다 나는 불평과 욕을 쉴세없이 내뱉는다.

특히 강제로 윈도우에서만 개발해야 하는 상황에서는 컴퓨터를 창문 밖으로 던져버리고 싶은 충동을 많이 느낀다(윈도우만 써야하는 환경이 맥이나 리눅스만 써야하는 환경보다 모든 면에서 끔찍한 것은 진실이다).

하지만 도구가 짜증난다고 해서 만들고 싶었던 제품이 갑자기 만들고 싶지 않게 되지는 않는다.