제가 애자일 방법론, 즉 XP(Extreme Programming)를 실무에 처음 적용한 것은 4년 전이었습니다. 책과 이야기로만 전해 들었던 애자일 방법론을 프로젝트에 적용하고 싶었습니다. 운이 좋게도, 당시에 새로운 프로젝트에 참여하게 되었습니다. 그 프로젝트의 멤버는 저와 선배사원 한 명이 전부였습니다. 평소 코드가 비슷했던 선배사원을 꼬셨습니다.
"선배! 기존 개발방법론보다 결과도 더 낫고 결정적으로 칼퇴근이 가능한 방법론이 있다는데, 이번 프로젝트에 적용해 보는 게 어떨까요?"
사실 선배가 칼퇴근이라는 감언이설(?)에 넘어오지는 않았지만, 그 당시 우리는 칼퇴근 이상의 근본적인 변화를 원했습니다. 프로젝트 일정으로 채워진 달력이 몇 번이나 바뀌었지만, 프로젝트의 내용은 변화가 없었기 때문입니다. 즉, 우리가 참여했던 프로젝트는 주인공과 배경만 바뀌고 스토리는 비슷한 드라마와 같았습니다. 프로젝트 제안서는 항상 고객이 원하는 것 이상을 보여주었지만, MS 프로젝트에 적힌 일정은 현실과 이상의 괴리를 처절히 깨닫게 해주었고, 제안서에 속은 고객은 허기를 달래려고 프로젝트 팀원들을 잡아먹으려 했으며, 목숨이 위태로워진 팀원들은 제안서에 그려진 이상향을 땅 위에 실현시키고자 프로젝트룸에서 청춘을 보내야 했습니다.
그리고 우리 앞에는 또 다른 프로젝트가 놓여 있었습니다.
다른 사람의 도움 없이 책으로만 접한 애자일 방법론을 실전에 적용하기란 쉽지 않았습니다. 아침마다 의욕 넘치게 시작했던 스탠드업 미팅은 카페인 부족으로 생긴 금단증상 때문에 며칠씩 건너뛰었고, 호랑이의 기백이 가득했던 단위테스트는 고양이 울음소리 비슷한 printf( )가 되었으며, 나침반이라고 생각했던 현장고객의 목소리는 업무를 방해하는 소음처럼 들렸습니다. 의욕적으로 출항했던 애자일 프로젝트는 난파되기 직전이었습니다.
선배와 저는 뜨거운 인스턴트커피를 앞에 두고 고민했습니다. 즉, 애자일 방법론을 걷어내고 기존의 개발방법론을 따를 것이냐의 이야기였죠. 커피가 식을 때까지 벌인 난상토론의 결과, 우리가 실패한 원인은 애자일 방법론을 지나치게 교과서대로 따르려고 했다는 것이었습니다. 당시 XP 진영에서 나온 이야기대로라면 논란의 여지가 많은 생각이었지만, 너무나 많은 것을 한꺼번에 시도했다는 것이 실패의 원인이었죠. 즉, 애자일 방법론을 추구하는 우리의 자세는 전혀 애자일하지 않았습니다.
그리고 실현하기 쉬운 실천방법을 하나씩 적용했습니다. 가장 먼저 적용했던 실천방법은 짝 프로그래밍이었습니다. 아침 9시부터 저녁 6시까지, 우리는 같은 노트북을 앞에 두고 코딩했습니다. 사실은 쉽게만 생각했던 짝 프로그래밍이 가장 힘들었습니다. 당시까지의 회사 생활을 통틀어 그때처럼 업무 효율이 높았던 때는 없었습니다. 키보드를 붙잡으면 머리가 깨질 정도로 코드에 집중했고, 옆에서 지켜볼 때는 더 나은 알고리즘이 존재하는지, 코딩룰을 지키는지 끊임없이 살폈으며, 코드를 두고 쉬지 않고 토론했습니다. 결국 8시간 근무는 선택사항이 아닌 필수사항이 되어버렸습니다. 퇴근시간이 되면 집으로 갈 체력만이 남았기 때문입니다.
짝 프로그래밍이 자리를 잡자, 변화가 생기기 시작했습니다. 어느새 코드 공동소유는 당연한 일이 되었으며, 배움의 선순환이 시작되었습니다. 상대방의 강점이 배움의 기초가 되었기에, 둘의 실력은 향상되었죠. 또한 끊임없이 대화했기에, 의사소통의 작은 오해 때문에 생기는 구현의 큰 오류는 사라졌습니다. 작은 성공 경험은 우리에게 긍정적인 피드백을 주었으며, 결국 코드 품질을 높였습니다.
이 프로젝트는 어떻게 되었을까요? 사내정치적인 요소만 없었다면(애자일 방법론과는 전혀 관련이 없습니다), 더욱 결과가 좋았을 겁니다. 절반의 성공인 셈이었죠. 하지만 우리는 이 프로젝트로 애자일 방법론의 강력함을 깨달았으며, 많은 것을 배웠습니다.
그리고 4년이 흘렀습니다.
이제 애자일 방법론은 유비쿼터스해졌습니다. 즉, 애자일 방법론은 소프트웨어개발 분야를 넘어 다양한 산업계에 적용되고 있습니다. 애자일이 산업계 전반에 퍼지는 것처럼, 애자일 방법론의 발상지였던 소프트웨어 진영에서 보편화되었을까요? 다시 말해 4년 전에 제가 경험했던 것이 이제는 개발자들의 일상이 되었을까요?
개발 사이트나 개발자들의 블로그를 통해 보는 그들의 삶은 변한 게 없는 듯합니다. 일단 수주하고 보자는 개념 없는 영업자, 스스로를 왕이라고 생각하는 꽉 막힌 갑, 야근은 기본이고 특근도 필수라고 생각하는 관리자들, 미래가 보장되는 않는 불안한 개발자 인생.
물론 개발자의 인생이 고단한 것은 개발자들만의 탓이 아닙니다. 갑, 을, 병, 정으로 이어지는 말도 안 되는 하도급 관계, 과도한 업무량, 관리자의 형편없는 의식수준 등 수많은 것들이 개발자의 인생을 우울하게 만듭니다.
그러나 세상에는 두 가지가 존재합니다. ‘내가 바꿀 수 없는 것’과 ‘내가 바꿀 수 있는 것’입니다. 개발자들을 둘러싼 답답한 현실들이 ‘내가 바꿀 수 없는 것’이라면, 즐겁고 효율적으로 일할 수 있는 방법은 ‘내가 바꿀 수 있는 것’입니다.
아직도 지속적인 통합 도구는커녕 버전 관리 시스템조차도 사용하지 않는 프로젝트팀이 많습니다. 고객을 훌륭한 테스터로 여겨 단위 테스트를 쓸데없는 짓이라고 생각하는 개발자도 있으며, 팀원 간의 상호 의사소통보다는 반목이 팽배한 현장도 있습니다. 이 모든 것이 ‘내가 바꿀 수 있는 것’입니다.
물론 우리네 프로젝트 인생이 행복해지기 위해서, ‘내가 바꿀 수 없는 것’도 결국 바꾸어야 합니다. 그러나 우리에게 두 가지 길이 있습니다. 즉, ‘내가 바꿀 수 있는 것’에 열정을 쏟으며 조금 더 나은 오늘을 만드는 것과 ‘내가 바꿀 수 없는 것’을 탓하며 ‘내가 바꿀 수 없는 것’이기에 누군가의 도움만을 바라며 똑같은 오늘을 보내는 것입니다.
어느 쪽을 선택할지는 개인의 문제입니다. 다만 여러분이 조금씩 개선되는 길을 선택하였다면, 이 책이 쉽지는 않은 그 길을 안내해줄 겁니다.
--- 역자 서문