一名IT经理是如何把项目带崩的。。。

640?wx_fmt=gif


我是一名项目经理,在过去的四个月里,我把一个项目带崩了(上线后频出问题,用户无法使用)。


在最近的几天,我每天都在反思自己,我都在问自己以下几个问题:

1.我做错了什么?

2.我在其中占有多重的因素?


以下内容,我将回答以上问题,并在最后说一下我的补救措施。


一、项目和团队背景


首先给大家说明一下项目背景,以便各位对此项目有更清晰的了解:
1.该项目是一个二次开发项目,第一个基础版本(打印申报系统)也由我带领开发。
2.系统是需要和国家系统对接,有三条主流程。
3.需求频繁变化,由于系统需要对接国家系统,需求方对需求也不甚了解,曾在5月份一个月内需求变更超过8次,都是主流程变更。
4.项目大小按照最初需求估算,约在100人天左右。
5.项目两条主流程无法测试,依赖于外部U盾,但开发过程中并没有U盾。
6.客户现场使用U盾调试和开发时间约为20天左右。
7.我当时同时负责大大小小4个项目,没有进入开发,仅管控进度。
8.团队成员共3名,其中两名是当时开发基础版本的项目成员,他们对此项目较为熟悉。
9.项目推进过程中,需要多次去现场调试测试,由团队中的两名工程师共同前去。


二、我做错了什么


1

除了监控进度,还要管理质量



在项目的开发初期,我制定了一份详细的开发计划,用于指导整个开发过程。


开发计划交付与了客户,而答应了的事情就要做到,所以在整个项目过程中,我对进度管控很严。


我定期检查功能是否完成,定期和客户汇报情况,保证了开发进度顺利推进。


但也由此埋下了祸根,仅仅看需求是否完成,而未关注完成的质量如何。


项目质量出现了许多细节性问题。比如:
1.上线后,客户那边发现其中一条主流程都走不下去
2.其中申报功能,系统提示成功,但实际上并没有真的申报成功,申报后在国家系统无法查询到
3.打印功能小问题较多,打印获取的数据错误
4.同步数据的功能无法同步或者同步的数据错误
5.执行时间过长的功能,数据库会强制断开连接
等等问题,就不一一列举


反思:
1.进度和开发速度固然重要,但以质量换速度不可取
2.如果开发时间和质量冲突,优先保质量,毕竟你埋下的坑,总是要坑你自己的
3.再困难的情况下,也要保证基本测试
4.时间极其不允许的情况下,也要保证主线功能顺利执行


2

既要给予信任,也要保持警惕



项目中的三名成员,都是合格的开发,对使用的框架非常熟悉。


其中两名还是基础版本开发成员,对需求也很熟悉。


所以项目中,我放心的把整个项目交给了他们。


基于对他们的放心,加上其他项目事情繁杂,对此项目关注度,对他们的关注度就不够了。


我在项目中给予了他们非常充分的信任,信任他们可以把一切事情都做好。


但我没有在正确的时候给予他们正确的指引,项目中出现的困难点,我也没有帮助他们解决,甚至于没有给出思路。


所有的一切,都靠他们自己完成。


我在这个项目里做的,就是对接客户,催进度,再无第三件事。


反思:
1.不论什么原因,都要关注到项目成员的状态
2.给予信任没错,但也要适当保持警惕,他们多少会因为经验问题疏忽遗漏一些问题
3.给予信任,也要给予帮助,不以时间为理由推脱你应该对他们进行的指点和帮助,毕竟现
在剩下来一分钟,以后要花一个小时去弥补


3

若无法全局掌控,就指派专人负责


这是我在项目中做的最错误的地方。


由于种种原因,我无法掌握到项目的每个要点和细节。


而项目中有三个开发,我并没指明其中某一个来负责整个项目,所有事情都让他们自己商量。


从客户对接来的问题,我也是仅告知对应的开发。


整个项目中,没有一个人对项目中的每个要点了如指掌。


反思:
1.手里捏着管理的权利,却没有做到管理的事情,是我在这个项目里最大的问题
2.授权!授权!授权!如果自己无法亲力亲为投入项目管理工作,就授权给团队某个成员管理权限,让他代替你去做管理工作
3.管理一人,总比管理多个人轻松,也更有效


4

要控制需求,更要控制流程


项目是二次开发、成员对项目很熟悉、项目工作量不大、时间紧。


基于以上原因,我掉以轻心,没有在项目初期进行项目的设计和规划,未指定任何开发规范,仅仅告诉开发的同事要多复用,也未检查他们是否真的复用了。


项目开发中的需求变更,客户反馈意见,我都仅仅是告知他们一声,未做详细的修改规划。


所有事情都靠嘴说,所有变动都放在了我和他们的脑子里。


对项目上心程度不够,未对客户的需求变更做控制和管理。


所有变更都压给了开发的同事。


整个项目以及其不规范的方式在运行,我也未在其中起到控制作用,项目开发一团乱麻。


反思:
1.不做设计,不进开发
2.以管理工具指导开发进行,开发过程中所有变更、反馈做记录
3.控制需求变更,拒绝不合理的需求
4.需求变更规范化操作,统一变更,而不是直接压给开发


5

无论什么情况下,都要进行code review


整个项目过去了几乎四个月,我仅仅花了两个多小时简单看了下代码,未指出代码的任何问题。


这也导致出问题后来我花了成倍的时间来处理code review的工作,并且项目成型后的代码修改困难。


项目开发过程中,也未让开发间互相进行代码review,也没有进行代码评审会。


其实代码中出现了很多问题,最后检查代码的时候,发现各种命名不规范、代码复用不到位、简单逻辑复杂写等等。


而这些问题,很大一部分都是早期未做规定,未指定人负责项目、未进行早期code review造成的。


开发各自为战,难免造成代码问题。


代码质量的问题,淋漓尽致的体现的在项目中,项目中的诸多bug,都是因为代码不规范引起的。


甚至于开发人员自己对自己写过的东西,都有些拎不清了。


反思:
1.代码质量非常重要,代码越规范bug越少
2.代码互评能让开发更注重自己代码的质量
3.code review非常有必要,越早期的code review越能有效的节省后期的时间


三、我在其中占有多重的因素

100%


四、我怎么填坑的


项目上线,问题频出,用户不满,花了8天时间来处理这个问题。


幸亏项目不大,我一个人也能够挽回。


目前暂时解决完毕,我简单说一下我是怎么填坑的:
1.和开发主流程的同事详细熟悉了所有需求要点
2.基于我对项目需求的熟悉,我花了三天把所有主流程的所有代码分析完毕,做出了我认为应该的修改,并实施部署到生产环境测试
(这是在给开着的飞机换引擎,但需要U盾才能测试,仅有生产环境的机器有U盾,别无他法)
3.每天花超过12个小时来进行code review 和修改,几乎每天code review + 修改到凌晨2点多
(仅修改了问题较大且影响较小的地方,小问题未修改、牵涉面较广的地方未修改)
4.每次上班时间的修改让开发同事坐在旁边和我一起进行,我进行修改,开发同事在一旁监督,确保我不出错
5.优化功能点,把我发现的提示问题,和优化点都同步修改进代码中,确保用户体验不要太糟,以期能挽回一些用户心态


五、我所吸取的教训总结


1.先设计,后开发
2.管理权下放,项目中必须有人全身心负责
3.无论什么情况都要进行code review
4.压缩质量得到的进度保证不可取,开发周期不合理决不答应客户,
否则坑了自己坑了同事,更坑了客户


作者:zer0black

来源:

cnblogs.com/zer0Black/archive/2018/08/13/9463206.html

版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。


数据与算法之美

用数据解决不可能


640?wx_fmt=jpeg

长按扫码关注

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

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

相关文章

C# 线程池ThreadPool用法简介

前言:自从task出现后,threadpool地位直线下降,但是一些老的程序员用惯了threadpool,我们在继承开发的时候也会时常看到这个用法,所以我们也很有必要熟悉认识它。什么是线程池?为什么要用线程池?…

10分钟采集凡客最新的省、市、区、邮政编码和电话区号(附源码)

最近的开发的项目需要用到省、市、区数据,因为要开发的项目也是电子商务网站,在参考凡客的用户体验时,发现它连深圳最新分离出来的光明新区都有了,拍拍网都没有更新数据,看来凡客在数据更新方面还是挺负责的&#xff0…

刘强东在美国出事了,老老实实的IT男,真的是有钱就变坏吗?

9月2日,网络上流传京东集团创始人刘强东在美国明尼苏达州,涉嫌性侵女大学生,目前已经被保释的消息。刘强东的相关信息,是可以直接在明尼苏达州Hennepin郡治安官办公室的监狱名单上查到的。上图中,可以看到指控描述为cr…

记一次 .NET游戏站程序的 CPU 爆高分析

一:背景 1. 讲故事上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图:又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的。抓 2-3 个 du…

干货 | 数据挖掘过关40题

今天为大家准备了40道数据挖掘的题,试试你的能力吧!答案请见文末1.某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?A.关联规则发现B.聚类C.分类D.自然语言处理2.以下两种描…

.Net程序内存泄漏解析

↑↑↑ 点击左上角蓝字关注我,为您提供技术新动态。本期内容分享实战中内存泄漏解决思路。Part1 初步分析原因Part2 查找内存泄漏的根本原因Part2.1 解决方案Part3 总结Part4 彩蛋一、概要大概在今年三月份的时候突然被紧急调到另外一个项目组解决线上内存泄漏问题。…

js 上下箭头滚动_JS中的this完全讲解,再也不会被this搞晕了

关于This对象js 中的this 是一个比较难理解的对象;所以也经常作为面试的考点,考察应聘者的js 基础能力;其实this的指向也就那么几种情况,接下来我们一一看一下:函数中的this取何值是在函数真正被调用时确定的(也就是运…

9张图,Kafka为什么要放弃Zookeeper

最近,confluent社区发表了一篇文章,主要讲述了Kafka未来的2.8版本将要放弃Zookeeper,这对于Kafka用户来说,是一个重要的改进。之前部署Kafka就必须得部署Zookeeper,而之后就只要单独部署Kafka就行了。[1]1.Kafka简介Ap…

Python能用来做什么?以下是Python的三大主要用途

如果你想学Python,或者你刚开始学习Python,那么你可能会问:“我能用Python做什么?”这个问题不好回答,因为Python有很多用途。但是随着时间,我发现有Python主要有以下三大主要应用: Web开发 数据…

qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...

现在已经到12月份了,全国各地的马拉松也接近尾声,回想自己这一年参加了多少次全程马拉松或半程马拉松?很多人跑步最初的宗旨是为了减肥、为了健康,为了让自己拥有一个好身体,可是不知不觉中在朋友又或自己的兴趣中“投…

通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...

状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理。目录:一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解…

过Div将页面分三块(上,中,下),然后通过Ext来改变Content的内容(三)--终结版

2019独角兽企业重金招聘Python工程师标准>>> 这几天的页面重构终于快要结束了。 最终页面架构选择了Sitemesh&#xff0c;经过昨天下午及今天上午的调试终于把Sitemesh下css、js问题解决了。 使用Sitemesh总结以下几点&#xff1a; 1、<decorator:head />放在…

Python+人工智能的超强组合,再不学就跟不上时代啦!

《Python人工智能》原价 899.00 现超 410 人参团仅售 199.00 点击文末阅读原文立即参团参团&#xff0c;咨询&#xff0c;查看课程&#xff0c;请点击【阅读原文】↓↓↓

如何证明服从卡方分布_谈谈抽样分布定理

各位阿娜答&#xff0c;这个月就更新了一篇文章&#xff0c;这都月底了&#xff0c;还有两次自荐机会没用&#xff0c;所以最后这几天要更两篇文章&#xff0c;大家敬请期待&#xff01;明明是夏天&#xff0c;但却是个多事之秋啊~(ง •_•)ง2020年注定是不平凡的一年&#x…

C#中ManualResetEvent用法简介

简单介绍多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当控制线程调用Set()方法&#xff0c;所有等待线程将恢复并继续执行。ManualResetEvent是如何工作的在内存中保持着一个bool值&#xff0c;如果bool值为False&#xff0c;则使所有线程阻塞&…

anaconda和python有什么不一样_黄山毛峰的味道为什么会不一样?

黄山毛峰&#xff0c;最早为人所熟知的黄山名茶&#xff0c;最经典的绿茶&#xff0c;特别是那种清香清爽的味道&#xff0c;很受茶友的喜爱。这两年经常接到茶友的电话问&#xff0c;为什么之次每次买的黄山毛峰都不一样&#xff0c;在不同的茶叶店&#xff0c;买的味道都不一…

Newbe.Claptrap 0.10.2 发布,Blazor 演示

Newbe.Claptrap 0.10.2 发布&#xff0c;我们为项目模板引入了 Minion 以及 Blazor 制作的交互界面。更新内容 类库常规升级升级了相关的所有类库至最新版本。包括 Dapr SDK 1.1 等等。项目模板增强现在&#xff0c;我们为最新的项目模板引入了 Minion 以演示如何使用 Minion 处…

Linux资料分享,强势来袭!

小编从大学开始&#xff0c;便开启资料收集功能。随着大数据时代的来临&#xff0c;计算机发展进入新的阶段&#xff0c;再加上日常的深入研究&#xff0c;小编收集整理了丰富的Linux资料&#xff0c;内容涵盖“集群类”&#xff0c;“监控类”、“编程类”“系统类”等。这次小…

es6 ie不兼容 函数_ES6:什么是块级作用域?

在 ES5 只有全局作用域和函数作用域&#xff0c;没有块级作用域&#xff0c;这带来很多不合理的场景。我们先来看一下下面这种情况&#xff1a;内层变量可能会覆盖外层变量。var txt 外层变量-->你好呀;function fn() {console.log(txt);if (false) {var txt 内层变量--&g…

一个简单的规则引擎例子

本例使用的规则引擎包是RulesEngine&#xff0c;关于RulesEngine的介绍&#xff0c;请自行补充&#xff0c;这里只是一个极简单使用场景。例子大体就是用户有一些优惠券&#xff0c;系统会根据用户订单情况&#xff0c;筛选可以使用的优惠券供用户选择&#xff0c;用户选择后会…