받는 쪽에서 명세를 다시 쓰고 있는 나
그 자리에 들어가 봤더니, 매일 거기 있더라
1편 마지막에 "이름 없는 자리에 들어가 봤다"고 적었다. 들어가 보니 낯선 자리가 아니었다. 내가 매일 거기 있었다. 자기 자리인데 자기가 못 알아본 자리였다.
매일의 의식
아침에 자리에 앉으면 같은 의식이 있다. Reddit을 본다. GitHub trending을 본다. HuggingFace를 본다. 어제 어딘가에서 누군가 만들어 올린 것들. 코드, 모델, 데모, 논문, 도구.
신기한 걸 구경하는 게 아니다. 신기함은 1초만 머문다. 그다음 1초부터는 다른 일이 시작된다.
이건 어떻게 만들어졌나. 이건 어디로 갈 수 있나. 이건 무엇과 붙을 수 있나.
이 세 질문이 매일 같은 자리에서 돌아간다.
거꾸로 따라가는 일
처음 보는 코드든 모델이든, 머릿속에서 거꾸로 푼다. 결과를 본 다음, 결과 뒤의 명세를 다시 짠다. 이 사람은 어떤 입력을 가정했고, 어떤 인터페이스를 그렸고, 어떤 모듈에서 어떤 모듈로 데이터를 흘렸을 텐데 — 그게 보인다.
이걸 흔히 reverse engineering이라고 한다. 정확한 말이긴 한데, 매일 머릿속에서 일어나는 행위치고는 너무 거창한 이름이다. 그래서 한참 이 행위에 작은 이름을 안 붙이고 살았다.
부품으로 보면 보인다
거꾸로 따라가다 보면 자연스럽게 부품이 보인다. 큰 덩어리는 부품이 아니다. 부품은 경계가 있다. 입력이 정해져 있고, 출력이 정해져 있고, 내부가 바깥과 격리돼 있다.
부품의 경계가 잡히면, 그 부품을 다른 자리에 끼울 수 있는지가 자동으로 보인다. 이 모듈을 떼서 저 자리에 붙이면 입력 어댑터 하나 만들면 되겠다. 이 모델의 임베딩만 빼서 저 검색기에 넣으면 출력 형식만 맞추면 되겠다.
매일 일어나는 일이 이거다. 신기한 걸 구경하는 게 아니라, 부품 카탈로그를 머릿속에서 다시 그리는 일.
같은 사고가 두 곳에서 같이 돈다
희한한 게 있다. 이 사고가 코드 바깥에서도 똑같이 작동한다.
누군가 "이런 걸 만들고 싶은데" 하고 가져오면, 머릿속에서 똑같은 게 돌아간다. 이 사람이 진짜 원하는 부품은 무엇이고, 그 부품의 경계는 어디이고, 어떤 부품을 어떤 부품에 붙이면 그게 만들어지는가.
조직 간 협업도 같다. R&R이라는 건 사실 팀이라는 부품의 인터페이스 명세다. 프로토콜은 부품 간 통신 규약. 한 팀의 출력이 다른 팀의 입력이 되는 자리에 어댑터가 필요한지를 본다. 조직을 오픈소스 카탈로그처럼 본다.
같은 사고, 다른 자리. 코드든 사람이든 조직이든 부품 + 경계 + 연결로 환원돼서 보인다.
다른 사람한테는 이 자리가 없더라
이걸 알게 된 건, 어느 날 옆자리에 같은 풍경을 보여주려고 했을 때다.
같은 트렌딩 리포지토리를 같이 봤다. 같은 모델을 같이 봤다. 내가 머릿속에서 자동으로 그리는 부품 지도가 옆자리한테는 안 그려졌다. 그 사람은 코드를 봤고, 데모를 봤고, 신기해했다. 거기서 멈췄다.
멈춘 게 능력 문제가 아니었다. 그 자리에 매일 있지 않으면 그 사고는 안 굳는다. 매일 거꾸로 따라가는 작업을 하지 않은 사람은, 부품 경계를 보는 시야가 없다. 보이지 않는 걸 만들어내라고 요구할 수도 없다.
그렇다면 — 그 자리에 있는 사람의 머릿속 작업을 누군가 풀어서 옮겨놔야 한다. 머릿속에만 있으면 그 작업은 조직의 자산이 아니다.
행위에 이름을 붙인다
이제 1편의 풍경으로 돌아간다.
회의실에서 결과물이 쏟아지는데 아무도 못 받는 풍경 — 그건 부품 경계가 안 잡힌 결과물이 쌓이는 풍경이었다. 받는 쪽이 자기 부품의 입력으로 쓸 수 있게 만들려면, 결과물에서 거꾸로 받는 쪽 부품의 명세를 다시 그려야 한다.
이 행위에 이름을 붙인다.
역명세화 — 결과물에서 거꾸로 명세를 다시 짜는 일. 받는 쪽이 자기 부품에 끼울 수 있는 형태로.
이름이 생기면 작업이 보인다. 작업이 보이면 가르칠 수 있다. 가르칠 수 있으면 조직의 자산이 된다.
다음 편부터는 왜 이게 답인가를 푼다.
아직 포스트잇이 없어요. 첫 자리를 남겨보세요.