이 리뷰의 제목처럼 여러분이 야근에 시달리는 프로젝트의 PM이라면 팀원들을 위해서 어떻게 할 것인가?
본 도서는 이러한 질문에서 시작해서 너무나도 뻔하게 처음부터 끝까지 조금이라도 개발을 편하게 하기 위한 내용을 제시한다.
인류가 개발한 것중에서 가장 복잡한 것이 무엇인지 아는 분들이 얼마나 있을까? 본 독자는 인류가 개발한 것중에서 가장 복잡한 것은 수학인줄만 알았다. 아마 수학을 싫어하기 때문이겠지만 말이다.
그럼 정말 복잡한 것이 수학일까?
몇해전 온라인에서 본 다음과 같은 구절을 보았다.
"인간이 개발한 것중에서 가장 복잡한 것은 소프트웨어 개발이다"
이 구절을 보는 순간 경악했다. "소프트웨어 개발? 그럴리가.."
그러나 이 말은 틀림없는 사실이다.
수학을 예로 들어 설명하면 수학은 어떤 공식이 있다면 그 공식이 옳은지 틀린지 알기 위해서 여러개의 증명을 해서 공식을 증명한다. 이런 절차를 반증이라고 한다.
소프트웨어 개발을 예로 들면 소프트웨어 개발은 수학처럼 반증만 하는 것이 아니라 종합적인 사고를 해야 한다. 논리로 똘똘 뭉친 수학은 육하원칙이 없으나 소프트웨어는 육하원칙이 항상 존재하기 때문에 종합적인 사고를 한다고 이야기 한것인데 이런 것에 얼마나 많은 사람이 공감할지는 지금은 이해할 수 없다.
컴퓨터가 개발되고 소프트웨어 개발은 해를 거듭할 수록 새로운 개발 방법과 새로운 언어가 쏟아져 나왔지만 소프트웨어를 개발하는 방법은 개발자들에겐 최적이었지만 반대편에 서 있는 고객에겐 소프트웨어 개발이 고역일 수 밖에 없다.
다음과 같은 프로세스를 예로 들어본다.
1. 고객이 소프트웨어 개발자에게 소프트웨어 개발을 맡긴다.
2. 소프트웨어 개발자는 정해진 시간에 소프트웨어 개발을 한다
3. 소프트웨어 개발자는 소프트웨어를 고객에게 전달한다.
이 다음에 발생한 일은 무엇일까? 이 결과는 고객이 원하는 결과가 나오는 소프트웨어가 아니라 전혀 다른 소프트웨어가 나온 것을 볼 수 있다.
실제로도 이런 일은 비일비재하게 발생하고 있다. 정말?
정말이다. 본 독자도 개발자로 일하면서 이런 상황을 너무나도 자주 겪었다.
본 도서는 고객이 만족하는 소프트웨어를 개발하는 방법이 친절하게 설명되어 있다.
1. 요구사항을 수집하여 사용자 스토리의 제작을 통해 작업할 태스크 분리
2. 예상치 못한 일이 발생해도 대처할 수 있도록 일정을 조정
3. 프로젝트를 제 때 끝내기 위해서 고객을 프로젝트에 끌어들이며
4. 충분히 구현 가능한 설계와 버전 관리, 작성한 코드의 빌드
5. 테스트를 기반으로 지속적인 통합을 통해 테스트 주도 개발의 확립
6. 어디에 숨어있을지 모르는 버그를 찾기 위해 버그 수정에 걸리는 타당한 시간의 확립
7. 고객이 원하는 형태로 보고서 작성
8. 한 번에 모든 설계를 끝내지 않고 보다 나은 설계를 위해서 UML 클래스 다이어그램, 시퀀스 다이어그램, 사용자 스토리와 유스케이스 이용
그동안 야근에 시달려왔던 소프트웨어 개발자라면 적어도 본 도서를 통해 야근하지 않는 소프트웨어 개발을 배워서 저녁시간은 가족과 함께 보내는 시간이 되었으면 하는 바람이다.
그 동안 여러 소프트웨어 개발 책을 보았으나 코드를 확립하는 개발 방법론에 대해선 너무 자세하고 훌륭한 책들이 많지만 이 책에서 주도하는 이터레이션(마일스톤)으로 소프트웨어 개발을 솔직하고 명쾌하게 풀어주는 책은 많지 않다.
한국의 소프트웨어 개발 특성 상 본 도서의 내용을 일정이 급박한 소프트웨어 개발에 적용하기란 쉽지 않을 것이다.
이런면에선 한국의 소프트웨어 개발 체계가 아쉽기만 하다. 이상적일지라도 소프트웨어 개발의 생산성 증대를 위해서 본 도서를 읽어보기를 권한다.
마지막으로 이 책을 저술한 댄 필로네, 러스 마일즈에게 찬사를 보내고, 국내에서 이렇게 좋은 책이 널리 읽힐 수 있도록 번역하신 황상철, 이정룡, 조재혁님에게도 감사드린다.
독자 여러분도 이 책을 통해서 소프트웨어를 보다 재미있게 개발하는 방법에 대해서 새로운 시각을 가질 수 있기를 희망한다.