英文原文:How to be a Great Tech Manager 译者:@Lex Lian 译文链接
管理一支技术团队可能是世界上最难的事情之一。如果你是一个经理,你需要和很多方面的专家合作,和你的上级协调产品需求,和负责协调产品交付件的同级合作,和将产品功能转化成技术需求的同级合作,带领直接汇报给你的团队等等。在某些糟心的时刻,你需要面对的是会把患有自闭症的送报小孩(原文,阿斯伯格综合症,爱因斯坦曾患有此症)赶走的同事。
我曾经担任过开发经理、开发总监的工作,也曾经是一个开发人员,在过去的几十年中,在管理技术团队这件事情的两边,我经历过许多非常不一样的“管理风格”。从技术团队的角度出发,就成为一个卓越的技术经理必备的特质,我会给出一些建议。
首先,技术人员的工作环境始终飞速变化,我觉得如何成为一个卓越的技术经理是一个非常重要的话题。 在过去的二十年中,我们可以看到软件开发的模式有发生了巨大的变革。在大多数企业中,软件开发的周期变得短,而且管理层因为每个季度盈利的目标而对产品开发施加更大的压力。对于许多初创企业,都需要在第一时间发布新的软件产品。这些情况都导致了在软件开发中我们会一直使用各种变更管理的方法。(参考 PMP 传统项目管理或 Agile 方法中的变更管理 Change Management)
在我还是一个开发人员的时候,我明白了第一个道理。我的老板当时问我,你知道你的工作对公司有哪些贡献吗?
我:『额…… 我吗,我就是在写代码。』
老板:『好吧,你是在写代码。让我换一种方式来问你,你觉得你写的每一行代码会给公司带来多少利润呢?』
我:『(脑瓜爆炸中……)噢,不是?我觉得,我不能……我从来没有…… 额……你在说啥?』
我的老板事后向我解释,公司的想法是,每一个开发人员都应当知道自己对于公司的贡献。 当然这不是在讨论每一行代码能产生多少贡献,更主要的目的是,你知道你的工作会对公司的利润产生影响。 你的工作会影响你所开发的产品, 在其生命周期中,这个产品将帮助公司赚钱或是省钱。如果你能得到这些盈利或是节省的数字,除上公司的投入(项目上开发人员的工资收入), 就可以知道你所在项目的大致收益情况。听完这些话后,我一下子茅塞顿开。
这件事情的意义在于,在真实的商业世界里,我在这里引用梳着黑色大背头的 Michael Douglas 关于贪婪带来的好处的说法:对于公司来说,所有的事情都是赚钱相关的。(详见 Michael Douglas 参演的电影 Wall Street)。然而,作为开发人员,我们专注于开发这一艺术性的工作上。我们创造出的代码,将比以前更快、更好、更优雅地解决问题,完成任务。我们就像画家一般在画布上尽情作画,直到完美,从无到有地创造,开发出令人兴奋、大呼碉堡的软件, 这和利润有半毛钱关系?
技术经理们就像“动物园”的看门人一样(想到程序猿们……)。他们应当要能够使用我们的语言,体谅我们付出的劳动,理解我们的问题,并且和我们一同分享胜利的喜悦。同时,当他们没有在做这些事情的时候,他们给予我们反馈,给予我们产品的需求,代表我们和他们的上级和同级的同事一起制定项目预算,确认开发的费用和团队人数。当某一个表面光鲜的销售姐姐因为要完成她的月度销售指标,将没有在当前开发计划中的产品功能承诺给了客户时,他们会帮助我们去解释为什么这样的情况会导致产品的发布日期延后一周。
经理们是公司机器的润滑油,是公司军队中的军士长。他们知道如何把事情做完,何时要紧,何时要松。简单的说,作为开发人员,你工作上成功的概率基本上正比于你老板的职业技能和工作的有效性。在我一生的职场经历中,我变得珍惜和感谢优秀的经理人,我知道真正优秀的经理人就像能中奖的彩票一样稀少。读了下面的文章,你就可以知道你有没有中了『好经理人』彩票。
1. 优秀的经理要联系团队和个人 Managers Connect
2. 优秀的经理要管理任务 Managers Manage the Task
3. 优秀的经理要善于管理 Managers Manage
一个卓越的经理是善于管理时间、任务、需求、规范、资源和人员的经理。 他会拥有看到整片树林的能力, 但同是他相信作为开发人员的你能够照顾好整片树林中的树木。 他会通过各种可能的方法关注你的工作量, 了解你的进展情况。 毕竟卓越的经理应当会使用各种必要的管理方法和工具来跟踪团队的工作和进展。这意味着你的团队应当会使用一些工具来跟踪和汇报每天的开发任务。这类工具可以是简单的缺陷跟踪系统(如 Mantis 或 Bugzilla), 或者是完整的基于敏捷开发流程设计的系统(如 Greehopper)。 不管怎样,这些工具会让你的老板能够以一种非主动的方式管理项目。同时,这类工具也能够提醒你老板在什么时间应该积极地介入到项目中来。
一个卓越的经理不会以“微管理”的方式来管理你的工作(除非你在工作上表现实在很差),而且不会经常每天通过各种可能的方式来骚扰你,来获得你最新的工作进展情况。 他知道在你解决困难问题的时候,你的大脑需要一个不被打扰的环境,任何打扰只会拖延解决问题的时间。他会知道你什么时候需要这样的环境来完成工作。
如果一个卓越的经理不知道为什么你对一项工作的估测时间增大之时,他会需要你提供时间估测的具体分析,并和你一起探讨。 如果需要对你的时间估测进行改动的话, 他会征得你的同意,而不是强行地进行更改。 另外,当计划外的工作被添加到你的计划中的时候,他会重新安排计划,以确保你能有足够的时间来完成这些工作。
一个卓越的经理会为你提供你所需要的所有资源,以确保你能够在规定的时间内完成工作。 但是,如果你需要的新硬件、软件、或是对工作环境的改变超出了目前项目允许的范围,只要你证明这些变化的确能够提高你的工作效率,他会同意的。 作为一个技术团队的一员, 你的职责是理解投资回报(Return of Investment, ROI)的基本概念。这样的话, 你就能像你的老板描述问什么项目计划外的支出能够帮助公司获得更多的回报。
4. 优秀的经理要尊重他人 Managers Respect
一个卓越的经理会尊重他的团队的专业技能、 时间安排以及各种诉求。 他会给团队成员提供各种需要的工具来帮助他们在规定的时间内完成事先承诺的工作。 他会尊重你的个人生活和职业发展。当员工需要处理办公室里或日常生活中碰到的各种问题时,他会灵活安排员工的工作。对一个卓越的经理来说,只要团队的工作在规定的时间内完成,他不会要求所有人严格按照进度去工作, 他也不会过度关注每一项工作何时完成。 卓越的经理人知道在特殊状况下团队需要额外的时间来完成一项工作,但他们知道,当团队夜以继日的在每天晚上、周末、假日加班的时候, 这是例外,并不是常态。一个卓越的经理理解当团队一周工作 60 个小时以上的时候, 这是因为团队想这么干,并不是被逼的。 如果员工是被迫如此加班的话,他会意识到这是他自己在开发任务的时间管理上有问题,而不是因为团队的能力问题造成的。
5. 优秀的经理要代表团队 Manager’s Represent
我完全了解一个经理的职责远远超出了他所带领的团队。我试图从一个团队成员,而不是一个一线经理,或是一个总监的角度来写这篇文章。对程序员来说,在基层工作的一个好处是当你不知道你的上级在做什么的时候,你可以随便批评他们。相信我,一个一线的技术经理每天的工作包含了很多和管理团队无关的事情。如果你觉得你老板的工作很容易,或者你会比他们做得更好,为什么不去试一下做你老板在做的事情?我觉得你是不会想要他们的工作或是相应而来的压力的。
如果一个团队有幸能够得到一位卓越的技术经理,这支团队应当积极地保护甚至培养和他们老板之间的关系。通常,开发团队可以使用他们老板不知道的方法,通过额外的付出和努力来帮助他们的老板成功。一个卓越的经理会关心他的团队,同样的,一支卓越的团队也会如此地关心他们的老板。长此以往,团队和经理成为了有机的一体, 像剑圣一般坚不可摧,战无不胜,成为组织中其他团队的标杆。
在卓越团队中的每一个人,都应该反映出这支团队的经理的技能、态度和道德水准。