作者: Frank909
作为程序员,职业生涯伴随着各类大大小小的项目,后来自己当了项目经理,项目进度是一个老生长谈的问题,我经常观察到的是在软件开发中,项目会延期。
那项目延期的原因是什么呢?
(图片来自网络侵删)我认为有以下几个原因:1. 缺乏合理的时间进度
这个其实很玄乎,可能有多方面的原因,但本质上还是项目经理没有处理好任务的时间分配。有的任务分配时间过长,浪费了时间,有的任务分配时间过短,仓促完成后导致后面测试不通过,修改 bug 耗费的时间更长。
2. 缺乏系统健康的需求管理
程序员为什么总和产品经理过不去呢?
事实上,一个项目中需求可能来自多方,产品经理、客户、自己公司大大小小的 Boss,如果没有一个制度合理处理各方面需求,频繁的需求变动肯定影响项目进度。
3. 某些独立的任务一致性要求高,无法增添人员并行加速
《人月神话》这本书讲了人月就是一个神话,项目经理做进度计划时常用单位是人月,也就是一项任务完成需要多少个人月。比如,做一个登录系统,需要 2 人月。你可以理解为 2 个人一个月完成,也可以理解为 1 个人做 2 个月。
但有个问题是有的任务,必须得 1 个人做 2 个月,2 个人一个月是加快不了速度的。
向进度落后的项目增派人手,只会使进度更加落后。
有些任务上下文依赖很严重,对于思考的连贯性很强,如果强行加派人手,只会频繁中断。相信程序员可以从多线程和多进程理解。
4. 程序员大多是乐观的,乐观表现于假定一切运作是良好的,而事实经常相反
如果一个程序员说我 3 天可以搞定一个模块,别太乐观,也许 3 天后他只完成了 1/3,程序员认为的完成也许只是编写完功能代码,离完整的通过测试还差的很呢。
5. 软件编码是脑力活动,是纯思维产物,如涉及到硬件交互,往往会让程序员焦头烂额
之前做 Android 开发时,不同的机器适配是一个问题,有些机型死活就不对路。
这是因为,我们在编写软件代码时,会自然而然忽视不同硬件之间的差异性。
现在,我从事自动驾驶的工作,完成 PC 上的代码和代码能够运行在车辆计算平台是两回事。
如果一开始不考虑这些情况所占据的时间,最终的项目必然会延期。
6. 开发人员之间的沟通也应有时间成本,但一般很好被考虑到
这个不过多解释,之前那个程序员不和傻x 争辩的段子很好解释了这个。
但一个项目不沟通也不行的,沟通管理在项目管理中非常重要,项目经理制定项目计划时需要严肃和严谨对待。
合理分配各类会议的周期,参会人员,避免过多过少的沟通。
7. 设计、编码、测试阶段时间分配不合理,不确定项没有预留缓冲期
有时候项目紧急,阶段分配就不合理了。
重压之下,动作必定变形。
也许大家会有这样的体现,打篮球在野球场上身手矫健似乔丹,但一到正式比赛就1分0板替补席上猛鼓掌。
身经百战的项目经历能够重压之下也保证各个阶段的合理时间比例,而不是一昧的压缩。
8. 对于估计的工期自身坚守不足,容易受到客户和上级的压力而妥协
这个其实有些无奈,甚至无解,如果有一些可能的机会,项目经理还是需要据理力争。
9. 项目经理风险意识不足,没有意识到风险或者意识到风险响应错误或不及时
最大的风险便是没有风险,有风险也应该及时响应。
没有发现风险,是意识不足。
发现风险没有响应,是执行力不足。
风险出来时,要认真分析,然后选择规避、减缓、解决或者接受