我在 2018 年加入了一家创业公司并担任开发领导职位,一年半后我写了这篇文章,当时的题目是 “从工程师到管理者的转变”,但现在我决定把标题改一下以使其更清晰。现在,我在数字化机构做开发管理,帮助那些初创公司启动他们的开发,并为技术经理和创业公司创始人撰写指南。
我想分享一下我成为 CTO 的经验。这篇文章主要涉及技术方面的管理,面向 CTO、工程副总裁、部门主管等等。
在每个软件工程师的职业生涯中,都会有这样一个时刻,他们需要决定是要继续从事技术领域,还是转向管理领域。两种选择各有优缺点,这取决于你的性格、你想要的生活方式以及你是否能更好地平衡工作与生活。
一年前,我成为了一家小公司(不到 40 名员工)的 CTO,这个转变让我比以往任何时候都繁忙。突然之间,我需要做的事情一个待办事项清单已经不够写了,而且随着时间的推移,这个清单不断增长。经过一整年的历练,我终于理顺了我的工作,我想和大家分享一些我认为很重要的东西,如果当时我知道这些,我想我会比较轻松。
#01
在同一公司晋升到管理职位
如果你从同一团队转向成为他们的经理,你需要确保他们首先尊重你作为开发者的身份。
这是很重要的,否则,你的队友将会质疑你的管理,你和团队之间会存在不信任感。还记得你的经理曾经建议过一些奇怪的事情来提高团队的绩效吗?你获得的尊重越多,与那些和你想法不同的人之间的摩擦就越少。
你和团队的友谊将因为你成为他们的老板而受到影响。
在你成为团队领导之后,与队友之间的友谊会受到影响。如果你想在工作之外继续保持朋友关系,最好把工作谈话留在办公室。这个问题有几个方面。首先,他们会认为,如果你的朋友支持你,他这样做并不是因为客观上合理,而是因为友谊。
另一个问题是,总会有一段时间,你不得不与某个朋友进行不愉快的交谈,无论你多么支持那个朋友,但每个人都会犯错。如果你不进行这种不愉快的对话,那么对其他人来说是不公平的。
#02
丢掉一些习惯
凡事亲力亲为
当然,你可以做得更好,更快。但你的时间是有限的,需要优先考虑其他更为重要的任务。学会授权,学会管理你授权的人即可。
假设他们会像你一样及时完成工作。只有在这个人不能完成任务时,你才应该谈论你对标准的期望,你希望任务多快完成,以及完成质量。
也有可能一旦你开始自己做所有的事情,人们就会开始期待你下次做同样的事情。
领导者不要成为瓶颈。如果某个问题不是总统或你自己的决策,就应该委派给其他人负责。将责任下放并分配给合适的人员,找出问题所在,增加结构并进行委派。通常所面临的压力是相反的,即想要掌控所有事情,但领导者应该抵制这种压力,优先进行委派。
——Donald Rumsfeld(前美国国防部长)
渴望成为万事通
你不可能知道所有的答案,当你回答某些奇怪的技术问题时,回答 “我不知道” 是可以的。重要的是,你能将提问的人与知道答案的人联系起来。或者至少让他朝着解决的方向前进。
我们中没有一个人比大家都聪明。
闭门工作
很遗憾,你将不能再独自工作了。从获取任务到完成任务再到提交审核,整个工作流程都需要人与人之间交互。(尽管你需要为你的开发者维护一个健康的工作环境。)
你需要提高的基本素质是沟通能力。你需要与你的开发者大量交流。你需要与你的主管大量交谈。你会在一天之内接到许多电话和邮件。这就是现实,无法避免。
除非你为你的开发者维护一个健康的工作环境,否则人们将开始直接找他们并打扰他们的工作。这些干扰将使你的团队不开心。因此,要为他们做好沟通。
只关注自己的工作
“我的模块可以工作,所以不是我的问题” 或类似的话现在应该在你的词汇表中禁止出现。你现在的责任是确保业务的成功,所以你不能说你做好了自己的部分,其他一切都不重要。其他事情也很重要。
如果其他部门导致你的团队 / 部门速度减慢,这就是你的问题了。如果公司外部出现了阻碍,例如第三方供应商的问题 —— 你也需要解决这个问题。要么将其委派给其他人,要么自己解决问题,但现在不应该有 “我们的工作 / 他们的工作” 的思维。
#03
改善一些习惯
沟通
在这里我要再次强调这一点,因为这非常重要。你的沟通量将增加十倍。你需要招聘人员。你将不得不与其他人交谈,让他们更有效率,讨论他们的问题等。任何管理职位都需要这种软技能。
沟通艺术是领导语言。
压力管理
如果你认为有无法修复的 bug 或在冲刺期间无法完成足够的任务时已经有了压力,请再想一想。现在你将成为你的开发人员的保护伞,所以所有对你的团队不利的事情都将由你来承担。有趣的是,一切积极的事情都会顺着你的方向发展,所以这一点很重要。
会有多个利益相关者向你施压,并认为他们想要的东西是最重要的。而不是有一个经理告诉你你需要更快地工作,会有很多人想从你那里得到不同的东西,而且要快。
你需要学习如何处理压力,个人建议 —— 比如在周末做一些冥想,运动,远离电子产品。
注意自己的身体,照顾好自己,这将有助于你应对领导压力。
决策能力
从现在开始,你所做的每个决定都可能关系到你的整个团队和整个公司。你需要权衡利弊。决策通常包含一些权衡。例如,重构代码的某些部分是当前稳定性和未来可维护性之间的权衡。将一些单体架构重写为一堆微服务通常需要在可伸缩性、开发成本、复杂性、性能和维护之间进行权衡。
领导者通常负责做出具有挑战性的决定,比如是否从头重写服务,是否保留一名员工,还是让他们离开。
学习能力和适应新事物的能力
市场上不断出现新的东西,新的编程方法。保持开放并尽可能吸收更多的信息以保持领先是必要的。
身为管理者,并不意味着你需要停止观看 Coursera 视频或在 Udemy 学习关于分布式系统的课程。对于你作为决策者来说,拥有广泛的知识是至关重要的。唯一实现这一点的方法是永远不要停止学习。
承认自己也会犯错误
谁都不愿意被人说不对,但如果你手下的人比你聪明,那么你可能会多次经历这种感觉。被证明是错的也没关系。你错了意味着建议的解决方案比你的更好,最终对公司更好。请不要对与你争吵的人怀恨在心,因为这会降低他们将来与你讨论的欲望。只有在争论中才能找到最优解。
关心小事情
如果你是部门主管,你将需要执行标准,关心文档、工作流程、技术债务等。
没有多少开发人员喜欢编写测试 —— 现在你有责任确保所有 “保姆需要做的事” 都完成了。
#04
担任管理职务的好处
由于你处于一个需要不断沟通的位置,你会遇到很多聪明的人。这将给你的专业领域的社交网络带来提升。
你影响着公司的发展方向
你现在是公司驱动力的一部分,你可以决定,或者至少对战略的某些部分进行投票。推动技术愿景是一种非常充实的感觉,公司越小,你的影响力就越大。但请记住,伴随着巨大的权力而来的是巨大的责任。
经验
这是一个学习新事物的绝佳机会,这是你以前无法想象的。作为软件开发人员,我们经常专注于单个 bug 或某个功能的一部分,而没有扩展我们的视野(在工作时间,我们仍然可以在周末用新技术构建一些业余项目)。但是从开发转换到管理是一个全新的领域,有很多新东西需要学习。