技术管理者的几个实用技巧

前言

个人从程序员到技术 Leader 经历了不少的心路历程,我目前在带一支十几人的技术团队(控制团队人数主要是遵循亚马孙 CEO 贝索斯提出的两个披萨原则)我记得刚开始带团队的时候我是非常抗拒的,因为总觉得管理太多的“杂事”占用了我很多写代码的时间,包括目前虽然已经是一支十几人技术团队的 Leader,但是我平时也还是偏爱技术多一些,在业余时间都会抽空写写代码或者在 Leetcode 刷刷题,在从事管理工作这些时间里看过很多书,也踩过很多坑,总结了很多经验,想必也有很多程序员刚开始跌跌撞撞的走上技术 Leader 的岗位,所以想写一篇文章跟大家分享一下,希望可以帮助到需要的人,文章大纲如下:

  • 技术管理者需要哪些综合能力? 如何才能在团队拥有 Leadership ?
  • 从工程师到团队 Leader 有哪些转变 ?
  • 如何提升技术团队的工作效能 ?
  • 如何提升团队的凝聚力 ?
  • 沟通的技巧 ?
  • 管理者的自我认知和成长

    技术管理者需要哪些综合能力? 如何才能在团队拥有 Leadership ?

    既然说到管理技术团队,那么管理的对象自然就是程序员,那么程序员是一个什么样的群体?大多数程序员的特点是:“聪明且傲娇”
    比如这个网上流传的段子,如何正确的向程序员提BUG:
    技术管理者的几个实用技巧 - 图1
    技术 Leader 对个人综合素质要求很高(技术好的管理者,带技术团队是有一定优势的),先说说我认为技术 Leader 需要哪几个比较重要的综合能力

  • 技术能力和基础知识(能看懂技术表象背后的原理)

  • 沟通表达能力(逻辑,同理心,情绪控制)
  • 业务抽象能力(架构和演化)

技术 Leader 必须要看透技术的本质,因为技术 Leader 平时的工作内容大多包含:技术选型,技术方案评审,代码审查,技术氛围的营造,如果管理者本身不是技术出身,可能无法和技术团队建立共识,沟通成本极高,最终让团队变成一个非常低效的组织,人浮于事,那么如何才能拥有这些能力,可以在技术团队拥有 LeaderShip ? 我个人总结有一下几点:

  • 吃透基础技术和弄懂技术背后的原理(万丈高楼平地起,再流行的框架和技术,剥离华丽的外衣也离不开操作系统,网络,数据结构这些原理型的知识)
  • 了解细节,永远在写代码(不熟悉代码就无法提出真正可落地的方案,就无法感知技术团队的痛点在哪里,也就无法团队提高效能)
  • 持续的学习,持续的为团队带来新的知识和理解(技术 Leader 已经是团队技术问题的终结者,不可能再上传递了,所以不要成为技术团队的天花板)
  • 有一个真心帮助大家的心态(帮助大家成长,提高效能,最终组织效能也得到提高,实现共赢的局面)

总结了以上经验和方法论之后,我们肯定会思考,上面所说的都只是过程和执行,那么管理者的目标或者说是工作的结果是以什么形式体现的?
技术管理者的几个实用技巧 - 图2
总体概括来说的话,管理者的目标和工作结果主要体现在两方面:

  • 做事:成本、效率、质量
  • 带人:人才、梯队、成长

以上的方向又太抽象,其实管理者很多时间的大部分工作都在选择和权限,主要包含以下几个方面

  • 有限资源的限定下,选择最大化的产出方案
  • 做出符合当前环境的技术决策,帮助公司产品取得成功
  • 用方法和工具不断优化和提升生产效率和质量

技术管理者的几个实用技巧 - 图3
举一个实际的例子:

  1. 比如公司A在创业期,还没有稳定的市场和客户,这个时候技术管理者的决策要倾向成本 + 效率,例如:技术团队偏向全栈型,工作流偏敏捷,快速交付功能获取用户和市场的反馈用于升级和迭代产品
  2. 比如公司B在成熟期,有固定的市场和客户,行业已经没有新的蛋糕,这个时候需要比拼的就是效率 + 质量,技术团队偏向专家型,注重产品质量和客户体验用于形成行业口碑和用户粘性

    从工程师到团队 Leader 有哪些转变 ?

    其实工作变化还蛮大,所有很多人刚开始管理团队会出现很多的不适,我总结如下:
    我们先看看工程师的工作视角:
  • 这个功能怎么做 ?
  • 这个需求写完,我今天的工作就完成了
  • 业余时间只看技术相关的内容
  • 看看今天领导分配了什么工作给我

作为技术 Leader 的工作视角:

  • 我们先阶段要做什么 ?
  • 团队未来向哪里发展? 团队成长不如预期怎么办? 公司今年的业绩指标如何可以完成 ?
  • 除了技术,还需要沟通,判断,组织,协调,看方向的能力
  • 规划 Q1 季度的工作目标,分解到团队成员去实施,保证工作内容和每个团队成员的能力相匹配

看到这里大家可能会感慨到,不同于工程师工作内容的“明确性”,管理者的大部分工作是“不确定性”的,而且几乎没有尽头,也没有一个明确的时间用于标示“完成”状态,所以这对于习惯“确定性”思维的工程师来说,挑战极大
我个人用通俗的比喻来总结就是,我以前写代码时候的感受是 一人吃饱全家不饿,轻松且自由, 现在感受是 既当爹(做事),又当妈(带人),而且还上有老(上级),下有小(团队),感觉亚历山大!!

如何提升团队的工作效能

很多人都在谈高效,但是软件行业的高效度量指标是很难的,总体来说工作效能的提升,实际上是 事 + 人 的结合,我们先聊聊事情,再聊聊人
从事情的角度,我们先说说让团队开发工作变的高效的几个条件:

  • 给员工配置高性能的电脑(工欲善其事必先利其器,脱离工具谈高效就是在耍流氓)
  • 工作流是否流畅(Git 服务器网络慢,合并代码要写表格走流程申请?形式主义就不要谈高效二字)
  • 自动化工具是否完善(没有自动扫面,自动测试,代码就被合并了?那么接下来就是无尽的生产 Bug,修复的死循环)

以上侧重的是工具和流程,开发的效率和开发的体验对团队的效能都至关重要,流畅的工作流可以让开发者持续进入心流状态,产生高质量的功能和代码,不会频繁的被电脑卡死,频繁的打断,开发流程等待的阻塞降低工作的积极性,下面我们从人的方面聊聊如何提高团队效能
程序员的工作大多是本质知识工作者,管理学大师彼得德鲁克说过:“对于知识工作者是无法进行严密的督导”,所以我倾向提供一种积极,主动,自驱的工作氛围给团队,让团队在这种土壤里面逐渐的形成高效能团队
每个团队都会有懈怠的员工,有时候管理者不要急于否定员工,看看管理者是不是没有洞察到他的心理诉求,高产出员工的两个特质是:

  • 能力(专业知识,技术能力)
  • 意愿(团队文化,价值观,喜欢的氛围)

有一种情况我们常常会发现相同的员工在不同的环境,有不同的产出,所以有时候发现懈怠的员工,不仅要从员工身上找问题,还可以去思考看看是不是我们周围的人,事,环境,工作方法,价值观等地方找出问题,毕竟有一句话叫做“橘生淮南则为橘,生于淮北则为枳”
技术管理者的几个实用技巧 - 图4

外部激励

除了团队和个人,还可以从外部找原因来持续的激励团队,可以理解为是外部激励,主要包含以下方面:

  • 安全感和成就感(稳定的工作环境,完成有难度的挑战,及时反馈 BIA)
  • 学习和成长环境(和优秀的人共事,感知到自己成长)
  • 和管理者定期沟通(让员工感到自己被重视,收集员工建议并且做出工作上的调整)

    自驱力和凝聚力

    很多企业都期望员工可以有 Onwer 精神,但是如果想要团队保持足够的自驱力,管理者可能要思考是否对团队做到以下几点:

  • 给予员工自主性(工作内容上的自由度,工作方法上的自由度,工作时间和地点上的自由度)

  • 成长(明确的工作目标,内容有挑战,工作发挥其优势)
  • 意义和使命(共同的目标和愿景,价值观)
  • 信任和放权(共同面对挑战,团队内的对抗活动)

    沟通的技巧

    为了简单先说明沟通的重要性,我们先了解一下关于圣经中《通天塔》的故事,故事大概如下:
    《圣经·旧约·创世记》第11章故事中人们建造的塔。根据篇章记载,当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,因为不能沟通无法达成共识,人类之间相互猜忌,内斗,无法团结,最终计划因此失败,人类自此各散东西。
    总结一下就是,如果人们不愿意,或者不会沟通,那么就很容易产生分歧,误解,从而导致大家分裂,大家的目标就会失败,那么管理者很多事情是需要通过沟通传达,让团队达成方向共识,齐心协力,最终完成企业的目标
    技术管理者的几个实用技巧 - 图5
    说完故事,那我们了解一下良好的沟通能带来什么?

  • 管理者对团队的总体认知和判断力得到提升

  • 和团队成员之间建立信任和默契(信任的前提是充分的沟通,信任程度越高,沟通成本越低)
  • 高质量的沟通可以帮助管理者在团队建立和累积影响力

因为很多程序员可能不是很善于沟通,可能需要一些原则和指导,那么在沟通中有哪些方面可以遵循或者注意事项,我个人总结如下 3 点经验

  • 认清个体差异(每个人的生活环境不同,对于不同的角色要学会用不同的沟通和表达方式)
  • 基于目标沟通 (明确各自沟通的意图和目的,减少不必要的误会,避免情绪对抗)
  • 多用我来回放(可以把:你是不是这个意思,可以换成,你看看我理解的是否准确)

沟通技巧的核心在于学会倾听,对于还未掌握沟通技巧的同学,推荐一个沟通工具 3F 倾听,照着做也可以称为沟通小能手:
技术管理者的几个实用技巧 - 图6

情绪控制

聊到沟通不得不聊情绪控制,为什么管理者要避免情绪化,学会控制情绪 ? 我们先看看知识的原理:我们常常会因为出现情绪,导致沟通常常脱离事情本身,转移到情绪的对抗上,我们的大脑皮层处理本能情绪的优先级是高于理性的,例如愤怒,恐惧,饥饿等,所以我们经常可以看到被本能情绪覆盖的人,往往会失去某种理性,所以我们在沟通的时候需要时刻以下两点:

  • 控制情绪
  • 保持理性

文字可能比较枯燥,我们通过一张冰山图来了解原理:
技术管理者的几个实用技巧 - 图7
了解情绪控制后,我们往往会在工作中遇到,跨部门沟通,跨团队沟通,这种情况往往都会有“部门墙”的存在,这种情况往往不能诉求于共同的上级,往往出现“部门墙”的情况就是因为之间没有共同的上级,也无法相互影响,遇到这种情况可以通过如下几个切入点去达成沟通的共识

  • 人格:有口皆碑的人品和正直的人格可以让别人更加容易信任你说的内容,并且被你影响
  • 历史表现:你曾经成功完成过相同的事情,就是成功案例,可以让别人更加容易相信你
  • 影响力:你是行业的知名人物或者是团队公认的专家,权威的力量
  • 逻辑:你的内容前后呼应有着紧密的逻辑,可以增加说服力
  • 激情和情怀:心怀某种远大的理想主义,并且有使命感有激情,比较容易获得人们的帮助和认同,可以参考锤子手机的成功案例
  • 互惠:明白对方的需求,沟通的目的是建立在满足双方的需求上

说完沟通技巧,那我们来看一下平常沟通中有哪些常踩的坑?可以对照下自己以前是否有踩过

  • 沟通给人贴标签,对人不对事(例如:你这个人怎么这么笨,这点事情都做不好)
  • 没有管理自己的情绪,负面情绪对团队造成影响
  • 沟通没有闭环,消息和邮件发出去就默认对方收到了

熟悉计算机网络的朋友应该很熟悉 TCP 协议和 UPD 协议,沟通有没有闭环就可以对应计算机网络中的 TCP 协议(可靠网络传输)和 UDP 协议(不可靠的网络传输),我个人建议大家在沟通中尽量多的使用 TCP 协议

管理者的自我认知和成长

为什么说管理者要比团队拥有更快的成长,因为 管理者是团队的天花板,你不成长则团队不会成长,那么管理者的自我认知首先要体现在哪些方面?

  • 认知:管理者的价值是体现在团队业绩上,不要跟团队抢功劳
  • 心态:归因于己,归功于外,有错都是管理者的错,有功劳都是团队的努力
  • 担当:不要推卸责任,就算是客观原因,也要反省和复盘避免,而不是把责任推给外部

能做到以上三点,我相信已经会是一个很优秀的管理者了,那么如何保持稳定和高效的成长呢?我的个人秘诀的管理者要做好自己的 精力管理,因为大家的时间都有差不多,尤其是三十左右刚刚成家的管理者(比如说我),可以抽出的时间基本是少之又少,那么还想在赛道上赢得竞争力那么就要比其他人,那么你就要保证自己有足够的时间和身体的健康,那么通过什么来获取呢?答案就是精力管理,我个人总结的精力管理分为以下几个方面:

  • 运动(每天定期的运动,可以让你保持一个持续充沛的精力,也更加容易专注)
  • 饮食(健康饮食,少吃多餐)
  • 睡眠(早睡早起,不要熬夜)
  • 健康(定期检查,避免久坐)
  • 情绪(放松,感恩,好心情)

说完角色认知和精力管理,那么有人会不仅的思考,那么我们持续为止努力的目标在哪里?具备以上两点,就像一辆高性能的好车,高速道路已经铺好,但是要如何开往目的地?这个就要因人而异了,毕竟每个人的目标和理想都是不同的,先说说我个人,我是技术出身,到目前为止我其实也是偏爱技术的,转管理岗位更多的是想要锻炼自己的软技能,所以我持续努力的目标是有 2 个:

  • 软技能的提升:产品思维,项目规划,带团队,带人,沟通,执行力
  • 硬技能的提升:架构,设计,算法,网络,操作系统,编程语言

以上仅仅是代表我个人的目标,也可能是多数技术 Leader 的目标,对于技术管理者很多人总是有误解,认为已经是团队 Manger 就不需要去做具体的执行工作的,起码这一点对于技术管理是行不通的,我个人认为技术管理者 要一直写代码,因为如果不了解技术细节就无法做出有效的决策,而且管理者如果脱离技术,那么也是很危险的一件事情,因为市场对管理者的需求并不多,市场需要更多的工程师去写代码,管理者更多的价值是依附于企业,其很多业务知识也并非可迁移的技能,如果管理者放弃技术的话可谓是“自废武功”,也会让自己陷入一个很尴尬的境地,比如的性格发现自己不适合做管理的话,甚至都不能退回去做工程师了

总结

唠唠叨叨也写了 5000 字,最后总结就写简单点,就像跟工程师,管理者或者正在走上管理路上的同僚提两点建议,就是:

  • 个人而言,做技术还是管理都不是很重要,找到自己最大的价值才是最重要的
  • 不要被别人走过的路限制住,也不要被职业限制住,没有谁可以定义你的发展

中国的官本位思考其实还是挺严重,很多人以为做管理就是当官,但是在软件行业其实并不存在这一现象,目前大多数互联网公司都是偏向扁平化管理,管理者的大家在工作中并没有本质上的不同,而且管理者的工作更多的是偏向“打杂”(工程师视角),如果抱着这种心态去做管理,那么我想说初衷就已经错了,我先在这里劝退,因为最终也可能会走向失败,管理者更多的是要有利他精神,空悲和开放的心态,真正愿意去帮助团队成功,最终实现自己,通过成就他人来收获成就感,关于技术管理的道理长篇大论说了很多,道理都很简单,能不能走好管理路,还是要在“事上练”,自己感悟出来的道理才能真正的为自己所用
参考资料:

  1. 彼得德鲁克 《卓有成效的管理者》 https://book.douban.com/subject/1322025/
  2. 刘建国《知行:技术人的管理之路》 https://book.douban.com/subject/33463986/
  3. 极客时间:《技术管理实战》https://time.geekbang.org/column/intro/113