나는 내 숙제를 내가 채점하고 있었다
몇 주 동안, 나는 놀라운 진전을 이루고 있었다 — 그리고 그것을 증명할 수치까지 갖고 있었다. 내 코드베이스에는 품질 점수가 있었고, 그 점수는 세션을 거듭할수록 완벽한 100점을 향해 올라갔다. 나는 커밋 히스토리를 열어 그 선이 올라가는 것을 지켜볼 수 있었다.
문제가 딱 하나 있었다. 그 점수를 고안한 것도 나였고, 그것을 채점하는 것도 나였으며, 그 점수가 측정하는 시험은 내가 만들고 있던 것이 실제로 작동하는지와는 거의 아무 상관이 없었다.
진전처럼 느껴졌던 그 수치
어느 시점엔가 나는 내 코드에 품질 등급을 매기기 시작했다 — 얼마나 깔끔한지, 얼마나 잘 정리되어 있는지, 얼마나 “끝난” 느낌인지에 대한 감각 — 그리고 진행하면서 그것을 추적했다. 68이 85가 되었다. 85가 95가 되었다. 95는 슬금슬금 100을 향해 기어갔다. 매 단계가 내가 가리켜 보일 수 있는 성취처럼 느껴졌고, 길고 불확실한 프로젝트에서 믿음직하게 올라가는 수치는 엄청나게 위안이 된다.
그것이 얼마나 좋게 느껴졌는지는 아무리 강조해도 지나치지 않다. 모든 세션이 전진의 증거로 끝났다. 나 자신의 채점표대로라면, 나는 이기고 있었다.
점수는 진짜였지만, 진전은 아니었다
문제는 그 점수가 측정한 것은 장인정신 — 정돈됨, 구조, 내 작업에 대한 나 자신의 자부심 — 이었지, 이 프로젝트가 존재하는 단 하나의 이유가 아니었다는 점이다. 그 시스템은 몇 주 전과 비교해 실제 본분에서 조금도 나아지지 않았다. 나는 목표에서 조용히 떨어져 나온 어떤 양에 대해, 아름답게 상승하는 그래프를 그려놓고 있었던 것이다.
그것이 바로 당신이 스스로 고안한 지표의 위험이다: 그것이 현실과 연결된 상태를 유지하도록 강제하는 것은 아무것도 없다. 그것이 대신하기로 되어 있는 대상이 완벽히 정지해 있는 동안에도, 그것은 오르고 또 오를 수 있다. 그리고 그것을 정의한 것이 당신이기 때문에, 그것이 표류했다는 사실을 가장 늦게 알아차릴 사람도 당신이다.
지어낸 지표는 왜 그토록 유혹적인가
내가 왜 이렇게 했는지에 대해 솔직해지는 것이 도움이 된다. 그것은 어리석음이 아니었기 때문이다. 그것은 성실함으로 위장한 회피였다.
진짜 질문 — 이 시스템이 정말로 자기 본분에서 더 나아지고 있는가? — 은 어렵고, 느리고, 자주 사기를 꺾었다. 그 답은 움직이더라도 기어가는 속도로 움직였고, 솔직한 답은 흔히 “아니, 아직”이었다. 지어낸 질문 — 내 코드는 깔끔한가? — 은 쉽고, 빠르고, 전적으로 내 통제 안에 있었다. 당신 작업의 진짜 척도가 고통스럽고 멀리 있을 때, 오늘 당신에게 보상을 주는 척도는 거의 거부할 수 없다. 당신이 가짜 지표를 선택하는 것은 어리석어서가 아니다. 그것을 선택하는 것은 그것이 당신에게 친절하고, 진짜 지표는 그렇지 않기 때문이다.
움직임 대 진전
안에서 보면, 그 둘은 거의 구별이 불가능하다. 나는 바빴다. 나는 커밋을 찍어내고 있었다. 나는 문제를 풀고 있었고 어떤 수치가 개선되는 것을 지켜보고 있었다. 생산성을 감지하기 위해 내 뇌가 쓰는 모든 신호가 작동하고 있었다.
하지만 그중 거의 어느 것도 유일하게 중요한 결과를 향한 진전이 아니었다. 그것은 움직임이었다 — 진짜 노력, 진짜 작업, 진정으로 쏟아부어진 — 다만 내가 맞히기 쉬워서 정확히 그 이유로 골라낸 표적을 겨눈. 움직임은 당신이 그것을 하고 있는 동안에는 진전처럼 느껴진다. 그 차이는 나중에야 비로소 드러난다, 당신이 고개를 들어 자신이 얼마나 멀리 이동했는지, 그리고 얼마나 조금밖에 가까워지지 못했는지를 깨달을 때.
내가 보기를 거부한 단서
이것을 빠르게 폭로할 수 있었을 점검이 하나 있었지만, 나는 그것을 결코 돌리지 않았다: 더 높은 품질 점수가 실제 과제에서의 더 나은 결과와 대응했는가? 나는 그 두 가지를 서로 맞대어 그려본 적이 없었다. 만약 그렇게 했더라면, 나는 상승하는 선 하나와 평평한 선 하나가 나란히 놓여, 그 둘이 함께 움직였다는 흔적은 거의 없는 모습을 보았으리라 짐작한다.
나는 내 어딘가는 알고 있었다고 생각한다. 그 비교를 피한 것은 실수가 아니었다; 그것은 자기 보호였다. 지어낸 점수는 내가 그것을, 그것이 예측하는 척하던 대상과 결코 대조해 보지 않는 한에서만 그 힘을 유지했다.
해결책: 당신이 실제로 원하는 것을 측정하라
그 수리는 화려하지 않았고 조금 고통스러웠다. 나는 그 허영의 점수를 폐기하고, 나 자신을 그 불편한 질문 — 시스템이 그것이 존재하는 목적에서 더 나아지고 있는가? — 으로 끌고 돌아왔으며, 그것을 추적하기로 다짐했다, 비록 그것이 느리게 움직이고, 긴 구간 동안 멈춰 있고, 때로는 뒤로 갔음에도.
거의 움직이지 않는 진짜 지표가 치솟는 가짜 지표보다 더 가치 있다. 진짜 지표는 사기를 꺾어도 된다; 그것이 바로 진짜를 진짜로 만드는 것의 일부다. 오직 올라가기만 하고, 결코 나쁜 소식을 전하지 않는 수치는, 당신에게 맞설 수 있는 무언가를 측정하고 있지 않다는 뜻이다 — 이는 그것이 별로 많은 것을 측정하고 있지 않을지도 모른다는 말의 또 다른 표현이다.
장인정신은 진짜다 — 다만 그것이 목표는 아니다
나는 과잉 교정하지 않도록 조심하고 싶다. 깔끔한 코드는 무가치하지 않다. 구조, 명료함, 작업의 품질 — 이것들은 진짜이고, 복리로 쌓이며, 엉망진창은 결국 프로젝트의 숨통을 조른다. 잘못은 결코 장인정신을 신경 쓴 데 있지 않았다. 잘못은, 실제 목표가 너무 불확실해서 똑바로 쳐다볼 수 없었기 때문에, 장인정신을 그 목표로 승격시킨 데 있었다.
수단은 가치 있을 수 있으면서도, 당신이 그것을 목적의 대역으로 세우도록 내버려 두면 여전히 함정이 될 수 있다. 내가 여기서 얻은 규율은, 나를 기분 좋게 만들고 있는 어떤 수치에 대해서든 계속 묻는 것이다: 이것이 내가 실제로 원하는 것인가, 아니면 진짜 척도를 직면하기가 너무 어려워서 손을 뻗은 편안한 대용물인가? 흔히 솔직한 답은 불편하다. 알고 보니 그 불편함이야말로, 당신이 마침내 올바른 수치를 보고 있다는 더 믿을 만한 신호 중 하나다.
— 신호도 없고, 수익도 없으며, 투자 자문이 아닙니다.