- 개요
프로젝트를 진행하다보면 시간에 쫒겨 흘러가는대로 개발을 하게 될 때가 있다. 특히 내 마음도 급해지는 순간이 오면, 누군가의 요구사항을 듣자마자 즉시 반영하고 싶은 조급함이 생긴다. 하지만 늘 그렇듯 조급함은 실수를 부른다. 프로그램의 신뢰도가 그 실력의 척도가 되는 개발자에 있어, 실수는 작다고 하더라도 크게 다가올 수 밖에 없다. 많은 거짓말로 외면받았던 양치기소년 처럼 말이다. 그렇기 때문에 개발자는 아무리 압박을 받고 긴급한 상황속에서도 침착하게 일을 진행해야 한다.
그렇다면 ‘침착하다’라는 건 뭘까? 조급함이 개발자의 적이라면, 그 적을 물리치기 위한 것은 그의 대척점인 ‘침착함’일 것이다. 하지만 이는 우리가 도달하고 싶은 ‘상태’인 것이지 그 자체로 해결책이 될 수는 없다. 침착함이라는 건 도대체 어떤 상태고, 어떻게 하면 그런 상태에 도달할 수 있는지에 대한 논의로 이어져야한다. 그렇지 않는다면 ‘침착하자’는 우리의 다짐은 결국 ‘일을 잘하자’고 말하는 의미없는 다독임이 될 뿐이다.
우리가 단순하게 조급함의 대척점으로 침착함을 찾은 것 처럼, ‘침착하다’의 그 의미보다는 ‘조급함’의 대척점이라는 사실에 주목해보자. 우리가 조급하면 어떤 행동을 하거나, 하지 않는가? 나는 아래와 같이 정리하고 싶다.
- 목표를 구체적으로 그리지 않는다.
- 바로 앞의 상황에만 시야가 고정된다.
- 전체의 맥락보다는 일부의 일시적 해결에 집착한다.
그러니 반드시 크고 작은 일의 시작에서, 항상 목표를 상기해야 한다. 일의 크기가 작아질 수록 그 목표는 구체적인 것이 되어야만 한다. 하나 하나의 구체적인 목표가 거대하고 추상적인 가치가 되기 때문에, 더 잘게 쪼개어질수록 우린 그것을 구체적인 하나의 사실로 치환할 수 있다. 이러한 구체적인 사실들이 부재할 때 우리는 우리의 약속을 잊게 되고, 그저 키보드 위에서 손가락 춤을 추는 광대가 되어버린다. 우리의 키보드 위 안무가 공허한 것이 되지 않도록 항상 그 역할을 부여해야할 것이다.
한 마디로 정리하자면 조급한 상태는 시야가 좁아진 상태와 같다. 종종 제 3자가 더 나은 솔루션을 생각해내는 것이 많은 증거 중 하나일 것이다. 그렇다면 어느정도 ‘침착함’에 대한 실마리를 잡을 수 있을 것 같다. 우리가 제 3자의 일에 참견하는 것과 같이, 조금 더 넓은 시야로 일을 바라보는 것, 그것이 바로 우리가 찾는 ‘침착함’이 아닐까?
그렇다면 우리는 어떻게 그 상태에 도달 할 수 있을까? 조급함이 좁은 시야를 의미한다면, 넓은 시야를 가지면 될 것 같다. 물리적인 현상에 기대어 생각해보면, 넓은 시야를 가지는 건, 멀리 보는 것과, 떨어져서 보는 것 두 가지 방법이 있다. 그럼 일을 할 때, 멀리서 보는 것, 그리고 떨어져서 보는 것은 각각 어떻게 하는 것을 의미할까?
멀리 보는 것은 ‘목적지를 다시금 상기하고, 미래의 장애물을 예상케’한다. 이를 일에 그대로 적용해본다면, 일의 목적에 대해 구체적으로 고민하는 것, 그리고 미래의 리스크를 파악하는 것으로 여길 수 있다. 개발자가 겪는 대부분의 문제도 그런 것들의 부재에서 온다.(엄밀히 말하면 개발 뿐 아니라 모든 일을 그르치는 것에 대해 그렇다.) 모든 일에는 목적이 있다. 대부분의 것들은 현재의 상태를 보다 나은 것으로 만들 ‘기대’를 수반한다. 그 ‘기대’를 실현하는 것은 사실상 자신 뿐 아니라 외부의 여러 요인이 기여하는 것이기 때문에 나의 힘만으로는 쉽지 않다. 하지만 내가 올바르고 명확한 기대를 하는 것이 외부의 여러 요인중에서 기회를 찾을 수 있는 관점을 만든다. 조급함은 멀리보는 것을 가로막고, 일을 단기적인 기대의 합으로 만든다.
그리고 그런 기대의 합은 대부분 꿈보다 해몽이 될 때가 많다. 오합지졸로 완성되어서 사후 해석의 힘에 성패가 정해진다는 뜻이다. 마치 일을 모두 끝마치고 “그래도 우리 열심히 했지”하고 유쾌한 공통점을 찾아내는 것과 같다. 개인의 건강한 마인드를 위해서야 그러한 꿈보다 해몽식의 자세는 도움이 되겠지만, 타인에게 ‘신뢰’를 줄 수 있는 방식은 아니다. 개발자는 항상 ‘어떠한 미래’에 대한 예측을 최대한 신뢰도 높은 방식으로 실현하여 ‘서비스’로 제공하는 것에 가치를 두어야 한다. 보다 넓은 시야로 약속할 수 있는 미래와 기대에 대해 이야기 할 수 있어야한다. ‘이렇게 해보니까 안돼서 안하기로 했어요’식의 말은 안통한다는 뜻이다.
이야기가 길어진 와중에 잊어버린 것이 하나 있다. 바로 떨어져 바라보는 것이다. 멀리보는 것이 목표를 상기하고 리스크를 파악하는 것이라면, 떨어져 바라보는 것은 나의 상황을 파악하는 것이다. 앞서 이야기 한 것과 같이 보통 일은 현재 상태를 보다 나은 상태로 만들기 위한 기대를 기반으로 한 행위다. 현재 상태를 논하지 않고서 나아갈 바람직한 상태를 이야기 할 수는 없다. ‘더 낫다’라고 하는 가치는 상대적인 가치이기 때문에 반드시 더 낫지 못한 상태를 비교하여 도출할 수 밖에 없다. 그것이 바로 현재 상태에 대한 이해다.
개발을 하다보면 궁극적으로 원하는 상태에 대해 집착하게 될 때가 있다. 나는 개발자라면 모두가 그리는 자신만의 이상적인 코드가 있다고 생각한다. 하지만 우리가 항상 그런 코드를 쓸 수 있는것도, 그리고 항상 그런 코드가 우리의 상황에 부합하는 것도 아니다. 때문에 우리는 항상 넓은 시야를 위해 한 발 떨어져 우리의 프로젝트를 바라보아야 한다. 우리 프로젝트가 가진 리소스는 무엇이고, 내가 가진 시간은 얼마나 되는지. 그리고 더 나아가 그 시간의 가치는 얼마이며, 내가 그 시간을 통해 만들어낼 수 있는 코드의 가치는 얼만큼의 것인지 고려해야한다.
그렇지 않으면 우리는 지나치게 먼 목적지를 설정하고 지키지 못할 약속을 하게될지도 모른다. 이건 마치 ‘내가 로또만 당첨되면 모두를 행복하게 할 수 있어요’와 같은 허황된 이야기를 하는 것과 같다. 혹은 ‘제게 무한한 시간과 돈을 주신다면 세상에서 제일가는 명품을 만들어보일게요’ 하는 것과 같다. 한 마디로 그런일은 절대 일어나지 않는 다는 것이다.
자, 그러면 실전의 영역으로 생각을 옮겨보자. 어떻게 하면 우리가 앞서 말한 멀리 보기와 물러나 보기를 일에 적용할 수 있을까? 사실 어쩌면 가장 간단하다고 할 수 있다. 그저 잠시 시간을 두고 생각하면된다. 구체적으로는 ‘내 상황과 일의 목표가 무엇일까?’를 고민하는 시간을 가지면 된다. ‘일의 완성’이 가질 모습을 구체적으로 표현하고, 각 과정에서 어떤 리소스를 필요로 하는 지, 그리고 내게 그럴 리소스가 있는지를 파악할 시간을 두면 된다.
사실 이 글은 자아성찰과도 같은 글이다. 스스로 일에 너무 빨리 뛰어들지 말라는 타이름과 같다. 생각하기 이전에 코드를 쓰지 말라는 말과 같다. 코드를 쓰며 하나하나 완성되는 프로그래밍의 즐거움을 즐기기에는 우리는 너무 프로의 세계에 있다. 어찌보면 생각 없이 바로 코드를 써내려가는건, ‘어떻게 하다보면 되겠지’ 라고하는 무책임함의 모습이자, ‘내가 재밌는 것 부터 할래’하는 유치한 모습일지도 모른다. 프로로서 개발자가 요구받는 건 자동화의 유쾌함이나 해법을 찾았을 때의 즐거움이 아니라, 누구나 신뢰할 수 있는 수준의 무형의 서비스를 완성도 높게 제공하는 것이기 때문이다. 앞 선 즐거움들이 물론 당신을 이 길에 이끌었겠지만, 프로의 세계는 그런 법이다. 자기의 즐거움보다 세상의 가치를 우선해야하는 것이다.
당신이 스스로를 먹이는 것이 아니다, 당신이 만드는 가치가 스스로를 먹인다. 항상 프로의 마음가짐으로 넓은 시야로 신뢰도 높은 개발을 하자.