Review: 소프트웨어 개발의 지혜 - 1장_애자일 실천방법

백근영·2020년 3월 24일
3
post-thumbnail

원칙, 패턴, 실천방법 등도 모두 중요하지만, 이것들이 그 기능을 제대로 발휘하게 하는 것은 바로 인간이다. 프로세스와 기술은 프로젝트의 결과에 이차적 영향만을 미칠 뿐, 일차적 영향을 미치는 것은 인간이다. 따라서 프로젝트를 성공적으로 이끌기 위해서는 협력적이고 자기 조직적인 팀을 구성하는 것이 중요하다.

애자일 동맹

2000년대 초기에는 많은 회사들이 실천방법(practice) 없이 개발을 해왔다. 오류는 계속해서 발생했고 복잡해진 프로세스는 계속되는 악순환을 낳았다. 그래서 소프트웨어 분야의 전문가들이 소프트웨어 팀으로 하여금 빠르게 일하고 변화에 반응할 수 있도록 하는 가치와 원칙을 세우기 위한 모임을 가졌다. 이를 애자일 동맹이라고 하며, 이 모임에서 애자일 동맹 선언이 등장한다.

애자일 동맹 선언

개인과 상호작용이 프로세스와 툴보다 우선이다.

프로젝트가 성공하기 위한 가장 중요한 요소는 사람이다. 프로젝트에는 뛰어난 능력을 가진 팀원이 필요한데, 이때 뛰어난 능력이란 프로그래밍을 잘하는 것이 아니라 다른 동료와 함께 잘 일할 수 있는 능력을 뜻한다.

적당한 툴은 성공을 위해 꼭 필요한 것이지만, 팀을 구성하는 것이 환경을 구성하는 것보다 더 중요하다는 것을 명심해야 한다. 우선 팀을 만들기 위해 노력하고, 그런 다음에 팀의 필요를 기반으로 환경을 구축해야 한다.

동작하는 소프트웨어가 포괄적인 문서보다 우선이다.

문서화되어 있지 않은 소프트웨어는 실패한 소프트웨어이다. 사람이 읽을 수 있는 형태로 된 문서는 꼭 필요하지만, 지나친 문서화는 오히려 해가 된다. 문서를 만드는 것은 오랜 시간을 필요로 하며, 코드와 동기화를 하는 데에 많은 노력을 기울여야 한다. 코드와 문서의 내용이 맞지 않다면 이는 프로그래머를 잘못된 방향으로 유도할 것이다.

간소화된 문서로 인해 새로운 팀원이 시스템 적응에 힘들어한다면 동료 개발자와의 긴밀한 소통을 통해 적응해나가도록 해야한다. 시스템에 대한 이해를 다른 사람에게 전해주기 위한 것으로 '사람 대 사람의 상호작용'보다 더 빠르고 효율적인 것은 없다.

고객 협력이 계약 협상보다 우선이다.

성공적인 프로젝트는 정규적이고 빈번한 고객의 피드백을 수반한다. 프로젝트의 요구 사항, 일정, 비용을 명시한 계약서는 근본적으로 부족한 부분이 있다. 대부분의 경우 계약서에 명시된 기한은 의미 없이 늘어나기만 하므로, 바람직한 계약서는 개발 팀과 고객이 함께 작업하면서 협의해야 한다.

도메인 주도 설계에서 접했던 도메인 전문가의 존재에 관한 내용과 맥락을 같이 하는 부분이라고 생각한다. 고객을 단순히 고객으로만 보지 않고 프로젝트에 새로운 통찰력을 제공해줄 수 있는 협조자로 받아들여야 한다.

변화에 대한 반응이 계획을 따르는 것보다 우선이다.

프로젝트를 진행해 감에 따라 요구사항은 변화하기 마련이다. 고객은 시스템이 일단 동작하기 시작하면 요구 사항을 좀 더 높은 단계로 끌어올리고 싶어할 것이다. 기존에 계획했던 어떤 태스크는 필요 없어질 것이고, 또 어떤 태스크는 새로 등장하고 추가되어야 한다.

그렇기 때문에 팀은 변화에 민감하게 반응할 수 있도록 단기적으로만 구체적인 계획을 수립해야 하고, 중장기적인 계획은 대략적으로만 설정해야 한다.

원칙

앞서 설명한 가치들은 다음 12개의 원칙을 이끌어낸다. 이 원칙은 애자일 실천방법을 기존의 무거운 프로세스와 차별화하는 특징이다.

  • 우리의 최고 가치는 유용한 소프트웨어의 빠르고 지속적인 공개를 통해 고객을 만족시키는 것이다.
  • 개발 후반부에 접어들었다 할지라도, 요구 사항 변경을 환영한다. 애자일 프로세스는 고객의 경쟁 우위를 위해 변화를 이용한다.
  • 개발 중인 소프트웨어를 2주에서 2개월 사이, 혹은 더 짧은 시간 간격으로 자주 인도한다.
  • 프로젝트 전체 과정 동안 비즈니스를 하는 사람과 개발자는 계속 함께 일해야 한다.
  • 의욕적인 개인을 중심으로 프로젝트를 구성한다. 환경과 필요한 것을 지원하고 그들이 그 일을 해 낼 것이라는 믿음을 갖고 일을 맡긴다.
  • 개발팀 내부에서 정보를 전달 및 공유하는 가장 효율적이고 효과적인 방법은 직접 일대일로 대화하는 것이다.
  • 개발 중인 소프트웨어가 진척 상황의 일차적 척도이다.
  • 애자일 프로세스는 지속 가능한 개발을 촉진한다. 스폰서, 개발자, 사용자는 꾸준히 지속적인 속도를 유지할 수 있어야 한다.
  • 우수한 기술과 좋은 설계에 대한 지속적인 관심은 진행 속도를 향상시킨다.
  • 단순성은 필수적이다.
  • 최고의 아키텍처, 요구 사항, 그리고 설계는 자기 조직적인 팀에서 나온다.
  • 규칙적으로, 팀은 좀 더 효과적인 방법을 반영해야 하고 적절히 그 동작을 조율하고 조정해야 한다.
profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

0개의 댓글