클린 애자일(Clean Agile - Back to Basics) - 4장 팀 실천 방법
메타포
팀 내에서 효과적으로 의사소통을 하려면, 개념을 나타내는 어휘와 용어를 명확하게 정의하여 일관되게 사용해야 한다. 이것은 프로젝트를 팀원 모두가 잘 아는 무언가에 비유하는 일이기 때문에 켄트 벡은 이 실천 방법에 메타포라는 이름을 붙였다.
메타포는 어휘를 만들어 주어 팀 내 의사소통을 효율적으로 만든다. 반면 고객을 모욕하는 어리석은 메타포도 있을 수 있다.
도메인 주도 설계
에릭 에반스(Eric Evans)는 도메인 주도 설계책에서 메타모의 문제를 해결했다. 이 책에서 에릭은 유비쿼터스 언어(Ubiquitous Language)라는 표현을 제안했는데, 사실 메타포보다 이 실천 방법에 더 어울리는 이름이다. 도메인 주도 설계에서는 해결하려는 문제 도메인의 모델을 모든 사람이 동의하는 어휘로 표현해야 한다.
지속 가능한 속도
마라톤
지속 가능한 속도로 달려야 한다. 지속 가능한 속도보다 더 빠르게 달려 버린다면, 결승선을 통과하기 전에 속도를 늦추고 쉬어야 할 때가 올 것이다. 결승선이 눈 앞에 있을 때, 만약 에너지에 약간의 여유가 있다면 더 힘을 내서 달릴 수도 있다. 하지만 그 전에 전력 질주를 해서는 안 된다.
관리자가 당신에게 무리하게 더 빨리 달리라고 할 수도 있다. 그 말을 따르면 안 된다. 끝까지 일 할 수 있도록 당신 자신을 관리하는 일은 당신의 몫이다.
헌신
고용주에게 당신이 얼마나 헌신적인지 보여 주고 싶을 때, 야근은 좋은 방법이 아니다. 야근이 증명하는 것인 당신이 계획을 잘 못 세운다는 것, 동의하지 않았어야 하는 일정에 동의했다는 것, 하지 말았어야 하는 약속을 해 버렸다는 것, 전문가가 아니라 다루기 쉬운 초보자라는 것뿐이다.
잠
프로그래머의 삶을 구성하는 성분 중 가장 소중한 것은 바로 충분한 수면이다. 적게 자면 생산성은 뚝 떨어진다. 자신의 몸이 몇 시간을 자야 하는지 잘 파악하고, 이 시간을 확보해야 한다.
공동 소유
애자일 프로젝트에서는 아무도 코드를 소유하지 않는다. 코드는 전체 팀이 소유한다. 경험을 집중시키지 않고 퍼트리기 위해 애써야 한다.
전문성을 키우면서도 넓게 알아야 한다. 전문성을 발휘할 수 있는 업무와 그 외 분야의 코드에 대한 업무를 두루 맡아야 한다. 언제나 잘 하는 영역을 벗어나서 일할 수 있어야 한다.
공동 소유를 실천하면, 지식이 팀 전체에 퍼진다. 팀 구성원 모두가 모듈 사이의 경계나 전반적인 시스템 동작을 더 잘 이해하게 된다.
지속적 통합
애자일 초기에는 지속적인 통합(Continuous Integration)이 한 두 시간에 한 번 정도 소스 코드를 체크인하고 주 브랜치에 머지한다는 뜻이었다. 모든 단위 테스트와 인수 테스트는 계속 통과해야 한다. 기능 브랜치가 통합되지 않은 채 남아있어서는 안 된다. 배포할 때 동작하면 안 되는 기능은 토글로 비활성화시켜야 한다.
지속적 빌드의 등장
지속적 빌드 도구를 사용하면 통합 사이의 시간 간격이 최소로 줄일 수 있다. 켄트가 처음 주장한 ‘한 두 시간’은 ‘몇 분’으로 바뀌었다. ‘지속적 통합’은 ‘지속적 체크인’이 되었다.
일일 스크럼, 스탠드업 미팅
- 미팅 참여는 필수가 아니다. 대부분의 팀에서는 한 명쯤 빠져도 된다.
- 꼭 매일 할 필요는 없다. 각 팀에 맞는 일정을 잡으면 된다.
- 10분이 넘게 걸리면 안 된다. 팀이 크더라도 말이다.
- 회의는 다음과 같이 단순한 방식으로 진행한다. 기본적으로 세 가지 질문에 대한 답을 하는 것이다.
- 지난 미팅 이후 무엇을 했는가?
- 다음 미팅까지 무엇을 할 것인가?
- 어떤 장애물이 있는가?
- (누구에게 감사하고 싶은가?)
이게 전부다. 토론은 없다. 꾸미는 것도 없다. 자세한 설명도 없다. 모든 사람이 30초 정도 안에 세 가지 질문에 대한 답을 해야 한다.
미팅에서는 개발자만 말해야 한다.
결론
애자일은 작은 소프트웨어를 만드는 작은 팀을 돕는 원칙과 실천 방법, 규율을 모은 것이다.