바뀌는 것은, 바꾸는 사람 손이 닿는 곳에 둔다
값을 코드에 적기 전에 "이게 바뀔 때 누가 바꾸나"를 묻고, 내가 아니면 그 사람이 직접 바꿀 수 있는 곳에 둔다.
이럴 때
라벨·일정·수집 목록·판정 기준을 하드코딩할 때. 입력 데이터를 레포에 커밋할 때. 같은 종류의 수정 요청이 두 번째로 왔을 때.
이렇게
- 안 바뀌면 코드, 내가 바꾸면 상수, 운영자가 바꾸면 어드민이나 DB 에 둔다.
- 상대 조직이 정의를 갖고 있으면 그쪽 저장소를 읽는다. 옮길 때는 읽기 권한만 준다.
- 프로세스가 바꾸는 데이터는 레포 밖에 둔다.
멈출 신호·예외
바꾸는 사람이 그 값의 의미를 모르면 옮기지 않는다. 사람마다 다른 설정 파일로 빼면 코드에 둘 때보다 나빠진다.
설명
값이 있는 자리가 바꾸는 사람의 손에서 멀면, 바뀔 때마다 배포해야 한다. 같은 요청이 여러 번 오고 그때마다 코드를 고쳤다면 두 번째에 옮겼어야 했다. 첫 번째는 예외일 수 있고, 두 번째는 패턴이며, 세 번째부터는 내가 만든 비용이다. 하드코딩했던 카테고리를 DB 로 옮긴 날, 이 문장이 그대로 실행됐다.
옮긴다고 끝나지도 않는다. 정의의 주인이 따로 있으면 그 정의는 주인의 저장소에 남아야 한다. 주인이 아닌 곳으로 옮기면 정본이 둘로 갈린다.
반례
모든 것을 설정으로 빼면 빼는 일 자체가 비용이 된다. 설정이 사람마다 다른 파일이면 다른 사람이 켜 둔 값을 한 사람의 낡은 값이 조용히 되돌린다.
판별법
"이게 바뀔 때 누가 바꾸나?"
코드에 값을 적기 전에 이 문장부터 완성한다. 같은 요청이 두 번째 오면 그것이 신호다.