上次说到单位刚好有一个大的项目,这个大项目使我第一次进入了软件项目管理的领域,项目团队由3家公司的技术人员组成,另外聘用了一名第三方项目经理负责管理。
3家公司的人被打散分到各个小组,有负责架构设计的,有负责前端界面的,有负责后台服务器的,还有文档和测试人员,其中不乏名校毕业的研究生。我们用户方则找了本部门系统的业务和技术专家。 按说,这么“豪华”的阵容编写一个专用软件不成问题,但是我们的需求要求能允许用户在软件框架内自己定制业务规则,我们称之为二次开发,这就大大增加了开发难度。 在前期整理的需求基础上,30人的团队到郊区封闭,人人摩拳擦掌开始工作,花了2月多时间开发出一个试用版,交付用户试用,没想到我们精心制作的软件遭遇了挫折,用户反映软件很不好用,既不符合用户操作习惯,又运行速度缓慢,团队中的资深数据库设计师私下里和我讨论,觉得数据库设计有问题。 经过短暂休整,队伍重新集结,团队里已经有人离开了,3家公司分别补充了人员,对底层设计进行了检讨,形成了新的设计,这次的开发我们着重改善用户体验,每一个原型都充分听取业务专家的意见,自己不懂得的就让专家画出来,二次集结耗时5月,我方项目领导一直驻在现场,慢慢取代了第三方项目经理的职责,实践证明这种组织模式更加高效,但这是建立在他个人的技术背景和管理水平上的,并不一定适用于四海。 结束封闭以后,软件再次交付后基本可用了,我们又在公司现场集中了1个月,主要由其中1家公司负责接管另2家的代码,并负责技术支持。 软件正式上线以后,虽然也产生了一些性能问题,但总的工作做下来了,没有太多的错误。 我在这个项目中学到了HP-UX系统管理,中间件,Oracle数据库的操作和管理,包括备份恢复。我还对开源数据库软件有了新的认识,由只注重功能强到考虑全面和均衡,对小型机和PC机的认识也改变了。 此刻单位又承担了一个新项目,虽然规模不如第1个大,但数据量却大于第1个。还是由第1家公司开发,这次我们花了很少的时间就修改出了能用的软件,但是由于业务规则上的疏忽,软件在收集数据的最后时刻发生了严重问题,各地用户着急万分,领导连夜把公司技术人员召集到现场,加了三天班,修改了错误,重新收集数据,我们度过了一个难忘的元旦假期。 我在这个项目中学到了不同项目虽然外表相似,但是内部业务规则还是各有千秋。问题就像野兽,哪怕是一只小兽,如果轻视它,就会被咬到。 又有一个新领导和更大的新项目来了,经过招标,第1家公司凭借前2个项目打下的基础再次中标其中一包,这个项目还有一部分和机器识别有关,由另一个公司中标,我们又迎来了战斗的时刻,因为有前面的基础,封闭的时间比第1个短,组织模式也发生了变化,我方项目领导派了助手一直驻在现场,负责协调,公司也有一名项目经理负责开发并和我们用户交流,经过长期的消化,公司形成了完全属于自己的设计,对数据库的利用加强了,不同平台跨平台部分统一到了java,不用单独用C语言针对平台开发了,还用到了Python语言,取代了自己编写的脚本语言引擎,用户自定义语言更加简化。由于动手早,项目结束封闭后基本上由我方确定几个里程碑时间点,公司自主决定开发进度,我们定期检查,相对第一个项目,我们注重了过程文档和技术的消化,请公司来讲解设计,我们的人利用公司提供的素材编写技术手册,加深了对软件设计的认识。项目的实施阶段,虽然我们早就为性能进行了专门设计,比如分区和外部表、物化视图,但是高一个数量级的数据量变化还是给了我们压力,我们调试存储和主机IO,修改算法。客户对软件大体满意。项目验收也有条理地完成。 我在这个项目中学到了Oracle数据库的更多新技术,并用于实践,自己也考取了Oracle 9和10的OCP。问题是,对于逐渐成熟的公司和客户,我方怎么把握项目的边界,比如,软件公司和机器识别公司的接口,一开始双方各执一词,有了新的需求都往对方公司推托,协调比较困难。还有一个是怎么控制软件升级对老版本功能的继承和抛弃。 |