목차
Agile이란?
Agile이라는 단어는 많이 쓰지만 정작 제대로된 이해는 부족한 경우가 많다. Agile의 핵심은 원리, 가치, 원칙에 더 가깝다. 프로젝트에 참가하는 팀이 어떠한 신념을 가지고 일을 진행시키겠냐는 약속에 가까운 것이다. 프로젝트를 진행하게되면 의사 결정의 순간에 팀만의 가치 우선순위가 없을 경우 일을 진행시키는 것이 매우 어렵다. 이러한 부분에서 Agile 원칙이 한가지 예로 존재하는 것. 아래에 서술할 Agile 개발 방법론으로부터 이 개념은 파생되어, 무언가 좋은 제품을 만드는데 있어서 빠르고, 낭비없이 만드는 원칙과 같은 관용어로 사용하게 되었다.
Agile의 전제
세상에 확실한 것은 아무것도 없다.
고객도 자신이 원하는 바를 정확히 모른다.
Agile menifesto
우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다.
이 작업을 통해 우리는 다음을 가치있게 여기게 되었다:
- 공정과 도구보다 개인과 상호작용을
- 포괄적인 문서보다 작동하는 소프트웨어를
- 계약 협상보다 고객과의 협력을
- 계획을 따르기보다 변화에 대응하기를
가치있게 여긴다. 이 말은, 왼쪽에 있는 것들도 가치가 있지만, 우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다는 것이다.
Agile Principles
- 우리의 최우선 순위는 귀중한 소프트웨어를 조기에 지속적으로 제공하여 고객을 만족시키는 것입니다.
- 개발 후반에도 변화하는 요구 사항을 환영합니다. 애자일 프로세스는 고객의 경쟁 우위를 위해 변화를 활용합니다.
- 짧은 기간을 선호하여 2 주에서 2 개월까지 작업 소프트웨어를 자주 제공합니다.
- 비즈니스맨과 개발자는 프로젝트 전체에서 매일 함께 작업해야합니다.
- 동기 부여 된 개인을 중심으로 프로젝트를 구축하십시오. 그들에게 필요한 환경과 지원을 제공하고 그들이 일을 완수 할 수 있도록 신뢰하십시오.
- 개발 팀과 정보를 전달하는 가장 효율적이고 효과적인 방법은 대면 대화입니다.
- 작업 소프트웨어는 진행 상황의 주요 척도입니다.
- 애자일 프로세스는 지속 가능한 개발을 촉진합니다. 스폰서, 개발자 및 사용자는 무한정 일정한 속도를 유지할 수 있어야합니다.
- 기술적 우수성과 우수한 디자인에 대한 지속적인 관심은 민첩성을 향상시킵니다.
- 단순성 (완료하지 않은 작업량을 극대화하는 기술)은 필수적입니다.
- 최상의 아키텍처, 요구 사항 및 디자인은 자체 구성 팀에서 나옵니다.
- 정기적으로 팀은 더 효과적인 방법을 고려한 다음 그에 따라 행동을 조정하고 적용합니다.
왜 사용하는가?
agile 방법론의 태동은 기존의 소프트웨어 방법론에서 발생한 문제점으로 부터 시사되었다. 계획에 의존하는 경우는 형식에 얽매이게 되고, 빠르게 방향을 변경하는 것이 어렵다. 그와 반대로 계획이 없는 경우 앞으로의 일을 예측하기 힘들고 효율적이지 못하다. 이러한 두가지 방법론 사이에서 타협을 찾았다고 볼 수 있다.
가장 큰 변화는 documentation보다 code를 기반하도록 변경된 것이다. 일정한 주기를 가지고 프로젝트의 생명 주기가 끝나기 전까지 그때 그때 고객과의 소통을 통해 요구를 더하고 수정하여 하나의 커다란 소프트웨어를 개발하는 방법이다.
Scrum이란?
Football Scrum
스크럼은 럭비에서 진형을 갖추고 있는 모습을 말한다. 이 그림을 보면 팀단위로 똘똘뭉쳐서 하나의 목표를 달성하기 위해 진형이 구축되어 있다. 스크럼 개발 방식은 이 주도적인 팀 수행이 핵심이다.
Agile 가치를 기반으로 실행할 수 있는 Framework중 하나이다. 가치를 말하는 Agile을 이러한 틀을 기반으로 진행시키면 쉽게 할 수 있다를 제안한다. 사실 이 방법이 매력적인 이유는 보통 소규모 프로젝트를 진행했을 때 팀단위가 3~10명 사이이기 때문이다. 쉽게 회의를 진행할 수 있고, 그렇기 때문에 의사소통이 편하다.
Terms
Scrum process
- 스크럼팀(scrum team)
- 프로젝트 수행에 필요한 모든 역량을 갖춘 팀
- 팀원은 전문 영역에 고정되지 않고 다같이 팀 과제를 수행함
- 제품 책임자(product owner)
- 제품의 백로그를 관리, 통제할 수 있는 권한을 가진 사람.
- 단 한명이어야 한다.
- 고객 및 조직 가치에 기반하여 제품 백로그 항목들의 우선순위를 결정하고 매 스트린트의 결과를 검토하여 우선순위를 지속적으로 조정, 관리한다.
- 스크럼 마스터(Scrum Master)
- 현장에 맞는 실천법을 정립하여 실행할 수 있도록 이끈다.
- 일일 스크럼 회의를 주관하여 진척도를 모니터링하고, 생산성에 악영향을 미치는 정책, 절차, 구조를 공론화하여 처리한다.
- PM과 달리 업무를 지시, 통제하지 않는다.
- 목표달성을 위해 필요한 자원을 지원하거나 장애물을 제거하는 조력자 역할이다.
- 백로그(Backlog)
- 요구 사항 리스트, 제품의 개발 대상 목록
- Agile에서는 User Story라 부른다.
- 스프린트(Sprint)
- Agile은 짧은 기간 동안 동작하는 SW를 만들고 피드백을 통해 고쳐나가는 방법을 사용한다. 이 짧은 기간을
iteration
이라 한다. - Scrum에서는
sprint
라 한다. - 보통 1~4주의 기간을 선정한다.
- Agile은 짧은 기간 동안 동작하는 SW를 만들고 피드백을 통해 고쳐나가는 방법을 사용한다. 이 짧은 기간을
- 스프린트 백로그(sprint backlog)
- 1개의 스프린트에서 개발할 백로그들을 스프린트 백로그라 한다.
Agile, Scrum 사례 - Spotify
- 스웨덴의 온라인 뮤직 서비스 업체
- 30여개의 팀에 3개의 도시에 분산되어 있음
- 설립된지 6년
- 초기 2년동안 엄청난 자금난에 시달렸음
- 1,500만 명의 액티브 유저가 서비스를 이용 중이고, 그 중 400만명이 유료 사용자
spotify squad
Squad
- Spotify에서는 개발 기본 단위인 팀을 Squad라고 부른다.
- 스크럼 팀과 유사하며, 그 자체로 미니 스타트업처럼 구성되어 있다.
- 물리적으로 한 공간에서 일하며, 한 Squad 내부에 기획, 개발, 테스트, 배포 등이 가능한 모든 기술과 자원을 갖추고 있다.
- 일하는 방식은 스스로 결정한다.
- 린 스타트업의 MVP 원칙을 지킨다. 간단히 말해서, 제품을 최대한 일찍 자주 릴리스한다는 의미.
- 각 Squad는 커다란 제품의 한 부분을 담당한다.
- Squad에는 각각 별도로, 업무를 위한 공간, 함께 모일 수 있는 라운지, 휴식 공간이 제공되며, 모든 벽이 화이트보드
- 업무 시간의 10%를 학습과 혁신을 위한 ‘hack day’로 사용
- 임명된 리더는 존재하지 않는다. 다만 Product Owner에게 팀 업무의 우선순위를 정하고, 로드맵을 유지하는 책임이 있다.
- 애자일 코치가 배정되어 있어서 일하는 방식을 지속적으로 개선한다.
Tribe
- Tribe는 Squad의 집합이고 필요한 Squad를 키워내는 인큐베이터의 역할을 함.
- Tribe Lead에게는 최상의 업무 공간을 유지할 책임이 있다.
- 모든 Tribe는 협업을 위해 물리적으로 같은 공간을 사용
- 한 Tribe의 크기는 한 사람이 사회적 관계를 유지할 수 있는 최대치인 100명을 초과하지 않는다.
- Squad 끼리의 업무 종속성을 해소하기 위해 필요에 의해 ‘Scrum of scrum’을 진행한다.
- 운영 조직과 개발 조직은 서로 다른 Squad로 구성한다.
Chapter
- Chapter는 한 Tribe 내에 존재하는 같은 직군의 조직. (예를 들어, 웹 개발자 챕터, 테스터 챕터, 백엔드 챕터 등)
- 각 Chapter는 정기적으로 모여서 해당 분야의 전문적인 내용들을 다룬다.
- Chapter Lead는 자신의 Chapter 구성원을 관리한다. (임금, 인력 개발 등의 동적 자원 관리) 그러나 Chapter Lead도 한 Squad의 구성원
Guild
- Guild는 Tribe를 넘나드는 공통의 관심 분야를 가진 사람들의 커뮤니티라고 할 수 있다. (예를 들어, 웹 기술 길드, 테스터 길드, 애자일 코치 길드 등)
- 해당 분야에 속한 구성원은 Guild에 무조건 소속되게 되지만, 그렇지 않더라도 관심이 있는 사람이라면 누구나 참여할 수 있다.
- Guild Coordinator는 Guild의 전반적인 리더 역할을 한다.
- 공개적으로 같은 관심 사항에 대해 토론하고 해결책을 모색한다.