본문으로 건너뛰기

1장 애자일 소개

요약

  • 애자일은 프로젝트 일정을 일정한 크기로 나눠서(스프린트) 프로젝트 전체 주기에 걸쳐 분석, 설계, 구현을 반복 수행한다.
  • 애자일은 작은 소프트웨어팀이 작은 프로젝트를 관리할 수 있게 도와주는 작은 규칙이다. 큰 프로젝트는 작은 프로젝트가 모여서 만들어진다.
  • 애자일의 핵심은 스토리 포인트를 추산하여 프로젝트에 대한 데이터를 얻을 수 있다는 점.
  • 프로젝트를 망치는 건 헛된 희망이다. 애자일은 우리가 얼마나 망했는지를 최대한 빨리 알 수 있게 해준다.

애자일의 역사

인간은 5만년 전부터 애자일을 사용해왔다. 중간 단계의 작은 목표를 고르고, 그 진행 상황을 측정한다는 아이디어는 너무나 직관적이고 인간적이다.

애자일 방식은 작은 프로젝트에서 잘 동작하고, 목표가 명확하게 세워지지 않은 불완전하게 정의된 문제를 잘 푼다. 반면 과학적 관리법(워터폴)은 변경 비용이 많이 드는 프로젝트에서 잘 동작하고, 목표가 극도로 명확한 매우 상세하게 정의된 문제를 잘 푼다.

애자일 개요

모든 프로젝트는 일종의 트레이드 오프를 벗어날 수 없다.

[ 좋음, 빠름, 저렴함, 완성 ] 이중 세가지만 선택할 수 있다. 좋고 빠르고 저렴한 프로젝트는 완성되지 않을 것이다.

좋은 관리자라면 이 네가지 속성에 가중치를 둘 수 있음을 이해한다. 필요한 만큼 좋고, 빠르고, 저렴하고 완성되도록 한다. 이 네가지 속성의 가중치를 관리하지, 모든 속성이 100%가 되기를 요구하지 않는다. 애자일은 이런 관리를 추구한다.

애자일은 스프린트에서 수행한 스토리 포인트와 프로젝트의 남은 스토리 포인트에 대한 차트를 얻을 수 있다. 이 두 차트를 벽에 거는 것이 애자일의 중요한 목표다. 관리자에게 위의 네 속성에대한 가중치의 분배를 결정하는데 도움이 되는 데이터를 제공함으로써 프로젝트를 최선의 결과로 이끌도록 한다. 데이터 없이는 프로젝트를 관리할 수 없다.

프로젝트에서 가장 먼저 알게되는 것은 마감기한이다. 동시에, 요구 사항은 대단히 유동적이고 절대 확정되지 않는다. 고객은 자신이 실제로 무엇을 원하는지 모르기 때문이다. 고객은 어떤 문제를 풀고 싶은지는 알지만 고객의 생각을 요구사항으로 바꿔내는 일은 절대 쉽지 않다. 그래서 요구사항을 끊임없이 재평가하고 재검토한다. 새로운 기능이 추가되며, 기존 기능은 빠진다.

워터폴 방식 예시

6달의 마감기한을 가지는 프로젝트가 있다. 6달을 2달씩 쪼개서 분석 / 설계 / 구현을 한다.

분석단계. 분석이란 무엇인가에 대한 진정한 합의란 없다. 요구사항 작업 분할 구조를 만드는 것일 수도 있고, 요구사항을 찾고 정교하게 다듬는 것일 수도 있다. 분석이 무엇인가에 대한 최고의 정의는 바로 ‘분석가가 하는 일’이라는 것이다. 이 기간은 프로젝트의 신혼이나 다름없다. 모두가 행복하게 웹서핑을 하며 전반적으로 좋은 시간을 보낸다. 2달이 지나면 기적이 일어난다. 분석이 끝난 것이다. 왜 끝났을까? 2달이 지났기 때문이다.

설계단계도 분석보다는 좀 더 낫지만 비슷하다. 2달이 지나면 설계가 끝났다고 선언하고 넘어간다.

구현 단계. 분석과 설계와는 달리 구현은 명확한 완성 기준을 갖고 있다. 단순히 시간이 되었기 때문에 끝났다고 선언하고 넘어가는 것이 불가능하다. 구현단계는 모호하지 않다. 그러는 동안, 요구사항은 계속 바뀐다.

이해관계자의 불만을 이렇게 상상해볼 수 있다.

  • 분석 단계에서 우리에게 일정이 불가능하다는 것을 알려줄 수 없었습니까? 프로젝트 규모를 산정하고 일정을 맞출 수 있는지 가늠하는 것은 그때 아닙니까?
  • 설계 단계에서 우리에게 말할수는 없었습니까? 설계를 모듈별로 나눈 후, 모듈을 팀별로 할당하고, 인력 수요를 계산하는 것이 그때 하는 일 아닌가요?

맞는말이다.

실패 후 다시는 이렇게 프로젝트를 진행하지 않겠다고 다짐한다. 다음번에는 더 분석하고 더 설계해야지.

저자는 이를 “따라잡을 수 없는 프로세스 인플레이션”이라고 부른다. 될 리가 없는 일을 계속하려고 한다. 그것도 아주 많이.

애자일 방식

애자일 방식 역시 분석으로 시작한다. 하지만 이 분석은 끝나지 않고 계속 이어진다.

프로젝트 일정을 일정한 크기로 더 작게 나눈다. 이를 반복주기 또는 스프린트라고 부른다. 애자일은 반복주기 전체에 걸쳐 요구 사항 분석, 아키텍처 수립, 설계, 구현 활동이 끊임없이 일어난다. 짧은 폭포수를 반복하는 것과는 다르다.

애자일은 데이터를 만든다. 스프린트당 스토리를 몇개나 완성할 수 있는지 추산가능하다. 계산 결과는 매우 실망스러울 가능성이 크다. 프로젝트의 우너래 종료 일자를 한참이나 넘어갈 것이 뻔하다. 물론 처음에 나온 데이터가 정확하지는 않다. 하지만 스프린트를 반복해나가며 주당 스토리 추산이 점점 더 명확해지고 마감기한은 헛된 희망임을 단정할 수 있게 된다.

희망 대신 관리

희망을 없애는 것이 애자일의 주요 목표다. 애자일을 실천하면 희망이 프로젝트를 죽이기 전에 희망을 파괴할 수 있다. 애자일은 희망 대신 춥고 힘든 현실을 초기부터 끊임없이 보여주는 방법이다.

애자일이 빠르게 나아가는 것이라고 생각하는 사람도 있다. 그렇지 않다. 애자일은 우리가 얼마나 망했는지를 최대한 빨리 아는 것이다.