项目结束已经很久了,没心情,不太想记录这些破事了,但还是有朋友关心,所以就整理了一下,也希望他人能从中吸取教训。
一、需求。随着与客户沟通的深入,发现H、F等前期的需求分析并不到位,有很多地方没有达到客户的期望。这时,X建议采用界面原型法开发,先做出个东西,让客户逐步确认是否是他们想要的,如果不是也请他们配合用书面文字提出自己的要求或改进意见。在这个过程中,客户具体负责人的本职工作很忙,有畏难情绪,并且他们一开始并没有重视这个项目(项目老板Y最初并没有与客户方达成书面合同,只是想通过此项目作为突破口打入政府机关的更多大项目)。后来,在客户方领导逐步重视并要求下,需求分析才有较明确的进展。此后,顺利设计了数据库,并准备在界面原型的基础上继续开发。由于时间紧张,就计划先开发一个基础可用版本,先不考虑人员信息变动要审批的情况。
二、开发。经过前一阶段做需求和界面原型开发的过程,团队成员彼此更熟悉了。在做需求的过程中,X也基本掌握了.Net Remoting技术,并开发了程序的服务器端和整个项目的程序框架。在这个框架的基础上,我们准备分工开发。X与项目组织者F商量,在团队中明确X的技术主导地位,能够去指导、检查H、K的工作,并做代码的合并与检测,以保证项目的进度和质量。必竟后来做的需求主要是X去做的,而且有相应的技术优势,并且根据X以往的带队经验,觉得这样会更有利于项目的进展。但是F不同意,说大家都平等分任务就行了。X也没说什么,那就平分吧。其实还是X主导大家商量着,相对平均的分了一下。大概一周多后,团队成员碰头,X、H的进度基本可以,但K的进度太慢,他只关注界面而忽略核心业务,确切说与业务相关的东西都没做。X、H心都很气愤。K说最近太忙没时间。K走后,X、H对F说,如果K这样子不如不用他了。后F与K沟通,K也说不想干了,但过了两天,F又说K还想干,希望大家给他一个机会,X、H也没脾气,只好同意。大约两周多后(暑假大家分头各自开发),大家又碰头,X的工作顺利完成(要知道这些日子,X加班加点,中间回家探亲也未与父母说几句话,天天埋头在笔记本电脑上),可是H的就差强人意了,K的就更气人了,进展很小。F后说,K说这期间家中有老人病危,我想信他的话,也很同情他,但即使这样也应该及时向团队说明情况,可以让团队及时调整工作,唉,不说了。K终于走人了,可是耽误的是时间,这一段时间客户方要求得更紧了,说一个月必须完成,否则本部门上级要开发一个比此简单的类似系统,完成后我们的系统就没法上报了(当然是无法申请经费了)。后来,H要去外地读博士,H也走了,没人了。X告诉F要再找人,一个人干不下去,而身体也越来越吃不消了。团队已经散了,或者团队压根没有形成。其实X也想放弃了,从头至尾X苦苦支撑,总想把这件事完整的做好,可是太累了。
三、坚持。F劝X再坚持一段,作为朋友X没有推辞,但坚持不再做具体代码工作了,身体受不了,需要再找人开发。F又找了一个学校的研究生Z。老板Y看目前的情况很着急,碍于情面并未挑明。F后来又一直出差,Y为了把此项目坚持做下来,又找了一个技术不错的D,D是Y的同乡朋友。Y就与X一道跑客户,并与X聊项目的组织等情况,希望X组织好后续的开发,后来一段时间X负责整理客户意见,然后分工让Z和D开发或修改程序,之后X测试并要求他们改进。前期的简化版基本出来了,D也渐渐掌握了整个项目的情况。X也不想干了,太累了,所以后续也不主动参与了。D有时候问X问题,X也详细解答。D成为后续开发的主要力量。
四、结局。这样,在X基本不参与的情况下,持续了近一个月。老板Y约F、X一块碰头,D也在。D演示了后续的程序效果,Y现在基本满意项目的进度,并要求商量一下D与前期F、X等工作量的问题,其实就是基于原先承诺给F团队的资金的分成问题,也是想做个了结。让X提议,X提了自认为客观的比例2:3,即D占2,F团队占3,大家都没异议。Y说这钱等项目在政府有最终结果时(哪怕是项目没有申请上)时再给。如果这钱没有结果,X真为自己前期那么投入去做这个项目感到不值。做软件开发太累了,今后X是不太想做了,当然X有本职工作,目前要尽量把自己从技术苦力中摆脱出来。
五、心得:
(1)缺乏组织的团队,无法真正形成合力,团队领导很关键;
(2)有分工才会有协作,分工不是平均分配任务;
(3)沟通、协作的素质是团队的基本要求,否则就无法敏捷了;
(4)界面原型法是有效的捕获需求的方法,MIS系统是不断随需求的变化演进的;
(5)简单三层架构在MIS系统开发中会使项目结构清晰,一般也勿须用更复杂的分层了;
(6)学点设计模式或者再深入学习下“抽象”会对程序设计有很好的帮助,能够一定程度上降低代码的耦合度,提高代码的扩展性、优雅度;
(7)用.Net Remoting技术开发分布式MIS系统不失为一种好办法,编程复杂度并算太大(采用简单三层架构);
(8)健康第一,挣钱第二!