계획을 따르기보다 변화에 대응하기를


애자일 소프트웨어 개발 선언 중에서 내가 가장 좋아하는 부분이다. 물론 다른 선언 3개도 위의 선언만큼 중요하다. 그중에서 개인적으로 가장 좋아하는 부분임을 말하는 것이다.

내가 좋아하는 이유는 현실에서 기본적으로 지속해야 하는 자세라고 생각하고 있기 때문이다. 현실은 불확실성 그 자체다. 분명 어떤 환경에서도 적용되는 보편적 원리도 있지만 그런 보편적 원리가 현실의 모든 부분을 담아낼 수는 없다. 그러므로 현실 대부분은 불확실성으로 가득 차 있다고 보는 것이 현실을 직면하는 데 더 도움이 된다.

소프트웨어 산업도 마찬가지다. 과장하여 말한다면 어제와 오늘이 다를 정도이다. 그렇게 불확실성을 기반으로 변화하는 환경에서 소프트웨어가 살아남을 수 있도록 개발자는 기민하게 대응할 필요가 있다. 그런데 이 변화를 하는 것이 편하지는 않다. 지금까지 소프트웨어 쪽에 종사하면서 변화를 차단하기 위해 상호 간 계약으로 작성하거나, 변화에 적응하기 어려워 스트레스를 너무 받거나, 심지어 변화하기 위한 그 모든 것을 비난하는 기업들과 사람들을 봤었다.

환경은 매일 달라지고 있는데 그 환경에 맞추어 변화하여 적응하지 못한다면 결국 도태되고 사라질 것이다. 찰스 다윈은 “변화에 잘 적응하는 종이 살아남는다.”라고 했다. 종이 살아남는 듯이 내가 만들고 있는 소프트웨어가 지속해서 경쟁력이 있는 상태로 살아 있으려면 변화를 거부하지 않고 적응하면서 개발되어야 한다.

내가 프로젝트 일정에 맞추어 A 기능 개발을 하고 있는데 해당 기능 개발은 중단하고 B 기능 개발을 해야 한다고 하자. 이 경우 바로 불만을 표출하지 말자. 물론 아무 이유 없이 변경하는 것이라면 이에 대한 이의 제기를 해야 한다. 어떤 이유가 있으며 그 이유가 내가 만드는 소프트웨어의 생사를 결정할 수 있는 요소 중 하나가 될 수 있다고 공감했다면 불만보다는 이에 적응하여 경로를 자연스럽게 변경하는 게 좋다. 바꿔야 하는 이유는 공감이 되는데 “내 계획대로 움직이지 않으며 B 기능 개발이 종료되어 다시 A 기능 개발 착수할 때 그 동안의 상황을 다시 이해하는 데 너무 힘이 많이 든다. 왜 A 기능 개발은 계속 뒤로 밀리는 것인가.” 라고 말할 필요도 없다. 공감대를 형성한 변화는 당연한 것이다. 그걸 통해 스트레스를 받을 필요는 없다. 당연하게 생길 수 있는 일 중의 하나라고 인식하는 게 좋다. 불만보다는 변화된 상황에서 본인이 바라는 것을 달성하기 위해 계획 재수립을 하는 것이 좋다.

대부분 일을 시작할 때 계획을 한다. 그리고 그 계획에 맞추어 진행하려고 한다. 그런데 그 계획은 그 계획을 수립할 당시의 여러 가지 환경 요소들에 의해 결정된 계획이다. 시간이 흐르면서, 각종 환경 요소들이 변경되면서 그 요소들에 맞추어 계획이 변경될 수 있다. 사용자의 행동과 각종 환경 변수들을 고려하여 C 기능을 당시 기획하였고 그에 맞추어 개발팀은 일정 수립을 하고 진행을 시작했다고 보자. 그런데 시간이 지나다 보니 C 기능이 유효하지 않고 가치가 낮다고 판단하여 중단하기로 했을 때 개발팀은 이를 비난할 필요가 없다. 분명 개발팀 입장으로서는 불필요한 리소스가 들어간 것으로 볼 수 있고 본인이 열심히 만들었는데 결국 사용하지 않겠다고 하니 속상한 마음이 있을 수 있다. “왜 그런 것을 잘 판단하지 못했냐. 왜 그렇게 기획했냐.” 라고 비난을 할 수도 있겠지만 그러지 말자. 게임의 규칙이 변경되었으므로 그 규칙에 맞추어 재조정을 했을 뿐이다. 축구나 야구 같은 스포츠 경기를 보면 경기를 진행하면서 각종 환경 요소에 맞추어 팀이 움직이는 것을 변화시키는 경우가 꽤 많다. 일종의 작전 지시에 따라 선수들은 변화를 하는데 이 변화를 하는 이유는 승리를 쟁취할 수 있는 환경 요소들이 변경되었기 때문이다. 변화를 해야 승리를 쟁취할 수 있다.

물론 내가 말하는 것은 변화를 무조건 수용하라는 것은 아니다. 변화가 필요하다면 그 변화를 당연하면서도 편하게 수용할 수 있는 자세를 갖추어야 한다는 것이다. 변화를 주는 입장에서는 변화가 필요한 당사자에게 충분한 공감대를 만들어 줘야 한다. 변화가 필요한 당사자는 그 공감대를 기반으로 자연스러운 변화를 만들어 가면 된다. 나는 애자일 선언문에 나온 것에 맞추어 변화하면 좋다고 생각한다. 선언문 자체가 짧지만 이를 더 짧게 말하면 다음과 같겠다.


“개인과의 상호 작용과 고객과의 협력을 통해 변화에 대응하여 작동하는 소프트웨어를 지속해서 만들자.”


한국의 SI 현장에서 무분별한 수용을 하면 안 되는 이유, 너무 잦은 변경으로 발생할 수 있는 안 좋은 일 등 그와 관련하여 말하고 싶은 것도 많이 있지만 여기서는 작성하지 않았다. 그런 부분은 별도의 글로 짧게 작성하는 게 좋다고 생각하고 있다. 그리고 다양한 환경 요소들이 변화되고 있음에도 불구하고 프로젝트 같은 것들의 진행 경로를 변경하지 않고 계속할 수도 있다. 그렇게 뚝심으로 밀어서 성공하는 경우도 있다. 그런 경우는 변화하는 환경 요소가 그 프로젝트에 영향을 크게 미치지 않는 것이라 볼 수 있다. 즉, 여기서 이 말을 하는 이유는 변화 수용을 촉구하는 이 글을 모든 상황에 대해 요구하고 있다고 잘 못 이해하지 말라고 당부하고자 함이다.