중복은 다들 이미 동의하는 유일한 문제야. 그래서 안 죽어. 동의는 추상적이거든. 당연히 같은 코드를 세 벌 갖고 있으면 안 되지. 반면 복사본 하나하나는 구체적이고 싸고, 눈앞의 걸 내보내는 제일 빠른 길이야. 시작은 이 저장소가 시작한 자리, 측정이야. 하루 만에 부모 하나에서 형제 둘이 태어났고, 몇 시간 뒤 목록을 떠보니 어느 층이 벌써 세 겹인지가 그대로 나와. 거기에 저장소 하나로는 절대 못 찾는 앱 사이 버그 하나. 그 버그가 진짜 논증이야. "유지보수 부담" 같은 말로는 절대 안 꽂히는 값을 보여주거든. 고침은 집이 셋이고, 어긋남은 집이 없어. 그다음이 결정이야. 앱은 따로 간다, 도메인이 진짜로 다르니까. 대신 공용 층은 주인을 딱 하나 갖는다. 거기서부터 따라 나오는 설계를 걸어. 한 걸음 한 걸음 다르게 고를 수도 있었던 것들이야. 배포 모형이 왜 발행된 패키지가 아니라 복사본인지, 그리고 그 답이 왜 여기선 맞고 회사에선 틀릴지. 복사본이 출생증명서를 어떻게 달고 다니는지, 그 증명서가 왜 비교하는 바이트 바깥에 앉아야 하는지. 어긋남 검사가 각 소비자의 자기 테스트에서 돌 때 어떻게 이빨을 얻는지 — 그리고 파일 경로로 적힌 규칙이 그 파일을 못 두는 저장소 하나를 어떻게 조용히 면제해버렸는지. 그다음은 이음매 일이야. 열 이름을 주입해서 스키마 만드는 코드 하나가 행이 뭘 가리키는지 서로 다른 앱들을 다 받게 만드는 법, 기능 전체를 갈래 치기 대신 인자 하나로 끄는 법, 그리고 어떤 모듈도 다른 모듈을 임포트 안 한다는 규율, 그리고 이유를 옆에 적어둔 단 하나의 예외까지. 그다음은 키트가 절대 안 넘는 선. 중복을 없애던 바로 그 본능이 도메인 로직까지 끌고 들어오려는 자리, 그리고 일부러 반대 방향으로 도는 정규화 둘. 그다음은 중복이 실제로 죽는 방식. 세 번째 복사본에서 승격시키고, 중복을 없애려고 만든 저장소 안에 같은 물건의 두 번째 판을 들이지 않고, 인수인계 메모 말고 파일 시스템을 훑어서 세고, 안 들인 것들을 적어둬서 다시 논쟁이 안 열리게 하는 법. 그다음은 청구서. 전환 하나하나가 실제로 얼마였는지. 조용히 사라졌으면 기능 하나가 없어졌을 권한 속성 하나, 그리고 그걸 쓰는 앱 둘에서만 확인해서 아홉 앱을 깨뜨린 선택적 슬롯 하나까지. 마지막은 코드 얘기가 전혀 아닌 규칙들로 닫아. 앱마다가 아니라 한 번 정하는 정책, 끝이 명시된 이주 플래그, 아무도 다시 안 걷게 적어둔 막다른 길, 그리고 얼굴이 어때야 하는지를 아무도 안 갖고 있어서 한 가족에 로봇 아이콘 넷이 독립적으로 생겨난 순간. 개념의 오픈소스화: 결과물은 아키텍처지, 네가 클론하는 저장소가 아냐.