노트굿하트의 법칙
Goodhart's Law
개발 문화 · 연결된 개념 7개
쉽게 말하면
굿하트의 법칙은 몸무게 숫자만 목표로 삼으면 재기 전에 물을 안 마시는 식으로 숫자만 맞추게 된다는 거예요. 건강을 보려던 숫자가 목표가 되는 순간 정작 건강은 안 보이죠.
비유가 깨지는 곳 그렇다고 체중계를 버리라는 건 아니에요. 대략이라도 재는 편이 낫다는 길브의 법칙과 짝을 이루니, 지표는 여러 개를 함께 보고 그 지표가 가리키던 본래 가치를 계속 물어요.
측정 지표가 목표가 되면 더 이상 좋은 지표가 아니라는 법칙. 사람들이 지표가 원래 가리키던 가치 대신 지표 자체를 최적화하기 시작하기 때문이다.
- 코드 커버리지를 KPI(Key Performance Indicator)로 삼으면 아무것도 검증하지 않는 테스트가 늘어난다. 커버리지는 테스트하지 않은 곳을 찾는 데만 쓸모 있다(자가 테스트 코드)
- 코드 줄 수로 생산성을 재면 장황한 코드가 늘어난다
- 스토리 포인트나 처리한 티켓 수도 목표가 되는 순간 부풀려진다
그렇다고 측정을 포기하라는 뜻은 아니다. 대략적으로라도 측정하는 편이 측정하지 않는 것보다 낫다는 길브의 법칙(Gilb's Law)과 짝을 이룬다. 지표는 여러 개를 함께 보고, 지표가 가리키는 본래 가치를 계속 묻는다. 웹 성능 지표(Core Web Vitals)나 퍼널 수치를 목표로 삼을 때도 같은 함정이 있다.
출처: Laws of Software Engineering: Goodhart's Law · Laws of Software Engineering: Gilb's Law
연결된 개념
이 노트를 가리키는 문서
뜻이 가까운 노트
- 코드 리뷰
코드 리뷰는 작성자가 아닌 사람이 변경을 읽고 합칠지 판단하는 과정이다. 버그를 잡는 일 말고도, 팀 모두가 코드베이스를 알게 하고(collective-code-ownership) 설계 판단과 관례를 자연스럽게 퍼뜨리는 통로가 된다. 여러 사람이 모두 놓쳐야만 결함이 새어 나가게 만드는 장치이기도 하다 → growing-together
- 집단 코드 소유
코드의 주인을 개인으로 두지 않고 팀 전체가 코드베이스 전체를 소유해, 누구나 필요한 곳을 고칠 수 있게 하는 XP 실천법.
- 보이스카우트 규칙
코드를 처음 발견했을 때보다 조금이라도 나은 상태로 남겨 두라는 규칙. 캠핑장을 떠날 때 왔을 때보다 깨끗하게 하라는 보이스카우트 수칙을 로버트 C. 마틴(Robert C. Martin)이 소프트웨어에 옮겼다. 『리팩터링』도 같은 비유를 쓴다.
- 골의 법칙
동작하는 복잡한 시스템은 언제나 동작하던 단순한 시스템에서 진화한 것이라는 법칙. 처음부터 복잡하게 설계한 시스템은 동작하지 않고, 고쳐서 동작하게 만들 수도 없다는 경고가 뒤따른다. 존 골(John Gall)이 1975년 『Systemantics』에서 말했다.
- 테스트 냄새
테스트 코드나 테스트 습관에서 나는, 더 깊은 문제를 알리는 신호. 제라드 메스자로스의 xUnit 테스트 패턴 정리가 이름을 붙였다.