Microsoft에서 DevOps를 사용하여 계획하는 방법
Microsoft는 Agile 방법론을 사용하는 세계에서 가장 큰 회사 중 하나입니다. 수년간의 경험을 통해 Microsoft는 Windows와 같은 대규모 노력을 통해 가장 작은 프로젝트에서 확장되는 DevOps 계획 프로세스를 개발했습니다. 이 문서에서는 Microsoft가 회사 전체에서 소프트웨어 프로젝트를 계획할 때 구현하는 많은 교훈과 사례를 설명합니다.
도구 변경
다음 주요 변경 사항은 개발 및 배송 주기를 더 건강하고 효율적으로 만드는 데 도움이 됩니다.
- 문화적 맞춤과 자율성을 촉진합니다.
- 개인에서 팀으로 포커스를 변경합니다.
- 새로운 계획 및 학습 전략을 만듭니다.
- 다중 승무원 모델을 구현합니다.
- 코드 상태 사례를 개선합니다.
- 투명성과 책임을 촉진합니다.
문화적 맞춤 및 자율성 촉진
피터 드루커는 "문화는 아침 식사를 위한 전략을 먹는다"고 말했다. 자율성, 숙달 및 목적은 인간의 주요 동기입니다. Microsoft는 성공적인 제품을 빌드할 수 있는 권한이 있다고 느낄 수 있도록 이러한 동기를 PM, 개발자 및 디자이너에게 제공하려고 합니다.
이 접근 방식의 두 가지 중요한 기여자 맞춤과 자율성입니다.
- 맞춤은 개인과 팀이 자신의 책임이 더 넓은 비즈니스 목표에 어떻게 부합하는지 이해할 수 있도록 위에서 아래로 정렬됩니다.
- 자율성은 개인과 팀이 일상적인 활동 및 의사 결정에 영향을 미칠 수 있도록 처음부터 발생합니다.
맞춤과 자율성 사이에는 섬세한 균형이 있습니다. 맞춤이 너무 많으면 사람들이 말하는 대로만 수행하는 부정적인 문화를 만들 수 있습니다. 자율성이 너무 많으면 구조나 방향이 부족하고, 의사 결정이 비효율적이며, 계획이 잘못될 수 있습니다.
개인에서 팀으로 포커스 변경
Microsoft는 사용자와 팀을 PM, 디자인 및 엔지니어링의 세 그룹으로 구성합니다.
- PM은 Microsoft가 빌드하는 내용과 그 이유를 정의합니다.
- 디자인은 Microsoft에서 빌드하는 것을 디자인하는 일을 담당합니다.
- 엔지니어링은 제품을 빌드하고 품질을 보장합니다.
Microsoft 팀에는 다음과 같은 주요 특징이 있습니다.
- 교차 징계
- 10~12명
- 자체 관리
- 12-18 개월 동안 헌장 및 목표 지우기
- 실제 팀 룸
- 자체 기능 배포
- 프로덕션에서 고유한 기능
수직 팀을 위해 노력
Microsoft 팀은 모든 UI, 모든 데이터 또는 모든 API를 포함하는 가로로 사용되었습니다. 이제 Microsoft는 수직 팀을 위해 노력하고 있습니다. Teams는 제품 엔드 투 엔드의 영역을 소유합니다. 특정 계층의 엄격한 지침은 제품 전체의 팀 간에 균일성을 보장합니다.
다음 다이어그램은 수평 팀과 수직 팀의 차이를 개념화합니다.
자체 선택 팀 허용
약 18개월마다 Microsoft는 개발자가 다음 몇 가지 계획 기간 동안 작업하려는 제품의 영역을 선택할 수 있는 "노란색 고정 연습"을 실행합니다. 이 연습에서는 팀이 작업할 작업을 선택할 수 있고 조직 조정이 팀 간의 균형을 촉진하므로 자율성을 제공합니다. 이 연습에 참가한 사람들의 약 80%가 현재 팀에 기본 있지만, 선택의 여지가 있었기 때문에 힘을 얻었다고 느낍니다.
새 계획 및 학습 전략 만들기
드와이트 아이젠하워는 "계획은 쓸모가 없지만 계획은 전부입니다." Microsoft 계획은 다음 구조로 나뉩니다.
- 스프린트(3주)
- 계획(3 스프린트)
- 시즌(6개월)
- 전략(12개월)
엔지니어와 팀은 주로 스프린트와 계획을 담당합니다. 리더십은 주로 계절과 전략을 담당합니다.
다음 다이어그램에서는 Microsoft 계획 전략을 보여 줍니다.
이 계획 구조는 계획을 수행하는 동안 학습을 최대화하는 데도 도움이 됩니다. Teams는 피드백을 받고, 고객이 원하는 것을 파악하고, 고객 요청을 신속하고 효율적으로 구현할 수 있습니다.
다중 승무원 모델 구현
이전 방법은 버그 및 라이브 사이트 인시던트에 대한 "인터럽트 문화"를 조성했습니다. Microsoft 팀은 포커스를 제공하고 방해를 피할 수 있는 고유한 방법을 마련했습니다. 팀은 각 스프린트에 대해 기능(F-승무원)과 고객(C-승무원)이라는 두 명의 고유한 승무원으로 자체 구성합니다.
F-승무원은 헌신적 인 기능을 작동하고, C-승무원은 라이브 사이트 문제와 중단을 다룹니다. 팀은 구성원이 활동을 보다 쉽게 계획할 수 있는 회전 주기를 설정합니다. 다중 승무원 모델에 대한 자세한 내용은 고객 중심의 생산적인 팀 빌드를 참조 하세요.
코드 상태 연습 개선
Agile 방법론으로 전환하기 전에 팀은 개발 단계가 끝날 때 코드가 완료될 때까지 코드 버그를 빌드하도록 하는 데 사용했습니다. 그런 다음 팀은 버그를 발견하고 수정하는 작업을 수행했습니다. 이 연습은 버그의 롤러 코스터를 만들어 팀이 새로운 기능을 구현하는 대신 버그 수정 작업을 해야 할 때 팀의 사기와 생산성에 영향을 줍니다.
이제 Teams는 수식# of engineers x 5 = bug cap
으로 계산된 버그 한도를 구현합니다. 팀의 버그 수가 스프린트 종료 시 버그 한도를 초과하는 경우 새로운 기능에 대한 작업을 중지하고 한도에 있을 때까지 버그를 수정해야 합니다. 이제 팀은 버그 부채를 갚습니다.
투명성 및 책임 강화
각 스프린트가 끝나면 모든 팀은 이전 스프린트에서 수행한 작업과 다음 스프린트에서 수행할 계획을 보고하는 메일을 보냅니다.
목표 및 주요 결과(OKR)
팀은 조직이 달성하려는 목표를 명확히 할 때 가장 효과적입니다. Microsoft는 목표 및 주요 결과(OKR)를 통해 팀에 명확성을 제공합니다.
- 목표는 달성할 목표를 정의합니다. 목표는 중요하고 구체적이며 행동 지향적이며 이상적으로 영감을 주는 의도 진술입니다. 목표는 실제 숫자가 아니라 큰 아이디어를 나타냅니다.
- 주요 결과는 목표를 달성하는 단계를 정의합니다. 주요 결과는 진행률을 평가하고 특정 기간의 목표에 대한 성공을 나타내는 정량화 가능한 결과입니다.
OKR은 가장 가능성이 큰 결과뿐만 아니라 최상의 결과를 반영합니다. 지도자들은 야심차고 신중하지 않으려고 노력합니다. 팀이 도전적인 핵심 결과를 추구하도록 밀어붙이면 목표에 대한 가속이 가속화되고 더 큰 목표를 향해 나아가는 작업의 우선 순위가 지정됩니다.
OKR 프레임워크를 채택하면 팀이 다음과 같은 이유로 더 나은 성능을 발휘할 수 있습니다.
- 모든 팀이 계획에 맞춰집니다 .
- Teams는 활동을 완료하는 대신 결과를 달성하는 데 집중 합니다 .
- 모든 팀은 정기적으로 노력에 대한 책임이 있습니다.
OKR은 제품의 다른 수준에 있을 수 있습니다. 예를 들어 최상위 제품 OKR, 구성 요소 수준 OKR 및 팀 수준 OKR이 있을 수 있습니다. 특히 목표가 하향식으로 설정된 경우 OKR을 정렬된 상태로 유지하는 것이 비교적 쉽습니다. 발생하는 모든 충돌은 조직의 잘못된 정렬에 대한 중요한 초기 지표입니다.
OKR 예시
목표: 강력하고 행복한 고객 기반을 성장합니다.
주요 결과:
- 외부 NPS(순 프로모터 점수)를 21에서 35로 늘입니다.
- 문서 만족도를 55에서 65로 늘립니다.
- 새 파이프라인 흐름의 Apdex 점수는 0.9입니다.
- 작업에 대한 큐 시간은 5초 이하입니다.
OKR에 대한 자세한 내용은 목표 및 주요 결과를 사용하여 비즈니스 결과 측정을 참조하세요.
올바른 메트릭 선택
키 결과는 기반으로 하는 메트릭만큼만 유용합니다. Microsoft는 변화에 초점을 맞춘 선행 지표를 사용합니다. 시간이 지남에 따라 이러한 메트릭은 제품 가속 또는 감속의 작업 그림을 작성합니다. Microsoft는 종종 다음 메트릭을 사용합니다.
- 채택의 월별 증가율 변경
- 성능 변경
- 학습 시간 변경
- 인시던트 빈도 변경
Teams는 목표에 대한 값이 누적되지 않는 메트릭을 방지합니다. 특정 용도가 있을 수 있지만 다음 메트릭은 목표에 대한 진행 상황을 추적하는 데 도움이 되지 않습니다.
- 원래 예상치의 정확도
- 완료된 시간
- 코드 줄
- 팀 수용작업량
- 팀 번다운(burndown)
- 팀 개발속도
- 발견된 버그 수
- 코드 검사
Agile 이전 및 Agile 이후
다음 표에서는 Agile 사례를 채택할 때 Microsoft 개발 팀이 변경한 내용을 요약하여 설명합니다.
이전 | 이후 |
---|---|
4-6개월 마일스톤 | 3주 스프린트 |
수평 팀 | 수직 팀 |
개인 사무실 | 팀 룸 및 원격 작업 |
긴 계획 주기 | 지속적인 계획 및 학습 |
PM, 개발 및 테스트 | PM, 디자인 및 엔지니어링 |
연간 고객 참여 | 지속적인 고객 참여 |
기능 분기 | 모든 사용자가 기본 분기에서 작동합니다. |
20명 이상의 개인 팀 | 8-12인 팀 |
비밀 로드맵 | 공개적으로 공유된 로드맵 |
버그 부채 | 부채 0개 |
100페이지 분량의 사양 문서 | PowerPoint 사양 |
프라이빗 리포지토리 | 오픈 소스 또는 InnerSource |
심층 조직 계층 구조 | 평면화된 조직 계층 구조 |
설치 번호는 성공을 정의합니다. | 사용자 만족도는 성공을 정의합니다. |
1년 1회 기능 제공 | 기능은 모든 스프린트를 제공합니다. |
핵심 내용
- 민첩한 과학을 진지하게 받아들이지만 지나치게 규범적이지는 않습니다. Agile은 너무 엄격해질 수 있습니다. 민첩한 사고방식과 문화가 성장하도록 합시다.
- 활동이 아닌 결과를 축하합니다. 기능 배포는 코드 줄보다 큽니다.
- 리듬과 주기를 설정하고 수행해야 할 모든 작업을 찾기 위해 모든 스프린트에서 배송.
- 원하는 동작을 가져올 문화권을 구축합니다.