소프트웨어 시스템과 팀, 의사결정에 반복해서 나타나는 경험칙들을 모아 부르는 말. 법칙이라고 부르지만 대부분 증명된 정리가 아니라 관찰과 격언이다. 판단할 때 떠올릴 이름표로 쓴다. 따로 노트를 둔 것은 링크로, 나머지는 한 줄로 적었다.
팀
- 콘웨이의 법칙: 조직의 소통 구조가 시스템 구조가 된다
- 브룩스의 법칙(Brooks's Law): 늦어진 프로젝트에 사람을 더하면 더 늦어진다. 교육·조율 비용이 들고 소통 경로가 n(n-1)/2로 늘기 때문이다
- 던바의 수(Dunbar's Number): 한 사람이 안정적으로 유지하는 관계는 약 150명. 조직이 이보다 커지면 공식 구조가 필요하다
- 버스 팩터(Bus Factor): 몇 명이 빠지면 프로젝트가 멈추는가. 1이면 단일 장애점(Single Point of Failure)이다(집단 코드 소유)
- 링겔만 효과(Ringelmann Effect)·프라이스의 법칙(Price's Law)·피터의 원리(Peter Principle): 팀이 커질수록 1인당 기여가 줄고, 소수가 일의 절반을 하며, 사람은 자기 무능력 수준까지 승진한다
계획
- 파킨슨의 법칙(Parkinson's Law): 일은 주어진 시간을 다 채울 때까지 늘어난다
- 90-90 법칙(Ninety-Ninety Rule)·호프스태터의 법칙(Hofstadter's Law): 마지막 10%가 또 90%의 시간을 먹고, 그걸 감안해도 늘 더 오래 걸린다
- 굿하트의 법칙: 지표가 목표가 되면 망가진다. 그래도 대충이라도 재는 편이 안 재는 것보다 낫다(길브의 법칙, Gilb's Law)
- 섣부른 최적화: 측정 전에 최적화하지 않는다
아키텍처
- 하이럼의 법칙, 골의 법칙, 누수 추상화의 법칙, 복잡성 보존의 법칙
- CAP 정리(CAP Theorem, Consistency·Availability·Partition Tolerance): 네트워크 분할이 생기면 일관성과 가용성 중 하나를 고른다(최종 일관성)
- 세컨드 시스템 효과(Second-System Effect): 성공한 작은 시스템 다음에는 모든 아이디어를 쏟아부은 비대한 후속작이 나오기 쉽다
- 분산 컴퓨팅의 오류(Fallacies of Distributed Computing): 네트워크는 믿을 만하고 지연은 0이라는 식의 여덟 가지 잘못된 가정
- 의도하지 않은 결과의 법칙(Law of Unintended Consequences)·자윈스키의 법칙(Zawinski's Law): 복잡한 시스템은 바꾸면 엉뚱한 곳이 깨지고, 프로그램은 메일을 읽을 수 있을 때까지 기능을 늘리려 한다
품질
- 보이스카우트 규칙(깨진 유리창 포함), 기술 부채, 테스트 피라미드, 포스텔의 법칙
- 머피의 법칙(Murphy's Law): 잘못될 수 있는 것은 잘못된다. 오류 처리와 폴백을 설계한다
- 커니핸의 법칙(Kernighan's Law): 디버깅은 작성보다 두 배 어렵다(KISS 원칙)
- 리누스의 법칙(Linus's Law): 보는 눈이 많으면 버그는 쉽게 드러난다
- 살충제 역설(Pesticide Paradox): 같은 테스트만 반복하면 새 버그를 못 잡는다
- 레만의 법칙(Lehman's Laws): 현실을 반영하는 소프트웨어는 계속 바뀌어야 하고, 바뀔수록 복잡해진다
규모
- 암달의 법칙(Amdahl's Law): 병렬화의 이득은 병렬화할 수 없는 부분이 제한한다. 구스타프슨의 법칙(Gustafson's Law)은 문제 크기를 키우면 이득이 커진다고 보완한다
- 메트칼프의 법칙(Metcalfe's Law): 네트워크의 가치는 사용자 수의 제곱에 비례한다
설계
- DRY 원칙, KISS 원칙, YAGNI, SOLID 원칙, 디미터 법칙, 최소 놀람의 원칙
- 더하기는 쉽고 빼기는 어렵다: 한번 내보낸 기능은 누군가 의존해 거둬들이기 어렵다(하이럼의 법칙)
의사결정
더닝-크루거 효과(Dunning-Kruger Effect), 핸런의 면도날(Hanlon's Razor, 어리석음으로 설명되는 것을 악의로 돌리지 말라), 오컴의 면도날(Occam's Razor), 매몰 비용 오류(Sunk Cost Fallacy), 지도는 영토가 아니다(The Map Is Not the Territory), 확증 편향(Confirmation Bias), 하이프 사이클(Hype Cycle)과 아마라의 법칙(Amara's Law), 린디 효과(Lindy Effect), 제1원리 사고(First Principles Thinking), 역전 사고(Inversion, 실패하는 법부터 생각하기), 파레토 원칙(Pareto Principle, 80/20), 커닝햄의 법칙(Cunningham's Law, 틀린 답을 올리면 정답이 빨리 온다). 팀 신뢰와 관련된 것은 심리적 안전감와 함께 보면 좋다.