클린 애자일 다시 읽기 - 1장 애자일 소개
개요
2021년에 클린 애자일을 읽었었는데(당시 블로그), 최근에 사내 스터디를 하며 다시 읽으며 정리를 해둔다. 1장 애자일 소개를 시작하며, 다음 애자일 소프트웨어 개발 선언과 12가지 원칙을 읽어보자. 그리고, 그 의미를 생각해보고 이야기 나누어보자.
애자일 소프트웨어 개발 선언
우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고있다.
이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다:
- 공정과 도구보다 개인과 상호작용을
- 포괄적인 문서보다 작동하는 소프트웨어를
- 계약 협상보다 고객과의 협력을
- 계획을 따르기보다 변화에 대응하기를
가치 있게 여긴다.
이 말은, 왼쪽에 있는 것들도 가치가 있지만, 우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다는 것이다.
애자일 소프트웨어의 12가지 원칙
우리는 다음 원칙을 따른다:
- 우리의 최우선 순위는, 가치 있는 소프트웨어를 일찍 그리고 지속적으로 전달해서 고객을 만족시키는 것이다.
- 비록 개발의 후반부일지라도 요구사항 변경을 환영하라. 애자일 프로세스들은 변화를 활용해 고객의 경쟁력에 도움이 되게 한다.
- 작동하는 소프트웨어를 자주 전달하라. 두어 주에서 두어 개월의 간격으로 하되 더 짧은 기간을 선호하라.
- 비즈니스 쪽의 사람들과 개발자들은 프로젝트 전체에 걸쳐 날마다 함께 일해야 한다.
- 동기가 부여된 개인들 중심으로 프로젝트를 구성하라. 그들이 필요로 하는 환경과 지원을 주고 그들이 일을 끝내리라고 신뢰하라.
- 개발팀으로, 또 개발팀 내부에서 정보를 전하는 가장 효율적이고 효과적인 방법은 면대면 대화이다.
- 작동하는 소프트웨어가 진척의 주된 척도이다.
- 애자일 프로세스들은 지속 가능한 개발을 장려한다. 스폰서, 개발자, 사용자는 일정한 속도를 계속 유지할 수 있어야 한다.
- 기술적 탁월성과 좋은 설계에 대한 지속적 관심이 기민함을 높인다.
- 단순성이 - 안 하는 일의 양을 최대화하는 기술이 - 필수적이다.
- 최고의 아키텍처, 요구사항, 설계는 자기 조직적인 팀에서 창발한다.
- 팀은 정기적으로 어떻게 더 효과적이 될지 숙고하고, 이에 따라 팀의 행동을 조율하고 조정한다.
지은이의 글
애자일은 작은 일을 하는 작은 프로그래밍팀이 겪는 작은 문제에 대한 작은 아이디어다. -xiv
그 후로 30년 동안 우리는 큰 팀으로 큰 일을 해야 한다는 생각 속에서 헤맸다. -xv
큰 일은 작은 일을 하는 많은 작은 팀이 협동함으로써 이룰 수 있다는 것을 다시 한 번 깨달아야 했다. -xv
요약하자면 다음과 같다.
- 프로그래밍 태동기에는 작은 문제를 작은 팀이 풀어가는 방법을 알았었는데
- 큰 문제는 큰 팀이 해야한다는 잘못된 생각으로 오랜동안 헤매었다.
- 큰 문제는 작은 문제들로 나누고 이를 작은 팀이 풀어나가야 한다.
1장 애자일 소개
엉클 밥이 이 책을 쓰게된 이유
불행하게도 어떤 운동이 인기를 얻으면, 오해나 잘못된 사용 때문에 운동의 이름이 퇴색하기 마련이다. (중략) 스노버드 회의가 열린 이후 거의 20년 만에 오해를 바로잡기 위해 이 책을 쓴다. -p2, 3
소프트웨어 방법론
초기 소프트웨어 방법론
- 과학적 관리법Scientific Management
- 폭포수 관리법Waterfall
- 분석 → 설계 → 구현
애자일의 탄생
- 이건 아니다 싶은 사람들이 많아지고, 이렇게 하면 어떨까하는 방법론들이 하나 둘 생겨나고
- 그러한 17명의 중년 백인 남성이 솔트레이크 시티 근처의 스키 리조트 스노버드에 모였다.
- 그리고 그 사람들이 이렇게 개발해야 한다는 선언문을 작성하고 이후에 연락하며 원칙들도 정리하였다.
철십자
프로젝트 관리의 철십자(Iron Cross) : 소프트웨어 프로젝트의 근본 물리법칙으로, 다음 네 가지를 모두 만족하도록 관리할 수는 없다는 것이다.
- 좋은 결과물이 나오도록 진행한다.
- 빨리 진행한다.
- 저렴하게 진행한다.
- 완성도가 높게 진행한다.
철십자에 애자일을 끼얹는다면?
좋은 관리자는 네 가지 속성의 가중치를 관리하지, 모든 속성이 100%가 되기를 요구하지 않는다. (중략) 애자일은 개발자와 관리자가 프로젝트를 이렇게 실용적으로 관리할 수 있도록 돕는 체계다. -p18
애자일은 데이터를 제공해서 돕는다.
- 속도 차트velocity chart로 팀의 업무 처리 속도를 시각화하고
- 번다운 차트burndown chart로 다음 마일스톤 까지의 남은 포인트를 보여준다.
이 두 차트를 벽에 거는 것이 애자일의 중요한 목표다. 관리자가 철십자의 네 가지 축의 가중치를 얼마로 할지 결정해야 할 때, 결정에 필요한 데이터를 제공함으로써 관리자가 프로젝트를 최선의 결과로 이끌도록 한다. 이것이 애자일 소프트웨어 개발의 중요한 강점이다. -p20
삶의 순환(Circle of Life)
eXtream Programing의 실천 방법이다. 론 제프리스의 그림이며 삶의 순환이라고도 부른다.
애자일이 정말로 무엇인지 이해하고 싶다면 XP를 공부하는 것이 최선의 방법이다. XP는 애자일의 프로토타입이자, 최고의 대표주자이며, 본질이고, 핵심이다. -p37
정현석 생각
- 각 고리들이 엄밀하게 구분된다 생각하지 않는다. 대표적으로는 메타포가 있다.
- 이들을 절대적 가치, 도그마로 생각하지 말자. 우리가 우리 조직에 맞는 새로운 방법을 찾아낼 수도 있다.
- 하나씩 곰곰이 생각하며 읽어보자.
바깥 고리 - 비즈니스와 관련한 XP의 실천 방법
개발팀과 사업부서간의 의사소통, 관리 원칙
- 계획 게임: 프로젝트를 쪼개서 크기를 추정하고, 우선순위를 정한다.
- 작은 릴리스: 작게 자주 릴리스한다.
- 인수 테스트: 완료를 정의한다.
- 전체 팀: 같은 목표를 향해 함께 일한다.
중간 고리 - 팀과 관련한 실천 방법
개발팀의 관리와 의사소통의 체계와 원칙
- 지속 가능한 속도: 우리는 마라톤을 하고있다.
- 공동 소유: 지식이 모두에게 퍼져야 한다.
- 지속적 통합: 피드백이 자주 반복되도록 한다.
- 메타포: DDD의 유비쿼터스 언어
안쪽 고리 - 기술 실천 방법
높은 품질을 유지하도록 이끌고 강제하기
- 짝 프로그래밍: 지식 공유, 리뷰, 협력
- 단순한 설계: 이해하기 쉽다. 수정하기 쉽다. 꼭 필요한 만큼만 구현한다.
- 리팩터링: 지속적으로 개선하고 향상한다.
- 테스트 주도 개발: 품질을 유지하면서도 속도를 낼 수 있다.
애자일 선언과 삶의 순환
- 공정과 도구보다 개인과 상호작용을
- 전체 팀
- 메타포
- 공동 소유
- 짝 프로그래밍
- 지속 가능한 속도
- 포괄적인 문서보다 작동하는 소프트웨어를
- 인수테스트
- 테스트 주도 개발
- 단순한 설계
- 리팩터링
- 지속적 통합
- 계약 협상보다 고객과의 협력을
- 작은 릴리스
- 계획 게임
- 인수 테스트
- 메타포
- 계획을 따르기보다 변화에 대응하기를
- 작은 릴리스
- 계획 게임
- 지속 가능한 속도
- 테스트 주도 개발
- 리팩터링
- 인수 테스트