<audio id="audio" title="期中总结 | 3个典型问题答疑及如何高效学习" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/29/d5/293f08f27499d3e043b76c3e16b418d5.mp3"></audio>

你好，我是石雪峰。不知不觉中，专栏已经上线快两个月了，整体进度过半。我在专栏写作之初就给自己定下了一个小目标：**认真对待每一条留言**。到现在，单单是回复留言，我就已经写了3万多字了。

其实，对我来说，每一次看留言和回复留言，都是一个不断反思和学习的过程。实际上，很多时候，很多留言和讨论甚至比文章本身都更精彩，也更接地气。

今天是期中总结，我分为两个部分内容来讲：

- 第1部分：我从众多留言中挑选了3个典型问题，进一步展开讲解。
- 第2部分：我想跟你说说心里话。两个月的高强度写作，也让我从一个讲师的角度，重新审视了“如何高效学习”这件事情，我把这些想法分享给你，希望可以帮助你更好地提升自己。

## 典型问题

首先，我们来看一些典型问题。

### 问题一

> 
敏捷开发模式没有花费大量时间去研究业务，这会不会出现因为对业务没有分析透，导致方向偏离，甚至系统开发到一半发现总体业务架构不合理，需要返工的情况呢？


相信你也知道，实施DevOps有助于产品快速和高质量的交付，那么，我想问的是：快速和高质量的交付，是否就一定意味着业务的成功呢？显然没有这么简单。

实际上，影响业务成功的因素有很多，比如，行业趋势、产品竞争力、用户消费习惯、政策法律法规等等。在这众多因素之中，需求质量的高低，或者说，需求是否靠谱，也很重要。

毕竟，如果交付了一大堆没用的需求，不仅没法提升业务，反而还会浪费大量的时间和精力，错过真正有价值的机会。

我们身处在一个飞速变化的时代，企业对于用户想要什么其实并不清楚。很多需求都是人为拍脑袋拍出来的。在提出一个新需求的时候，需求价值到底有多少呢？这不仅很难预测，而且还很难衡量。

所以，产品人员就倾向于采用“广撒网”的方式，提出一大堆需求，来提升命中的几率。毕竟，如果一次猜不对，打不准，那就多打几次呗。

这么看来，采用敏捷开发方式，还是瀑布开发方式，与需求是否靠谱并没有直接关系。即便是采用瀑布模式，依然也有“大力出悲剧”的案例，比如摩托罗拉的铱星计划。

既然无法事先预测需求是否靠谱，那么要解决这个问题，就需要业务团队和交付团队的通力协作了。

**从业务侧来说，就是要采取精益创业的思想，通过最小可行产品，将需求进行拆解，通过原型产品降低市场的试错成本**。这就引出了我在[“业务敏捷”](https://time.geekbang.org/column/article/155791)这一讲中提到的**影响地图**、**卡诺模型**、**用户故事**等一系列的手段和方法，核心还是采用**持续迭代、小步快跑的方式**来获取市场反馈。正因为如此，更加灵活拥抱变化的敏捷开发模式才被广泛地接受。

说完了业务侧，再来看看交付侧。

一个想法被提出来以后，需要经过软件开发交付过程，才能最终交付到用户手中。那么，就要**用尽一切手段来缩短这条交付链路的时长**。

如果开发的时间成本是一定的，那么剩余的部分，就是DevOps中的各种工程实践试图要去解决的问题。

比如，通过持续集成来降低软件集成中的解决成本，降低软件缺陷在最后一刻被发现的修复成本；通过自动化测试，降低大量手工回归测试用例执行的成本，降低新功能导致已有功能出现回退的修复成本。软件交付过程中的其他部分也大都如此，这也是每个领域都会有自己的实践集合的原因。

反过来看，功能上线之后，依然需要交付侧提取、汇总和及时反馈业务指标，来证明需求的靠谱程度，从而帮助业务侧更加有序地进行决策。对反映不好的功能及时止损，对反映不错的功能加大投入。

这样一来，**业务侧的需求拆解、需求分析减小了需求颗粒度，提升了需求的靠谱度；交付侧的工程实践大大缩短了上线交付周期，提升了质量**。这就帮助业务在不增加成本的前提下，可以验证更多的需求。这个过程的成本越低，频率越高，企业存活下来的几率和整体竞争力也会越高。这也正是DevOps想要解决的核心真问题。

### 问题二

> 
公司对于配置管理的关注度不是很高，有没有什么好的落地实践方法，来建设完整的配置管理体系呢？


在专栏的[第10讲](https://time.geekbang.org/column/article/160477)，我从4个核心原则出发，介绍了配置管理的相关知识，引起了很多同学的共鸣。

的确，作为一个长期被忽视，但是格外重要的实践，配置管理不仅是诸多DevOps工程实践的基础，也是工程能力的集大成者。

正因为如此，**配置管理体系的建设，并不只是做好配置管理就够了。实际上，这还依赖于其他工程实践的共同实施**。

关于配置管理怎么落地，我跟你分享一个案例。

这家公司最早也没有专职的配置管理，软件的集成和发布都是由研发团队自行管理的。推动建立配置管理体系的契机，源于公司决定加快版本发布节奏，从三周一个版本变成两周一个版本。看起来，这只是版本发布周期缩短了一周，但是，就像我在专栏[第4讲](https://time.geekbang.org/column/article/148878)中演示的部署引力图一样，想要达成这个目标，需要方方面面的努力，其中就包括配置管理。

于是，公司决定引入配置管理岗位。初期，他们重点就做两件事：

- 重新定义分支策略，从长分支改为了短分支加特性分支的模式；
- 管理集成权限，从任何时间都能集成代码，到按照版本周期管控集成。

在这个过程中，配置管理同学梳理了代码仓库的目录结构和存储方式，并基于开发流程建立了在线提测平台，从而实现了研发过程的线上化以及权限管理的自动化。

接下来，配置管理与平台和流程相结合，开发过程开始向前、向后延展。

- **向前**：在需求管理阶段，建立需求和代码的关联规范，严格约束代码提交检查，并且将构建工具和环境配置等纳入统一管控，可追溯历史变更；
- **向后**：在部署运维阶段，定义版本发布和上线规则，建立单一可信的发布渠道，可统一查询所有正式发布版本的信息，包括版本关联的需求信息、代码信息、测试信息等。

团队在走上有序开发的正轨之后，就针对发现的问题，逐步加强了平台和自动化能力的建设。

- 代码提交失控：做集成线上化，测试验收通过之后，自动合并代码；
- 环境差异大：通过容器化和服务端配置管理工具，实现统一的初始化；
- 构建速度慢：通过网络改造和增量编译等，提升构建速度。

这样一来，版本发布这件事情，从原本耗时耗力的操作，最终变成了一键式的操作，团队也达成了预期的双周发版的目标。

在这个案例中，配置管理更多是从流程和平台入手，通过规则制定、权限管控、统一信息源，以及版本控制手段，重塑了整个开发协作的交付过程。

所以，在把握原则的基础上，面对诸多实践，想要确定哪些实践可以解决实际问题，**最好是要从预期结果进行反推**。

如果你不知道该从哪里入手，不妨看看现在的软件交付流程是否是由配置管理来驱动的，是否还有一些数据是失控和混乱的状态，版本的信息是否还无法完整回溯。如果是的话，那么，这些都是大有可为的事情。

总之，**任何一家公司想要落地配置管理，都可以先从标准化到自动化，然后再到数据化和服务化**。这是一条相对通用的路径，也是实施配置管理的总体指南。

### 问题三

> 
度量指标要如何跟组织和个人关联？这么多指标，到底该如何跟项目关联起来呢？


我在[第19讲](https://time.geekbang.org/column/article/169385)中介绍了正向度量的实践，引发了一个小高潮。文章发出后，有不少同学加我好友，并跟我深入沟通和探讨了度量建设的问题。由此可见，当前，企业的研发度量应该是一个大热门。

但是，度量这个事情吧，你越做就越会发现，这是个无底洞。那么，在最最开始，有没有可以用来指导实践的参考步骤呢？当然是有的。我总结了四个步骤：**找抓手、对大数、看差距、分级别。**

**第1步：找抓手。**

对于度量体系建设来说，很多公司其实都大同小异。最开始的时候，核心都是需要有一个抓手来梳理整个研发过程。这个抓手，往往就是需求。因为，**只有需求是贯穿研发交付过程始终的，没有之一**。

当然，你也可以思考一下，除了需求，是否还有其他选项？那么，**围绕需求的核心指标，首先是需要提取的内容**。如果，连一个需求在交付周期内各个阶段的流转时长都没有，那么，这个度量就是不合格的。

**第2步：对大数。**

对大数，也就是说，当度量系统按照指标定义，提取和运算出来指标数据之后，最重要的就是**验证数据的真实有效性，并且让团队认可这个客观数据**。

很多时候，如果公司里面没有一套权威指标，各个部门、系统就都会有自己的度量口径。如果是在没有共识的前提下讨论这个事情，基本也没什么意义。所以，说白了，一定要让团队认可这些大数的合理性。

**第3步：找差距。**

抓手有了，核心大数也有了，大家也都承认这个度量数据的客观有效性了。但是，在这个阶段，肯定有些地方还是明显不合理。这个时候，就需要对这个领域进一步进行拆分。比如，测试周期在大的阶段里只是一个数字，但实际上，这里面包含了N多个过程；比如，功能测试、产品走查、埋点测试等等。

如果没有把表面问题，细分成各个步骤的实际情况，你就很难说清楚，到底是哪个步骤导致的问题。所以，**在达成共识的前提下，识别可改进的内容，这就是一个阶段性的胜利**。

**第4步：分级别。**

**实际上，不是所有指标都可以关联到个人的**。比如，如果要计算个人的需求前置周期，这是不是感觉有点怪呢？同样，应用的上线崩溃率这种指标，也很难关联到一个具体的部门。

所以，**我们需要根据不同的视角和维度划分指标**。比如，可以划分组织级指标、团队级指标和项目级指标。

**划分指标的核心还是由大到小，从指标受众和试图解决的问题出发，进行层层拆解，从而直达问题的根本原因**，比如用户操作原因、数据计算原因、自动化平台原因等等。当然，这是一件非常细致的工作。

我们再来回顾下，我们刚刚深入剖析了3个DevOps的典型问题。

首先，你要非常清楚地知道，DevOps在面对未知需求时的解题方法和解题套路，那就是业务侧尽量拆解分析靠谱需求，交付侧以最快、最低的成本完成交付。它们之间就是一个命运共同体，一荣俱荣，一损俱损。

配置管理作为DevOps的核心基础实践，在实施的过程中，并不只局限在单一领域。实际上，要从研发流程优化的视角出发，驱动标准化、自动化和数据可视化的能力建设。

最后，关于度量指标部分，你要注意的是，**向上，要支撑核心指标；向下，要层层分解，展示真实细节**。

讲解完这3个典型问题之后，接下来进入第2部分，这也是我极力要求增加的部分。其实，我就是想跟你说说心里话。

## 如何高效学习？

跟你一样，我也是极客时间的用户，订阅了很多感兴趣的课程。在学习的过程中，我一直在思考，如何在有限的时间内高效学习。直到我自己成为了课程老师，从用户和老师两个角度思考这个问题，有了一些感悟，想要跟你分享一下。

忙，是现在大多数人的真实生活写照。我们每天从早到晚，忙于工作，忙于开会，忙于刷手机……忙得一塌糊涂。

但是，如果要问，过去的一天，自己都在忙什么，要么是大脑一片空白，要么是碎碎念式的流水账。可见，我们每天忙的很多事情，都没有什么价值。

其实，很多事情，都没有我们想象得那么重要。我们常常把目光聚焦于眼前，眼前的事情就变成了整个世界。但是，如果把时间拉长到一周，甚至一年，你会发现，这些事情，做与不做没有什么分别。

正因为时刻处于忙碌的状态，所以，抽出一整段时间学习，就变成了一件奢侈的事情。但我要祝贺你，因为至少你比大多数人有意识，有危机感，愿意拿出零碎的时间，来充实自己。

既然花了这么难得的时间，你肯定希望能有所收获，无论是在知识上，还是能力上，抑或是见识上，至少不白白浪费这段时间。

那么，我想问的是，你真的有收获吗？

史蒂芬·科维曾经说过，大多数人聆听的目的是为了“怼回去”，而不是为了真正的理解。

> 
Most of people listen with the intent to reply, but not with the intent to understand.


这里面的“怼回去”稍微有点夸张，实际上，我发现，当我在交流的时候，脑海里总是不自觉地想象如何回复对方，而不是专心地听对方讲话，感悟他的意图和情绪。

所以你看，听这种学习方式，总是会受到固有思维模式的影响。也就是说，在很多时候，我们往往会把自己置身于一种评论者的身份。

那么，什么是评论者的身份呢？这就是说，**站在一种置身事外的立场，以一种审视的角度，来看待每一件事情，并试图找到一些问题。当然，这些问题，都是在已有的认知局限中发现的**。

这些反馈，对于知识的生产者而言，其实是一件好事，因为他能够时刻审视自己，反思自己，并从中找到不足之处。

但是，对学习者来说，能不能在学习的过程中，暂时放弃评论者的身份，转而做一个实践者呢？

比如，以极客时间的专栏为例，对于作者提到的内容，你有哪些不同的观点呢？面对同样的问题，你又有哪些更好的手段呢？

其实，每一个作者之所以能成为作者，都有他的独到之处。那么，**能够让他的思想为你所用，让他的知识与你互补，让你自己成为交流的赢家，这才是对得起时间的更好选择**。

最后，以极客时间的专栏为例，我认为：

- 60分的体验，就是可以看完所有的文稿，而不是仅仅听完课程音频；
- 70分的体验，就是可以仔细学习文稿中的附加资源，比如代码、流程图以及补充的学习信息等。这些都是精选的内容，可以帮助你在15分钟之外，扩充自己的知识面；
- 80分的体验，就是可以积极参与到专栏的留言和讨论中，甚至可以就自己的问题跟作者深入交流，建立连接；
- 90分的体验，就是可以结合工作中的实际场景，给出自己的思考和答案，并积累出自己的一整套知识体系，并且，可以反向输出给其他人；
- 100分的体验，就是持续改进。我想，能够具备这种思想，可能要比100分本身更重要。

那么，你想做到多少分的体验呢？你可以自己想一想。

好了，接下来，我们即将进入“工具实践篇”，希望你可以继续保持学习的热情，坚持下去，期待美好的事情自然发生。

## 思考题

对于前面已经更新的内容，你还有什么疑惑点吗？或者说，你在实践的过程中，有什么问题吗？

欢迎在留言区写下你的思考和答案，我们一起讨论，共同学习进步。如果你觉得这篇文章对你有所帮助，也欢迎你把文章分享给你的朋友。
