이 글은 켄트 벡이 자신의 Responsive Design 세미나 소개를 위해 작성한 블로그글(Design Dilemma)을 김창준이 번역한 것입니다.

소프트웨어 설계는 서로 모순되는 요구사항 집합을 해소해야 한다. 그렇기 때문에, 많은 사람들이 그토록 다른 생각을 하면서도 상황에 따라 모두 다 옳을 수 있는 것이다. 이 모순들을 사라지게 할 수 있는 건 없다. 설계 품질은 그 모순들이 어떻게 해소되는가, 어떤 제약들이 먼저 충족되고 나중을 위해 남겨지는 것은 무엇인가에 의존한다. 완벽한 설계 스타일이 불가능하다고 인정하는 것이 사려깊게 설계하는 길로 가는 중요한 첫 발걸음이다.


제약조건

해소가 불가능한 제약조건들이 아래에 있다.

모두 모아 보면, 이 제약조건들은 과도하게 제약화된 시스템을 만든다. 예컨대, 당신은 비용을 최소화 하길 원하고(당신은 당연히 그렇기를 원한다), 변화에는 비용이 발생하고(실제로 그렇다), 진행 중에 학습하게 될 것이다(정말 그렇게 된다)라는 관찰이 있다면, 어떤 해소도 불가능하다.
 

이 제약조건들은 상황에 따라 다른 힘을 가질 것이다. 어떤 경우에는, 제품 기능의 범위(scope)가 대략적으로만 알려져 있을 것이다. 잘 알려진 도메인 하에서는 설계에 대해 작은 발견들만 하게 될 수도 있다. 제품의 초기 단계에서는 돈의 시간 가치가 극단적일 수 있지만 성숙한 제품에서 그 효과는 그저 그런 수준일 수도 있다. 성숙한 제품에서는 장기 비용이 수익성을 좌우한다. 모든 경우에 적용될 수 있는 단일한 설계 규칙 집합은 없다. 어떤 가치와 원칙들은 공통적이긴 하지만 실천방법은 다양할 것이다.


일반적으로 나는 반응적 설계 스타일을 실천하고 지지한다. 나는 요구사항 불확실성, 시간 및 옵션 가치, 설계자의 학습, 그리고 계승의 중요성을 강조한다. 나는 다른 제약사항을 더 선호하는 대신 "변화는 비싸다"라는 제약사항은 뒤로 미룬다. 나는 테크닉, 사회적 조직, 도구, 설계를 바꾸는 단순한 실천법 등의 조합을 통해 변화 비용을 낮추기 위해 나의 개발 스타일로 열심히 일한다. 그 결과, 어느 정도의 장기 비용을 들이면서 결과를 빨리 만들어 내되, 프로젝트 불확실성의 일부가 해소되었을 때 재빨리 비용 감소를 할 수 있는 스타일이 가능해진다.


단기와 장기 모두에 있어, 비용을 최소화하고 수익을 최대화하며 옵션을 최대화하는 일을 모두 동시에 할 수 있는 설계 스타일은 없다. 어느 제약조건을 먼저 해소하고 어느 것을 미룰지 결정하게 되면 어떤 특별한 설계 스타일이 가능해 진다. 이 설계 스타일에서 가치와 과정은 명료하고 의사소통하기도 쉽다. 명료해지는 것은 설계에 관한 대화의 시작이다.


나는 반응적 설계(Responsive Design)에 대한 최초의 전일 튜터리얼을 2009년 9월 4일 서울에서, 그리고 9월 10일 베이징에서 진행하려고 한다.

--켄트 벡(Kent Beck)