项目管理:一篇文章读懂项目如何失败的 又要如何挽回
我是一名项目经理,在过去的四个月里,我带领团队开发了一个是失败的项目(当它开发完上线时,经常出现问题,用户不能按预期正常使用这个项目)。最近几天,我每天都在反思自己,我一直在问自己以下问题:
1.我做错了什么?
2.项目失败,我的因素是多少?
以下我会回答上述问题,并提出我的补救措施,如何去挽回败局。
1 项目和团队背景
首先,我想解释一下这个项目的背景,以便你能更清楚地了解这个项目:
1.该项目是一个二次开发项目,第一个基本版本(打印申报系统)也由我领导开发的。
2.该系统需要与国家体系对接,有三个主要过程。
3.需求变化频繁,由于系统需要与国家系统连接,需求方对需求了解不多。5月份需求发生了8次以上的变化,所有这些变化都是对主要过程的改变。
4.根据初步需要,该项目的规模估计约为100人日。
5.项目的两个主要过程不能在测试环境测试,取决于外部U盾,开发过程中也没有U盾,最终只能到正式环境进行测试。
6.客户现场使用U盾调试和开发时间约为20天左右。
7.我当时同时负责四个大大小小的项目,因此这个项目没有进入开发,只控制项目开发进度。
8.有三名团队成员,其中两名是当时开发基本版本的项目成员,他们对项目很熟悉。
9.在项目过程中,我们需要进行多次现场调试和测试,团队中的两名工程师将一起去。
2 我做错什么了?
除了监测进度外,还必须对质量进行管理。
在项目开发之初,我制定了一份详细的开发计划,以指导整个开发过程。开发计划已经交付给客户,承诺的事情必须完成,所以在整个项目中,我对进度都有严格的控制。我定期检查功能是否完成,并定期向客户汇报,以确保发展顺利进行。但它也掩埋了危险,仅仅关注需求是否完成,而不关注完工的质量。
在项目的质量方面有许多详细的问题。例如:
1.启动后,客户发现其中一个主要进程无法继续。
2.其中,申报功能、系统提示是成功的。但实际上,申报并不是真正成功的,在申报后的国家体系中也找不到。
3.打印功能存在许多问题,打印得到的数据是错误的。
4.无法同步或同步数据功能的数据错误。
5.如果执行一个需要太长时间的函数,数据库将强制断开连接。
等等,等等。
反思:
1.进度和开发速度固然重要,但以质量换速度不可取。
2.如果开发时间和质量冲突,以质量为主,毕竟,你埋了坑,终究是要有人去填,去负责的。
3.无论多么困难,都必须确保进行基本检验。
4.在时间极其不允许的情况下,仍然必须确保主线功能的顺利执行。
我们不仅要给予开发团队成员的信任,还要保持警惕。
该项目的三名成员都是合格的开发人员,他们都熟悉所使用的框架。其中两人也是基本版本开发的成员,对需求也很熟悉。因此,在项目中,我可以放心,整个项目都交给了他们。基于他们的放心,再加上其他项目的复杂性,对这个项目的关注是不够的。
我给了他们很多信任,相信他们会做好每件事。但我没有在正确的时间给他们正确的指导,我也没有帮助他们解决项目中的困难,甚至没有给他们一些开发想法及思路。他们自己做每件事都靠自己独立去处理。我在这个项目中所做的就是向客户汇报项目进度,督促项目开发。没有再做第三件事。
反思:
1.出于任何原因,注意项目成员的地位。
2.信任是正确的,但也要保持适当的警惕,他们或多或少会因为经验而忽视一些问题。
3.给予信任和帮助,不要以时间为理由来驱散你应该给出的建议和帮助。毕竟,现在节省的一分钟,要花上一个小时才能弥补。
如果条件有限,你没有全面控制项目的可能,就指派一个特别的人来全面负责开发。
这是我在这个项目中做的最错误的地方。
由于种种原因,我无法掌握到项目的每个要点和细节。而项目中有三个开发。我没有指定其中一个开发负责整个项目,而是由他们自己来讨论所有问题。从客户对接来的问题,我也是仅告知对应的开发。现场的三个开发人员,没有一个人对项目中的每个要点了如指掌。
反思:
1.手里掌控着管理的权利,却没有做到管理该做的事情。是我在这个项目里最大的问题。
2.授权!授权!授权!重要的事情说三遍。如果你不能投入到项目管理中去,就把管理权下放给团队的一名成员,让他代替你去做管理工作。
3.管理一个人比管理更多人更容易和更有效。
控制需求,也控制过程。
该项目属二次开发,成员对项目非常熟悉,项目工作量不大,时间紧迫。
出于上述原因,我对此掉以轻心,在项目开始时没有设计和规划项目,也没有指定任何开发规范。只要告诉开发人员复用以前的代码,但也只是口头告知,从未检查他们是否真的复用了基础版本的代码。
项目开发需求的变化,客户的反馈,我只是告诉他们,没有对计划进行详细的修改,一切都取决于口口声声,所有的变化都在我的脑海中,他们的头脑中。
对项目的关注程度不够,客户需求的变化也没有得到控制和管理。所有变更都压给了开发的同事。
整个项目及其不规范的运行方式,我没有在其中起到控制作用,项目的发展一团糟。
反思:
1.不做设计,不进开发
2.使用管理工具指导开发,并记录开发过程中的所有更改和反馈。
3.控制要求的改变和拒绝不合理的要求
4.规范需求变更的操作,统一变更,而不是直接将变更推到开发中去。
在任何情况下,开发经理都需要codereview,不要给自己找任何借口。
整个项目已经进行了将近四个月,我只花了两个多小时就简单地看了一下代码,没有指出代码的任何问题。这也导致了问题。后来,我花了两倍的时间处理Codereview的工作,在项目形成后的代码修改也是及其困难的。
在项目开发过程中,开发人员之间没有代码评审,也没有代码评审会议。
实际上,代码中存在很多问题。最后,当您检查代码时,您会发现各种命名都不规范,代码复用不到位,简单的逻辑编写复杂等等。而这些问题,很大一部分都是早期未做规定,未指定人负责项目、未进行早期code review造成的。开发人员各自为战,没有人进行及时约束的情况下,这不可避免地会导致代码问题。。
代码质量的问题在项目中得到了生动的反映。项目中的许多缺陷都是由代码的不规范引起的。甚至连开发人员自己也对他们所写的东西感到有点困惑。
反思:
1.代码质量非常重要,代码越标准化,bug就越少
2.代码相互评估可以使开发人员更多地关注自己代码的质量。
3.codereview是非常必要的,codereview越早,效果越好,可以节省更晚的时间。
3 项目失败,我的因素是多少
100%,这一点不用争议,其他每个开发人员都能努力。确定责任在我后,我能做的就是尽快去挽回这个失败的项目。
4 我是怎么挽回败局的
项目上线后,问题频出,用户及其不满。最终我花了八天时间来处理这些个问题。幸运的是,这个项目并不大,我可以独立搞定它。
目前暂时解决完毕,能够让客户正常使用,我简单说一下我是怎么填坑,挽回项目的:
1.和开发主流程的同事详细熟悉了所有需求要点。
2.基于我对项目要求的熟悉,我花了三天时间分析了所有主要过程的代码,做出了我认为应该做的修改,并实施部署到生产环境测试(这是在给高速公路上的汽车换轮子,因为需要U盾才能测试,仅有生产环境的机器有U盾,别无他法)。
3.每天花超过12个小时来进行code review 和修改,几乎每天code review + 修改到凌晨2点多。
4.每次上班时间的修改让开发同事坐在旁边和我一起进行,我进行修改,开发同事在一旁监督。确保我所编写的代码不会出错。
5.优化功能点,同步我发现的UI交互的提示问题,和优化点都同步修改进代码中,确保用户体验不要太糟,以期能挽回一些用户体验。
我所吸取的教训总结:
1.先做好设计,在进行开发。
2.管理权下放,项目中必须有人全身心负责统筹开发代码。
3.无论什么情况都要进行code review。
4.压缩质量得到的进度保证不可取,开发周期不合理决不答应客户。否则坑了自己坑了同事,更坑了客户。