好文转载: 在大型科技公司如何交付项目?

原文链接

在过去大约10年的科技行业中,我交付了各种不同的项目。当需要确保项目成功时,我经常被指派领导新的项目,因为我在这方面很擅长。在大型科技公司交付项目是一项与编写代码截然不同的技能,许多擅长编写代码的人在项目交付方面却表现得很差。

以下是我在领导项目时的思考以及我看到人们常犯的错误。

交付项目很难

最常见的错误是认为交付项目很容易。项目的默认状态是不交付:无限期延迟、取消或推出半成品并失败。项目不会因为所有代码都已编写完成或所有Jira任务都已关闭而自动交付。项目之所以能够交付,是因为有人承担了这项困难且微妙的工作。

这意味着在几乎所有情况下,交付必须放在首位。你不能将其他任何事情作为你的首要优先级。如果你把所有时间都花在担心优化用户体验(例如)上,你就无法交付!专注于用户体验是团队工程师值得赞扬的行为,但如果你是项目负责人,这就会是一个错误。你应该珍惜团队中那些正在做这项工作的其他工程师,并给予他们尽可能多的支持。但你的首要关注点必须是交付项目。这项工作太难了,不能靠业余时间来完成。

根据我的经验,几乎所有的项目都是因为某一个人使它们得以交付。明确一点,这个人并不是编写所有代码或完成所有工作的那个人,我也不是说没有整个团队的支持项目就能交付。但非常重要的一点是,项目中的某个人必须对整个项目有端到端的理解:它在技术上是如何整合的,以及它服务于什么产品或业务目的。优秀的团队和公司理解这一点,并确保每个项目都有一个单一的责任工程师(通常这个职位被称为“技术负责人”或“DRI”角色)。糟糕的团队和公司则不这样做,项目能否成功完全取决于是否有工程师自发地承担起这个角色。

什么是交付?

为什么那么多工程师认为交付项目很容易?我知道这听起来很极端,但我认为许多工程师甚至不明白在大型科技公司里交付项目到底是什么意思。交付项目意味着什么?它并不意味着部署代码或让用户使用某个功能。交付是在公司内部的一种社会构建。具体来说,当公司的关键人物认为项目已经交付时,项目才算真正交付。如果你部署了系统,但你的经理、副总裁或CEO对此非常不满意,那你就没有交付。也许你交付了一些东西,但你并没有真正交付项目。只有当你公司的领导层认可你已经交付时,你才算真正交付。在Slack上收到副总裁的祝贺消息或内部博客发布胜利声明都是好迹象。对于小项目,经理的认可就足够了。

这听起来可能有些循环,但我认为这是一个非常重要的观点。当然,如果你部署了一个用户喜欢并带来大量收入的项目,那你确实交付了。但这只是因为满足用户需求和赚钱是让领导层满意的事情。如果你交付了一个用户不喜欢且没有盈利的项目,但领导层满意,你也算交付了。你可以对这一点有你自己的看法,但这是事实。如果你不喜欢这一点,你可能应该去那些真正关心用户满意度的公司工作。

认为交付项目就是交付规格或部署代码的工程师会反复陷入失败的项目。

沟通

因此,如果你的主要职责是让公司的领导层对项目感到满意,那么这在实践中意味着什么?首先,你需要明确公司希望从项目中得到什么。有时是为了从一小部分用户那里获得更多收入(例如企业功能)。有时是为了花钱扩大用户总数(例如引人注目的免费层级功能)。有时是为了通过为某个特定的大客户构建功能来安抚他们。有时只是一个有影响力的副总裁或CEO的宠儿项目,你需要与他们的愿景保持一致。有很多潜在的原因,如果你想交付项目,你需要知道哪些原因适用于当前情况。相应地调整你的工作和沟通方式!例如,企业功能通常不需要华丽的UI,但在要求上完全没有灵活性;终端用户功能需要打磨;宠儿项目意味着你需要与那个特定的决策者保持积极沟通,等等。

其次,无论项目目标是什么,你的领导层(即你汇报链中关心该项目的人)相对于你来说,对项目的 技术背景基本上一无所知。这意味着他们会信任你提供的时间估计、回答技术问题以及预见技术问题。维护这种信任应该是你的首要优先事项。如果他们对你完成任务的能力和及时通报信息的能力没有信心,你就无法交付。他们可能会通过取消项目或让项目在无人关注的情况下推出来降低风险(记住,未庆祝的发布不算真正的交付!)。或者,他们会把你边缘化,转而找另一个工程师,后者正式或非正式地成为实际交付项目的人。无论是哪种情况,你都会在绩效评估时感受到影响,他们也会在下一个项目中找其他人。

如何维护与领导层的信任?这本身可以写成一篇文章(或一本书),但以下是我的总结:

  • 最好的是有一个过去的成功交付记录,如果你能获得的话。
  • 项目自信(如果你显得很担心,他们也会担心)。
  • 项目能力。你应该努力达到NASA任务控制中心的那种感觉。
  • 专业且简洁地沟通,不要让他们追着你要更新:定期发布每日或每周的状态更新。

这些比项目在确切截止日期前零缺陷交付要重要得多。如果项目因技术原因需要延期,在我看来,只要你清楚、自信地(最好提前)沟通,你不会受到惩罚。事实上,如果有一些问题迫使项目延期,反而对你更有利,就像那位在紧急情况下修复问题的英雄工程师比预防问题的谨慎工程师更受重视一样。

进入生产环境

即便如此,你通常仍然需要将项目投入生产。这里最常见的问题是忽略了一个关键细节。有时是技术细节:比如我们依赖于将用户文档存储在Memcached中,但许多文档有几兆字节,会超过Memcached的块大小。有时是协调细节:比如拥有Memcached的平台团队预计我们的项目只会给他们带来十分之一的流量,所以他们召开会议与VP讨论,导致项目延期。有时是法律细节:比如用户数据意外敏感,我们的系统没有处理这些数据所需的安全控制。这些问题可能来自任何地方,很难预料。处理这些问题需要对系统有深入的技术理解,并能够迅速转向。

例如,你可能读了第一个例子,现在在想“嗯,你可以将文档拆分到多个Memcached键中,或者增加块大小,或者迁移到Redis等……”。这些都是潜在的解决方案!但除非你有深入的理解,否则不可能知道哪些解决方案可行,更重要的是,哪些解决方案不会延长项目时间线。

这尤为重要,因为所提到的问题甚至不必是真实的。在项目启动前,其他团队或工程师经常会提出潜在问题(例如“嘿,我们确定用户数据能放进Memcached吗?”)。如果没有人站出来解释这不是问题(或者如果是,如何在启动前解决),项目将会延期,这将是你的责任。为什么?因为你的经理(或他们的经理)不知道这是否是一个严重问题。这就是他们付钱给你做的!如果你不站出来解决这个问题,他们自然会出于谨慎考虑而不交付。

你需要保持灵活,以便在这些问题出现时能够迅速应对,而不是深陷其他工作中。这通常意味着不要完全沉浸在实现细节中(即将任务委托给项目中的其他工程师)。理想情况下,项目初期至少20%的时间应从实现中解放出来,接近最后几天时这一比例应增加到90-100%。如果你能做到这一点,当问题出现时,你就能全身心地应对。

我们现在能交付吗?

特性开关是我见过的最好的方法,但测试环境也有效,等等。关键是尽可能多地让尽可能多的人看到你正在构建的东西:你自己,其他工程师,以及理想情况下领导、产品和设计团队等。即使在一个非常粗糙的状态下,五分钟左右的实际操作也能发现没人预料到的问题。能够直接看到这些也能大大增强领导的信心,让他们相信你已经掌控了一切。

预测问题的最佳方法是尽早部署。一般来说,一个有用的问题是“我现在能交付吗?”不是本周,也不是今天,而是此时此刻。如果不是,需要改变什么才能让我交付?如果交付需要部署,现在可以在特性开关后面部署吗?如果我们在等待其他团队在他们那一端做出更改,我可以做些什么让系统在没有他们更改的情况下也能运行吗?例如,如果平台团队正在设置缓存层,我可以使我的功能在找不到缓存时仍然能工作(尽管速度稍慢)。

记住,你的主要优先级是维护与领导层的信任。没有什么比有备选方案更能建立信任了,因为备选方案表明你对情况有控制。如果最坏的情况发生,你无法在预定日期发布,你的经理在向他们的经理报告时会更高兴,因为他们可以说“我们的选择是推迟四天,或者明天牺牲X来交付”——即使牺牲X是不可能的。这意味着他们更有可能将延期视为一个不可避免的问题,你处理得很好,而不是一个你犯的错误,使他们无法依赖你。

我认为很多工程师基本上是出于恐惧而推迟部署。如果你想要交付,你需要做完全相反的事情:尽可能早地进行尽可能多的部署,并尽可能早地进行最可怕的变化。记住,你是对项目有最全面了解的人,这意味着你应该对可怕的变更最不害怕。其他人都在处理更多的未知数,对拉动大杠杆的兴趣更低。(如果你在等待某个了解所有这些情况的其他工程师,坏消息是:他们可能是实际交付你项目的人)。

总结

  • 交付项目非常困难,你必须将其作为主要优先级。
  • 交付项目不意味着部署代码,而是让领导层满意。
  • 你需要领导层的信任才能交付项目。
  • 大多数关键技术工作在于预见问题和制定备选方案。
  • 随着接近发布日期,减少实现工作量,以便自由应对最后一刻的问题。
  • 你应该不断问自己“我现在能交付吗?”
  • 有勇气!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835499.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WINCC 7.5SP2下VBA创建变量组、变量1

今晚继续学习Wincc下面使用VBA创建变量分组,分组下创建多个变量。新浪审核有点慢,我在这里先发表了。 在变量管理中新建一个S7 连接,配置好连接参数,这个不能通过VBA创建。 打开wincc页面,在VBA编辑器下写下面的脚本:Sub addtags()Dim hmigo As hmigoDim strTagGroup As…

Scrum 冲刺博客-day7

一、每天会议 昨天完成的任务与今天计划完成任务成员 昨天已完成任务 今天计划完成任务董雯霖 个人中心页面 前端页面优化陈金星 后台管理页面 前端页面优化邱列圻 后端接口实现 后端接口开发测试李嘉远 后端接口实现 后端接口开发测试詹洛熙 各项页面测试 各项页面测试工作中遇…

Scrum 冲刺博客-day6

一、每天会议 昨天完成的任务与今天计划完成任务成员 昨天已完成任务 今天计划完成任务董雯霖 交流与反馈页面开发 个人中心页面陈金星 公告信息页面开发 后台管理页面邱列圻 debug 后端接口实现李嘉远 活动心得页面开发 后端口实现詹洛熙 首页页面测试、活动信息页面测试 各项…

团队项目冲刺第三天

课程 2024软件工程作业要求 团队作业4——项目冲刺作业目标 团队项目冲刺第三天团队会议合照燃尽图 当开启进度后,明显就比什么都不做纯聊的状态快多了,也积极多了,照这样下去说不定能提前完成计划表格成员 已完成 下一步洪吉潮 用户注册与登录功能完善设计登录界面交互 主题…

2024-2025-1 20241319 《计算机基础与程序设计》第八周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08这个作业的目标 功能设计与面向对象设计 面向对象设计过程 面向对象语言三要素 汇编、编译、解释、执行作业正文 https://www.cnblogs…

团队项目冲刺第二天

课程 2024软件工程作业要求 团队作业4——项目冲刺作业目标 团队项目冲刺第二天团队会议合照燃尽图计划表格成员 已完成 下一步洪吉潮 用户注册与登录功能完善设计用户注册界面 用户注册与登录功能完善设计登录界面交互刘家辉 用户注册与登录功能完善实现邮箱注册功能及验证逻辑…

Scrum 冲刺博客-day5

一、每天会议 昨天完成的任务与今天计划完成任务成员 昨天已完成任务 今天计划完成任务董雯霖 活动信息页面 交流与反馈页面开发陈金星 首页页面 公告信息页面开发邱列圻 活动信息页面 debug李嘉远 活动信息页面 活动心得页面开发詹洛熙 配合测试 首页页面测试、活动信息页面测…

941. 有效的山脉数组

题目 自己写的 class Solution { public:bool validMountainArray(vector<int>& arr) {int l = 0, r = 1;bool up = true, change = false;if (arr.size() < 3)return false;if (arr[r] < arr[l])up = false;while (r < arr.size()){if (up){if (arr[r] <…

团队项目冲刺--Day4

每天举行站立式会议昨天已完成的工作成员 任务徐嘉炜 组织会议,说明项目进度,指导项目发展陈祥意 参与会议,简要讲述应用程序测试的各个模块林楦 参与会议,讲述有关功能界面的UI开发陈大锴 参与会议,协调开发技术与实际需求,记录需求蔡家显 参与会议,讲述测试时的注意事…

团队项目冲刺-day2

每天举行站立式会议 昨天已完成的工作成员 任务徐嘉炜 组织会议,说明项目进度,指导项目发展陈祥意 参与会议,简要讲述应用程序测试的各个模块林楦 参与会议,讲述有关功能界面的UI开发陈大锴 参与会议,协调开发技术与实际需求,记录需求蔡家显 参与会议,讲述测试时的注意事…

一文读懂maven

一、什么是mavenmaven是一个项目管理工具,通过pom.xml文件的配置获取jar包不用手动的去添加jar包就是在java项目和web项目上裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能,即通过pom.xml添加jar包 就…

浅析注意力(Attention)机制

Attention顾名思义,说明这项机制是模仿人脑的注意力机制建立的,我们不妨从这个角度展开理解 2.1 人脑的注意力机制 人脑的注意力机制,就是将有限的注意力资源分配到当前关注的任务,或关注的目标之上,暂时忽略其他不重要的因素,这是人类利用有限的注意力资源从大量信息中快…