본문 바로가기

이생각 저생각

[dW Review] 혁신적인 아키텍처와 창발적 설계: 재사용 가능한 코드 활용하기 #1

7월 IBM developerWorks에 올라온 기사 중에 "혁신적인 아키텍처와 창발적 설계: 재사용 가능한 코드 활용하기"라는 글이 있습니다. 닐포드의 글인데, 이미 마지막회가 올라온 다음에 오히려 예전 글이 번역되어 올라왔습니다. 원문도 어렵지만, 번역글도 만만치는 않네요. :(

혁신적인 아키텍처와 창발적 설계: 재사용 가능한 코드 활용하기
http://www.ibm.com/developerworks/kr/library/j-eaed11/

이전 리뷰들과 비슷하게 함께 알아두면 좋을 것들에 대해 몇 가지 이야기 해볼까 합니다.

우선은 린  개발에서 설계상의 결정사항 늦추기에 대한 이야기입니다.

닐 포드는 평소 본인의 글에서 "린 소프트웨어 개발" 이야기를 종종하곤 했습니다.

[린 소프트웨어 개발의 적용, 위키북스]


린 관련된 책이 국내에 많이 있지만, 대부분은 일본 도요타의 생산성 관련 책들이고 SW와 연관된 책은 몇 권 없습니다. 그중에서 포펜딕 부부가 쓴 "린 소프트웨어 개발의 적용"은 제가 개인적으로 무척 좋아하는 책입니다. 우선, 이야기가 많아서 재밌습니다. :D 그리고 이 책은 LG전자 내에서 Agile Gentleman League를 이룬 세 분이 책의 번역자 이기도 합니다. (AGL은 개인적인 표현입니다. :)


이 책을 보면 위 글에서 닐 포드가 언급한 린소프트웨어 개발의 7가지 원칙 중 네 번째 원칙으로 "확정을 늦춰라"의 이야기가 나옵니다.


- 불확정요소가 많은 소프트웨어 개발에서 변경하기 어려운 중대한 설계상의 결정은 최대한 늦춰야 한다.


언듯보면 미루라는 뜻의 '회피'나 '지연'처럼 보이기도 합니다만, 실제 의미는 최대한 많이 살펴보고 다양한 해결책을 시도해서 조금이라도 더 구체화에 대한 노력을 기울인 다음에 더이상 미룰수 없는 시점이 된 다음에 결정하라는 뜻입니다. 계속 변경이 일어나서 설계 충격이 오는 것을 줄여보기 위한 노력입니다. 프로토타입을 빨리 만들어서 피드백을 받는 쪽과 일정부분 충돌 나는 사상처럼 보일 수도 있습니다만, 여기서 말하는 건 고객의 요구사항이 아닌 설계자의 설계상의 결정 쪽에 좀더 무게를 둡니다.

그래서 이 내용을 좀 더 보충하기 위해 아이젠 하워의 명언을 들어 설명합니다.

"나는 전투를 준비함에 있어 계획(plan)은 언제나 쓸모가 없다는 것을 알게 되었다. 그러나 계획을 세우는 것(planning)은 꼭 필요한 일이다"

계획을 세우는 것과 확정하는 것의 차이를 말하는 문장입니다. 그리고 계획을 세우는 것도 중요하지만, 계획과 달라질 수 있다는 것을 기정사실로 세우고 민첩하게 반응할수 있어야 합니다. 즉, 소프트웨어의 경우 변경이 일어날 수 있음을 가정하고 변경이 용이한 구조를 염두에 두어야 한다는 뜻입니다. 물론 예측과 예측에 대한 대비 비용간의 균형은 가장 어려운 부분중 하나인지라 특별한 답은 없습니다.

개인, 혹은 팀의 경험이 쌓여가면서 좀 더 정확도가 높아지는 방향으로 발전해 나간다는걸 알아야 합니다.