案例讲解一:如何两周救活一个濒死项目
一、当时现状
1、项目情况
项目已经开发了半年,投入了公司大部分的人力,有专门的测试员。项目部负责人本身的管控力度还不够,然后这个项目其实是已经失控了,但是他肯定不会去跟老板说已经失控了,所以那就按计划去投入上线吧。
上线的结果就是整个系统运行都非常的慢,简单说就是你点一个链接要等好几秒钟这个列表才显示出来。然后程序员是那种责任心不够强的,也不愿意真真正正的去解决问题。
这个项目是一个全渠道营销平台的项目,需要跟外部的好几个系统做对接,整个项目有差不多10个子系统吧,算得上还是比较复杂的。
2、具体情况
1)人员配置
1个测试经理(兼项目经理,也就是对客户的第一责任人)
3个经验丰富一些的主力程序员
4个普通程序员,普通程序员里边有一个不错的小伙子,做事是比较用心的,但是做的很郁闷
微商城是找外包做的
2)所用语言
java、php、.Net
二、整改过程
1、详细了解这个项目的本质的东西在哪里
我通过详细的和项目经理沟通完了以后,初步了解到就是功能大致上是有的,只是运行起来很别扭,而且运行起来非常慢。
接着和团队里边的高级程序员做了详细的沟通和了解,同时让他们跟我讲代码。在这个过程中,我基本上就知道这三个人都是那种混的,反正他有水平,你公司也不可能把它开掉,,但是他们都不是那种会真正花心思去解决问题的思路,反正就是你老板让我做什么我就做什么,你不叫我就不做。
和每一个普通程序员也都做了交流,然后我就发现了,这个普通程序员里面有一个非常不错的小伙子。
还有一点要说一下,就是当时我过去的时候我正好找到了一个我以前带过的小弟,小伙子给我的印象非常深,他的整个技术水平还有他做事认真的这个态度都是我非常欣赏的,所以我在上一次和他共事之后就一直关注着他,和他这几年来一直保持着很好的联系。 进这家公司的时候,当时我就决定要挖他过来。有了他,我知道我是可以处理掉任何技术上的难点。 我来负责把控大局,做好项目的管控,技术的东西交给他去负责出方案,最后我来把关,那么我们是能够配合解决掉难题的。
最后分析出来的结果是:
1)这个项目可以救活过来,因为功能其实都已经做得差不多了,只是说由于这些功能之间相对比较孤立,使得整个系统最后跑起来的时候有问题,想要解决这些问题需要整改的代码量其实并不大
2)项目经理也就是测试经理还是比较负责任的,但是那几个主力程序员不行,没有责任心,这个是这个项目能够出现现在这个情况的最大的病根,然后因为我这边带了一个能干的人过来,所以这个问题也能解决。同时在普通程序员里面那个比较不错的小伙子,可以提拔上来。有了这两个人那么整个人力配置这一块基本上就OK了
3)系统架构这一块话呢,需要做一个重构,从原来的那种各个子系统相互孤立方式变成用业务组件的方式去抽象,把核心的业务功能合并到一个个业务组件里
有了以上分析,那么我就知道,依赖当前资源能够救活这个项目,然后我评估出来的话呢,大概是两周就可以重构完成。
2、具体实施过程
首先是和客户解释说再给我们一点点时间,让他们不要把我们给放弃掉了。
接着引入禅道,全面地对整个的项目开发管理过程做精细的管控,把每一个详细的工作任务全部都给细化了,每天我要干的事情就是去监控这些任务是不是按时完成了,同时我来做代码review。 核心的事情交给我说的那两个小伙子去做,原来的主力程序员直接边缘化,其他的普通程序员给他们打气说我们一定能够完成这个事情。 当每个人看到他每天做的事情都能够得到我的肯定以后,整个团队的风气就不一样了,然后就很顺利的按计划两周完成了重构。
重构完成以后上线,这个时候整个系统的一个响应已经比以前有了很大的提升,基本上来说是属于可以用了。当然不可能说两周就把一个项目完全搞定,接下来的更重要就是后边的一个持续的优化,每周做一次迭代,每周更新一个版本,让客户看到我们在不断的进步,不断增强客户的信心。
然后就没啥了,后面其实就是不断持续改进的一个过程了。
三、经验总结
以下几点:
1、解决任何问题,必须先搞清楚出问题的本质原因在哪里
2、对于技术上有一定复杂度的项目,资深程序员不作为往往是主因
3、不懂技术的项目经理,被人品不好的程序员欺压很难避免
4、本项目是一个已经开发基本完成的项目,基本功能已实现,只是存在性能、bug问题,优化的代码量不大
5、根据业务做组件化抽象是大型项目必须要做的,做好业务抽象后,处理bug的代码修改量会大大减少,一定谨记重构的原则:先重构,再修改bug,千万不要两个同时做
6、一定要敢于相信人品好,有责任心的程序员,即使他看起来经验还不足,只要给于足够指导,能顶大梁
7、管理出效率是真理,通过软件管理工具,项目经理做好工作任务细分和进度管控,核心程序员解决技术难点,基层程序员只需要按工具上的任务单做事,各司其责,效率和品质会得到质的提升
8、每一个迭代周期都绝不允许任何延误,即使少量预定工作未能完成,只要不影响大局,也要按时发版,整个团队必须养成按计划发版的习惯
下图是这个项目的系统架构: