如何做好软件项目,这是摆在软件实施团队每个人面前的关键问题。笔者在此提出一些浅见,供大家参考。欢迎在评论区交流!
目录
【摘要】
本文阐述了做好软件项目的五个关键方面。首先,需树立正确的需求调研理念,深入挖掘用户需求,避免后期修改带来的高成本。其次,设计阶段需进行详细设计并与用户多次论证,确保设计成熟后再进入开发阶段。第三,系统设计应遵循"大道至简"原则,避免过度设计以提高系统性能、可靠性和可维护性。第四,项目经理应专注于项目管理要素,将设计、研发等工作交给核心成员,保持清醒头脑做好监督与把控。最后,强调团队凝聚力的重要性,项目经理需积极进行人力资源建设,培养团队精神,降低项目成败对人员的依赖。
【正文】
一、树立正确的需求调研理念
在软件系统需求分析阶段,我们需要尽量详尽、彻底的挖掘用户需求,通过与客户的多种沟通方式了解用户需求。
在很多项目中的需求分析阶段存在着一种情况:需求分析人员即便根据自身经验,结合用户提出的需求,即便想到了一个很好的功能,能够完善或改进用户现有流程,但往往出于项目成本考虑,不会和用户沟通此功能的实现。因为他们担心:如果说了,用户肯定要实现,这会提高开发成本。
需求分析人员的这种做法,出发点是无可厚非的。但是经过许多项目开发过程,我们发现有很多用户提出的后期修改需求,在前期需求调研阶段需求分析组就已经考虑了,只是没有就这些需求与用户沟通。而用户经过使用系统,逐渐认知到信息化改善传统工作的能力后,会自发提出此类需求变更。这给项目带来的改动成本更高,不少需求分析人员对此后悔不迭。
因此,在软件需求分析阶段,应该树立正确的需求开发理念,要想用户所想,做好需求挖掘的工作,替用户规划尽量完善的系统功能,再结合项目进度要求与用户沟通,进行需求的裁剪,或推迟到二期实现。那种由需求分析人员自作主张砍掉某些对系统有价值的功能需求的做法,是不可取的。
二、谋定而后动的开发工作
在软件系统设计阶段,我们需要进行详细的设计,包括界面设计、流程设计等,并以原型方式展现给用户。在与用户进行原型设计稿的多次论证,建立需求基线,再进入下一阶段。
我们看到有很多项目,项目经理或设计人员考虑时间紧、任务重等情况,将设计工作草草收场,过早的使项目进入开发阶段。这些不成熟的设计很可能成为项目失败的主要因素,而且由此导致的后期修改也将投入更大的人工成本和时间成本,因此用户很不满意。
另外,有些公司的需求分析、设计文档要么过于简单、要么过于偏向"八股文"式的形式,与实际需求脱节。用户根据这些需求分析及设计文档,无法"认知"到系统投入应用后的场景,提出修改意见无从谈起。因此需求确认与审核工作草草收场。这给系统上线后,带来了大量的需求变更。
因此,在项目对于需求分析、系统设计要严格实行评审程序,即便是由此可能会耽误项目进度,也要向诸位项目干系人说明情况,争取理解项目真实情况,认可项目组需求分析工作。对于软件开发来说,设计阶段的"纸上谈兵"比开发过程中被迫"埋头苦干"要好得多。要知道很多系统缺陷,越早发现,解决得越彻底,成本越低。详细而负责地进行设计的论证,是组织与用户双赢的唯一途径,此阶段一定要做到谋定而后动。
三、大道至简的系统设计
大道至简意味着"少而精、小而美"。在系统设计、开发阶段对于需求的实现,应尽量化繁为简,轻巧地进行系统实现。在很多失败的项目中,项目经理或者设计人员更多关注的是尽可能提供完善系统功能、提高项目的扩展性和灵活性。因此,在设计阶段往往出现了许多"过度设计"的情况。项目组往往花费几天甚至几星期对设计方案进行微调,仅仅为了增加过度的灵活性或者不必要的复杂性。这样做"看上去很美",但实际效果往往与期望背道而驰。其结果往往是背离了系统需求的主线,将造成客户和公司成本的提高。在项目总结时,设计人员才会意识到这样做,减少了用来实现必要需求、排除系统缺陷的时间,而这对项目而言才是更重要的。试想,如果设计人员假想中的场景是小概率事件,根本不可能出现,那么按此场景进行的大量的需求分析、设计论证及代码开发工作又有什么用呢?其结果无疑会导致大量无用的代码充斥系统之中,白白增加了系统的复杂程度。直接导致系统性能、可靠性及可维护性的下降。
也许有人会说,我们可以采用不断重构地方法,删除这些无用的代码。但是,实际情况是,发现存在多余代码的时候往往是项目后期阶段,此时项目组时间和压力很可能不允许有重构的时间,项目干系人也可能不会允许这样去做。因此项目组往往自我安慰的想:已经开发出来了,继续留着吧。于是随着这些无用代码的堆积,项目经理、设计人员和其他开发人员,尤其是那些新成员,就得在毫无必要的庞大而且复杂的代码基础上工作了,或许这样的代码的唯一好处就是降低千行Bug率。有人戏称这样的项目为"粪坑"。为了避免这一问题,人们决定分头负责系统的各个部分,比如每个人单独负责一个模块,而这看似能使工作更容易,但是副作用又产生了。因为每个人都在自己的小天地里工作,很少看看别处的代码是否已经完成了自己需要的功能,最后生成大量重复的代码。过于复杂设计下的代码会影响生产率,因为当其他人接手一个过度设计的方案时,必须先花上一些时间了解设计中的许多微妙之处,然后才能自如地扩展或者维护它。另一方面,作为用户使用系统时,过于复杂的设计往往带来过于复杂的操作和控制,用户要牢记许多步骤才能完成操作,这时操作失误往往成为必然。如此设计带来了大量的用户抱怨和维护工作量。
许多设计人员和开发人员在进行过度设计时甚至自己都不曾意识到。而当公司发现团队的生产率下降时,又很少有人知道是过度设计在作怪。因此作为项目经理、设计人员,我们心中要时刻牢记"大道至简"的道理,谨记过度设计总在不知不觉之中出现。
四、专注项目管理的项目经理
在许多公司中中,项目经理在承担项目管理工作,管控项目计划、成本等要素的同时,还承担着系统设计、关键技术的研发工作。项目经理必须具备"博大而精深"的各方面能力才能很好的完成使命。而其实博大和精深是存在着悖论的。面对繁杂多类别的工作,往往难以做好每件事,经常顾此失彼,摁下葫芦又起瓢,这样的项目经理经常疲于奔命的在项目中工作,成了项目的"超级消防队员"。
因此项目经理一定要保持清醒的头脑,把握好工作核心:管控好项目进度等项目管理要素,对于设计、研发等工作尽量交给其他核心成员去做,不要什么事情都是亲力亲为,只要做好过程监督、关键点把控和结果检查即可。
五、打造高执行力的项目团队
电影《天下无贼》中的黎叔抱怨:"人心散了,队伍不好带啊"。在技术素质较高的软件开发团队尤其如此:在很多项目中,建设伊始群情激昂。可随着工作压力增大,建设时间延续,团队成员人心涣散,缺乏核心凝聚力,致使项目后期问题百出,甚至无法通过项目验收。究其根本原因就是缺乏团队精神的培养与塑造。一个群体不能形成团队,就是一盘散沙;一个团队没有共同的价值观,就不会有统一意志、统一行动,当然就不会有战斗力。如此下去,项目到了后期,往往人员离散,给项目维护工作带来难度。因此作为项目带头人的项目经理,必须要时刻如何带好队伍,建设团队精神,积极进行人力资源建设。
在项目管理实际工作中,项目经理一方面应提高项目内在凝聚力,打磨个性化的"螺丝钉",把所有生产步骤尽量流程化,使任何一个工作岗位成为可按部就班的"螺丝帽",强调员工的"螺丝钉"精神,让其在尽快时间内能取代别人或被别人取代,降低项目成败对人员的依赖,在维持团队正常运作的前提下,尽量鼓励成员的个性发挥,让死气沉沉的"螺丝钉"尽情欢歌。另一方面,要注意培养核心成员,尽早培养一些有潜力的核心成员。当项目人才流失时,及时有后备人才跟进,降低人员流动给项目带来的风险。