注:除非另有说明,本文中的“我”均指原作者卡米尔·福尼尔(Camille Fournier)。
背景介绍几年前,我成了技术总监。在此之前,我被提升为高级工程师,和其他几个高级工程师在一个小团队工作。被提升为技术总监我有点意外,因为无论从头衔还是年限来说,我都不是团队里最资深的人。
回想起来,我还是有些优势的。首先,我不仅是一名优秀的工程师,还是一名优秀的沟通者。我可以写出清晰的文档,我可以在没有短路思维的情况下进行演示,我可以与不同团队和角色的人交谈并解释发生的事情。
我还擅长分清主次。我渴望推进我的工作,并弄清楚接下来需要做什么。最后,我愿意收拾残局,尽我所能去进步。我认为这种务实的紧迫感是决定性因素。毕竟技术总监是领导岗位,即使不是管理岗位。
(译者注:领导意味着做出关键决策,并负责领导的业务发展。管理意味着塑造团队,有权决定团队的构成。一般来说,技术总监是技术经理和其他成员之间的桥梁。这两者之间的进一步区别可以在本系列技术导语的第三部分中找到。)
我见过技术领导陷入困境。
一个令人印象深刻的案例:他是一个伟大的工程师,能写出优秀的代码,但他讨厌与人交谈,经常被技术细节分心。我看着他一个个陷入困境。与此同时,产品经理利用他的缺席,促使团队的其他成员专注于交付设计糟糕和过于激进的功能。
这个项目一团糟。技术负责人在做什么?他追求下一个重构,因为他确信问题完全出在代码的结构上。你可能对这个故事很熟悉,因为它无处不在。
这里有一个误区:技术总监应该是最有经验的工程师,能够处理最复杂的功能或者写出更好的代码的工程师。即使是有经验的经理也会犯这种错误。技术领导者不应该关注他们自己的代码细节。
技术总监的工作到底是什么?我们对这个人有什么期望?
什么是技术总监?和软件工程中的很多头衔一样,“技术总监”缺乏统一的定义。我能做的更好的事情就是从我自己的经验和别人的经验中学习。
作为技术总监,我的工作是继续写代码,但我还要承担额外的责任。即,在团队和经理之间建立良好的联系,审查我们的功能交付计划,并处理项目管理流程的许多细节。
虽然我不是最资深的人,但我可以成为技术负责人,因为我愿意并且能够承担这个角色的责任,而团队的其他成员更有兴趣专注于他们正在编写的软件。
当我在《出租跑道》(a公司)的团队创建我们的工程职业发展路径时,我们有意识地选择将技术总监的角色定义为:工程师可以在职业生涯中承担很多点,而不是特定层面的事务。
我们采用这种策略是因为我们意识到,随着团队的变化和发展,技术负责人的角色可能由许多不同阶段的工程师担任,可能从一个工程师传递到另一个工程师,而没有任何一个人改变他的职能或工作级别。
公司与公司之间,甚至公司内部团队与团队之间,技术领导者可能并不完全相同。从标题中我们知道,它既是一个技术职位,也是一个领导角色。这通常是一个临时的职责,而不是一个永久的头衔。
所以,总结一下:什么是技术总监?这是我们出租跑道的口径:
租跑道对技术负责人的描述技术总监不是职级上的一个点,而是任何一个工程师达到高级后可能承担的一系列责任。
这个角色可能包括也可能不包括人员管理,但是如果包括,技术领导应该根据RTR原则管理这些团队成员。这些标准包括:
定期(每周)1-1联系职业发展和目标进度的定期反馈:需要改进的地方,根据表现给予表扬。在各种信息中确定成员的发展方向,通过具体项目、外部学习或额外指导,帮助他们在这些方面成长。
如果技术领导不直接管理,他们仍然需要为团队的其他成员提供指导和帮助。
技术总监如何成为一个强有力的技术项目经理?他们通过有效的授权而不是微观管理来实现这个目标。
他们整个团队的生产力,努力增加团队输出产品的影响力。他们有权为团队做出独立的决定,并且正在学习如何处理棘手的管理和领导情况。他们还在学习如何在产品、分析和其他业务领域与同事有效合作。
技术总监还写代码吗?正如Patrick Kua在他的书《与技术领导者交谈》中描述的那样,负责(软件)开发团队的技术领导者至少花30%的时间与团队一起编写代码。
技术总监这个职位更像是技术项目经理,需要在更大的范围内利用他们的专业知识,让整个团队变得更好。他们可以独立决策,并在团队与其他非技术团队的协调中发挥重要作用。你会注意到这里没有特定的技术。这是一个高级工程师的职位,但是把技术总监等同于团队中更好的或者最有经验的工程师是错误的。
没有别人的参与,你是无法领导的。人际交往技能是我们需要新技术领导者加强的,甚至优先于技术专长。与此同时,技术总监将致力于学习一项新的技术技能:项目管理。分解项目的工作和设计系统的工作有许多相似之处。即使对于不想管别人的工程师来说,学习这个技能也是有价值的。
如果你发现自己在技术总监的位置上,那么恭喜你!有些人认为你具备成为球队关键球员的条件。现在是学习一些新技能的时候了!
成为技术带头人。技术领导者是在未经授权的状态下实践影响力的机会。作为技术负责人,我领导着一个团队,但我们都向同一个技术经理汇报。因此,我不仅要影响我的同事,还要影响我的经理,以确保我们优先考虑正确的工作。
在我成为技术总监之后,我需要扮演的之一个角色是:停止目前所有的功能开发,专注于技术债。这是相当具有挑战性的。我很清楚“技术债”已经拖得太久了。部署新代码很困难,维护现有服务很昂贵,而且随叫随到也不舒服。
我相信在未来我们需要放慢速度才能走得快。然而,对于其他想要编写有趣的新功能的开发人员或我的经理来说,这并不容易,他们从业务方面有着持续的需求。
我通过关注不同成员的不同兴趣来推广这一理念。对于一些团队成员来说,是为了提供更可靠的服务;对于其他人来说,可以提高迭代速度;对另一些人来说,就是减轻随叫随到的负担,让自己能睡个好觉。
在与我的经理交谈时,我强调这降低了维护成本。这意味着我们将来可以上线更多的功能。
技术负责人需要换点。工作不再是我的事了。而不是专注于更具技术挑战性的想法或最有趣的项目;相反,我需要提高我的团队。我如何授权给他们?我该如何消除阻碍他们进步的障碍?
重构或者写一些新奇 *** 的功能,可以显示我的技术实力,让它变得更有趣。但当时团队需要解决技术债来提高维护效率。
最终,这个计划取得了难以置信的成功。将团队待命警报的数量减少了50%。在下一个季度,我们可以完成的在线功能数量几乎翻了一番。
所有优秀的技术领导者都知道的技能。成为技术负责人意味着你对软件有所了解,你的经理认为你足够成熟,可以承担更大的项目责任。成为一名优秀的技术领导者的更大诀窍是:愿意摆脱代码,想出如何平衡你的技术和团队需求。你必须停止依赖你的旧技能,开始学习一些新技能:学习平衡的艺术。
从现在开始,无论你的职业生涯走向何方,平衡都可能成为你的核心挑战之一。如果你想在工作中有自 *** ,如果你想在工作时自由选择,你必须掌握你的时间和如何利用它。
不幸的是,你经常需要在擅长和享受(比如写代码)和不擅长事务之间取得平衡。人类更喜欢他们已经掌握的活动,所以当你不得不在熟悉的活动上花费更少的时间,而需要学习新的东西时,你会感到非常不舒服。
很难在项目管理和技术交付之间取得平衡。有时候你是安排事务的人,有时候你是被安排的人。通过一次又一次的尝试,你需要学会如何管理自己的时间,给自己提供一个大小合适的工作窗口。
最糟糕的情况是让自己被随机拖入会议。如果每小时都被会议打断,就很难进入写代码的更佳状态。即使经过精心规划,你也很少有时间花几天时间关注编码问题。
希望你之前学过一些技巧,帮助你分解自己的工作,这样你就不需要花很多天在技术任务上了。
你知道,为你的团队制定一个时间表是很重要的。为了让他们能够长时间专注于开发,他们需要花几天时间专注于编码来解决问题。领导力的一部分是协调其他利益相关者,比如你的上级和产品经理,尊重团队的重点,为团队成员安排不太紧的会议。
技术总监简介假设你正与一个产品经理和一个由四名工程师组成的团队一起工作几个星期来发布新的特性。根据您在项目生命周期中的位置,技术领导在这个场景中承担多重责任。当然,你需要写一些代码,做一些技术上的决策。但这只是你将要扮演的角色之一,甚至可能不是最重要的角色。
技术总监的主要角色作为技术总监,您的首要任务是对工作有一个广泛的了解,这样您就可以保持项目的进展。从组织规划自己需要写的代码,到组织领导整个项目,怎么做?
系统架构师和业务分析师在系统架构和业务分析的角色中,您识别并确定关键系统需要进行的更改,以及需要构建的关键功能,以便能够交付即将到来的项目。这里的目标是为估计工作量和确定工作优先级提供一些参考。
你不需要完美地识别项目的每一个元素,但是花时间思考与项目相关的外部因素和可能出现的问题是有价值的。
这个角色要求你对系统的整体架构有很好的理解,对如何设计复杂的软件有很深的理解。它可能还要求您能够理解业务需求,并将它们翻译成代码。
项目规划者项目规划者将工作分解成粗略的可交付成果。戴上这顶帽子,你需要找到一个有效的方法来分解你的工作,让你的团队高效工作。这里的部分挑战是尽可能并行地做更多有成效的工作。
这可能很难,因为你可能习惯于只考虑自己的工作,而不是一群人的工作。在工作中找到可以抽象和勾选的活动是实现并行工作的关键。在这个阶段,你需要收集团队专家的意见,与对软件受影响部分有深入了解的人交谈,让他们在这里提供详细的信息。
作为这个过程的一部分,您还需要确定优先级。哪些部分很关键,哪些部分优先级没那么高?重要部位如何尽快处理?
软件开发人员和团队领导软件开发人员和团队领导编写代码,交流挑战,委派相应的工作。
随着项目的进展,其他人出现了意想不到的问题。有时候,技术负责人想要勇敢的克服这些障碍,加班加点的完成所有的工作。作为技术负责人,还是要继续写代码,但是不要写太多。就算真的想自己解决这个问题,也要先和团队沟通。
你的产品经理应该尽早知道任何可能的风险。如果有必要,你也可以寻求你的上级经理的帮助。在一个健康的组织中,尽早提出问题或者有负面反馈的事情并不可耻。
团队经常有问题,因为他们过度开发产品经理愿意妥协的功能。随着大型项目临近交付日期,功能将受到影响。
寻找委派工作的可能性,尤其是如果你没有时间自己处理的话。
从这些描述中可以看出,在成为技术负责人的过程中,你必须扮演软件开发人员、系统架构师、业务分析师和团队负责人的角色。
他们知道什么时候自己干,什么时候把工作委托给别人。
幸运的是,你不必一次完成所有这些任务。一开始可能会不舒服,但是你会在时间和练习中找到平衡。
询问首席技术官问:
我认为成为技术总监会很棒,但是我的经理希望我跟踪关于项目状态的所有细节,并告诉她什么时候该做什么。我真的很讨厌这种状态。为什么没人告诉我技术总监这个职位这么差?
答:
我知道,所有这些新事物都很难。我喜欢把这个问题称为“成功的考验”。虽然在软件开发职业的很多阶段都是如此,但技术总监阶段无疑是更大的考验。技术负责人很少有加薪或升职的,初出茅庐的技术负责人通常不知道这个岗位有多难。
正如我在职位的定义中提到的,许多公司认为它更像是一个临时头衔,一个你在职业生涯中可能承担和摆脱多次的职责。它可能是迈向更高层次的必要垫脚石,但通常不是能带来立竿见影、切实回报的里程碑。
为什么技术总监这个角色如此具有挑战性?
技术负责人的职责比个人开发岗位的高级工程师要宽泛得多。技术领导被要求帮助建立一个项目,然后完成实际规划工作的步骤。技术负责人应该确保团队完全理解项目需求。工作被拆解,计划得当,团队有效,表现良好。所有这些都不一定得到管理层的授权,通常没有经过任何培训。
此外,事实上,大多数经理希望他们的技术领导继续编写几乎和他们担任领导角色之前一样多的代码。这是单向增加责任和工作范围。如果是你之一次做技术总监,那你真的会很忙。
另一方面,他们给了你一个测试!好消息是,承担这个责任最终会让你变得更强大,并为你提供在职业生涯中前进所需的技能。不会一直像现在看起来那么难。