애자일 방법론이란 무엇인가? 애자일 방법론의 핵심은 무엇인가?
https://gmlwjd9405.github.io/2018/05/26/what-is-agile.html

Goal

  • 역사적인 맥락을 통한 애자일의 등장 배경
  • 애자일(Agile)이란 무엇인가
  • 애자일의 핵심은 무엇인가

애자일의 등장 배경

초기 SW의 개발 방법은 계획 중심의 프로세스(SW 개발의 역사)

  • 초기에 SW을 주로 개발했던 분야는 ‘군사’ 쪽의 대형 프로젝트이다.
  • 즉, 계획 중심의 프로세스 로 SW 개발이 진행됐다.
    • 이 계획 중심의 프로세스는 ‘건축(도시 계획)’에서의 방법을 본딴 것이다.
  • 당시에는 이런 프로세스를 하는 것이 적합해보이는 프로젝트가 대부분이었다.

하지만, 지금은 달라졌다. 높아진 SW 개발의 불확실성

  • 90년대를 지나면서 SW분야가 넓어지고 SW의 사용자(end user)들이 ‘일반 대중들’로 바뀌기 시작했다.
  • 또한 비지니스 사이클이 짧아지면서 사람들의 욕구와 트렌드도 빨리 바뀌게 되었다.
    • Q. 비지니스 사이클?
      • 제품이 나오고, 사용하고, 또 다른 제품으로 넘어가서 사용하고, 또 새로운 제품이 나오는 식의 사이클. 예를 들어 사용하는 핸드폰의 수명이 1~2년 정도로 바뀐 것.
  • 이러한 변화에 따라 SW 개발의 불확실성이 높아졌다.

새로운 SW 개발 방법의 등장

  • SW 개발의 불확실성이 높아짐에 따라 예전의 전통적인 개발 방법이 맞지 않다는 것을 느낀 사람들은 각자 자신만의 SW 개발 방법을 만들어서 사용하고 있었다.
    • Q. 왜 전통적인 개발 방법이 맞지 않다는 것을 느꼈나?
      • ‘창의성’이나 ‘혁신’을 계획하는 것이 이상하다고 생각했다.
      • 예를 들어, 보수적인 회사에서 자기들이 생각하기에 미리 계획한 혁신적인 일이 다른 사람들이 보기에는 ‘뻔히 예상가는, 그냥 그 회사같은 것을 해놨네.’ 라고 생각이 든다. 왜냐하면 혁신은 계획에서 나오는 것이 아니기 때문이다.
  • 즉, ‘경량 방법론 주의자(lightweight methodologies)’ 들은 해보면서 고쳐나가는 방식의 방법론을 사용하게 되었다.
    • 규칙이 적고 가볍게 대응을 잘하는 방법
    • Q. 그렇다면 이 방법은 주먹구구식과 뭐가 다른가?
      • 밑에서 더 자세히 설명하겠지만, 이 방법을 아주 잘하는 단계에 이르면 겉에서 보기엔 미리 큰 그림을 만들어놓고 하는 것처럼 보인다.
      • 예를 들어, 즉흥연기를 잘하는 단계에 이르면 겉에서 보기엔 대본대로 하는 것이 아니냐는 생각을 한다.

새로운 SW 개발 방법의 선언

  • 2001년도에 경량 방법론 주의자 17명이 만났다.
    • 17명 각각이 방법론을 만들어 쓰고 있었다.
    • 각각의 방법론에서 서로 간에 추구하는 관점의 공통점을 추려서 ‘애자일 SW 개발 선언문’ (A4로 한 장 정도)을 만들었다.
    • 이 사람들의 뿌리는 스몰토크(Smalltalk)라는 객체 지향 프로그래밍 언어라는 프로그래밍 언어의 문화에서 나왔다. (c언어의 문화와는 다르다.)
      • Q. 스몰토크(Smalltalk)?
        • 동적 형, 반영을 지원하는 객체 지향 프로그래밍 언어
    • 이때부터 애자일이라는 용어에 의미가 생겼다.


애자일(Agile)이란?

1. 사전적인 정의

  • ‘애자일 SW 개발 선언문’에 나와있는 것이 사전적인 정의의 전부다.
    • 시중에 파는 애자일 관련 책들은 ‘애자일 SW 개발 선언문’의 해석 이 대부분이다.
  • 이 선언문의 나열식 내용을 느낌대로 나름의 정리를 하자면, “협력”과 “피드백”이라는 두 단어로 정리를 할 수 있다.
  • 즉, 한 마디로 "협력과 피드백을 자주! 일찍! 더 잘하는 것!" 이다.

2. 현실적인 정의

  • 추가 작성 계획


애자일의 핵심(협력과 피드백)

애자일의 핵심 1. “협력”

  • SW 프로젝트가 망하는 경우는 기술 외적인 것도 크다. 따라서 특히 SW 개발의 불확실성이 높을 때는 “협력”을 잘 해야한다.
  1. 내부적 협력
    • 내부적 협력: SW를 개발한 사람들 안에서의 협력을 말한다. 특히, 직무 역할을 넘어선 협력을 의미한다.
    • 좋은 일은 곱하기!!
      • 1) 혼자 얻은 좋은 통찰을 협력을 통해 다른 사람도 같이 얻을 수 있다.
      • 2) 예상하지 못했던 기회를 잡을 수 있다.
      • 예를 들어, 어떤 사람이 개발을 하다가 2배의 속도로 개발할 수 있다는 것을 발견했다. 협력이 약한 문화에서는 그 사람만 좋은 보상과 칭찬을 받게 되고, 그 사람 코드가 다른 사람들의 코드와 너무 이질적이어서 시스템에 문제가 발생할 수도 있다. 하지만 협력이 강한 문화에서는 그것을 다른 사람들과 공유하여 모두 같이 빠르게 개발할 수 있고 더 나은 발전점을 찾을 수 있다. 즉, 팀 전체의 개선이 일어난다.
    • 안 좋은 일은 나누기!!
      • 1) 문제가 되는 것을 찾기가 쉽다.
      • 2) 예상하지 못했던 문제를 협력이 막을 수 있다.
      • 예를 들어, 내가 생각지 못한 실수를 했는데 아무리 다시 봐도 모르겠거나 더 나은 방법이 생각나지 않을 때가 있다. 이때 나와 항상 같이 일하던 사람에게 물어봐도 나랑 비슷한 생각을 하고 있으므로 더 나은 대안을 제시하지 못하고 비슷한 얘기를 하게 된다. 즉, 서로 다른 사람들과 협력하는 것이 중요하다. 이를 통해 다른 사람이 쉽게 그 문제에 대해 찾을 수 있고 서로 같이 빠르게 해결할 수 있다.
  2. 외부적 협력
    • 외부적 협력: 추가 작성 계획

애자일의 핵심 2. “피드백”

  • 피드백은 학습의 가장 큰 전제조건이다. 내가 어떻게 했는가를 확인하면서 학습해야 한다.
  • 또한, SW 개발의 불확실성이 높을수록 학습 이 중요해진다. 왜냐하면 모르는 것이 많기 때문에 더 빨리 배워나가야하기 때문이다.
  • 일을 잘하는 사람은 feedback seeking 이 뛰어나다. 즉, 이런 사람들은 더 자주 더 많은 사람들에게 피드백을 구한다.
  1. 내부적 피드백
    • 내부적 피드백: 내가 만든 것이 어떻게 됐는지 확인해보는 것
  2. 외부적 피드백
    • 외부적 피드백: 내가 만든 것을 고객이나 다른 부서가 사용해보고 그것을 통해 또 다른 것을 배우는 것


SW 개발의 불확실성과 사업적 가치가 있는 프로젝트

SW 개발의 불확실성

  • 애자일에서는 불확실성이 중요하다.
  • 불확실성이 높을 때 일을 하면 ‘우리가 생각하던 것과는 다르네.’라는 상황이 오게 된다. 이때,
    • 전통적인 방법론을 사용했을 때는 ‘그때 계획을 세울 때 더 잘 세울껄. 그때 이런 리스크까지 생각해놨어야 했는데.’라고 생각하면서도 계획대로 그냥 진행한다.
    • 애자일 방법론을 사용했을 때는 ‘생각대로 안됐네. 계회이 틀어질 수 밖에 없는 게 정상이지. 그럼 지금 빨리 수정하자.’라고 생각하면서 계획을 변경한다.
  • 비지니스 가치(사업적 가치)가 클수록 불확실성도 커진다.

사업적 가치가 있는 프로젝트란

  • 이미 충분한 지식을 가지고 있고 가지고 있는 지식을 활용한 프로젝트의 경우는 대부분 사업적 가치가 떨어진다.
  • 레드오션(Read Ocean)에 뛰어들면 그만큼 경쟁자가 많고 경쟁이 치열해진다.
    • Q. 레드오션(Read Ocean)?
      • 이미 잘 알려져 있는 시장, 즉 현재 존재하는 모든 산업
  • 그렇다면 사업적 가치가 있는 경우는 어떤 경우일까?
    • 우리도 잘 모르는 부분이 있는 것을 하는 것, 즉 학습을 하면서 할 수 있는 것이 사업적으로 가치가 크다.
    • 예를 들어, 카카오뱅크도 이미 다 아는 것을 가지고 하지 않았을 것이다. 분명히 새로운 시도를 했고 이 때문에 가치가 있는 것이다.
    • 따라서 사업적으로 가치 있기 위해서는 배우면서 해야한다.(학습)

학습이란

  • 우리가 생각하는 학습은 너무 정형화되어 있다.
  • 책을 읽는다(독서한다.) = 공부한다. ???
  • 학습에 있어서 독서는 몇 퍼센트를 차지할까를 생각해보자.
  • 학습은 실험, 질문, 검색 등이 모두 포함된다.

관련된 Post

  • 애자일 자격증의 종류와 그 효용 가치에 대해 알고 싶으시면 애자일 자격증을 참고하시기 바랍니다.
  • 애자일 데일리 스크럼의 개념과 도입 방법에 대해 알고 싶으시면 데일리 스크럼이란을 참고하시기 바랍니다.
  • TDD(테스트 주도 개발)의 개념과 효과에 대해 알고 싶으시면 TDD(테스트 주도 개발)란을 참고하시기 바랍니다.
  • 짝 프로그래밍(Pair Programming)의 개념과 효과에 대해 알고 싶으시면 짝 프로그래밍(Pair Programming)이란을 참고하시기 바랍니다.


References