CategoryResourceRepost/极客时间专栏/研发效率破局之道/管理和文化/31 | 业务目标和技术目标两手抓:怎样打造高效团队?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

146 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="31 | 业务目标和技术目标两手抓:怎样打造高效团队?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/f9/45/f902c7e809d5162a8901e1763aee6b45.mp3"></audio>
你好,我是葛俊。今天,我来和你聊聊管理和文化。
今天这篇文章是最后一个模块“管理和文化”的第一篇。在前30篇文章中我已经从优化流程、团队工程实践、个人工程实践这三大方面与你介绍了很多原则、方法和具体实践。通过这些内容相信你应该对软件研发活动的本质有了更深刻的理解也对这条超级灵活的流水线如何提效有了新的认识。
但作为团队管理者,要提高团队的研发效能,掌握了这些原则、方法和实践后,还要通过管理和文化让它们真正在团队落地。管理是提高团队研发效能的基石,而文化是持久高效的保障。同时,管理又决定了文化,如下图所示。
<img src="https://static001.geekbang.org/resource/image/30/bf/30fbd592b6447409cd941625d94fb4bf.png" alt="">
所以,在接下来的几篇文章中,我会参考硅谷高效能公司的一些管理实践和原则,以及我在国内外公司的落地经验,与你介绍如何通过管理和文化来提高团队的研发效能。今天,我们就先从技术管理者的主要工作步骤出发吧。
在我看来技术管理工作主要有如下3个步骤
1. 寻找目标;
1. 目标管理;
1. 计划并执行去实现目标。
其中计划执行又包括人、流程和工具3个方面。
## 第一步:寻找目标
在[第1篇文章](https://time.geekbang.org/column/article/125840)中,我曾和你分享研发效能的三要素是有效、快速、可持续性,其中第一条就是有效,也就是准确性。所以,要想建设高效的研发团队,技术管理者的第一项重要工作就是,作为舵手,为团队寻找方向和目标。
**首先,技术团队的根本目标就是业务目标。**毋庸置疑,业务目标是团队存在的意义,完成它是一切的基础。
业务目标的设定有两个层次:
- 弄清楚公司和上级对团队的预期,达到这个预期,是团队的基础目标。
- 在基础目标之上,还要给团队设定一个进取目标。我们需要分析公司的发展方向,以及团队的实际情况,找到那些既符合公司利益,又通过跳一跳就能够得着的目标。
除了业务目标之外,还有**另外一种技术管理者一定要关注的目标,即技术目标**。如果只关注业务,我们的行动就容易短视。有这么一句话我非常赞同:技术常常在短期被高估,在长期被低估。作为技术管理者,我们需要看清楚并坚持技术在长期可以发挥的巨大作用,在技术上持续投资,制定并完成合理的技术目标。
在我看来,**技术目标主要有两种:**
- 一种是关于偿还技术债的,这是处理已经形成的问题。关于技术债的处理,你可以再回顾下[第14篇文章](https://time.geekbang.org/column/article/138916)中的相关内容。
- 另一种是前瞻性的技术目标。作为技术管理者,我们要有灵敏的技术嗅觉,对即将出现的技术挑战,做一些预防和准备。
关于前瞻性的目标我再和你分享一个我在Facebook时的例子吧。
2013年左右我们从公司开发者的使用数据观察到由于代码仓的迅速增大Git对它的支持有些吃力比如一些操作的速度越来越慢。于是我们抽出人力去做调研克隆了一个Facebook的代码仓并按照当时的增长速度去模拟大量的提交进行测试。
结果发现再过半年许多常用的Git操作速度都将下降到不可接受的程度。于是我们团队专门成立项目组来解决这个代码仓将会出现的性能问题。最终我们在问题还没发生前就把它解决掉了。这种具有前瞻性的技术目标确保了公司的业务能够持续发展给公司和团队带来的好处显而易见。
**关于技术目标的设定,有两个常见问题:**
- 一是业务目标和技术目标的时间占比应该是多少从我个人的经验看80%是一个合适的点。
- 二是,技术目标要不要立项?在我看来,这要视公司情况而定。如果你的主管对技术目标认可,那最好能够单独立项;否则,就把技术目标合并到业务目标中。比如,要实现某一个业务,我们必须重构某一个组件。这里,重构组件就是一个技术目标,无论采用哪一种方式,我们都需要持续关注技术目标。
## 第二步:目标管理
目标管理的第一步就是制定计划。这里我先给出一个有效设定目标的原则SMART原则。SMART是Specific具体、Measurable可衡量、Attainable可达成、Relevant与主目标有相关性和Time-bound有明确的截止期限这5个英文单词首字母的缩写。
一个目标可能被定义为“今年下半年实现用户讨论功能”但很明显这个定义不够清晰。而另外一种定义方法是“今年12月31号之前实现用户讨论功能模块在主页以及至少一个其他页面使用并且用户使用率大于10%”。
可以清楚看到,第二种定义方式更具体,团队成员有更明确的方向,能专门针对具体的模块使用场景和使用率努力。并且,具体的数字和截止期限,可以帮我们更容易跟踪项目进展。
很明显第二种定义方式正是使用了SMART原则中的具体S、可衡量M和有明确截止日期S三个原则。另外这个任务还要是可达成A也就是既要有挑战性又可以通过努力达成这样团队工作起来才会更有劲头。最重要的是与主目标的相关性R是前提只有这样的任务才有价值。
总结来说SMART有更明确、具体的目标利于员工更加明确、高效地工作完成与公司目标更加对齐的业绩也为管理者实施绩效考核提供了目标和标准。网络上有很多SMART原则的相关资料比如[SMART 原则以及实际案例](https://blog.csdn.net/limuzi13/article/details/52245983)这篇就还不错。
除了SMART原则**OKR是一个很有用的目标管理工具**。
我们经常会听到领导者Leader和管理者Manager这两个概念但你有注意过它们的区别吗两者经常混用但实际上有一个本质区别领导者告诉团队需要去哪里而管理者告诉团队如何去到那里。
在我看来,**每一个管理者都应该努力成为一个领导者**给团队目标让团队成员自己找到达成目标的方法。而OKR正是帮助管理者做到这一点的工具。
其中O表示目标是鼓舞人心的目标可以使每个人保持一致和受到启发KR则表示关键结果是达成目标需要注意的度量。在Google使用后最近几年OKR很流行效果的确很好。OKR的内容比较多如果你想要系统了解并在团队落地的话推荐你阅读《[黄勇的OKR实战笔记](https://time.geekbang.org/column/intro/100030701)》这个专栏。
这里,我想强调一下**用好OKR的两个关键点**。
第一使用OKR最重要的目的是让全公司对齐目标所以在实施OKR时我们要随时留意这个目的。可以说这是执行OKR最关键的原则。基于这个原则我们可以扩展出很多实际操作。比如公司级别定义一个O每个团队和个人根据实际情况制定自己的O和KR所有人的OKR都透明全公司可见同时定时做回顾、调整和复盘。
第二OKR不是一个HR工具不是绩效管理方法。绩效管理方法一般包括目标、度量和考核激励 / 惩罚与之相比OKR只包括目标和度量是一个目标导向工具。
OKR之所以在目标对齐上有很大作用是因为团队成员可以发挥主观能动性自己制定与公司目标一致的KR。而一旦OKR跟绩效挂钩团队成员承担风险的意愿和内驱力就会大大减弱倾向于制定更容易实现的KR从而失去了目标导向的意义。
所以OKR不要跟绩效挂钩。那么问题来了**使用OKR之后怎样进行绩效考评呢**实际上这也很简单只要评估团队成员具体完成的工作对公司的贡献度即可甚至可以OKR和KPI并存。比如公司高层可以使用KPI用数字衡量绩效而全公司都使用OKR进行目标对齐。
## 第三步:任务执行
在具体的任务执行上,作为技术管理者,我们应该从人、流程和工具上来提高研发效能,高效达成业务目标和技术目标。
### 关于人:最关键的是调动起主观意愿
首先,把团队成员的利益统一起来,才会激发他们的主观能动性,自己想办法去达成目标。典型的例子是,为了消除职能竖井,采用全栈开发方式(你可以再回顾下[第8篇文章](https://time.geekbang.org/column/article/132539)中的相关内容)。
**统一团队利益的主要方法是,采用康威定律来组织团队结构**,使其与产品结构相吻合,让产品的成功成为团队一致的目标。
比如Facebook针对产品和功能一般组织10人左右大小的团队里面包括了前后端开发者、设计师、产品经理、数据科学家等。所有人的目标都是如何把自己团队的功能、产品做好。小团队之间松耦合有比较高的自主权不同团队间主要通过目标的一致性来进行协调。这种方式不但使得大家的力往一处使而且灵活机动、出产品很快。
把这种小分队的方法用到极致的是Spotify公司。他们在产品层面把各个功能模块隔绝开某个功能出现问题不影响其他功能正常使用。每个功能由8人左右的自主运营小组负责称之为Squad。Squad的主管负责确认、沟通团队需要解决的问题以及解决这些问题的意义而团队成员的职责是自己决定如何解决这个问题自主性非常强。
另外需要注意的是,**在把组织架构和产品对应起来的时候还有一个重要原则DRY。**对个人开发者说DRY是不要重复自己而对公司或者团队来说DRY就是要建设针对基础设施、共享业务的平台以避免重复造轮子。
以Facebook为例Infrastructure团队基础平台团队人数众多话语权大对公司的业务发展至关重要我之前所在的内部工具团队就是Infrastructure团队的一部分。各项业务之所以能够快速开发、验证、上线、迭代并实现高可用、高并发支持上亿日活用户都跟Infrastructure团队的工作密不可分。
除了基础平台外DRY在业务方面最主要的表现是业务中台也是最近非常火的话题。
调动人员的意愿,除了组织架构方面外,绩效管理和企业文化也很重要,我会在后面几篇文中与你详细介绍这些内容。
### 关于流程:选择合适的方法论、原则、实践
关于流程需要注意的是,寻找符合软件开发行业特性的方法,并根据团队情况不断优化。**具体来说,我推荐使用先从全局的端到端流程入手,寻找系统瓶颈,然后再集中精力解决瓶颈,完成一轮优化。**
这样可以从全局出发,避免以偏概全,能够最高效地使用团队的人力、物力。在优化过程中,我们要尽量采用数据驱动的方式,用数据来寻找问题,并通过数据的比较来检查改良措施的有效性。
针对流程的优化,你可以再回顾下[第4篇文章](https://time.geekbang.org/column/article/128867)中的相关内容;而关于效能度量,你可以再回顾下第[2](https://time.geekbang.org/column/article/126447)和第[3](https://time.geekbang.org/column/article/128151)篇文章中的相关内容。
另外,要提高团队的研发效能,作为团队技术负责人,需要保持技术判断力,包括技术选型的能力以及方法论的选择能力。你可以参考我在前三个模块中,给出的流程优化、团队工程实践及个人工程实践的一些高效方法论和实践。
### 关于工具:根据实践进行选择
完成了人、流程的工作之后,工具的选择就比较容易了:让团队**根据方法论选择适用的工具即可**。在前面的文章中,我对各个方法论的适用工具都做过详细介绍,你可以再回顾下相关内容。
这里,我再给出**团队选用工具的两个原则**吧。
第一个原则是,选择工具时要根据场景的复杂程度选择自建还是使用第三方服务/工具。对简单、单一场景我推荐使用开源工具而对复杂的系统和流程可以考虑使用一些付费工具比如SaaS产品因为术业有专攻这样比自建工具性价比更高。
通常情况下针对小型创业公司很多SaaS产品的价格不算太高有些甚至免费。作为技术管理者我们要考虑投入产出比让开发人员把时间花在业务上可能才最合适。在硅谷小公司使用付费软件服务的现象也很普遍国内公司也慢慢有这个趋势了。
第二个原则是工具虽然重要但背后的方法论和原则更重要。比如OKR如果使用得当使用一套简单的wiki系统就可以做起来但如果概念不清、原则不对的话即使引入专门的OKR工具效果也不会好。所以作为技术管理者我们一定要花时间了解工具背后的原则。
## 小结
今天,我通过寻找目标、目标管理,以及如何执行这三步与你介绍了一些管理方法。
首先,最重要的一点是,技术管理者需要同时关注业务目标和技术目标。只有这样,才能够让团队持续发展。如果今天这篇文章你只能记住一个观点的话,我希望是“业务目标和技术目标两手抓”。
在目标管理方面OKR是帮助团队对齐方向的不错工具。不过我们使用OKR时一定注意目的是对齐目标与绩效挂钩的效果会大打折扣。
在具体的任务执行方面,从人、流程、工具三个方面入手,即想办法调动人的主观能动性,从流程全局入手把时间花在最需要优化的地方,以及根据具体方法论和场景复杂度选择工具。
最后,我觉得每一个技术人员,都应该花些时间去了解管理,原因包括两点:
- 对公司、团队的管理措施有更清晰的理解,可以帮助我们更高效的、有的放矢的工作;
- 管理是职业发展的一个方向,了解一些管理可以帮你尽早弄清楚这条路是否适合自己。
## 思考题
Facebook提前预测并解决Git性能问题的例子中我们最后使用Mercurial代替了Git。你知道这其中的原因是什么吗
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!