Windows 7 팀 소개

댓글을 남겨주시고 메일을 보내주신 분들께 감사드립니다. 이러한 토론을 시작할 수 있게 되어서 대단히 기쁩니다. 블로그를 시작한 뒤로 저희 사무실 주변은 활기가 넘치고 있습니다. 이쯤해서 Windows 개발 팀에 대한 소개를 하는 것이 좋을 것 같다는 생각이 들어서 이 글을 통해 앞으로 블로그에서 언급될 팀들을 소개하고자 합니다.

본격적인 소개를 시작하기 전에 이 블로그의 목적에 대하여 말씀드리고자 합니다. 먼저 제가 받은 댓글 및 메일과 관련된 사항입니다. 댓글과 메일의 양이 엄청나서 주말의 대부분을 메일과 댓글을 읽느라 보냈는데 그 내용에 일정한 주제가 있었습니다. 전반적으로 호의적인 반응을 보여주셔서 무척 감사하게 생각하고 있습니다. 가장 많이 받은 요청은Windows의 성능에 대한 것으로 Windows가 좀 더 빨라질 수 있게 해달라는 것이었습니다. 이와 관련하서는 다루어야 할 내용이 많기 때문에 앞으로 여러 차례에 걸쳐 이야기할 예정입니다. 또한 구체적인 요청도 아주 많았는데 거의 모든 방면에 걸쳐 이 기능은 없어져야 한다 또는 이것만은 하지 말아달라, 아니면 무슨 일이 있어도 그 기능을 계속 유지해달라 또는 그것만은 반드시 해야한다는 등의 내용입니다. 이 블로그를 시작한 중요한 이유 중의 하나가 모든 문제에 대하여 다양한 관점에서 논의를 할 수 있다는 것입니다. 성능과 같이 의견이 분명히 나누어지는 문제도 여러가지 미묘한 사항들을 고려해야 합니다. 예를 들면 어떤 분들은 부팅 성능에 있어서 제일 중요한 것은 컴퓨터의 전원을 켜고 유휴 시간에 도달할 때까지 어떤 프로그램도 작동되지 않는 것이라고 하시는 반면에 다른 분들은 로딩 시간이 너무 길어서 작업에 지장이 있다고도 합니다. 또 다른 분들은 시작 프로그램 관리자를 통해 어떤 프로그램을 시작할지를 정하는 것이 중요하다고 합니다. 이러한 모든 의견은 다 논의할 만한 가치가 있는 동시에 제일 간단해 보이는 요청조차도 복잡미묘한 사항을 고려해야 함을 보여줍니다.

두번째로, Jon과 저에게 아주 놀라웠던 사실은 많은 사람들이 이 글의 신뢰성에 의문을 표시했다는 점입니다. 어떤 분들은 유령 블로거가 글을 쓴 것이다 또는 이 블로그가 고도의 술책이라고도 하셨습니다. 저는 지금 Windows Live Writer 를 사용하여 이 글을 쓴 다음 바로 올리고 있습니다. 이 블로그는 오타, 실수를 포함해 100% 실제 내용입니다. 이 글은 어떤 중간 단계나 검토를 거치지 않습니다. 팀 내의 팀원들도 글을 올릴 예정이지만 글을 올리기로 계획되어 있는 사람 이외에 다른 사람이 쓴 글은 없습니다. 모든 글을 하나의 사용자 이름으로 올림으로써 보안 및 소유권이 명확히 유지되도록 하겠지만 실제 글을 작성한 사람이 최종적으로 블로그에 글을 올리게 됩니다. 댓글을 다는 경우 steven_sinofsky라는 저의 MSDN 사용자 이름을 사용할 것입니다.

세번째로 Windows 7의 기능에 대한 내용에 대한 글이 올라오는 시점에 대하여 언급하고자 합니다. 이 블로그에 글을 “정기적으로” 올리겠다고 했을 때는 글을 올리는 데에 있어 정해진 일정이 없다는 것을 의미합니다. 일정한 빈도를 미리 정해놓고 글을 올리는 것은 블로깅의 특징과도 맞지 않으며 그런 것을 지정해 놓고 싶지는 않습니다. IEBlog에 익숙해졌던 것과 비슷한 양식을 따라가게 되리라고 예상하고는 있습니다. 저의 개인 블로그를 운영할 때도 글이 자주 올라오지 않는다고 비난을 받았던 적은 없습니다. :-)

첫 글에서 말씀드린 것처럼 Windows 7이 “어떻게” 개발될지에 대하여 공개하는 것은 아주 적절한 접근 방식이라고 생각됩니다. 제품 자체, 즉 “왜” 및 “무엇”에 대하여 본격적으로 논의하기 전에 “누가” 개발을 담당하는지를 먼저 알려드리고자 합니다. 그럼 팀원들 소개를 시작하도록 하지요.

Windows 팀은 하나의 그룹이나 개체라고 생각하기가 쉽고 어떤 특정한 인물이 팀을 대표하게 되는 경우가 있습니다. 어떤 사람은 회의에서 연설을 하고 사람들이 많이 알고 있는 책이나 글을 썼을 수도 있고, 어떤 사람은 블로그를 운영하기도 합니다. Microsoft에서Windows 제품은 전체 회사를 대표하는 제품으로 모든 개발 팀이 어떤 형태로든지Windows 제품을 만드는 데 공헌하고 있습니다. Jon 과 저는 순수하게 “Windows 엔지니어링 팀”이라고 부를 수 있는 조직을 공동으로 이끌고 있습니다. Jon은 핵심 운영 체제, 즉 대표적으로 커널, 장치 인프라, 네트워킹, 클라이언트 및 서버에 모두 적용되는 엔지니어링 도구 및 시스템 등을 담당하고 있습니다. 저는 쉘(shell) 및 데스크톱, 그래픽, 미디어 지원 등을 개발하는 Windows 클라이언트 팀을 맡고 있습니다. Windows 제품의 중요한 부분 중 하나인 Windows Media Center는IPTV 및 익스텐더 등 Microsoft에서 추진하는 TV 지원에 있어 핵심적인 역할을 하고 있습니다.

큰 팀을 위해 조직을 만들 때 필요한 일이 많지만 가장 중요한 것은 그 팀이 할 일을 계획하는 것입니다. 이 계획 단계는 저희가Windows 7에서 전체적인 일관성 및 “일체감”을 향상시켜야 한다는 목표를 실현하는 데 있어 핵심적인 역할을 합니다. Windows 7 엔지니어링 팀은 커다란 팀 한 두개가 아니라 각 기능을 담당하는 25개의 팀이 모여서 이루어집니다.

코드, 기능, 품질 그리고 전체적인 개발 등 각 팀이 맡고 있는 결과물이 모여 Windows 7을 만들어 냅니다. 기능을 담당하는 팀은 전체 작업의 중심으로써 각 팀간의 작업을 조율하는 역할을 합니다. 이 팀은 팀 전체가 회의실에 모이거나 영화를 보러 갈 수 있는 등 관리하기 적당한 크기로 이루어집니다. 평균적으로는 40명의 개발자로 구성되지만 팀 크기는 아주 다양합니다. 이 팀은 어떤 기능을 만들어 내는가, 어떤 사람들로 구성되느냐에 따라 달라집니다.

Windows 7의 기능을 담당하는 팀은 여러분께도 친숙한 Windows의 기능별로 구성되어 있는 경우가 많습니다. Windows 플랫폼이 가진 특성때문에 여러 버전을 거치는 세월 동안 그대로 유지되는 팀도 있고 새로운 기능을 개발하기 위해 새 코드가 필요한 경우에는 이전에 없었던 팀이 새로 생기기도 합니다. 가상 머신(Virtual Machine) 등 서버용 기능을 담당하는 팀도 있고Internet Explorer처럼 Windows 7과 관련된 제품을 개발하는 팀도 있습니다.

일반적으로 각 팀은 기능에 대한 Windows의 구조적 구성 요소 및 시나리오를 모두 포괄하여 담당합니다. “기능”은 어떤 사람들에게는 사용자 인터페이스 내의 개별적 요소로, 다른 사람들에게는TCP/IP와 같이 구조적 구성 요소의 하나로 이식되기 때문에 이해하기가 쉽지 않습니다. 저희는 시나리오 및 구성 요소 사이의 균형을 맞춤으로써 모든 사용자가 사용하게 될 기능과 그에 맞는 아키텍처를 최적의 상태로 개발하고자 합니다. “사용자 인터페이스”가 실제 작업 처리와 분리되는 것을 방지하여 각 팀이 담당하고 있는 기능이 사용자가 필요로 하는 모든 작업을 원활하게 수행할 수 있도록 노력하고 있습니다. 예를 들어 “검색 및 구성” 팀은 인덱서 및 검색의 사용자 인터페이스를 개발합니다. Windows 7팀을 알파벳 순서대로 소개하자면 다음과 같습니다.

  • 애플릿 및 가젯 (Applets and Gadgets)
  • 사용자 지원 기술 (Assistance and Support Technologies)
  • 핵심 사용자 경험 (Core User Experience)
  • 고객 엔지니어링 및 원격 측정 시스템 (Customer Engineering and Telemetry)
  • 배포 및 구성 요소 플랫폼 (Deployment and Component Platform )
  • 데스크톱 그래픽 (Desktop Graphics)
  • 장치 및 미디어 (Devices and Media)
  • 장치 및 저장 (Devices and Storage)
  • 문서 및 인쇄 (Documents and Printing )
  • 엔지니어링 시스템 및 도구 (Engineering System and Tools)
  • 파일 시스템 (File System)
  • 검색 및 구성 (Find and Organize)
  • 펀더멘털 (Fundamentals)
  • Internet Explorer (IE 8의 하위 버전 포함)
  • 인터내셔널 (International)
  • 커널 및 가상 머신 (Kernel & VM)
  • Media Center
  • 핵심 네트워킹 (Networking – Core)
  • 엔터프라이즈 네트워킹 (Networking – Enterprise)
  • 무선 네트워킹 (Networking - Wireless)
  • 보안 (Security)
  • 사용자 인터페이스 플랫폼 (User Interface Platform)
  • Windows 애플리케이션 플랫폼 (Windows App Platform)

저는 위의 이름들 대부분은 이 글의 목적에 맞게 이름만 들어도 어떤 기능을 담당하는 팀인지를 바로 알 수 있을 것이라고 생각합니다. 이와 관련해서 더 많은 글을 올릴 것이며 이를 통해 각 팀에 속해 있는 팀원들이 어떤 기능을 담당하고 있는지를 아실 수 있을 것입니다. 또한 Windows하위 시스템이 어떻게 구성되는지, 저희가 어떻게 중요한 프로젝트를 각 팀으로 세분화하여 구성하는지 아시게 될 것입니다. 물론 저희는 프로젝트 전반에 걸쳐 각 기능을 조율하며 제품을 만들어 나갈 것입니다. 이것은 실행의 문제라고 할 수 있습니다. 일명 상향식 작업 방식으로 효율과 성능을 고려하여 일정한 레이어 내에서 코드를 작성하게 되지만, 최종 사용자들은 여러 레이어들을 가로질러 기능을 사용하게 될 것이고, IT 전문가들은 하향식 작업 방식으로 데스크톱을 관리하기 원하기 때문입니다. 현장에서 어떤 일들이 어디에서 어떻게 일어나는지 일일이 알 수 없기 때문에, 이런 접근 방식은 너무 과도한 내부자의 시각일 수도 있다는 것을 인정합니다. 예를 들면, 태블릿과 잉크 입력 기능은 언어 인식, 멀티 터치 그리고 사용 방식의 다양성과 함께 사용자 인터페이스 플랫폼팀에서 담당하고 있습니다. 이렇게 하게 된 이유는 이 모든 종류의 레이어를 넘나드는 사람이 전혀 없다고 할지라도, “입력 ”의 모든 메커니즘을 위한 인프라를 공유해야하는 구조적인 필요성 때문입니다. 이런 방식으로 입력을 관리하기 위한 API들을 디자인할때 개발자들은 일정한 API를 통하여 사용자들이 컴퓨터와 상호 작용하는 데 필요한 모든 방식을 터득할 수 있게 됩니다.

각 기능을 담당하는 팀들에 대한 또 다른 특징은 정확한 구성입니다. 하나의 팀은 소프트웨어 개발 엔지니어(개발자), 테스트 분야 소프트웨어 개발 엔지니어(테스터), 프로그램 매니저(PM)이라는 세 개의 핵심 엔지니어링 분야로 구성됩니다. 이렇게 항상 세 개의 엔지니어링 부문을 두는 것은 일부 연구자들이 주목하고 있는 마이크로소프트만의 독특한 방식입니다. 저의 예전 블로그에 개발자와 프로그램 매니저에 대해 설명한 글이 있어서 링크를 추가해 두었습니다. 테스터(SDET)에 대한 글은 나중에 올릴 수 있도록 하겠습니다.

각 역할에 대해 아주 간략하게 소개하자면 개발자는 아키텍처와 코드를 담당하고, 프로그램 매니저는 기능 집합과 그 사양을 담당하고, 테스터는 검증 및 고객의 입장을 궁극적으로 대변하는 역할을 담당합니다. 모든 사람들은 품질과 성능에 대해 책임이 있으며 각자의 시각을 작업에 충분히 반영해야 합니다. 모든 기능 개발에 있어 개발자, 테스터 및 프로그램 매니저는 실질적으로나 개념적으로 동등한 지위를 가진 한 팀으로 일을 하게 됩니다. 이것은 작업의 방식 및 Windows 7 을 개발함에 있어 균형잡힌 접근을 할 수 있도록 보장한다는 관점에서 볼때 핵심적인 힘의 균형이라는 방식입니다. 조직상으로 개발자는 개발자를 위해서 일하고, 테스터는 테스터를 위해 일하고, 프로그램 매니저는 프로그램 매니저를 일하도록 구성되어 있습니다. 이렇게 엔지니어링 아키텍처 단위로 조직되는 것은 두 가지의 최적화를 가능하게 합니다. 첫째는 각 영역 및 분야별 전문성에 촛점을 맞출 수 있다는 것과, 둘째는 각각의 방식으로 기능을 만들고 이를 조립하여 제품을 만드는 것이 아니라, 전체적인 관점으로 제품을 개발하는 데 확실히 집중할 수 있도록 하는 능력을 최대화하는 것입니다.

우리는 개발자, 테스터, 프로그램 매니저의 비율을 각각 1:1:0.5로 하여 각 팀을 구성하기 때문에 이 세 가지의 분야를 함께 다루고 있습니다. 이 비율은 거의 모든 팀에 걸쳐 그대로 유지되고 있습니다. Windows 7프로젝트를 진행하는 각 팀들은 평균적으로 약 40명의 개발자들로 이루어져 있습니다.

또한 제품 전반에 걸쳐 일하는 엔지니어링 팀의 핵심 멤버들은 다음과 같습니다.

  • 컨텐츠 개발 : 온라인 도움말, 웹 사이트, SDK 문서, 배포(deployment) 문서의 작성 및 편집 담당
  • 제품 기획 : 어떤 기능들을 채택할 것인지에 대한 정보를 제공하는 고객 조사 및 연구 담당. 제품 기획은 또한 출시되는 제품의 디자인과 개발 과정을 통한 협력의 관점에서 Windows 에코시스템 전반에 걸친 파트너들과 함께 해야 할 작업들을 조율합니다.
  • 제품 디자인 : Windows 7에 사용될 전반적인 상호 작용 모델, 그래픽 및 디자인 개발
  • 사용 편의성 조사: 현장 및 랩에서 이미 출시된 제품 및 새로 제안된 기능에 대한 고객의 반응이 어떤지를 연구

Windows 팀이 너무 커진 나머지 엔지니어링에 문제가 생길 수 있는 정도라고 말하는 사람들도 있습니다. 그렇지만 이 블로그에 대한 댓글만 봐도 Windows의 다양한 기능과 변화에 대한 수요가 상당히 많다는 것을 알 수 있습니다. Windows는 아주 방대한 프로젝트이기 때문에 개발하는 데에는 인력이 필요하고, Windows 팀을 적당한 크기로 운영하는 것이 저희의 과제라고 할 수 있습니다. 상투적으로 들리겠지만 너무 크지도 작지도 않고 맡겨진 일에 맞는 팀 크기를 유지하기 위해 효율적으로 관리하겠다는 것을 의미합니다. 이를 통해 Windows 를 통해 저희가 추구하고자 했던 목표를 고객들에게도 그대로 전달할 수 있을 것입니다. 영화 “아마데우스” 중 황제가 오페라 “피가로의 결혼”에 너무 음표가 많다고 불평하는데, 모짜르트는 음표의 분량이 더 이상 더할 것도 뺄 것도 없이 적당하다고 대답합니다. 황제가 다시 모짜르트에게 몇 개만 빼라고 말하자 모짜르트는 “어떤 걸 빼라는 말씀이시죠?”라고 되묻습니다. 팀 구성은 기능을 구현하고 최종 사용자가 그것을 어떻게 효율적으로 사용할 수 있을 것인지를 구상하는 방법을 보여주는 것입니다. 저희 앞에 놓인 과제는 적당한 팀을 구성하여 모든 과제들을 완수하는 능력을 최대화하는 조직을 만들어가는 것이라고 할 수 있습니다. 더 이상 더할 것도 뺄 것도 없는 상태가 되도록 하는 것이죠.

제 자신 스스로 모든 글은 4페이지가 넘지 않도록 쓰겠다고 다짐했는데 이제 거의 4페이지가 되어가는군요. 댓글은 언제든지 환영합니다. 여러분이 올려주시는 댓글은 앞으로 이 블로그를 운영하는 데 있어 많은 도움이 되고 있습니다. 이번 글이 블로그와 관련된 전후 사정을 이해하는 데 있어 도움이 되었으면 좋겠습니다.

--Steven