2001년 애자일 소프트웨어 개발 선언
[가치 4가지]
공정과 도구보다 개인과 상호작용을
포괄적인 문서보다 작동하는 소프트웨어를
계약 협상보다 고객과의 협력을
계획을 따르기보다 변화에 대응하기를
[원칙 12가지]
1. 우리가 가장 우선시하는 것은 신속하고 지속적으로 가치 있는 소프트웨어를 고객에게 전달함으로써 고객 만족을 이루는 일이다.
2. 뒤늦게 요구사항이 바뀌더라도 즐겁게 받아들여라. 애자일 프로세스들은 고객이 경쟁에서 우위에 서도록 변화를 활용한다.
3. 작동하는 소프트웨어를 몇 주 ~ 몇 개월 간격으로 고객에게 전달하라. 물론 짧을 수록 좋다.
4. 프로젝트 기간 동안 업무 전문가들과 개발자들은 매일 함께 일 해야 한다.
5. 의욕이 가득 찬 사람으로 프로젝트를 구성하라. 그들이 필요로 하는 환경과 지원을 주고 그들이 일을 끝내리라고 신뢰하라.
6. 개발 팀 내의 누구에게든 가장 정확하고 효과적으로 정보를 전달하는 방법은 직접 대면하면서 이야기하는 것이다.
7. 작동하는 소프트웨어가 진척의 주된 척도이다.
8. 애자일 프로세스들은 지속 가능한 개발을 장려한다. 스폰서, 개발자, 사용자는 일정한 속도를 계속 유지 할 수 있어야 한다.
9. 탁월한 기술력과 훌륭한 설계에 대한 지속적 관심이 기민함을 높인다.
10. 단순함(꼭 하지 않아도 되는 일은 최대한 하지 않는 기교)은 필수이다.
11. 최고의 아키텍처, 요구사항, 설계는 자기 조직화 된 팀(self-organizing)에서 나온다.
12. 팀은 정기적으로 어떻게 더 효과적이 될지 숙고하고, 이에 따라 팀의 행동을 조율하고 조정한다.
[네이키드 애자일] 中
애자일 방법이 특정 세부 방법론이나 프로세스를 뜻하지 않는다.
직급을 없애고 호칭을 파괴한다고 해서 문화가 달라지지 않는다. 일은 성취와 몰입을 위한 놀이에 좀 더 가깝다.
애자일 소프트웨어 개발 선언 도 4가지 핵심 가치와 12가지 원칙만 있을 뿐. 실제 애자일을 사용하는 조직을 살펴보면 기업마다, 팀마다 다르게 나타난다. 그러므로 애자일은 변화에 기민하면서도 효율적으로 대응하는 소프트웨어 개발 철학을 이행하는 다양한 방법의 통칭에 더 가깝다.
일과 삶을 바라보는 우리 조직의 문화가 어떠한가?
- 팀원들이 '심리적 안전감' 을 가지고 과업의 본질에 집중할 수 있는 문화는 없는가
- 팀원들이 일을 통해 충족감을 느끼고, 하는 일이 생산적이라고 느낄 수 있는 일터를 만들 수는 없는가
- 개개인성이 존중받고 각자가 자신의 가치와 의미를 찾아 직무에 몰입하도록 돕는 문화를 만들 수는 없는가
애자일은 어느 정도 해답을 줄 수 있다.
오랜 기간 많은 자원을 투자해 비밀스럽게 완벽한 제품을 개발 X
빠른 속도로 시제품을 출시해 고객과 시장의 피드백을 받아가며 제품을 수정, 보완 O
실제 동작하는 결과물을 민첩하게 만드는 것을 목표
고객과 가장 가까운 접점에 있는 직원들에게 의사결정을 맡긴다. 고객 니즈 변화에 발 빠르게 대응하기 위함.
[애자일 마스터] 中
중요한 것은 제대로 작동하는 소프트웨어를 정기적으로 고객에게 전달하는 것
매주 가치 전달하기
- [Split] 큰 문제들을 작은 문제들로 세분화
- [Filter] 가장 중요한 것에 먼저 집중하고, 다른 것들은 다 잊어버리기
- [Test] 제품이 제대로 작동하는지 확인, 또 확인
- [Feedback] 고객에게 피드백 받기
- [Change] 필요 시 계획 수정
- [Responsibility] 고객에게 책임감 가지기
스프린트 마다 가치를 전달한다는 건 어떤 것도 감출 수 없다. 가치 있는 것을 생산했느냐 아니냐 만 있을 뿐.
[프로세스의 투명성], [품질을 향상시키고자 하는 열망], [계획을 실행하고자 하는 강한 욕망] 이 있다면 애자일을 통해 보람과 재미를 느낄 것이다.
[ 애자일 프로젝트는? ]
1. 각 팀원 간의 역할이 불분명(누구나 기획/디자인/테스트에 참가 가능)
2. 지속적으로 분석-설계-구현-테스트 수행
3. 우리는 하나. 같은 배를 탄 팀이라는 인식. 결함이 나오면 모두의 책임이다.
[ 애자일스럽게 ]
1. 같은 공간에서 일하기 (믿음↑ 문제 해결 속도↑)
같은 공간에서 일할 수 없는 경우에는 ?
- 프로젝트 초반에는 며칠만이라도 서로를 알아가면서 농담, 식사 등을 통해 단단한 결속력 가지기
- 원격 의사소통 도구 잘 활용하여 함께 일하는 기분 느끼기
2. 참여하는 고객은 중요한 팀원 중 하나이자 최고의 파트너
고객이 알아챌 때 까지 고객의 피드백을 해결하자. 언젠가는 고객이 책임감 있게 제품을 개선한다고 느낄 것임. 신용 ↑
3. 자기 조직화 (self-orgganizing)
팀을 단속하려는 규율이나 통제를 없애고 믿음과 권한을 부여하면서 일해라
4. 책임감 & 자율성
훌륭한 애자일 팀은 결과에 책임을 지려 한다. 책임감 있는 작업은 팀에게 실질적인 권한이 주어졌을 때만 이루어진다.
5. 교차가능팀
고객이 어떤 기능을 요구하든 제대로 전달할 만한 역량. 다방면에 높은 지식은 속도를 높인다
[ 애자일 역할 ]
1. 고객
비즈니스를 잘 파악하고 있는 전문가
2. 애널리스트
고객과 가장 가까이 일하면서, 고객이 정말 무엇을 원하는지 캐내기 위해 끊임없이 질문하는 자
해당 기능이 정확히 어떻게 작동해야 하는지 세세한 부분까지도 알아내야 함
3. 개발자
소프트웨어 품질 전문가. 스스로의 작업에 자부심을 느끼면서도 더 높은 품질의 코드를 생산하려고 하는 자
4. 테스터
소프트웨어가 고객이 기대한 바와 같은지 확인하는 자
5. PM
끊임 없이 계획을 짜고 필요에 따라 계획을 수정하는 자
팀원들이 행복해야만 프로젝트가 성공한다는 사실을 아는 자
윗선에 진행상황 보고 / 회사와의 관계 형성 / 외부의 압력으로부터 보호 하는 자
팀원들에게 직접 일을 지시하지 않는 자
제품을 잘 출시할 수 있는 환경을 만들어 주는 자
6. 디자이너
고객 사용성 ↑
개발이 진행되는 동안 주기적으로 조금씩 디자인해 나가는 과정을 부담스러워 하지 않는 자
7. 기타 등등
한 사람이 여러가지 역할을 맡을 수 있다. 해당 전문가가 없다면 구성원 중 누군가는 해당 역할을 맡아야 한다.
[ 팀 구성 TIP. ]
1. 저널리스트를 찾아라
다방면에 조예가 깊은 사람이 잘 적응한다. 여러가지 역할을 맡을 수 있는 기회를 즐기는 자를 찾아라
2. 변화구를 즐기는 자를 찾아라
애자일 프로젝트에서는 모든 일이 깔끔하게 정돈되어 처리되지 않는다.
변화구가 날아올 때 당황하지 않고 기다렸다는 듯이 대응할 수 있는 자를 찾아라
3. 팀 플레이어를 찾아라
애자일은 역할이 불분명하다. 하지만 어떤 이들은 자신의 영역을 침범 당하기 싫어한다.
그러니 자신의 전문분야에 탁월하면서 다른 팀원들과 나누며 성장하는 자를 찾아라
[소프트웨어 장인] 中
애자일 원칙과 방법론들을 [절차적인 부분]과 [기술적인 부분] 두 종류로 나눌 수 있다.
[절차적인 부분] :: 올바른 목표를 향해 진행 중인가?
- 회의 방식
- 구성원 각각의 역할
- 요구사항 파악 방법
- 작업 진척 속도 파악 방법
- 점진적/반복적으로 일할 때 취하는 방식
- 진행 상황을 개발팀 밖의 관계자에게 전달하는 방식
- 비즈니스 피드백 방식
[기술적인 부분] :: 목표한 것을 올바르게 실행하고 있는가?
- TDD
- 페어 프로그래밍
- CD
- ...
[기술적 탁월함의 개선 없이 절차만 개선하는 것은 무의미]
- 애자일의 모든 절차들에는 기술적 탁월함이 전제되어 있음
- 애자일 전환을 위해 '스크럼 도입', '스탠드업 미팅, 백로그 관리툴 사용' 을 하는 것만으로
갑자기 소프트웨어 품질이 좋아지거나 개발자들의 역량이 높아지지 않음
- 도요타가 성공할 수 있었던 중요한 요인은 절차를 개선하는 것 뿐만 아니라
자동차의 품질에 이미 충분한 역량과 그를 뒷받침하는 노력이 있었기 때문
- 기술적 탁월함을 갖추지 못한 프로젝트는 고통과 비싼 경험이 되기 쉬움
최고의 개발자 부진한 개발자 좋은 절차 프로젝트 성공 프로젝트 실패 나쁜 절차 프로젝트 실패 프로젝트 실패