노트필요 낭비 (Type 1 무다)
Type 1 Muda (Necessary Non-Value-Added Activity)
개발 문화#agile · 연결된 개념 5개
쉽게 말하면
필요 낭비는 이사할 때 짐을 싸는 일과 같아요. 상자 싸기 자체가 새집을 만들진 않지만 안 할 수는 없으니, 없애려 하기보다 덜 들게 하는 방법을 찾아요.
비유가 깨지는 곳 짐 싸기는 이사가 끝나면 사라지지만 테스트·리팩터링·문서는 개발 내내 이어져요. 그래서 테스트는 먼저 써서 속도 이득을 얻고, 리팩터링은 잘게 나누고, 문서는 코드로 알기 어려운 것만 적어요.
부가가치를 만들지는 않지만 지금은 없앨 수 없는 일. 도요타 생산 방식(Toyota Production System)에서 나온 린(Lean) 사고는 활동을 부가가치 활동(Value-Added), 순수 낭비(Type 2 무다), 필요 낭비(Type 1 무다)로 나눈다. 소프트웨어 개발에서는 프로덕션 코드를 쓰는 일을 빼면 대부분이 둘 중 하나의 낭비다.
- 순수 낭비: 불필요한 기능·성능 개선, 리뷰나 API(Application Programming Interface) 완성을 기다리기, 브랜치 병합, 오래 끄는 미완료 작업. 없애야 하지만 보통 팀 차원의 프로세스 개선이 필요하다
- 필요 낭비: 회의, 테스트 작성, 리팩터링, 버전 관리, 코드 리뷰, 문서 작성, 버그 수정. 더 큰 낭비를 막으니 필요하지만, 줄일 방법을 찾는다
필요 낭비를 줄이는 법
- 테스트: 먼저 쓰면 프로덕션 코드를 쉽게 실행해 볼 수 있어 회귀 방지에 더해 개발 속도에도 이득이 된다(테스트 주도 개발 (TDD))
- 리팩터링: 한 번에 크게 하지 말고 기능을 만들 때마다 조금씩 해서 투자 단위를 작게 쪼갠다(정리(Tidying), 보이스카우트 규칙)
- 문서: 문서는 코드를 만들기 위한 발판일 뿐이다. 실행되지 않는 문서는 시간이 지나면 거짓말을 하기 시작하므로, 코드를 읽어도 알기 어려운 내용 위주로 적게 쓴다
점검 질문 하나: 개발이 진행될수록 속도가 빨라지는가? 그렇다면 코드 품질이 좋은 것이다. 같은 관점을 코드 수준에 적용한 것이 구성요소 줄이기다. 애자일의 "포괄적인 문서보다 작동하는 소프트웨어"도 같은 이야기다(애자일 선언).
출처: 인프런 『심플 디자인』 박영록
연결된 개념
이 노트를 가리키는 문서
아직 없습니다.
뜻이 가까운 노트
- 섣부른 최적화
"섣부른 최적화는 모든 악의 근원이다." 도널드 크누스(Donald Knuth)가 1974년 글 「Structured Programming with go to Statements」에서 쓴 말이다. 원문의 맥락은 작은 효율은 대부분(약 97%)의 경우 잊으라는 것이고, 정말 중요한 3%는 놓치지 말라는 말이 이어진다.
- 테스트 냄새
테스트 코드나 테스트 습관에서 나는, 더 깊은 문제를 알리는 신호. 제라드 메스자로스의 xUnit 테스트 패턴 정리가 이름을 붙였다.
- 리팩터링
겉으로 보이는 동작은 그대로 둔 채, 코드를 이해하고 고치기 쉽게 내부 구조를 바꾸는 일. 기능을 더하는 일이 아니라 다음 변경을 덜 위험하게 만드는 정리다.
- 코드 냄새
당장 버그는 아니지만 이해나 변경 비용을 높이는 구조적 신호. 리팩터링을 언제 시작하고 멈출지에 정확한 공식은 없어서, 냄새라는 어휘로 직관을 공유한다.
- 기술 부채
지금 지름길을 택한 대가로 나중에 갚아야 할 비용을 빚에 빗댄 말. 워드 커닝햄(Ward Cunningham)이 1992년에 처음 썼다. 원금은 언젠가 제대로 고치는 비용이고, 이자는 지저분한 코드 때문에 매번 더 드는 개발 시간이다.