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