今天我们要说的技术型管理人员,有的可能就是一个团队的技术负责人、Team leader,或者技术总监等。我们在此统称为程序设计经理,表示是在技术工作中需要承担管理工作。也可以是有志于从技术转向管理的程序员们。
但管理工作从来就不容易,更何况是管理一支软件开发团队。我们见过太多因为管理不到位而造成的失控局面:项目延期、功能不满足需求、产品质量差、人员轻易流失……
所有这些问题都是项目成功的拦路虎,但这同时也是程序设计经理的机会。只要能解决好问题,培育出优秀的团队,就能打造出卓越产品。

下面让我们从如何组建一支团队说起。
组建团队
千里之行,始于足下。要交付一个完整的产品,先要有完整的团队。作为一名技术型管理者,首先就要根据产品的技术需求去匹配人力资源,就是通常所说的找人。
如果是在有实力的公司之中,将用人需要提给HR就好。在一些初创型企业中,可能程序设计经理还要承担起去招揽人才的责任。
从技术栈来说,程序员大致可分为服务端开发、客户端开发、数据库开发,以及前端开发等。从人才层次来说,则可分为系统架构师、高级研发、初中级研发等。
程序设计经理们对人力的技术要求一般都会有准确把握,毕竟自己就是干技术出身的,做什么样的事需要什么样的人,心里还是有底的。但对于人才梯队的建设,则会陷入到一个误区中,即过于强调要找来了就能上手的人。
现在很多用人单位常发出一个感慨,就是要找人不难,要找到合适的人则太难了。这固然跟互联网企业对业务快速发展的需求有关,情愿花大价钱去找猎头,去挖别家公司的墙脚。
这在投资热潮带起的泡沫中尤其明显,许多因此而尝到甜头的程序员误以为这就是自己的真实身价。但在泡沫破裂,热度消退之后,才发现整个行业都不复存在了。再想要找到同等待遇的机会,也很渺茫了。
所以,建设有竞争性的人才梯队,才是一个技术团队良性健康发展的前提。有层次,也意味着有流动性,这对于梯队各级的人才来说,都会具有向上谋求发展的动力。
当然,有了这个意识,还是要落实到具体行动中。招人第一步就是要能够高效阅读简历,从字里行间中提取出关键信息,判断人才是否值得进一步交流,以推进到面试环节。
面试考验的是程序设计经理的交流沟通能力。程序员大多给人的印象就是不善言辞,这话难说绝对,但喜欢沉浸于独自思考并通过编程解决问题的习惯,也确实适合不怎么爱说话的人。
不过程序设计经理要想获得转型的成功,不妨将沟通能力视作自己的软技能拓展方向。一旦有了决心,其实有些困难并不会如想象中的那么可怕。
打开了沟通的桥梁之后,程序设计经理还要具备识人的能力。这一点更加不容易,因为在面试的那几十分钟到两三个小时里,要对一个人作出准确无误的判断,谁也不敢打保票说不会看走眼。
技术上的事还好说,在性格、认知,或者是三观上,这都是没法下论断的事。那么程序设计经理就还需要培养自己的同理心、细致的观察力。拥有一双慧眼,为团队招到最合适的人才。
建设团队文化
对于任何一家互联网公司来说,在管理方面的一大挑战就是如何将人留住。而程序设计经理,则是直面这一挑战的首当其冲者。
总会听到管理者们抱怨,对团队里的资深程序员得好好哄着,生怕让竞争对手给挖走了;对初中级程序员又得小心防着,别好不容易培养到能上手干活了,就另寻高枝了。
如果说单纯提高待遇,那谁也耗不起,即使是有实力的大厂也不会这么做。大厂对人才的吸引力在于其完备的技术体系,以及能够参与在市场上有竞争力的业务。而初创型企业则给人才更多的发挥空间,以及对于未来个人财富增长的想象。
在不同规模的企业里,程序设计经理都可以结合公司的优势去鼓舞士气,把人留住。但这只是在公司战略层面上,团队每天还要面对进度压力,要解决一个又一个问题的。光靠打鸡血,也许一时有用,但长期效果就是未知了。
所以程序设计经理要做好的一件事,就是建设氛围良好的团队文化。说到团队建设,相信大家对“团建”有两种认知,要么是占用休息日加班洗脑;要么就是吃喝玩乐做团体游戏。不少公司将团建活动当成了目标,投入的成本不少,效果却不一定好。
其实团建活动本身的初衷是很好的,就是促进团队的配合协作意识。但这个手段不能脱离团队的文化底蕴来进行。程序设计经理一个重要职责就是塑造团队的文化特质。
我们总会津津乐道于各个大厂的文化基因,例如谷歌的工程师文化、苹果的科技人文文化、腾讯的产品文化等。可以看出来,在企业文化这件事上,没有谁好谁坏一说,都包含了各自获得成功的生存哲学。
程序设计经理应当充分理解所在公司的企业文化,与团队成员们进行充分地沟通,让大家在理念与认知上能够与公司文化保持一致。从而形成有归属感的团队协作氛围,人都是愿意被认同并且享受成就感的。
你说一个月多那么些钱真的就那么地重要吗?也许未必,当心灵无法融合在一起,一个人执意要离开的时候,他说出来的的理由一定不是他内心深处的真实想法。只是不想让这分别太难堪,毕竟还曾共事一场吧。
所以稻盛和夫说他招人的理念是德比才更重要。这个德可以理解为诚实、正直的品德,更可以理解为共同的价值观与文化认同。这对于构建团队文化来说是最为有利的,能力一时不足可以通过团队的力量带动前进,最终每名成员都积极主动地发挥作用,整个团队实现整体大于个体之和的战斗力。
留人先要留心。把团队文化建设好,是程序设计经理万万不能忽视的一项工作。
向上管理:跟老板的合作
对于初转型的程序设计经理来说,可能会十分怀念单纯的程序员时期。虽然程序员的工作不见得多快乐,但只要明确了需求,那就是由自己负责去实现的事了。可以说,只要管好自己就行了。
但程序设计经理的职责就不限于此了,他还需要面对自己的老板。任何一家企业都会有自己的组织管理结构,无论是严谨的金字塔式,还是赋能式的扁平化结构,都需要管理者推动公司运转。
这里又要说到程序员的群体性格。程序员们对技术崇尚,因为这是自己的安身立命之本,看得多么重要也无可厚非。一家获得成功的公司,肯定是在技术上有重大投入,但不能因此说公司是只靠技术好就行了。我们也看到不少技术上先进,但在市场上没有生存下来的例子。
所以程序员一旦转型为程序设计经理,就要对公司的业务有透彻的了解。直白地说,就是要能明白公司是如何在市场上赚钱的。那么,跟自己的老板合作就十分重要了。
如果说老板是业务型管理者,程序设计经理会很容易陷入一个误区,就是认为老板不懂技术,总是会试图从技术角度去说服老板。这里的问题就在于,程序设计经理会将技术置于业务之上。
从老板的角度来说,他要思考的是业务要如何在市场上获得收益,并以此来衡量能够给到技术的开发周期和人力财力资源。程序设计经理为了团队争取更多的资源,则必定会倾向于在技术层面强调其重要性与开发难度。
这往往就成了一种博弈,老板不会完全满足程序设计经理提出的要求,而后者则会过分夸大技术的作用与实现复杂度。在这种相互猜疑的状态下,业务的重要性反而下降了。从长远来看,这对大家都是不利的。
要打破这种负向循环,程序设计经理要更具备更宽广的视野,能够从业务层面去理解技术所起的作用。一个很好的方法,就是和老板交流的时候可以多倾听。
通过倾听,首先可以全面地了解业务特点,从而为思考技术实现方案打下了基础;其次就是和老板建立了良好的沟通渠道,大家有了积极正向的交流,在讨论到关键的资源分配问题时,就能取得双方都达成一致的满意结果 。
所以要做好向上管理,并不是想方设法地去跟老板要资源要时间。而是秉承合作的态度,立足于公司的业务发展,将最大化创造价值作为目标,以此取得公司、老板以及团队的多赢结果。
向下管理:激活每一个人
两千五百年前,孔圣人就曾说过“有教无类”。即承认个体间的差异,在对人的教育上应该因材施教。而在管理工作中,也已经从机械的命令式管理,向着调动个人主动性的赋能式管理演化。
软件开发更有其特殊性,因为这是一项智力密集型的工作。个体之间的差异就为管理工作带来了不小的挑战。在软件行业早期,技术出众的个人可以靠着做出爆款应用程序,从而成为人人敬仰的数字英雄。但在当今的移动互联网时代,单枪匹马想要成功已经不太可能了。
那么,如何将一群性格、习惯各异的人整合起来,并实现大于n的产能,就成为程序设计经理要面对的挑战。
从技术上来说,程序设计经理都能够很好地与团队交流,毕竟本身就是从程序员转型过来的。但是在管理工作中,程序设计经理有可能会忽视团队成员间的能力与性格差异,从而导致结果与预期出现偏差。
一种典型情况,就是程序设计经理将任务拆分到个人头上时,往往是锚定在自己的水平上给出工期。这样对团队成员会造成不小的压力,而且在技术上程序设计经理又拥有相当的话语权,团队成员如果要表达困难,那就意味着承认自己水平不足。
这就会出现开发工作中最常见的延期现象,大家每天都汇报说自己的工作是正常推进,但到了要验收的前几天,却又发现问题重重。程序设计经理这时候总会费解地反问:你们为什么不早说?
所以,意识到个体存在差异,并且将积极地交流视为开发管理工作的一部分,这可以对合理分配任务、评估工期产生正面作用。起码程序设计经理可以掌握到项目的真实进展,遇到问题也可以及时调整。
程序设计经理会出现的另一个问题,就是采用简单粗暴的高压管理方式。产生这种现象的原因,一是确实因为老板没有给出合理的工期; 二是程序设计经理对团队成员信任不足,却又办法不多。
对于第一个问题,这需要程序设计经理做好向上管理,做好沟通工作。明确地告知老板后果是什么,然后争取延长工期或者放弃非核心功能,来达到一个自己可以掌控的目标。
第二个问题,则需要程序设计经理自己反思,并且主动了解自己的团队成员。因为高压式管理下,短期内也许能看到一些效果。但时间长了谁也不愿意过着压力重重的生活,团队就会面临人员高流动性的困扰,其实这样付出的成本只会更高。程序设计经理也会在这样劳心劳神的管理方式中精疲力尽。
马斯洛五层需求原理告诉我们,人在解决了生存、温饱的问题后,就会追求富裕和获得尊重。那么与其拿着鞭子在后面赶,不如针对个体采用有效的激励手段,把每个人都激活,从而形成团队合力。
这里不能把激励简单地理解为给钱,那只是一方面,而且能产生的时效也是短暂的。能真正激发人内心力量的,还是成就感与荣誉感。
程序设计经理在管理中,需要结合每位成员的实际情况,通过口头表扬、邮件通报嘉奖、绩效评定等方式,让所有团队成员能够直观感受到自己在项目中作出的贡献,以及公司因此而产生了多大的效益。
这样,每个人都会主动出击,并且帮助自己身边的人,使得整个团队拥有超强的战斗力。
开发管理:最重要的是质量
程序员转型成为程序设计经理,打造出卓越团队,自然是要交付一流成果的。要达到目标,程序设计经理还要做好软件交付各个阶段的工作。
在开发管理上,业界已经有不少理论和方法,且都有成功案例。例如重量级的RUP(统一软件开发过程),强调灵活应变的敏捷式开发Scrum等。这些方法就像工具一样,无所谓好坏,只在于使用者会发挥出多大的效力来。
程序设计经理要避免的一个误区就是唯方法论。即只从书中看到某个方法有多少优点,就奉之为圭臬,却脱离实际情况去生搬硬套,最后只落得劳命伤财的结果。
所以实践开发管理,要适合公司业务发展,并结合团队实际情况进行。在实践中团队需要不断进行调整,找到自己的前进节奏。
当然,团队对开发管理方法达成了一致,并不意味着一定能交付成功的产品。程序设计经理还要再将各个阶段的事情做好。这主要包括需求的分析与确认、把控开发过程的输出质量,以及最终交付物的完备与目标达成度。
程序设计经理要想避免带领团队走弯路,对于需求的把握就非常重要。这需要程序设计经理与客户有着充分的沟通,具有良好的同理心则会事半功倍。因为这让程序设计经理能够真正站在客户的角度去思考,而不会犯下先入为主的谬误。
在开发过程中,程序设计经理要坚持的一个原则,就是无论何时都要保证质量优先。优秀的质量需要管理工作落实到每一个细节中。例如代码风格是否严格遵守了规范、绝大部分功能是否都被单元测试覆盖,以及程序性能是否经过了充分的压测考验。
但我们都知道在业务快速变化的互联网行业中,要保持一个稳定的节奏是不容易的。总是会有突发的变化,如果屈从于外部压力以牺牲质量为代价,那么最后的结果一定不会理想。程序设计经理就要在时间和质量之间选择最佳平衡点。
交付产品,并不是程序员在开发和测试工作全部完成之后一次性交付完事。这是一个持续的过程,在每一个功能阶段完成之后,程序设计经理都要向客户交付一次。这样不仅能根据客户的反馈去及时调整,而且还保证产品贴合了需求。
结语
程序设计经理的职责是组建团队、构建优良的团队文化,同时管理好开发过程的每个阶段,最终交付卓越的产品。这要求程序设计经理以技术能力为本,不断学习提升自己的沟通技巧和管理能力。
程序员的转型之路想要一蹴而就显然并不容易,除了耐心和学习的热情,能有成功前辈的指点势必会如虎添翼。Mickey W.Mantle和Ron Lichty,就是两位乐于分享转型经验的行业老兵。
他们有着超过30年的软件开发管理经验,并且曾经服务于多家知名高科技企业。这二位大师没有藏私,将其智慧与经验浓缩在《告别失控:软件开发团队管理必读》一书中。
这本书里除了满满的干货,还包含了许多实用管理工具和方法。我相信,对任何一位谋求转型的程序员来说,一定可以从这本书里找到自己的成功之路。