YAGNI가 말한 적 없는 비용
3 days ago
4
- YAGNI는 “아직 필요 없는 코드를 쓰지 말라”는 단순 절약 규칙이 아니라, 필요가 확정되기 전에 추측으로 구조를 선점하는 일의 비용을 다루는 원칙임
- 문제의 중심은 설계 자체가 아니라 언제 설계할 것인가이며, 너무 이른 구조화는 너무 늦은 구조화만큼 위험할 수 있음
- 선행 구조는 정보가 오기 전에 선택지를 닫는 선택권 비용과, 비용을 앞당기고 수익을 늦추는 NPV 비용을 함께 만듦
- 코드 생성 비용이 거의 0에 가까워져도 YAGNI는 사라지지 않으며, 오히려 값싼 생성이 추측 기반 프레임워크를 더 쉽게 만들 수 있음
- 필요한 때 만들라는 결론은 코드 작성 비용 때문이 아니라, 쓰지 않은 선택권과 쓰지 않은 돈의 가치가 여전히 남아 있기 때문임
YAGNI는 설계를 금지하지 않음
- YAGNI는 “You Aren’t Gonna Need It”의 약자로, 필요 없는 것을 절대 설계하지 말라는 변명이 아님
- 필요한 것이 있으면 만들면 되지만, 핵심은 타이밍임
- 프로젝트 중 “3주 뒤에는 단순한 구현이 부족할 테니 지금 더 복잡한 것을 만들고 싶다”는 상황에서, “You aren’t going to need it”이라는 응답이 반복된 일화가 출발점임
- 이 원칙은 구조를 너무 일찍 만드는 일과 너무 늦게 만드는 일을 모두 위험하게 봄
문제는 코드 작성 비용이 아니라 추측 기반 구조임
- 흔한 해석은 YAGNI를 “아직 필요 없는 코드는 비싸니 쓰지 말라”는 절약 규칙으로 봄
- 하지만 YAGNI가 겨냥하는 대상은 코드 생산 비용이 아니라, 실제 기능이 필요로 하기 전에 미리 만든 투기적 구조(speculative structure) 임
- 이런 구조는 서로 다른 시점과 이유로 두 종류의 비용을 발생시킴
첫 번째 비용: 선택권
- 기능이 도착하기 전에 구조를 만들면, 아직 모르는 요구에 대해 추측으로 커밋하게 됨
- 미리 대비한 기능은 실제로 도착하는 기능과 보통 다르며, 그 결과 두 번 비용을 냄
- 잘못된 모양의 구조를 우회하는 비용
- 그 구조를 다시 뜯어내는 비용
- 이 문제는 단순히 “예측이 어렵다”는 말에 그치지 않음
- 추측이 맞더라도, 미리 커밋하지 않고 나중에 올바른 구조를 만들 수 있는 선택권을 잃는다는 점에서 손해가 남음
- 기다리는 것은 게으름이 아니라, 선택권이라는 자산을 보유하는 일임
두 번째 비용: NPV
- 돈에 시간 가치가 있듯이 기능에도 시간 가치가 있음
- 3개월 뒤 필요한 기능을 위해 지금 구조를 만들면, 비용은 앞당겨지고 실제로 돈을 버는 기능의 출시는 늦어짐
- 이 비용은 추측이 맞아도 발생함
- 완벽한 예측도 비용과 수익의 순서를 바꾸지 못하며, 손실은 비용을 수익보다 먼저 배치한 간격에서 생김
- 선택권 비용은 “정보가 오기 전에 커밋하지 말라”는 문제이고, NPV 비용은 “필요하기 전에 지불하지 말라”는 문제임
- “나중에 고치면 너무 비싸다”는 반론이 있어도, 그 비싼 개조 자체가 다시 하나의 예측일 수 있음
코드 생성이 싸져도 YAGNI는 남음
- 두 비용 어디에도 코드를 타이핑하는 비용은 포함되지 않음
- 코드 작성 비용이 거의 0에 가까워지면, “코드가 싸졌으니 미리 만들어도 되지 않나”라는 절약형 YAGNI 해석은 무너짐
- 그러나 YAGNI가 절약 규칙이 아니므로, 값싼 코드 생성은 YAGNI를 폐기하지 않음
- 선택권 비용은 노력의 양이 아니라 미래 선택지를 닫는 커밋에서 생김
- NPV 비용은 생산 가격이 아니라 현금흐름의 타이밍에서 생김
- 무료 생성은 YAGNI를 약화하지 않고, 오히려 추측 기반 프레임워크를 더 쉽게 만들게 함
- 생성된 구조는 여전히 두 비용을 만들며, 직접 쓰지 않았기 때문에 이해도는 더 낮을 수 있음
- 결론은 “코드가 비싸서 기다리라”가 아니라, 선택권과 돈은 쓰지 않았을 때 더 가치가 있으므로 필요할 때 만들라는 것임
-
Homepage
-
Tech blog
- YAGNI가 말한 적 없는 비용