怎么做好互联网公司的技术团队负责人?
对这个问题有些兴趣,不请自来。
先审个题:怎么做好互联网公司的技术团队负责人?
首先技术团队负责人这个表述可以有多种理解,我将其分为两种:一线Tech Leader与其他。Tech Leader往上可以有一些层级,直至CTO, 取决于公司扁平程度与规模,不同的角色其实需要思考解决的问题是不一样的。
其次题主特意提到了互联网公司,我在传统软件行业与互联网行业各自摸爬滚打过几年,跟过不同风格的“老大”,见过不少优秀的Leader, 自己也在不同行业有过带技术团队的经历。以我个人的感受来说,互联网与否,对技术团队负责人的要求并没有太多区别,区别来自于公司或团队文化,来自于技术对于公司而言的重要程度。
仅就如何做好一线Tech Leader谈一下我自己的看法,很多地方自己还做得不够,与大家共勉。
马天宇 的回答很好,其划分是比较合理的,基本上做好业务、团队、技术三个方面就很不错了,我换个角度补充几点:
业务
要充分理解业务,不仅理解自己的产品,也要关心竞品,业内趋势,如果能对趋势有自己的判断最好不过了,没错就是要把自己当半个PM。
积极参与业务目标的拟订形成过程,比如每个季度或每个月的大体规划,在充分理解业务的基础上,你就可以更有底气地发表自己的看法,确保在大的业务方向上,团队不至于走太多弯路。
一旦目标拟订,就要尽量与之保持一致,唯有整个团队形成合力才能最大化战斗力。
在具体执行层面,比如细化到每个迭代的具体任务时,要思考如何利用现有资源合理安排,还是以业务目标为优先,计划做的这个feature是不是与目标一致?对关键目标的达成有多大帮助?就是考验你何时Say Yes,何时Say No。然而这并不是要你拍脑袋,而是要根据自己的专业素养,综合考量权衡事情的重要程度与开发成本。尤其是要敢于Say No, 很多时候不做某件事,比瞎折腾一顿要更加重要,别总怕大家没活干,除了做feature, 有意义的事情还有很多,微信就是一个典型的例子,不难想象他们肯定拒绝过非常之多的花哨feature。
业务数据的跟踪与透明。产品的激活,留存率、活跃,评分,crash rate,各种feature的转化率等等,这些产品的关键指标,作为Tech Leader也要关心,不仅如此,还需要共享给团队全员,大家每天不停地做着一个又一个feature, 做完上线之后一个一个石沉大海,貌似跟我没关系,这种氛围很糟糕,自己做的东西受大家欢迎,成就感是很棒的。产品各项关键数据飙升,大家会跟打了鸡血一样。我听说一些团队直接把产品的关键指标放到电子屏幕墙上,挂在公司显要位置。然而因为一些你懂的原因,很多公司产品的关键数据是严格保密的,但我们仍然应该在可行范围内做到尽可能的公开透明。
团队
首先我觉得最重要的,是在条件允许的范围内,保证团队成员的质量,虽然常说一手烂牌也要能打好,但谁都想要两个王四个二吧。现实情况是,在大部分情况下团队成员都是已经决定好的,给我们选择的机会不多,但在补员的时候,还是有机会调整的,其实就是在说招聘,关于如何做好招聘话题很大,一个关键原则就是新来的不能在团队中位线以下,否则团队质量会逐渐下滑至失控,后面想要再做提升调整,耗费的精力会大得多。关于招聘我有个回答大家可以看看:
面试时,问哪些问题能试出一个 Android 应用开发者真正的水平? - 汤涛的回答团队成员一旦确定,团队建设的重点要放在如何提升大家的水平上,这不仅是每个人所期望的,也是一个Tech Leader的职责与担当,不能帮助大家提高姿势水平,也就是失职的Leader。如何做好这点,有几点建议:
1)首先要充分了解每个组员,包括大家的专业技能水平与性格特点。
2)针对每个人,要定期的1对1谈话,了解大家对自身、对团队的期望。
3)根据每个人自身的期望,以及你自己对他的了解,结合现有业务,给大家制定合理的目标,目标不宜太大或太小,跳起来刚好够得着的那种。目标的制定过程也是要与他单独沟通确定,尊重对方的想法,可以在定期绩效考评的时候做这些事情。
4)每隔一段时间的1对1谈话中,与之回顾之前目标的达成情况,对他的工作进行评价,提出表扬或改进建议。除了给每个人专门拟订的计划外,团队还应该有一些整体的方案用以提升水平,比如培训、技术分享、集体的代码评审会议。尤其是技术分享氛围的建设,应该是要重点关心的。
其他的关于明确职责,充分授权,团队沟通,团队协作,Team Building之类,@马天宇 已经提到过,我也不再赘述。我个人的观点是:团队里的每一个人,都应该同时具备很强的单兵作战与团队合作的能力,只要把人的姿势水平提升上去了,大家合作起来就会愉快很多,经过一定程度的磨合,很多团队管理过程中的问题,也就不是问题了。
技术
相信如果有机会成为Tech Leader, 在团队内部而言,技术水平应该是没问题的。关于技术可以再补充几点:
你的水平也许只是在团队内部还不错,在行业内如何呢?世界范围内呢?如果对技术还有追求,不要停下追求技术进步的脚步。
作为一线Leader, 不仅仅要做好团队管理工作,代码还是要坚持写,时间安排上,至少要做到对半开,不然失去了对技术细节的了解,很多工作也就不好开展。
时刻牢记团队的输出最大化才是最终目标,而并非事事亲力亲为,总担心别人做不好,容易陷入微管理的困局,这是很多新晋Leader常犯的错误,要相信大家能做好,及时review工作,必要时给予帮助就好。
思考如何提升开发团队的工作效率,积极引入业内领先的技术方案或开发工具,保持团队技术水平不要落后于时代。
关键的技术问题或技术决策上,要积极发挥作用,面对技术债务,也不要退缩保守,鼓励大家积极改进代码质量,要有担当。
最后想说,关于这个问题,大家心里其实早就有一个简单的答案:
能为大家争取利益(有钱途),跟着你能成长、能做成事(有前途)。
无论哪个团队都想成为拥有超强技术实力的团队,而建设一支这样的团队也是每一位组长、技术主管、架构师的责任之一,要问起怎样建设,会得到很多种回答,有人说涨工资,有人说搞绩效,有人说多聚餐,有人说去旅游……那么哪种方式能低成本高收益的提升团队的技术能力呢?
当然,答案肯定不是唯一的,这个答案既会随着企业文化变化,也会随着管理者风格变化,但是我认为,提升团队的技术实力首选的还是进行技术培训。
显然,技术实力的提升要靠团队成员的技术能力来保障,因此提升每位成员的技术实力就尤为重要。在本文中我们暂且不讨论技术培训的重要性,而是把关注点放在如何进行技术培训上。
一.培训目标
在一个理想的软件团队中,技术实力可以大致分为三种:一种是基础技术能力,这种能力可以认为是一个初级软件工程师应该具备的知识和技能;第二种是中级技术能力,可以认为是一定的分析设计能力;第三种是高级技术能力,可以认为承担软件全局的设计或架构的能力。
比如一个手机软件团队,通常大部分人在从事Android、iOS等具体平台下的编码工作,这部分工程师熟悉某平台的API接口、平台特性,可以完成对给定类的代码实现,也具有一定的网络、UI等知识,可以实现指定的功能,这可以被认为是一种基础技术能力。还有一小部分人承担了更复杂的更大粒度的模块开发,可以对复杂功能进行设计工作,并分解为更小的单元,可以指导其他成员的开发工作,可以看到代码中不合适的地方并进行重构,这可以被认为是中级技术能力。另有一位或几位负责软件全局的结构设计、质量保证等工作,对软件的质量属性有保证能力,这可以被认为是高级技能。
通过这样的分解,就可以进行针对性的培训目标设定了。如果软件中的低级bug较多,可用性降低,可能是在基础技能上需要加强,可以考虑由经验丰富的开发人员进行经验分享,或者针对特点问题进行重点剖析,从而提升基础技能。如果复杂功能的实现不够顺畅,可靠性降低,灵活性降低,可以寻找是不是功能的设计上不合适、类结构上不合理,耦合度是否太高,并针对性的进行中级技能的培训。当然,如果想提高架构等能力,就可以进行高级技能培训。
二.培训周期
在培训目标中说了很多,可见其太重要了,目标不对或没有目标的培训只是在浪费时间。在明确了培训目的以后,需要设定培训频度。这个就相对容易进行了,对基础技能的培训频度可以高一些,比如每周一次,对中级技能的培训频度可以略低一些,比如两周一次甚至更长,对高级的当然可以周期更长。另外也不必拘泥于固定周期,但固定周期往往能让被培训成形成习惯,所以还是建议这样进行。
三.培训内容
培训内容的选择就要根据自己的实际情况了,举个例子,比如进行Android平台开发的团队,可以进行Android平台本身的培训,也可以进行Java语言能力、OO设计、重构、设计模式等培训,这些一定要具体团队具体分析,要有针对性而不是盲目从众,否则会有费力不讨好的嫌疑,造成收效不高的结果。
四.培训讲师
培训师的选择最好是在内部产生,这样设计的内容更有针对性,甚至可以直接通过项目代码进行实际演示,往往事半功倍。这是重点的是内容设计,不仅要难易适中,更重要的还是针对性,不务虚,不泛泛。对有兴趣为大家分享一些知识的成员,也可以安排时间来作讲师,形成良好的交流氛围。记住,这是内部培训,形式不那么重要,重要的是高效的知识传达。即使请外部的培训师,也一定要在内容设置上把好关。
五.参加人员
参加培训的人员既可以是指定的,也可以是成员自愿的,当然也可以二者结合。重要的是不要遗漏目标受众。对于个别不愿参加的人员,可以通过建议等方式邀请参加。在这个过程中,一方面可以发现成员的技术取向,另一方面可以补充某些成员薄弱的知识环节,有利于知识体系的完整。
六.培训反馈
培训结果反馈是最容易忽视的一环,往往培训完了就结束了,但恰恰这才是最重要的一步。结果反馈不是随便填一张调查表,而是针对每位参加培训的成员进行回访,进行一对一的谈心和效果反馈,征求意见和建议,指导他在实际工作中的知识运用,并寻找对后续内容的期望。这种反馈未必每次都进行,但一定要进行,并且通过观察长期的bug数量等指标来评估培训的成果。
相信通过以上这些描述,我大体上能展示出技术培训的主要环节和实施方法,这些内容可以根据企业或团队特点进行灵活处理,但不管怎样,作为团队建设的重要环节,培训是低成本高收益的事,也是各团队负责人或技术负责人的一项责任,同时是成员取得团队认同和技术能力提升的重要方式,需要长期坚持,在潜移默化中团队的已经具有了超强的技术实力了。
TL Cop的更多相关文章
-
TL认证和运作经典案例评选
评选背景: 1.TL能力模型推出一年多时间以来,各地区.部门的TL认证和运作如火如荼,中开社上已有部分案例输出: 2.有部门在认证和运作上希望能借鉴优秀案例的经验,并且更希望能得到本地其他部门的帮扶: ...
-
Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP
Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP 1.1. Sp oop>>COP ,AOP ,SOP1 1.2. Sp oop 结构化方法SP(Stru ...
-
Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系
Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...
-
TL(简单)
TL time limit per test 2 seconds memory limit per test 256 megabytes input standard input output sta ...
-
soa vs cop
soa强调分层:底层为高层提供服务: cop强调分块:有明确的职责和服务提供接口,为外部提供服务. SOA 原则非常强调将服务使用者和服务提供者分离开来,关于此类分离实际的含义,有很多不正式但非常有用 ...
-
鼠标到哪tl到哪
$(".navcon a").mouseover(function(){ var that = $(this), index = that.index(); that.addCla ...
-
双足步行机器人的ZMP与CoP检测
静态步行与动态步行 机器人步态分为静态步行和动态步行.当机器人做静态步行运动时,身体的各个部分运动速度很小,机器人的整体稳定性较易控制.静态步行稳定性采用机器人的重心地面投影点(Center of G ...
-
aix操作系统的版本中TL SP 含义
AIX 分为四个主要的操作系统级别:版本.发行版.技术级 (TL) 和服务包 (SP).版本和发行版通常指的是 AIX 的名称,例如AIX 7.1.TL 是包含重大更新的操作系统的发行版,而 SP 包 ...
-
面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)
http://blog.csdn.net/hjf19790118/article/details/6919265 1.什么是面向对象编程(Object-Oriented Programming)? 面 ...
随机推荐
-
Hibernate核心技术简介
Hibernate核心技术简介 1.Hibernate映射文件开发 Hibernate映射文件就是项目中*.hbm.xml文件,其主要是完成各元素的配置,包括根元素.类元素.定义主键.设置主键 ...
-
python基础之元组、文件操作、编码、函数、变量
1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...
-
OS X 10.10.5编译Android5.1.1源码
--------------------------------------------------写在前面---------------------------------------------- ...
-
html中标签的含义及作用
链接:http://www.w3chtml.com/html/tag/div.html
-
微信端应用 ionic实现texarea 自适应高度
最近公司项目,做微信端用到texarea 需要实现自适应高度的功能 当然自适应高度的方法很多网上找一大片,最直接的方式就是在使用到texarea的controller中添加js代码事件来实现,这中方式 ...
-
MemPool
腾讯笔试题,设计内存池,alloc和free都是O(1). 和LRUCache类似,这里用了一个list表示可用的空间,用一个map来记录这块内存是否已分配,这样free的时候才可能O(1). cla ...
-
Apache HttpClient使用之阻塞陷阱
前言: 之前做个一个数据同步的定时程序. 其内部集成了某电商的SDK(简单的Apache Httpclient4.x封装)+Spring Quartz来实现. 原本以为简单轻松, 喝杯咖啡就高枕无忧的 ...
-
如何在Ubuntu 14.04中使用Samba共享文件
Linux 下的文件共享利器 Samba 想必大家已经非常熟悉了,今天我们介绍下如何在Ubuntu 14.04中使用 Samba 共享网络文件.打印机和其它公共资源. 1.安装 Samba 和图形配置 ...
-
oracle转换数字到格式化字符串
问题描写叙述 oracle假设存储number(20,2)数据,0数据库中为0.00,2.1数据库中为2.10,3.88存储为3.88, 假设直接从数据库中取出相应显示为: 0 2.1 3.88 保留 ...
-
Linux正则表达式语法
基本组成部分: 正则表达式的基本组成部分. 正则表达式 描述 示例 \ 转义符,将特殊字符进行转义,忽略其特殊意义 a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义 ^ 匹配行首,awk中,^ ...