What?
핵심 요소 2가지
- 마스터 스토리 보드(제품 백로그)
- 이터레이션(반복 주기)
마스터 스토리 보드는 프로젝트 기간동안 해야할 일을 담은 목록이다. 고객은 소프트웨어에 추가하고 싶은 기능을 담고, 우선순위를 정한다. 개발팀은 해당 스토리에 추정치를 매긴다.
이터레이션은 우선순위가 높은 백로그를 구현하여 소프트웨어에 반영시키는 기간이며 주기적으로 반복된다. 통상적으로 이터레이션의 주기는 1~2주이다.
산출물
- 프로젝트의 최종 산출물은 동작하는 소프트웨어이다.
- 매 이터레이션의 산출물은 출시에 가까운 상태로 동작하는 소프트웨어이다.
소프트웨어 개발 프로젝트를 완료한다는 것은 소프트웨어를 출시 가능한 상태로 만드는 것이다. 매 이터레이션마다 새로운 기능을 출시하는 것은 아니지만 출시 가능한 상태에 가깝게 만드는 태도를 갖추어야 한다.
Why?
소프트웨어 프로젝트의 3가지 진실
- 프로젝트 초기에 요구사항을 모두 수집하는 것은 불가능하다.
- 수집한 요구사항들은 항상 변한다.
- 시간이나 비용이 허락하는 것보다 해야 할 일이 항상 더 많다.
How?
Agile Process의 단계별 하는 일
- 애자일 팀 구성
- 팀의 특징(팀원이 갖춰야할 태도)
- 팀을 구성하는 역할
- 프로젝트 인셉션
- 프로젝트 계획하기
- 사용자 스토리 수집
- 스토리 별 소요 시간 추정
- 이터레이션 계획 수립
- 프로젝트 수행하기
- 이터레이션 수행: 분석, 설계, 구현, 테스트
- 다음 이터레이션 계획
- 시각적인 작업환경 조성
- 소프트웨어 만들기
애자일 팀 구성
애자일 팀의 특징(팀원이 갖춰야 할 태도)
- 팀원 간의 역할이 불분명하다
각 팀원들의 전문분야를 부정하는 것이 아니다. 직위나 역할에 상관없이 누구든지 프로젝트를 성공시키기 위해서 필요한 일에 참여할 수 있다.
- 분석, 설계, 구현, 테스트의 과정을 팀원 전체가 수행한다.
소프트웨어에 있어서 해당 단계들은 분리될 수 없는 과정이다. 팀 내에서 지속적으로 수행하고 책임진다.
가령 소프트웨어의 품질은 QA부서나 테스터의 책임이 아니고 애자일 팀 전체가 책임져야 할 요소이다.
- 같은 공간에서 일한다.
질문에 대한 답을 빠르게 얻을 수 있기 때문이다. 분산된 공간에서 일하는 것이 불가피하다면 프로젝트 초기에 한자리에 모일 수 있는 자리를 마련하여 팀의 결속력을 다질 필요가 있다.
- 참여하는 고객
고객이 원하는 혁신적인 소프트웨어는 고객으로부터 나오기 때문이다. 고객은 데모에 참여하고 개발팀의 질문에 답하고, 피드백을 제공해야 한다.
- 자기 조직화된 팀(self-organizing)
팀은 목표가 주어지면 한발 물러서서 목표를 달성하기 위해서 같이 최선의 방법을 고민한다.
- 팀원들이 스스로 계획하고, 추정치를 직접 결정
- 직책이나 역할보다는 검증된 소프트웨어를 만드는데 집중
- 주어진 임무보다는 능동적으로 개척
가령 이런식이다.
"물론 바비는 코딩을 잘 하죠. 하지만 디자인에도 굉장한 소질을 가지고 있으니까 모형(mock up)을 만드는 것을 도와줄 수도 있겠네요"
- 교차 기능팀
전반적인 분야에 걸쳐서 고객에게 가치를 전달할 수 있는 팀. Specialist보다는 Generalist를 구하라. 전문가(Specialist)가 필요한 경우를 제외한다면 대부분의 일을 해결할 수 있도록 팀을 구성한다.
팀을 구성하는 역할
애자일 팀은 다소 거칠게 구분하면 2가지 역할로 구분된다. 고객과 애자일팀이다.
- 고객은 무엇을 개발할지 결정하고
- 개발팀은 어떻게 개발할지 결정한다.
고객
고객이 갖춰야할 역량
- 고객은 비즈니스를 잘 파악하고 있는 사람
- 소프트웨어가 어떤 일을 해야 하는지 잘 알고 있는 사람
- 개발팀에 필요한 지침과 피드백을 줄 수 있는 사람
고객이 해야할 일
- 무엇을 개발할지 결정
- 우선순위 결정
- 무엇을 추가, 제외해야 할 지 결정
개발팀
애널리스트, 개발자, 테스트, 데이터베이스 관리자, 그 외 사용자 스토리를 소프트웨어로 만들 수 있는 모든 사람이 개발팀에 속한다.
사실 팀원들의 역할을 구분짓는 것이 아니다. 다만 분석, 설계, 개발, 테스트, 데이터베이스 관리와 같은 이들이 있고 이러한 일들을 수행할 수 있는 사람들이 필요한 것이다.
애자일 애널리스트
- 사용자 스토리 쓰기 도와주기
- 세부적인 사항 분석하기
- 우리가 맡은 바 임무를 다했는지 확인하기
애자일 개발자
- 사용자 스토리를 제대로 작동하는 소프트웨어를 만든다.
- 나머지 팀원들과 함께 추정치 정하기
- 기술적 사항에 대한 결정 내리기
애자일 테스터
1. 다음에 개발할 스토리의 테스트를 작성하기
2. 스토리가 기대한 대로 작동하는지 확인하기
3. 큰 맥락에서 테스트를 생각하기
애자일 프로젝트 관리자
1. 프로젝트가 어떻게 진행되고 있는지 확인하기
2. 프로젝트의 상태에 관해 필요한 사람들과 논의하기
3. 걸림돌 없애기
애자일 UX 디자이너
1. 여러가지 도구나 기법을 이용하여 편리한 사용자 경험을 구상한다.
팀 구성시 알면 좋은 팁
- 제너럴리스트를 찾아라
- 스스로 기회를 찾아 일하기를 권하기 때문에 다방면에 조예가 깊은 사람이 잘 적응한다.
- 개발자라면 프론트엔드와 백엔드, 애널리스트라면 분석과 테스트
- 애매모호한 상황을 개의치 않는 사람을 찾아라
- 요구사항은 항상 변하기 때문에 변화에 적응할 수 있어야 한다.
- 제멋대로 행동하는 사람이 아닌, 팀 플레이어를 찾아라
- 불분명한 역할 속에서 팀원들과 자신의 전문성을 나누며 성장할 수 있어야 한다.