본문 바로가기

Reflection

애자일 실천 방법

많은 프로그래머가 프로젝트를 진행하는 실천방법(Practice) 없이, 프로젝트를 진행하는 악몽과 함께 살아왔다. '''효율적인 실천방법의 부족'''은 예측 불가능, 반복되는 에러, 노력의 낭비를 가져온다. 고객은 스케줄 지연, 예산 증가, 낮은 품질에 실망하여 개발자는 엉터리인 소프트웨어를 만들기 위해 좀더 많은 시간을 일해야 한다는 것에 낙담하다.

이런 대실패를 한 번 경험하고 나면, 또 다시 그런 실패를 겪는 것이 두려워진다. 그리고 이 두려움이 동기가 되어 활동성을 제한하고 어떤 결과와 산출물(arifact)을 요구하는 프로세스(process)를 만들게 된다. 우리는 과거에 경험에 비추어, 이런 제약과 결과를 그려내고, 이전의 프로젝트에서 제대로 동작했던 것을 선택한다. 우리는 이것들이 이번 프로젝트에서 제대로 동작할 것이며, 두려움을 걷어낼 줄 것을 희망한다.

그러나 프로젝트는 몇몇 제약과 산출물로 충분히 에러를 방지할 수 있을 정도로 간단하지 않다. 에러는 계속 발생하기 때문에, 이 에러들을 분석하고 좀더 많은 제약과 산출물을 집어넣어 나중에 발생할 수 있는 에러를 방지해야 한다. 이런 과정을 여러 번 거치고 나면, 일을 마무리 지을 수 있는 역량을 낭비시키기만 하는 번거로운 프로세스의 부담만 떠안게 된다.

까다롭고 많고 프로세스는 우리가 미리 방지하려고 했던 문제를 오히려 발생시킬 수도 있다. 일정이 심각하게 지연되고 예산이 급증할 정도로 팀을 느리게 만들 수도 있다. 팀이 항상 잘못될 최종 소프트웨어를 만들게 할 정도로 팀의 책임감을 저하시킬 수도 있다. 그런데 더욱 문제는 이런 결과는 많은 팀으로 하여금 프로세스가 충분하지 않다고 느끼게 한다. 그래서 계속되는 악순환을 거쳐서 프로세스를 더욱 복잡하게 만드는 것이다.

'계속되는 악순환'은 2000년대 많은 소프트웨어 회사에서 일어났던 상황을 묘사한 적절한 표현이다. 당시에는 어떤 프로세스 없이도 운영되는 많은 팀이 있었음에도 불구하고, 복잡하고 무거운 프로세스를 채택하는 회사가 빠르게 늘어났고, 특히 큰 회사에서 이런 현상이 더 심했다.