“How microsoft builds software” 이라는 논문은 마이크로소프트는 어떻게 개발을 하는가에 대해 기술하고 있다.
Microsoft는 “유연하고 창의적인 기업”을 뿌리로 삼아 발전해왔다. 큰 프로젝트를 만들때는 우선 느슨하게 조직된 작은 팀을 여러개 만들었고, 이를 모아 하나의 큰 팀을 구성했다. 작은 팀들 모인 형태이기 때문에 변경사항에 대해서는 자주 동기화 시킨다.
해당 논문에서는 이런 문화가 무조건 좋다고 말하지는 않는다. 하지만 오늘날 큰 기업으로 성장한 MS의 개발 방법에서 배울점은 분명히 존재하기 때문에 그 중 몇개를 소개한다.
Frequent Synchronizations and Periodic Stabilization
MS의 개발 스타일은 “sync and stabilize” 이다. 핵심은 간단하다. 각 팀에서 개개인이 하고 있는 일을 계속 동기화하고, 주기적으로 제품을 안정화시키는 것이다. MS 사람들은 자신들의 테크닉을 두고 ‘milestone’이나 ‘daily build’ 같이 다양하게 칭한다.
초기에 요구사항을 완벽히 정의하는 것은 어렵다. 이에 대한 해결책으로 제시된 것이 바로 점진적이고 동시적인 개발 방법이다. 이는 기존 waterfall 모델과 반대되는 개념으로 디자인이나 컴포넌트 개발, 테스팅 등을 반복하고 개발 과정에서 고객과의 소통도 이뤄지도록 하는 프로세스를 따른다.
Strategies and Principles
MS는 제품의 목표 및 제품에 의해 충족되어야하는 사용자의 요구사항을 정의한 “vision statement”를 만들면서 제품 개발을 시작한다. 이때 제품 특성의 개요를 작성하되 모든 세부 사항까지는 다루지 않는다. 이러한 특성은 아마 프로젝트가 진행되면서 30% 이상 변경될 것이다.
프로젝트를 3~4개의 마일스톤으로 나눈 후 개발을 진행한다. 단계별로 완성해가며 에러 수정률도 높일 수 있고 프로젝트에 대한 명확한 이해도 할 수 있다.
Defining Products and Development Processes
제품을 정의하고 개발 프로세스를 체계화하기 위해서 “focus creativity by evolving features and fixing resources”(특징을 발전시킴으로써 창의성에 집중하고 자원 한정하기)라는 전략을 따른다. 이 전략을 5개의 원칙을 통해 시행하는데 일부는 다음과 같다.
- 큰 프로젝트를 buffer time이 있는 다수의 마일스톤으로 나누고 프로젝트를 단독으로 진행하는 그룹이 없게 한다. 전체 프로젝트를 우선순위를 갖는 subproject로 나누면 각각에 할당된 buffer time을 통해 예기치 못한 어려움이나 지연에 대응할 수 있다.
- 프로젝트 가이드를 위해 vision statement를 사용하고 기능 사양에 대해 개요를 작성한다. 초기에 모든 것 결정짓지 못함을 알기 때문이다.
- 최소 기능 선택과 priority 정의는 사용자의 행위와 데이터에 기초한다.
사람들의 창의성을 지휘하기 위해서 고객들이 돈을 지불할 만한 기능을 생각하게 하고, 시간 등의 자원을 제한함으로써 프로젝트에 압박을 가한다. 이를 통해 feature에 너무 멀어지면 바로 잡을 수 있도록 한다.
Developing and Shipping Products
개발과 납품을 관리하기 위해 MS는 “do everything in parallel with frequent synchronization”(모든 일을 잦은 동기화와 함께 병렬적으로 진행하기)라고 하는 또 다른 전략을 따른다. 이 전략을 5개의 원칙을 통해 시행하는데 일부는 다음과 같다.
- 병렬적인 팀에서 일하되 매일 동기화와 디버깅한다. 이때, 어떤 날에 코드를 DB에 올리기로 했던간에, 그 시간은 특정 시간으로 제한한다.
- 하나의 개발 사이트에서 같은 언어를 사용한다. 같은 개발 언어와 코딩 스타일 그리고 표준화된 개발 툴의 사용은 소통, 아이디어 토론, 문제 해결 등에 도움을 준다.
- 끊임 없이 테스팅한다.
- 마일스톤의 완성도와 제품의 출시를 결정하기 위해 측량된 데이터를 사용한다. 매니저는 얼마나 많은 버그가 생기고 해결 되었는지 등의 모니터링을 통해 daily build의 진행상황을 추적한다.
The Hacker Approach
개발에 있어 MS의 중요한 실천 중 하나는 “process and technical fixes for a hacker software organization” (hacker software organization로 절차와 기술 정착)이라고 할 수 있다. 작은 프로그램에서는 비정형적인 계획, 디자인, 절차로도 개발이 가능했으나 규모가 커지면서 정형화된 계획과 과정 필요했다. MS는 이에 더해 제품 개발에 유연성을 합칠 수 있는 방법까지 알았다.
PC 소프트웨어에 대한 요구가 폭발하면서 MS는 다양한 시장에서 충돌되는 요구 사항을 만족시켜야했다. 이를 위해 팀들에게 많은 변화와 실험을 장려했다. 하지만 제어가 가능했는데 그 이유는 변화에 대한 잦은 동기화와 주기적인 안정화 덕분이었다.
MS는 제품의 규모에 상관없이 잘 동작하는 정형화된 hacker-like approcah를 소프트웨어 제품 개발에 제안했다는 점에서 독창적이다.
A Semblance of Order
synch and stabilize 철학의 뒤에는 빠른 움직임에 대한 질서의 모습이 더해져있다. 새로운 제품들은 MS가 개발과, 테스팅, 동작에 있어 문제를 최소화 하는 것 같은 방법 보다는 더 발전된 계획과 제품 아키텍처 디자인을 요구한다. 그렇더라도 synch and stabilize 과정은 제품 개발자들에게 이점을 제공하는데 그 중 몇개는 다음과 같다.
- 이는 큰 제품을 다룰 수 있는 수준으로 나눈다.
- 이는 프로젝트 초기에 완전하고 안정된 제품 디자인을 결정하지 못할 때에도 프로젝트가 질서정연하게 진행되도록 한다.
- 일을 쪼개고, 병렬적으로 진행하되 끊임없이 동기화하고, 점차적으로 안정화하고, 끊임없이 문제를 발견하고 고침으로써 거대한 팀을 작은 팀이 일하는 것 같이 만든다.
MS에서 사용하는 synch and stabilize approach는 시스템 제품이 복잡하고 짧은 라이프 사이클을 가지며 제품 특징 발전을 바탕으로 경쟁이 이뤄지는 빠른 템포의 시장에서 특히 적합하다.
생각해볼점
- 마이크로 소프트의 sync and stabilize 설명할 수 있어야 한다