나는 이미 존재하는 것들을 계속 다시 만들고 있었다
나는 이 프로젝트에서 이미 존재하는 것들을 만드느라 놀라울 만큼 많은 시간을 잃었다. 세상에 이미 있는 도구와 인프라를, 그것도 동작하고 검증되었으며 마음껏 가져다 쓸 수 있도록 공짜로 풀려 있던 것들을, 정성스럽고 매끈하게 그리고 애정을 담아 다시 구현했다. 그 하나하나는 시작하던 순간에는 완벽하게 정당해 보였다. 그러나 다 합쳐 놓고 보면, 이 노력 전체에서 가장 크고 가장 피할 수 있었던 낭비 중 하나가 된다.
이건 인정하기 불편한 일이다. 모든 사례마다 그 당시에는 건전한 엔지니어링 판단처럼 들리는 이유가 따라붙었기 때문이다. 그 이유들이 거의 언제나, 내가 똑바로 들여다보고 싶지 않았던 무언가에 대한 합리화였다는 것을 알아차리기까지는 꽤 오랜 시간이 걸렸다.
이유는 언제나 그럴듯하게 들린다
직접 만들겠다는 명분은 만들기가 결코 어렵지 않다. 내가 만든 것이 범용 도구보다 내 구체적인 필요에 더 잘 맞을 것이다. 블랙박스를 믿는 대신, 한 줄 한 줄까지 완전히 이해할 것이다. 기존 선택지에는 내가 피할 수 있는 결함과 거슬리는 점이 있다. 나는 그것이 안고 오는 의존성, 버전 변동, 남이 내린 결정들을 떠안고 싶지 않다.
이 논거들은 하나하나가 가끔은 정말로 사실이다. 바로 그 점이 이것들을 그토록 위험하게 만든다. 왜냐하면 대부분의 경우, 그것들은 진짜 이유가 전혀 아니기 때문이다. 그것들은 프로젝트에 무엇이 최선인지와는 아무 상관 없는 동기를, 그럴듯하게 들리도록 포장한 위장막이다.
만드는 일은 통합하는 일보다 재미있다
그 아래에 깔린 솔직한 사실, 내가 입 밖으로 꺼내고 싶지 않았던 사실은 이것이다. 새로운 것을 만드는 일은 창의적이고 만족스럽다. 그것은 재미있는 부분이고, 진짜 엔지니어링처럼 느껴지는 부분이며, 결정을 내리고 무에서 무언가가 형태를 갖춰 가는 것을 지켜보는 부분이다. 반면 남이 만든 도구를 통합하는 일은 자질구레하고 짜증나며 어딘가 모욕적이기까지 하다. 낯선 문서를 읽고, 내가 내리지 않았을 설계 결정들을 우회하고, 완전히 이해하지 못하는 상호작용을 디버깅하는 일이다.
그래서 나는 “그냥 내가 만들지”에 손을 뻗곤 했다. 그것이 올바른 판단이어서가 아니라 더 즐거운 쪽이었기 때문이다. 그리고 결정적으로, 나는 그 선호를 엔지니어링 판단의 언어로 치장하여, 내가 하고 싶은 것이 이끈 결정을 마치 프로젝트가 필요로 하는 것이 이끈 결정인 양 내세우곤 했다. 그 합리화들은 진심이었다. 그러나 그것들은 대체로 하나의 의상이기도 했다.
진짜 대가는, 정작 나만의 것이었던 그 문제였다
진짜 대가는 각각의 재발명에 쏟아부은 몇 주조차도 아니었다. 그것이 아무리 나빴다 해도 말이다. 진짜 대가는 그 몇 주가 무엇으로부터 빼앗긴 시간이었느냐다. 이미 풀린 문제를 다시 만드느라 보낸 모든 구간은, 진정으로 풀리지 않았고 진정으로 나만의 것이었던 단 하나의 문제 — 어떤 기존 도구도 나 대신 해결해 줄 수 없었던 것, 애초에 이 프로젝트가 존재한 이유 전부였던 그 구체적이고 어려운 질문 — 에 쓰지 못한 구간이었다.
그것은 오직 나만이 매달릴 문제였다. 세상은 일반적인 인프라는 이미 풀어 놓았고, 나 말고는 누구도 나의 실제 문제를 풀어 줄 사람이 없었다. 그런데 나는 거기서, 나의 가장 희소하고 가장 값진 자원 — 한정된 집중력 — 을 정작 그것을 가장 덜 필요로 하는 부분에 쏟고 있었고, 그것 전부를 필요로 하던 부분은 기다리고만 있었다. 나는 정확히 거꾸로 하고 있었다.
재발명은 영원히 내는 세금이다
내가 또한 과소평가했던 것은, 직접 만든 버전이 일회성 비용이 아니라는 점이다. 그것은 영구적인 부채다. 직접 만든 도구는 이제 영원히, 혼자서, 유지보수하고 디버깅하고 확장하고 문서화해야 할 내 몫이 된다. 그 버그를 찾아내고 고쳐 줄 커뮤니티는 없다. 내가 쓰는 문서 말고는 어떤 문서도 없다. 내가 이해하지 못하는 방식으로 그것이 망가졌을 때 물어볼 사람이 없다. 세상의 유일한 전문가는 나 자신인데, 나는 그것이 어떻게 동작하는지 이미 잊어버렸기 때문이다.
내가 거절했던 기존 도구는 여러 사람이 유지보수했고, 내가 그 가장자리에 부딪치기 한참 전에 무수히 많은 다른 사용자들이 부딪치며 단단해진 것이었다. 내 대체품은 정확히 한 명, 할 일이 산더미인 지친 사람 한 명이 유지보수했다. 그 비대칭은 만드는 날에는 드러나지 않는다. 그것은 그 이후 매일, 조용히, 다른 모든 것에 매겨지는 세금으로 드러나며, 그리고 복리로 불어난다.
직접 만드는 것이 정말로 옳은 경우
공정하게 말하자면, 나는 “아무것도 만들지 마라”로 과잉 교정하고 싶지는 않다. 때로는 직접 만드는 것이 정말로 옳은 판단이다. 문제의 그것이 바로 내 핵심 문제, 실제로 어려운 부분일 때라면, 당연히 직접 만든다. 그것이 곧 작업 자체니까. 적절한 선택지가 존재하지 않을 때. 기존 선택지들이 내가 구체적으로 명확히 설명하고 방어할 수 있는 이유로, 정말로 특정하게 잘못되어 있을 때.
마지막 그 지점이 내 시금석이 되었고, 이것은 유용한 시금석이다. 이미 존재하는 무언가의 대체품을 만들기 전에, 이제 나는 모든 기존 선택지가 나의 실제 필요에 대해 정확히 왜 실패하는지를 구체적으로, 소리 내어 말하도록 스스로에게 강제한다. “내 것이 더 좋을 것 같아서”가 아니다. “남의 것이 거슬려서”가 아니다. 구체적이고 방어 가능한 이유여야 한다. 그런 이유를 내놓지 못한다면 — 그리고 내가 바라는 것보다 훨씬 더 자주, 나는 내놓지 못한다 — 그건 엔지니어링 결정을 내리는 것이 아니다. 더 재미있는 선택을 합리화하는 것이고, 나는 지루함을 감수하며 이미 동작하는 것을 써야 한다.
독창성은 정말 필요한 곳에 써라
가장 큰 도움이 된 재구성은, 독창적인 노력을 엄격하게 한정된 예산으로 생각하는 것이었다. 깊고 새롭고 맨바닥부터의 작업을 할 수 있는 역량은 딱 그만큼뿐이고, 세상이 이미 풀어 놓은 문제에 그 한 단위를 쓸 때마다 그 한 단위는 오직 나만이 풀 수 있는 문제에서 곧장 빼앗긴 것이다. 독창성은 바로 그것이 희소하기 때문에 귀하며, 그것을 이미 풀린 문제에 쓰는 것은 가장 값비싼 종류의 낭비다. 그것이 밀어내는 것 때문이다.
그래서 역설적이게도, 규율이란 거의 모든 곳에서 가능한 한 지루하고 관습적이 되는 것이다. 빌리고, 재사용하고, 불완전하지만 동작하는 도구를 받아들이고, 남의 설계가 주는 짜증을 삼키는 것이다. 바로 그래야만 독창성이 실제로 본업인 단 한 곳에서 진정으로 독창적일 여력을 가질 수 있기 때문이다. 도착지를 위해 무언가를 남겨 두려면, 이동 수단에 대해서는 집요하리만치 비독창적이어야 한다.
더 깊은 교훈: 목표는 도착지이지 이동 수단이 아니다
결국 모든 것이 귀결된 지점은, 내가 하고 있는 줄도 몰랐던 하나의 혼동이었다. 나는 무언가를 만드는 것을 진전을 이루는 것과 슬그머니 동일시하고 있었다. 둘은 같지 않다. 도구는 이동 수단이다. 그것은 결코 도착지가 아니었다. 아무도 이미 수십 가지 형태로 존재하는 것을 아름답고 손수 깎아 만든 버전으로 만들었다고 나에게 보상해 줄 리 없었고 — 실제 심판인 시장은, 내가 다시 구현한 배관이 얼마나 우아한지 따위에는 조금도 관심이 없었다.
언제나 유일하게 중요했던 것은 진짜 목표를 향해 나아간 거리뿐이었다. 그리고 재발명이란, 내가 마침내 이해하게 된 바로는, 완벽하게 제자리에 멈춰 서 있는 가장 경치 좋고 만족스러운 방법 중 하나다. 생산적이라고 느끼고, 진짜 결과물을 만들어 내고, 열심히 일하고, 그러고는 정확히 아무 데도 도착하지 못하는 방법이다. 만드는 것으로 내가 회피하고 있던 그 일이야말로, 애초에 정말로 나의 몫이었던 유일한 일이었다.
— 신호도, 수익도 없습니다. 투자 자문이 아닙니다.