애자일
애자일 이전 소프트웨어 개발 방식은 계획주도의 방식이었습니다. 초반에 계획을 정교하고 꼼꼼하게 만들려고 엄청난 노력을 합니다. 그러면 실행단계는 간단해지고 예측 가능해진다고 생각하기 떄문입니다. 하지만 애자일은, 불확실성이 높은 일에 대해서는 애초에 이것이 불가능하다고 봅니다. 불확실성이 크기 때문에 미리 분석하고 설계하는 데 한계가 있다는 것이지요.
따라서 애자일은 불확실성이 클 때, 우리가 어떻게 해야 하는지를 고민한 결과물입니다. 더 짧은 주기로 피드백을 받고, 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있습니다.
애자일을 단순히 소프트웨어 개발 방법론이라는 울타리에 가두어 보지 않고, 일하는 한가지 스타일, 혹은 더 넘어서서 삶을 사는 방식으로 확장해볼 수 있습니다. 우리의 삶도 불확실하기 때문에, 학습과 협력은 현명한 전력이 되고, 이는 함께(협력) 자라기(학습)과 구동원리가 같습니다.
애자일의 씨앗
애자일의 씨앗은 다음과 같은 한 문장으로 표현되며, 각 단어에 대해 다음과 같이 질문을 해볼 수 있습니다.
"고객에게 매일 가치를 전하라"
고객에게
- 우리의 진짜 고객은 누구인가?
매일
- 어떻게 점진적으로 가치를 전할 것인가?
- 어떻게 보다 일찍, 그리고 보다 자주 가치를 전할 것인가?
가치
- 무엇이 가치인가?
- 지금 우리가 하고 있는 일이 정말 가치를 만드는 일인가?
- 지금 가장 높은 가치는 무엇인가?
- 비슷한 수준의 가치를 더 값싸게 전달하는 방법은?
전하라
- 가치를 우리가 갖고 있지 않고, 고객에게 정말 전달하고 있는가?
- 고객이 정말 가치를 얻고 있는가?
학습적 면에서 보면, "매일"하는 것은 학습의 빈도를 말합니다. 불확실성이 높을수록 빈도가 자주 있어야 합니다. 현재위치와 목적지의 위치를 확인하는 빈도가 잦아야 하고, 좋은 학습은 질 높은 피드백에서 오게 됩니다.
협력적 면에서 보면, "고객에게" 라는 부분이 그 중요성을 말하고 있습니다. 소프트웨어 개발이건 뭐건 홀로 결과물이 나오는 경우는 드뭅니다. 협력을 통해서 결과물이 나옵니다. 여기서 고객은 넓은 의미로 이해관계자라고 생각합시다. 우리에게 돈을 주고 일을 맡긴 사람 뿐만 아니라 우리의 이해관계자는 모두 고객으로 여겨야 합니다. 종종 애자일을 한다고 해놓고는 실생 고객을 완전히 잊어버리고 자신들끼리 북치고 장구치고 하는 모습을 보곤 하는데, 이건 애자일의 핵심을 놓치고 있는 겁니다.
애자일 도입 성공 요인 분석
애자일을 도입한 프로젝트 인원들에게 설문조사를 하였을때, 우선 "애자일 실천법 중에서 도입해서 성과에 도움을 준 요인"은 아래와 같은 순서대로 성공도에 영향을 주었다고 하였습니다. 다음 4가지가 잘 되어야 프로젝트 성공에 애자일이 도움이 되었습니다.
- 고객 참여 (0.77)
- 리팩터링 (0.42)
- 코딩 후 자동화 테스트 붙이기 (0.38)
- 코드 공유 (0.37)
그런데 많은 조직들이 고객 참여와 코드 공유를 뒤로 미룹니다. "우리 상황에서는 할 수 없다, 어렵다"라고 생각하기 때문입니다. 고객 참여는 고객을 설득해야 하고, 코드 공유는 개발자를 설득해야 합니다. 사람과의 대면과 충돌이 무섭고 두려운 것이죠. 하지만 이런 것들을 제대로 하지 않으면 프로젝트를 성공하기가 더 힘들어집니다.
애자일 초보팀들과 애자일 전문가팀을 보면서 공통적인 차이점을 발견하셨고, 이는 초보팀일수록 처음에 쉽고 안심이 되는 것에서 시작하고, 전문가팀은 무섭고 두렵더라도 중요한 일이라면 그 일을 안하는 리스크를 인식하고 꾸준히 시도한다는 점에서 초보팀과 다릅니다. 이 결과에서 얻은 교훈이라면, "두려워도 중요하다면 시도해봐야 하지 않겠는가" 입니다.
성숙도가 낮다면 고객 참여는 필수
성숙도가 낮은 조직에서 애자일이 성공했던 요소로는 바로 고객참여(0.94) 였습니다. 즉, 성숙도가 낮아도 고객참여를 잘하면 프로젝트 성공도가 한 칸 올라간다는 뜻입니다. 고객 참여가 잘 안되면서, 다른 것들과 씨름하는 것은 두렵고 중요한 것에 대한 회피일 수 있습니다.
성숙도가 높은 조직의 결과는 짧은 반복 개발주기(0.49), 고객 참여(0.36), 코드 공유(0.33) 으로 파악되었고, 이는 짧은 반복 개발주기를 통해 고객 참여가 잘 안될때를 어느 정도 보완할 수 있다는 뜻일 수도 있겠습니다.
또 하나 관찰된 점이라면, 성공하는 조직들에는 항상 뛰어난 애자일 코치가 있었습니다. 애자일 코치의 특징은 다음과 같습니다.
- 의사소통 스타일(팀원, 상사, 팀장과)
- EQ 및 스트레스 하에서의 행동
- 리더십 및 코칭 스타일(동기부여 등)
- 회고를 통한 개인적 학습 능력
- 개인적 성장 의지, 성장 사고관, 자기효능감
- 관찰 및 상황 파악 능력
- 일치적 행동(믿는 것을 행동에 옮기는 능력)
- 기술적 능력
애자일 코치는 어느 누가, 어느 조직이 정해줄 수 있는 것이 아닙니다. 조직적, 정치적 위치와는 상관이 없습니다. 오로지 자신의 선택입니다. 내가 애자일 코치가 되어야지 결심하는 것이 가장 중요합니다. 이 사람이 어떻게 행동하고 의사소통하느냐에 따라 팀의 행동과 의사소통 방식이 바뀔 수 있습니다. 그리고 누구나 뛰어난 애자일 코치가 될 수 있다고 믿습니다.
실제로 뛰어난 소프트웨어 엔지니어들은 높은 대인 능력을 갖고 있는 것이 관찰되었습니다. 설계, 코딩, 테스팅 등의 소프트웨어 개발 활동에 대한 시간 투자는 전문가와 그렇지 않은 사람에 큰 차이가 없는 반면, 리뷰 회의나 다른 사람과 상담하는 등의 의사소통과 협력 활동에서는 전문가가 훨씬 많은 시간을 사용한다는 것이 밝혀졌습니다. 상위 5%의 엔지니어에 대한 연구에서도 그런 사람과 그렇지 않은 사람을 구별하는 효과적인 요소는, 주어진 업무 외에도 관심을 갖는가 하는 점이었습니다. 탁월한 엔지니어들은 프로젝트 전반에 대한 큰 그림을 가지려고 하고, 경영진에게 더 적극적인 태도로 다가가고, 다른 엔지니어들을 도와줍니다.