微软公司开发过程

官方信息技术老师·19 页·深入(追求细节与边界)·0 次浏览·2 天前
微软开发邹欣经理工程实践团队流程

微软公司的开发过程

看完这组图解,你能讲清邹欣亲历的微软开发角色分工、协作机制与工程边界

按 空格/→ 演示下一步

1 / 19 页

全部页面点击任意一页,跳回舞台从这页播放

微软开发邹欣经理工程实践团队流程

微软公司的开发过程

看完这组图解,你能讲清邹欣亲历的微软开发角色分工、协作机制与工程边界

1第 1 页 · 微软公司的开发过程

邹欣是谁

上一页讲了微软的开发流程,但推动流程运转的核心是开发经理。邹欣正是这一角色的亲历者——在微软从工程师做到开发经理,回国后把经历写进《构建之法》。借她的眼睛,看清开发经理是什么。

邹欣的身份
前微软开发经理、《构建之法》作者,现高校软件工程教师
核心职责
管人、管项目、管技术决策,三件事同时扛在肩上
成长路径
开发→资深→架构→经理,需十余年积累,非直线晋升
角色定位
不是纯技术专家,也不是纯管理者,是业务与技术的桥梁
足球队主教练对应 →微软开发经理

个人技术不一定最强,负责战术决策与人员调配,把团队战力拧成一股绳

2第 2 页 · 邹欣是谁

从学生到工程师的转变

邹欣从学生走进微软,自述像「蜕了一层皮」。这一页聚焦两个问题:微软招什么样的人?招进来后用什么机制把学生炼成能交付产品的工程师?

招人看学习曲线
不只看当下技能清单,更看学习速度、接受反馈能力、跨领域可塑性
学生 → 工程师
从「证明我懂」转向「协作交付」,代码要经得起同事 review 与长期维护
培养三件套
导师 mentor 制 + 跨组轮岗 + 直接上手真实项目,在做中学
NBA 选秀看天赋潜力对应 →微软招聘看学习曲线

球探挑新秀不是看他现在能不能砍 50 分,而是三年后能不能成为球队核心

3第 3 页 · 从学生到工程师的转变

经理眼中的好工程师

学生变工程师,身份是换了,但「做得好」的标准也跟着变。微软经理眼里,看的不只是能不能写代码,而是会从几个互相咬合的维度打量一个工程师。

技术能力
能写出正确、可读、可维护的代码,并能解释为什么这么写
工程能力
考虑代码之外的事:测试、构建、部署、监控、文档、风险评估
协作能力
能和 PM、测试、其他工程师对齐目标、表达想法、接受反馈
Ownership 意识
把项目当自己的事,主动发现问题、推动解决、对结果兜底
足球队挑球员对应 →经理招工程师

不是只看颠球(写代码),还看体能(工程化)、配合(协作)、硬仗愿不愿上(ownership)

4第 4 页 · 经理眼中的好工程师

Peopleware 理念

上一页我们讲了经理眼中的好工程师:技术扎实、主动沟通。但还有一层更深的问题——是谁把这些好工程师变成好工程师?答案藏在微软坚持了几十年的一个理念里:Peopleware。

人比工具更重要
决定项目成败的是人的素质、协作与动机,不是语言、框架或流程
招聘是第一优先级
面试花多少时间都不为过,门槛宁严勿松,招错人的代价远高于多花一轮
授权而非管控
招对人之后信任其专业判断,减少不必要的审批、汇报与微观管理
管理者是园丁
营造土壤与环境(资源、文化、心理安全感),而不是亲自下场种花
园丁照料花园对应 →微软培养开发者

园丁选种、备土、浇水、施肥——但每天拽叶子是拽不出花的;微软选对人、给资源、给信任,让人才自己长出来

5第 5 页 · Peopleware 理念

微软 vs 其他公司

微软设三方角色、团队庞大、迭代以年计——其他公司精简得多。差异不是风格,是被规模逼出来的。

微软的开发模式
  • PM/Dev/Test 三角色明确分工
  • 单特性团队常 8 人以上协作
  • 里程碑以「功能完成」为节点
  • 员工先当内部用户(dogfood)
精简团队模式
  • Dev 常兼 QA,无专职 Test
  • 团队小,两披萨原则 5–7 人
  • 里程碑以「截止日期」为节点
  • 直接面向外部用户发布试错
差异由规模和阶段决定。微软模式适配超大规模、长生命周期产品;小团队快速验证时,精简模式更敏捷。
6第 6 页 · 微软 vs 其他公司

微软开发全景图

沿主流程从左往右读,虚线是开发与测试之间的快速反馈环。

图解渲染中…
A6测试嵌入开发全程,不是发布前才做A8里程碑评审是有否决权的质量闸门
7第 7 页 · 微软开发全景图

Planning 规划阶段

规划阶段把模糊的需求逐步变成可执行的 Sprint 承诺。

1
Backlog 累积
所有想法、需求、Bug 都先沉淀到产品待办列表
2
Grooming 梳理
PO 与团队定期精化条目:拆分大故事、估算工时、调整优先级
3
Sprint 选取
Sprint Planning 从 Backlog 顶部拉取本轮要做的条目
4
目标与承诺
团队为本 Sprint 定一个可衡量的目标,并做出交付承诺
8第 8 页 · Planning 规划阶段

Development 开发阶段

开发阶段三步走:测试驱动、结对编程、代码审查,把质量内建于每一行代码。

1
TDD 测试先行
先写一个会失败的测试,再写最少代码让它通过,最后重构
2
结对编程
两人一机,轮流当司机与导航员,实时讨论设计与实现
3
代码审查
合并前同事逐行 review,集体责任替代个人英雄主义
9第 9 页 · Development 开发阶段

Testing 测试阶段

测试阶段四步走:自动测试打底、持续集成把关、Bug 全程跟踪、修完还要回归。

1
写自动测试
开发者为新功能同步编写单元测试和集成测试代码
2
持续集成
代码每次提交自动触发编译与全套测试运行
3
上报 Bug
测试或用户发现问题即录入 Bug 数据库跟踪
4
修复回归
修完 Bug 后再跑一遍全部测试防止引入新问题
10第 10 页 · Testing 测试阶段

每日构建与冒烟测试

测试不是写完代码才开始。微软每晚让机器把全员最新代码编译一遍——这叫每日构建;紧接着跑一组最短路径测试——叫冒烟测试。这就是几千人代码库不乱的根本。

每日构建
每晚自动编译全代码库,Windows规模需10小时以上
冒烟测试
构建成功后跑核心用例,5分钟内必须出结果
破坏构建必究
谁提交的代码导致失败,谁当天必须修好
失败即停
冒烟测试不过的产品,不进入深度测试环节
短循环制胜
每天一轮,把集成爆炸拆成每天的小修补
餐厅开餐前的试菜对应 →每日构建 + 冒烟测试

每天厨房先做几道招牌菜确认炉火/厨师/调料都OK,客人点餐前就拦住设备问题

11第 11 页 · 每日构建与冒烟测试

Balsamiq Mockups 案例

前页讲了微软靠每日构建和冒烟测试守住质量。但 MVP 的另一面——「做最小可用版本、拿去给真实用户用」——要看一个真实案例才看得清。Balsamiq Mockups 是经典样本。

一人副业起步
创始人 Peldi 不满现有原型工具,周末时间做出第一版,单人全职维持
论坛即反馈渠道
自家博客和论坛直接对话用户,bug 报告和需求逐条回应
用数据调付费
从 12 美元一次性买断,到 79 美元,再改订阅——源于付费数据揭示一次性收入难持续
拒绝越界需求
用户要协同编辑、要模板库,团队评估后守住「手绘感原型」核心
木匠先做一把椅子试坐对应 →MVP 最小可用版本

先只做坐的功能给邻居试,看坐着舒不舒服、提什么改的意见,再决定做整套家具

12第 12 页 · Balsamiq Mockups 案例

Release 发布阶段

从内部测试通过到全球用户上手,发布阶段按节奏分四步推进。

1
Beta 测试
把接近完成的版本交给外部真实用户使用,捕捉内部测试漏掉的问题
2
RTM 锁定
代码冻结并签发给工厂,开始批量生产光盘镜像或下载包
3
渐进推送
按地区和用户群分批上线,先小范围验证再扩大,控制风险
4
GA 正式发布
全球所有用户都可获取,微软提供完整技术支持与维护
13第 13 页 · Release 发布阶段

Post-mortem 复盘阶段

发布之后,团队坐下来复盘,把教训变成下一次的资本。

1
召集复盘会议
项目组和相关方齐聚,坦诚回顾整个开发周期
2
列举得失事项
不追责个人,只分析过程:哪里做得好,哪里踩了坑
3
撰写复盘文档
把教训和原因写成文档,避免下次重复犯
4
跨组知识共享
让其他团队也看到这些经验,避免重复造坑
5
落地流程改进
把可行的改进点列入下个版本的计划
14第 14 页 · Post-mortem 复盘阶段

团队角色的演进

看主导权如何随阶段流转:粗箭头是接力赛,细箭头是协同流。

图解渲染中…
a1PM 主导:定义产品需求与功能场景a2Dev 主导:把需求实现为代码a3Test 主导:验证产品质量a4三方协作:发布与复盘阶段
15第 15 页 · 团队角色的演进

创新与技术的平衡

人会成长,代码也会成长——但代码的成长未必都对方向。每个版本微软都要回答:新功能和老代码,哪个先做?

技术债
快速迭代中妥协的设计与补丁,累积后会拖慢所有后续改动
平衡策略
在迭代周期中专门划出时段用于重构与还债,比例因团队而异
持续权衡
新功能价值与代码健康度,每个版本都要重新评估
动态调整
比例随产品阶段变化——成熟期往往要加大还债力度
餐厅不断加新菜对应 →软件不断增加功能

灶台管道不维护,新菜越多上菜越慢,最终拖垮整个餐厅

16第 16 页 · 创新与技术的平衡

自测检验

点击作答

在微软开发过程中,「每日构建+冒烟测试」最核心的作用是什么?

17第 17 页 · 自测检验

核心要点回顾

  • 流程闭环:五阶段环环相扣,每段都有硬产出
  • 质量左移:每日构建+冒烟测试把 bug 拦在最便宜的时刻
  • 人比流程重要:工程师成长与角色演进才是真正驱动力
  • 平衡优于极端:创新与成熟技术、商业与工程的取舍智慧
  • 复盘不追责:挖系统根因,让组织从失败中持续进化
延伸主题:谷歌的工程实践对比DevOps 与持续交付技术领导力的成长路径
18第 18 页 · 核心要点回顾

课后思考

先合上书自己想一想,再对照参考答案,看看思路对不对路。

1微软流程里「事后复盘 Post-mortem」为什么这么重要?它和一般的「经验总结」有什么本质区别?

参考答案Post-mortem 把事故的过程、原因、改进措施写成可查阅的公开文档,逼团队面对具体事实而非模糊感受;经验总结往往停留在感受层面,下一次容易重蹈覆辙。

2如果团队只有 3 人做一个小工具,Planning、Development、Testing、Release、Post-mortem 五个阶段你会保留哪些、合并哪些?

参考答案建议保留 Planning(划清边界)与 Post-mortem(沉淀教训);Development 和 Testing 合并为每日集成;Release 流程简化,不必照搬大公司的文档厚度。

3在今天 CI/CD 与自动化测试普及的背景下,「每日构建+冒烟测试」这套机制还有必要吗?为什么?

参考答案仍必要。CI/CD 解决自动化执行,每日构建解决「把集成做成团队纪律」。工具再自动化,也需要人来守住「每天必须集成」这条底线。

19第 19 页 · 课后思考