2011年初接手XX考试项目至今,中间历经数次的需求整改,屡次的开会讨论需求,终于像小孩学步一样蹒跚的完成了这个项目的前期开发工作,期间的酸甜苦辣,只有自己能品尝。
   我接手项目的时候,项目已经开始,技术选型已经确定,因为是Java开发,难免采用SSH老一套,并且已经做了部分开发工作,因为开发任务紧张,我们就在原先的基础上进行了开发至今,但是越开发到最后,就发现项目的可维护性与可管理性有着很严重的问题,最可悲的是没有测试代码,任何一个错误都可能引起全局的变化,自动化测试也没有。
   因为采用Java开发,项目的需求决定了技术的选择,因为这个系统可以同时允许多个考试同时运行,并且每个考试相互独立,各个考试之间并没有直接的关系,并且在考试开始之前定义报名字段,报名的样式之类的操作,所以报名字段基本上可以说是字段是动态的,并且一次考试的压力大,不能影响其他考试的报名,所以在初期我们选择了数据库分库的形式,即一次考试一个独立的库,各个库之间没有关联,但是程序还是放在一起,其中如何解决动态创建、加载数据源,采用什么方式操作数据库都有过很多争论,幸好我们解决了这一方面的问题。
   项目开始时,项目组有4-5个人,其中我们2个人负责核心业务的开发,并且工作量特别大,于是进行了封闭开发,在了解需求的基础上,我们闷头开发,相互沟通不是很多,最可悲的是,这家伙受不了折磨走了,当然待遇是最重要的原因,结果他一走搞的我很被动,因为我们两个人的开发的业务不一样,个人本身的开发工作量挺大,我接手他的工作困难挺大,最可悲的是把项目交给了完全不了解的人,并且此人到现在都没加入项目组,数次倒手,情况可想而知。
   都说成本,进度与质量是个三角形的关系,这个我们也知道,毕竟计算机科班出身,这点还是了解的,但是项目组频繁的换人,进度无限压缩而成本控制又太严格,质量就不用说了。在项目紧张的时候,领导说,再加几个人就可以了,当时很无语,真的加几个人就可以了么?这让这个项目很悲剧,而添加进来的人水平参差不齐,而对于我,除了成天嚷嚷他们外,没有任何办法,让他们离开项目,不可能,离开了没有人再加入进来,大家都很辛苦,特别是在我的成天怒吼下,我想请他们出去玩玩,放松下,不可能,项目没有特别的资金,当然有干得不错的家伙,给他们点奖金吧,不可能,说了不算,太无语了。
   我是个项目管理的新手(说好听点叫项目管理,难听点是什么都干,出了问题领导可以点名骂你,而我除了分配任务外,检查任务外,其他的权利什么都没有),管理能力有欠缺,也很感谢项目组成员能忍受的了我成天怒吼,也非常期待有项目管理方面才能的人才给与迷茫中的我指导。
   所以项目能坚持到现在,对我来说,我个人觉得是个奇迹。但是我仍然从其中学到了不少东西,大部分都是项目管理类的东西,总结一下,希望能走出软件作坊:

1、公司离开谁都是损失,这不符合软件公司发展。
   任何人到公司,首先安排重要的工作给他,等他有其他的想法或者工作调用,此部分工作重新安排或 找其他人接手,对项目进度和质量是严重的打击。  原先有朋友在XX公司,普通开发人员是使用他们公司自己开发的中间件或者组件进行开发,对于核心的开发并不参与,其中有些人离职或者其他的原因调离此岗 位,对项目的进度和质量没有太大损失,我们按照组件式的开发是个开始,我们的目标也应该是朝这个方向努力,逐渐摆脱软件作坊式的开发。
2、客户负责测试,我们是错误驱动或者是bug驱动开发。
   我们的东西出来,一般没有专业的测试人员去测试,而是由开发人员自己测试,一方面时间上不是太充裕,另一方面自己开发的程序自己测,也测不出什么问题来,等  客户使用的时候,就会出现各种问题,我们再负责去修改和改正错误,对我们的项目或产品来说是一种失败,同时对客户体验来说,也是对我们非常不利的。
3、各个项目的技术选择
   我们什么技术都用,什么技术好用什么,每个项目的技术使用都不一样,特别是Java,今天出一个框架,明天又出一个,我们频繁的选择,频繁的更改,实际上是一种错误,最后什么都没有沉淀下来,任何一个项目开始都是从头开始,并且各个系统难以整合。

   发了那么多得牢骚,带着这么多的迷茫,马上就迎接2012年的到来了,至于玛雅人说得世界末日咱也不管了,把明年的工作以及稍微整理下吧。
   历经和客户多次开会讨论需求,自己对需求的理解能力和客户想要的东西也逐渐掌握了,此项目看似简单,实际上是有至少10个子系统组成的有点规模的系统,无论是在开发,还是在部署的时候,都对我们提出了更高的要求,所以为了更好的服务于客户,我们绝对2012年对项目进行重构,具体目标有:

  1、核心业务系统引入SOA,通过服务编排以及服务治理,更高效合理的管理业务平台。
              2、为了迎接更大量的业务,引入数据水平和垂直分割数据服务系统。
              3、鉴于系统由多个系统组成,并且系统之间存在无数次的交互情况,在SOA的基础上,形成数据交换系统。 
              4、前端引入HAPoxy,Memcached集群。
              5、全面引入虚拟化(VSPHERE 5),更强更好的组织服务器资源,当然,这也与程序开发无关。 
              6、引入Hadoop云计算平台,用于日志分析以及访问信息审计。

希望此愿望在2012年能实现,阿弥陀佛,上帝保佑,阿门阿门!