본 기사는 SW공학의 고전 중 하나인 "The Mythical Man-Month"의 저자 Frederick P. Brooks. Jr.의 "The Design of Design - Essays from A Computer Scientist, 2010"에서 발췌하고 개인적인 의견을 첨부한다.
"일반적인 건축 설계 프로세스는
- 고객이 빌딩에 대한 명세서가 아닌 프로그램(요구, 요구사항, 희망사항)을 제시한다.
- 고객은 명세된 제품이 아닌 서비스에 대하여 보통 시간 또는 비율(% - 전체 건축비의 일정 비율)로 아키텍트(분석과 아키텍처 역할 수행)와 계약한다.
- 아키텍트는 엄격하게 계약할 수 있는 제품 명세서가 아니지만 더 정확한 프로그램(요구)를 고객, 사용자, 이해당사자로 부터 수집한다.
- 아키텍트는 프로그램(요구)과 예산, 일정, 코드 제약사항을 고려하여 개념 설계를 진행한다. 이 개념 설계는 이해당사자에 의하여 개념적으로 평가될 첫번째 프로토타입이다.
- 여러 반복 후에, 아키텍트는 설계(개발)를 수행하는데, 이것은 대개 더 상세한 드로윙, 3차원 모델, 모형(mock-ups) 등이다. 이해당사자와 반복 작업을 수행한 후 아키텍트는 건축 설계서(drawings)와 명세서를 작성한다.
- 고객은 이 설계서와 명세서를 사용하여 건축에 대하여 고정 가격으로 계약한다.
이 오래동안 진화하면서 발견해온 모델은 설계에 대한 계약과 건축에 대한 계약을 분리하는 것이다. 비록 동일한 조직이 위 2가지 일을 수행하더라도."
고객의 요구사항의 불확실성, 적용 기술의 불확실성, 개발자의 역량 파악 및 팀웍(특히 구내는 아웃소싱에 따른 외주 의존도와 프로젝트 단위 계약근로자(임시직, 프리랜서) 의존도가 매우 높은데), 고객 조직 문화와 이해당사자와의 친밀도을 고려한다면 위의 방법이 더 타당하지 않을까?
정부와 공공기관에서는 몇년전부터 분할 발주라는 제도를 정착시키려도 시도하여 왔는데 아직 정착되고 있지 못하고 있다. 그 이유는 무엇일까?
SW 요구사항의 정확한 명세가 가능한가? 불가능한데 필요하다는 필요성만 말하고 있는 것은 아닌가? SW 요구사항을 정확히 모르는데 H/W와 시스템 S/W를 결정하고 용량을 선정하는 것이 합리적인가? 업무분석가, SW아키텍트, SW설계자, 프로그래머, 테스터의 역할 분리가 가능하고 합리적인가? 이러한 역할 간 원할한 협업과 문서로 업무 인수인계가 가능한가? 프로젝트에서 동일인의 역할 변화를 분리된 역할로 오인한 것은 아닐까?
글로벌 프랙티스는 분석이라는 용어 대신 SW요구사항을 사용하고, 요구사항의 불확실성에 대한 대안으로 오래전부터 워크샵(JRP, JAD, QAW,...)과 프로토타이핑을 베스트 프랙티스를 기본으로 예측형(waterfall) 생명주기 대신 나선형(spiral) 생명주기인 반복 점진적 개발, 애자일(XP, SCRUM, SAFe,...), DevOps 등으 사용이 일반화 되었다. 고객이 요구하는 것을 제공하는 것에 더해 고객의 불만을 낮추고 고객 만족을 위해 전직원을 대상으로 디자인 씽킹 문화를 내재화하고 있는 글로벌 회사를 벤치마킹 해보는 것이 어떨가? 정부, 고객, 회사 탓하기 전에 스스로를 되돌아 보는 것이 출발점이 아닐까?
"내 탓이요"
"지도 작성자처럼 일하라"
"내가 있은 위치를 모르면, 지도는 아무 도움이 되지 않는다. 그리고 아무 곳으로 가도 된다."
"과거로 부터 배우지 못하면 똑같은 실수를 반복한다."