怅然|就是自废武功?,技术Leader远离代码

个人从程序员到技术Leader经历了不少的心路历程 , 目前在带一支十几人的技术团队(控制团队人数主要是遵循亚马孙CEO贝索斯提出的两个披萨原则) 。
我记得刚开始带团队的时候我是非常抗拒的 , 因为总觉得管理太多的“杂事”占用了很多写代码的时间 , 目前虽然已经是一支十几人技术团队的Leader , 但是我平时也还是偏爱技术多一些 。
在业余时间 , 我都会抽空写写代码或者在Leetcode刷刷题 , 在从事管理工作这些时间里我看过很多书 , 也踩过很多坑 , 总结了很多经验 。
想必也有很多程序员正跌跌撞撞的走上技术Leader的岗位 , 所以写下这篇文章希望可以帮助到有需要的人 。
文章大纲如下:
技术管理者需要哪些综合能力?如何在团队拥有Leadership?从工程师到团队Leader有哪些转变?如何提升技术团队的工作效能?如何提升团队的凝聚力?沟通的技巧?管理者的自我认知和成长技术管理者需要哪些综合能力?如何在团队拥有Leadership?
既然说到管理技术团队 , 那么管理的对象自然就是程序员 , 那么程序员是一个什么样的群体?大多数程序员的特点是:“聪明且傲娇” 。
比如这个网上流传的段子 , 如何正确的向程序员提Bug:
先说说我认为技术Leader需要哪几个比较重要的综合能力:
技术能力和基础知识(能看懂技术表象背后的原理) 。 沟通表达能力(逻辑 , 同理心 , 情绪控制) 。 业务抽象能力(架构和演化) 。技术Leader必须要看透技术的本质 , 因为技术Leader平时的工作内容大多包含:技术选型 , 技术方案评审 , 代码审查 , 技术氛围的营造 。
如果管理者本身不是技术出身 , 可能无法和技术团队建立共识 , 沟通成本极高 , 最终让团队变成一个非常低效的组织 , 人浮于事 , 那么如何才能拥有这些能力 , 可以在技术团队拥有Leadership?
我个人总结有以下几点:
吃透基础技术和弄懂技术背后的原理(万丈高楼平地起 , 再流行的框架和技术 , 剥离华丽的外衣也离不开操作系统 , 网络 , 数据结构这些原理型的知识) 。 了解细节 , 永远在写代码(不熟悉代码就无法提出真正可落地的方案 , 就无法感知技术团队的痛点在哪里 , 也就无法团队提高效能) 。 持续的学习 , 持续的为团队带来新的知识和理解(技术Leader已经是团队技术问题的终结者 , 不可能再上传递了 , 所以不要成为技术团队的天花板) 。 有一个真心帮助大家的心态(帮助大家成长 , 提高效能 , 最终组织效能也得到提高 , 实现共赢的局面) 。总结了以上经验和方法论之后 , 我们肯定会思考 , 上面所说的都只是过程和执行 , 那么管理者的目标或者说是工作的结果是以什么形式体现的?
做事:成本、效率、质量 。 带人:人才、梯队、成长 。以上的方向又太抽象 , 其实管理者很多时间的大部分工作都在选择和权限 , 主要包含以下几个方面:
有限资源的限定下 , 选择最大化的产出方案 。 做出符合当前环境的技术决策 , 帮助公司产品取得成功 。 用方法和工具不断优化和提升生产效率和质量 。
比如公司A在创业期 , 还没有稳定的市场和客户 , 这个时候技术管理者的决策要倾向成本+效率 , 例如:技术团队偏向全栈型 , 工作流偏敏捷 , 快速交付功能获取用户和市场的反馈用于升级和迭代产品 。 比如公司B在成熟期 , 有固定的市场和客户 , 行业已经没有新的蛋糕 , 这个时候需要比拼的就是效率+质量 , 技术团队偏向专家型 , 注重产品质量和客户体验用于形成行业口碑和用户粘性 。从工程师到团队Leader有哪些转变?
其实工作变化还蛮大 , 所以很多人刚开始管理团队会出现很多的不适 , 我总结了如下几个方面 。
我们先看看工程师的工作视角:
这个功能怎么做?这个需求写完 , 我今天的工作就完成了 。 业余时间只看技术相关的内容 。 看看今天领导分配了什么工作给我 。作为技术Leader的工作视角:
我们先阶段要做什么?团队未来向哪里发展?团队成长不如预期怎么办?公司今年的业绩指标如何可以完成?除了技术 , 还需要沟通 , 判断 , 组织 , 协调 , 看方向的能力 。 规划Q1季度的工作目标 , 分解到团队成员去实施 , 保证工作内容和每个团队成员的能力相匹配 。看到这里大家可能会感慨到 , 不同于工程师工作内容的“明确性” , 管理者的大部分工作是“不确定性”的 , 而且几乎没有尽头 , 也没有一个明确的时间用于标示“完成”状态 , 所以这对于习惯“确定性”思维的工程师来说 , 挑战极大 。
我个人用通俗的比喻来总结就是 , 我以前写代码时候的感受是一人吃饱全家不饿 , 轻松且自由 , 现在感受是既当爹(做事) , 又当妈(带人) , 而且还上有老(上级) , 下有小(团队) , 感觉压力山大!!
如何提升团队的工作效能
很多人都在谈高效 , 但是软件行业的高效度量指标是很难的 , 总体来说工作效能的提升 , 实际上是事+人的结合 , 我们先聊聊事情 , 再聊聊人 。
【怅然|就是自废武功?,技术Leader远离代码】从事情的角度 , 我们先说说让团队开发工作变的高效的几个条件:
给员工配置高性能的电脑(工欲善其事必先利其器 , 脱离工具谈高效就是在耍流氓) 。 工作流是否流畅(Git服务器网络慢 , 合并代码要写表格走流程申请?形式主义就不要谈高效二字) 。 自动化工具是否完善(没有自动扫面 , 自动测试 , 代码就被合并了?那么接下来就是无尽的生产Bug , 修复的死循环) 。以上侧重的是工具和流程 , 开发的效率和开发的体验对团队的效能都至关重要 , 流畅的工作流可以让开发者持续进入心流状态 , 产生高质量的功能和代码 , 不会频繁的被电脑卡死 , 频繁的打断 , 开发流程等待的阻塞降低工作的积极性 。
下面我们从人的方面聊聊如何提高团队效能 。 程序员的工作大多是本质知识工作者 , 管理学大师彼得德鲁克说过:“对于知识工作者是无法进行严密的督导” 。
所以我倾向提供一种积极 , 主动 , 自驱的工作氛围给团队 , 让团队在这种土壤里面逐渐的形成高效能团队 。
每个团队都会有懈怠的员工 , 有时候管理者不要急于否定员工 , 看看管理者是不是没有洞察到他的心理诉求 。
高产出员工的两个特质是:
能力(专业知识 , 技术能力) 。 意愿(团队文化 , 价值观 , 喜欢的氛围) 。有一种情况 , 我们常常会发现相同的员工在不同的环境 , 有不同的产出 , 所以有时候发现懈怠的员工 , 不仅要从员工身上找问题 , 还可以去思考看看是不是我们周围的人 , 事 , 环境 , 工作方法 , 价值观等地方找出问题 。
毕竟有一句话叫做“橘生淮南则为橘 , 生于淮北则为枳” 。
除了团队和个人 , 还可以从外部找原因来持续的激励团队 , 可以理解为是外部激励 。