原创:逆熵研习社
本期摘要
1.工程能力是一项综合能力,对个人和团队都非常有意义。
2.个人的工程能力包含心智因素、判断主次和先后的逻辑思维能力、持续将事情做好的套路等要素;协作和总结抽象也是个人工程能力的重要要素;
3.团队的工程能力核心是发挥出团队有机体的系统能力,协作性、成长性、持续性是团队能力的要素,执行效率、并发执行的能力是当前研发团队工程能力状态的主要体现;
什么是工程能力
什么是工程能力?在定义前想起了一个非常有历史意义的追求“多、快、好、省”。
如果在成本固定,投入不变的情况下可以做到“多、快、好、省”绝对是非常值得推崇的。“多、快、好、省”的程度就是我们个人以及我们团队工程能力在结果上的表现。
用古法对我们研发过程的“工程能力”做一个定义——依据当前的技术水平、架构状态、人力及其他投入状况选择并建设的实现路径、协作方式以及基础设施等是工程能力的核心要素。工程能力包含了对现实的理解、对资源的控制、规划建设以及包含流程在内的协作管理能力等,因此是一项综合能力。从个人和团队两个层级看工程能力都是非常重要的综合能力。
个人工程能力的要素
个人的工程能力也被称为工程素养,在当前的互联网公司中有不少工作将个人工程能力(工程素养)作为职级晋升评判的重要依据。个人的工程素养是一个非常综合的能力,有一种模糊但具体的感觉。可以根据工作的的效果判断出工程素养的高低,但在细分析做成事情的原因时就会感觉到这似乎和一项或者几项更基础的能力相关。
这些细分的基础要素中第一块儿基石是“可依赖”。由于经历、教育等原因人的技术能力总是会有各种各样的差异,大家承担的事情会有很大差异,但在不同岗位上有一个共同的要素就是要“可靠”,可就是能够提供相对稳定的输出。怎么才能做到可靠呢?两个方面是必须的:
1)有相对稳定的,可以承担压力的心智。稳定的心智是什么样的呢?至少正视自己和团队的现状,为理想可以挑战,可以突破,但务必要以务实为准(注意务实不是现实,务实立足现实但目标更多的是未来)。
2)具备辨别主次的能力,持续将事情做好。能够区分主次,抓住并解决自己职责的主要矛盾。
举质量的例子来看——一般创业公司的质量团队建设的比较晚,质量团队建立时就可能是质量问题高频爆发的时期,同时也是基础设施各种不健全的时期。这个时候应该如何抓?我见过一些朋友以问题做为做事情的驱动,一波波的线上问题成为疯狂干活的驱动因素,大家咬紧牙关解决当前的线上问题。我还遇到过朋友以远方的美好作为驱动,不太去关注当前的质量问题,扎入深处去建设一些底层的基础设施,而线上问题接连不断的继续发生。如果是你自己承担这个方向的质量问题,你如何想呢?相信你对这两种方案都不是非常满意,但我们又该如何抓住真正重要的东西呢?毫无疑问这个时期的团队当前和未来都非常重要,真正的高手就是要解决“既要”“又要”的问题——拦截住当前的主要问题,同时为未来铺好道路。总结下,为了保证自己是可靠的就要能够分辨出自己承担职责的主要矛盾,除了心智因素外做事情上要着眼主要矛盾,解决当前问题,为未来埋下能够长大的种子,持续不断的推进问题的解决,努力让自己在现在和未来都不是整盘棋的瓶颈点。 基础要素中的第二块儿应该要数做事儿的“套路”了。即便是同样的技术层次,同样的业务理解在做事情套路上也会有很大差异。“套路”有一个系统的要素要考虑。对于自己做的较大点的事情,总不能一下子就干完了,“套路”的第一点要求就是要有规划的能力,知道从哪儿下手,可以较合理的安排前后相序的实现过程。“套路”的第二点要求是理解系统和组织,较为合理的使用系统和组织的力量。为了解决问题总有一些是需要我们费尽心力玩命解决的,而有一些却可以借助团队的力量解决掉。具体到一个项目中,好比你承担了某个业务方向容量安全的职责,该用什么样的套路呢?介绍一个朋友的大致做法,个人感觉套路不错。这个朋友承担的职责主要的目的是保障产品可以正常服务用户,该工作的一对主要矛盾是“成本与效率”,从逻辑上说“不能无限制的增加人力资源和服务资源”。为了解决这个矛盾,大致分阶段做了这几个事情:
1. 收集性能事故尽可能多的信息,整理出产品线性能问题的主要特征——多数情况发生在服务高峰,缓存系统首先出现问题;40%出现在新版本上线的下一个高峰期,其余出现在业务阶段性增长时期。
2. 降低由于迭代导致的缓存问题,将和缓存密切相关模块的新版的发布延迟一天,新版本在灰度环境待1~2个高峰期,初步排除明显且危害巨大的风险;该工作非常直接,成本不高,不足之处是降低了迭代的效率。
3. 集中自己的力量在缓存相关的模块中加入性能trace,在宏观的信息信息之外添加高风险模块的过程数据,并持续高度关注过程数据的变化。通过2、3工作的落地性能问题发生的频率有了明显的下降,但是问题仍然存在。
4. 与运维、基础组件等团队沟通对高风险模块在服务低峰期进行整机房压测,经过1个月左右的压测,高风险模块的性能状况基本摸清。开始进行针对模块的系统化优化。
5. 建设可持续使用的在线全链路压测系统和全方位的性能trace记录,并通过小时级别的容量状况状态发布给子系统负责人。该工作耗费了很长时间,整体建设完成将近一年时间,但是建成后效率明显提升,性能问题极少出现。
“套路”的核心就是在知道干成什么样的情况下有能力推动建设的进行。所有的说“我知道怎么干但是我不愿意”,或者说“我知道干成啥样,但是我不愿意搞”都是和套路不符的,承担了职责做好才是有意义的。 能力要素的另外一个基本要素应该说是团队管理与协作。当承担比较大的职责时往往不是一个人单枪匹马就能完成的。不过管理问题本身研究比较多,可谓是博大精深,有机会单独聊聊这一块儿的理解,此处只聊一下简单的思路。首先,是能够将大家团结在一起。说出来有点无色无味,但是能团结起来的力量确实很重要。如何将大家团结在一起呢?最好是有共同的理想和共同的利益,另外团队就是自己工作的生命,要时刻在自己的团队中和大家一起冲锋陷阵。其次,能够协调大家打好配合。
最后一个核心级的要素是至关重要的,这项能力就是将工作进行总结抽象的能力。没有抽象就难于理解事情本质,难于将经验进行很好的泛化,更难做出突破性的创新工作。说的这么悬,咋提升总结与抽象的能力呢?起点要基于我们实际做的事情,在做事情解决问题的时候不断的思考任务解决的核心目标和做事情的关键路径,不断的抽象出更准确、更简洁的描述。然后就是拿着自己抽象的内容在新的实践中进行检验,不断磨练。
团队工程能力的要素
团队的工程能力是基于团队成员工程能力基础上的一个组织的工程能力。之所以说是具有组织性的就是团队的工程能力不是简单的成员能力的叠加,还要有能力的配合,甚至是能力的激发。团队工程能力要素有以下几点:
1)团队工程能力的一个要素就是“配合”,都说“双拳难敌四手,好汉架不住人多”,我们组织团队的一个核心就是要配合,构建团队才有的系统能力。你所在的团队可能非常有钱,可以找到最好的工程师,但是无论工程师有多好,都不能要求大家都是全能的,即使你能找到全能工程师放在一起也不是一个有机的团队。如何建设团队的系统能力呢?既然是有机体我们就需要遵循有机体本身的规律——有整体的清晰的目标,协作目标明确大家才能围绕这个目标一起建设,协作大目标一致情况下阶段性目标也应该及时传递给大家;有共荣的文化,一个一起做事儿的团队应该要有共荣的意识,在共荣意识的前提下落地真实的共荣,好比说对于高成长预期的团队,能有意识的通过团队的实战提升大家的实际“战力”就是非常有意义的;此外还有尊重有机体生长和淘汰机制,面向我们的目标不断的磨炼所需能力,必要的时候要保证团队要有较好的梯队形态,以便于催促大家成长与接力。
2)团队工程能力的第二个要素是流程和制度。这东西听起来可能招致极客范同学的反感,不都在说追求扁平,不都在说追求自由的工程师文化么?这些追求当然也不错,团队的价值、文化和制度应该是一套的。目标就是要限制部分“个体性”,凸显“团队性”,让团队像狼群一样所向披靡。因此为提升团队工程能力我们应该积极思考自己的制度、文化,不断的磨炼这块能力。
3)团队工程能力的第三个特征是“持续性”。我们做的产品需要根据市场不断变化,但是团队的一些基础需要持续建设。我见过一些换团队的例子,这些团队为了应付每年的晋升和KPI基本没有持续建设的东西,每建设一项便大肆吹牛,未经打磨便草草结束,这样的很难打磨好的团队系统能力特质。
4)团队工程能力的另外一个特征是“并行性”,并行性可以说是因,也可以说是果。串行的能力早晚会成为系统的瓶颈,因此应该早早着手打造自己团队的“并行能力”。并行能力有两方面的意义——一个是最直接的快速完成任务,另外一个是内部练兵,不断提升团队自己的力量。
5)还有一个不能忽视的工程能力要素——与其他团队的协作能力。团队本身是有机体,在大的有机体内又是部分,有一套和外部协作的机制和文化是非常有意义的。在和外部协作时可以有自己的风格,总的遵循原则是保证信息高效传递,保障任务落实到人。