Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

클린 애자일 서평

우리가 실제로 문제에 뛰어들어 해결하기 전까지는 그 문제가 얼마나 복잡한 것인지 모른다. 이러한 불확실한 상황 속에서 프로젝트를 어떻게 진행해야 하는가? 예측가능성을 어떻게 높일 수 있을까?

애자일이란 무엇인가?

애자일은 데이터를 만드는 것이다. 데이터를 계속해서 만들어내고 이 데이터로 다음에 어떻게 프로젝트를 진행할지 결정한다. 이러한 주기를 짧고 반복적인 주기로 지속하여 예측가능성을 높여나가는 것이다.

프로젝트를 더 작은 반복 주기로 나누는 프로세스다. 각 반복 주기의 결과물을 측정하여 지속적으로 일정을 평가하는데 사용한다.

피드백 기반 접근법이다. 이전의 결과를 보고 적절한 조정을 가하며 개발을 진행해 간다.

애자일은 왜 해야 하는가?

고객의 기대를 만족시키기 위해서다.

  • 고객은 소프트웨어가 당연히 잘 동작할 것이라고 기대한다. 매 반복 주기마다 항상 동작하는 소프트웨어를 유지해야 한다.
  • 고객은 소프트웨어팀이 일정한 속도로 개발할 것이라고 생각한다. 높은 코드 품질을 유지하여 프로젝트가 점점 커지더라도 일정한 속도를 유지해야 한다.
  • 고객은 소프트웨어를 바꾸기 쉬울 것이라 생각한다. 항상 변경하기 쉬운 상태를 유지해야 한다.
  • 고객은 지속적으로 개선이 이루어질 것이라 기대한다. 소프트웨어는 오래될수록 더 좋아져야 한다.
  • 고객은 두려움을 이겨내는 능력을 기대한다. 변경에 대한 두려움을 없애야 한다.

애자일은 어떻게 해야 하는가?

한 번 하는 게 중요한 게 아니라 계속해서 실천하고 있는지 확인해야 한다.

  • 스토리 포인트 차트 만들기
    • 차트에는 오직 인수 테스트를 통과한 스토리만 기록한다
    • 스토리가 끝나면 데모를 하고 모든 인수테스트와 단위 테스트를 통과하는 것을 보여주어야 한다
    • 데모가 아닌 이해관계자가 사용할 수 있어야 한다. 기울기가 0이 되어야 한다. 즉 일정해야 한다.
    • 측정하려는 대상에 압박을 가하면 잘못된 점수가 생긴다. 따라서 압력을 가하면 안 된다. 속도가 떨어지거나 오르는 것을 잘 관찰하자
    • 지속적으로 스토리 추정 결과를 예전에 정한 기준 스토리와 비교하여 포인트 인플레이션을 막아야 한다.
  • 번다운 차트 만들기
    • 기울기를 관찰하자
  • 짝 프로그래밍 하기
    • 하루에 시간을 얼마나 할애할까? 최대 4시간
  • 코드 리뷰하기
    • 품질을 높게 유지하자
  • 데일리 스크럼 만들기
    • 미팅 참석은 필수가 아니다.
    • 꼭 매일 할 필요는 없다.
    • 10분이 넘게 걸리면 안 된다.
    • 지난 미팅 이후 무엇을 했는지, 다음까지 무엇을 할 것인지, 어떤 장애물이 있는지, 누구에게 감사하고 싶은지
  • 스프린트 만들기
    • 주기는 1 ~ 2주일
  • 주간회고 만들기
  • 작은 릴리스 만들기
    • 스프린트 내에 결과물은 동작해야 한다.
    • 릴리스와 배포 사이의 관계를 끓어야만 한다.
  • 전체 팀 만들기
  • 인수테스트 주도 개발하기
    • QA 팀은 아무것도 발견하지 못해야 한다
    • 사용자 스토리의 세부사항을 인수테스트로 작성한다
  • 계획 게임하기
  • CI/CD 구축하기
    • 지속적 빌드가 깨진 상태로 방치하면 안 된다.
  • 코드를 공동 소유로 만들기
  • 지속 가능한 속도 유지하기
    • 어제의 날씨
  • 유비쿼터스 언어를 만들고 사전을 만들자
  • 테스트 주도 개발하기
  • 단순한 설계 만들기
    • 모든 테스트는 통과해야 한다.
    • 의도를 드러내야 한다.
    • 중복을 없애야 한다.
    • 구성 요소를 줄여야 한다.
    • 설계의 복잡도와 기능의 복잡도 사이에서 균형을 잡는 것
  • 리팩터링 하기
    • 보이스카우트 원칙
  • 사용자 스토리 만들기
    • Flying fingers
    • 스토리 크기는 S, M, L를 사용
    • 누가 어떤 스토리를 진행할지는 스스로 나눠 갖는게 좋다
  • 학습공동체를 만들기

애자일은 언제 망하는가?

속도를 유지하지 못하면 망한다. 코드의 품질이 안좋으면 속도는 점점 느려진다. 그러면 스토리 포인트를 해결하는 속도가 점점 느려지고 애자일 때문에 실패했다고 생각한다. 높은 코드 품질을 유지해야 한다.

Sources