从项目管理的角度分析一个失败的软件项目

前段时间公司领导安排我完成一个android的小项目,功能为完成手机短信的分类功能。由于考虑到可能会和某运营商合作,项目需求多变,项目名到项目死掉的那一刻也没有想好,暂定叫短信管家。前段时间参加了今年软考中的高级项目管理师考试,对项目管理有一定的了解,由于在实际的工作中没有参与项目经理的角色,对项目管理的知识理论和实际结合还有一定差距。我一向是喜欢挑人毛病的,本文也不例外,将结合项目管理的知识领域来分析项目中存在的问题,并给出纠正的措施。本文并不想按照项目管理的44个过程组来写,不想受项目管理理论知识条条框框的约束。

项目简介

在2013年元旦后上班第一天,经过领导简单介绍项目后,项目正式开始启动。项目参与人员包括我和一名美工。由于公司没有做android项目的经验,我是公司唯一懂点android项目的技术人员,我之前也仅仅是自学过一点。经过两个星期的学习之后开始了android项目的开发,春节前领导希望看到一个版本出来。离春节放假还有三天,美工搞出一个首界面来,我仿照首界面基本搞定。后来领导一看不符合需求,其实领导之前就看过首界面效果图,只是没有仔细看。当然领导也不知道要做出个什么样的东西,估计心想着技术人员弄出个什么样的东西来再修改。
年后,对需求开会进行了重新整理,通过思维导图的方式跟领导确定需求,就需求中存在的疑问进行确认。不过后来事实证明经过领导确认的需求也是在不断变更。这次的需求要远比上次复杂,将原来的短信分类从一级短信分类更改为了二级短信分类。公司没有互联网行业产品的经验,美工给出的效果图也仅是从桌面端来考虑移动产品的设计。我最终决定自己开始重新设计软件的界面,参考了众多同类软件,花费的时间比较多。大约到2013年4月底产品已经基本可用,经过我自己的测试和领导的使用效果还算可以。后来发现不支持彩信,经过我的一番研究后发现现有的产品功能要对彩信支持需要耗费非常大的工作量,因为软件本身的功能打破了android系统短信的设计,也难怪了android的应用中没有功能相似的产品出现。这也成为了该项目失败的直接原因。

可行性研究

技术可行性

项目的起源来自领导的短信泛滥,领导想着能够搞一个拦截垃圾短信并对短信进行管理的软件将是酷的一件事情。领导接触过一些android,片面的认为这种方案在技术上可行。我也做了一个调研,发现现有的android软件项目中没有此功能的产品。

经济可行性

支出分析:由于项目主要参与人员仅有我一人,支出的成本较小。收益分析:现在的互联网产品都是先圈用户再考虑盈利,我们这个软件产品也不例外。

运行环境可行性

对于产品的运营存在两种方式:1、跟某地方运营商合作;2、自己单独发布。

总体而言,由于项目较小,对可行性研究基本忽略,没有科学、可观、公证的对项目进行可行性分析。

范围管理

在项目立项的时候仅有一个产品的大致方向,做一款android系统中的短信分类管理类应用。从始至终领导对于产品的理解在不断变化,每次变化都需要修改很多代码,跟领导对于导致产品研发过程做了很多无用功。
在项目进行到一个月后,我认识到了项目这样下去反复修改不可能有好的结果,因此跟领导召开了需求定义的会议,就产品的需求用思维导图的方式就项目的范围进行了定义,会后就需求中没有考虑到的问题跟领导进行了沟通确认。此次会议之后项目的需求基本敲定,虽然之后领导有需求变更的情况,但是相对较少。

进度管理

由于公司初次开展android类项目,对项目的进度很难掌控。项目开始时负责市场部的领导给出了一个月之内完成的计划,我心想我自己加把劲应该能搞定吧,因为最初的项目需求还比较简单。我用了两个星期的时间来学习android知识,用两个星期的时间来开发,结果到最后我才刚根据美工提供的效果图完成了首页,我总是不能很好的估算自己的工作进度。这篇《为什么程序员总是不能准确预估工作量》的文章或许能替我解释些什么。
在项目范围确定之后我对自己工作的进度管理也不够好,第一次尝试做android项目,未知因素太多,编码中总能遇到这样那样的问题。

成本管理

项目的整个成本应该我的人力成本占了绝大部分,本来软件项目中的人力成本就是占的比重较多的,何况主要是我一个人参与的项目,自然我那微薄的人力占了项目成本的大部分。至于后期项目的盈利并没有过多考虑,现在的互联网行业本来就是先圈用户后盈利。

质量管理

我在项目的编码过程中,一般一个小功能完成之后都会进行详尽的功能测试。由于功能不负责,产品的质量只要多测试一般问题就不大了。

人力资源管理

项目的初期我就感觉项目不可能成功,但是领导坚持要做,而且我一个做C++的程序员来写android的代码,我当时居然仅有听从领导的意识,没有适当的表达自己的想法。当时怀着一己之心认为可能一个月项目就完成了,完成之后工作依旧,还可以熟练熟练android的开发,谁知一练手就是做了五个月,而到最后项目仍然没有成型。
由于一直对项目持悲观态度,始终认为我自己开发出来的产品我都不想去用,用户怎么可能去用。长期自己独自做,兼任了产品经理、美工、码农的工作,做的过程中还要担心着需求的变更,在项目进行到中后期的时候, 缺少激励因素,对工作激情不够,这也影响了项目的进度。

沟通管理

在项目的开发过程中基本能保持没完成一个关键功能跟领导汇报一次项目进展。在项目中沟通方面存在不少的问题,尤其以前期严重。前期由于跟领导的需求不一致,导致做了很多的重复性劳动。领导对项目的需求本来就不够明确,一旦有好的想法就加到项目中,这也导致了跟领导的沟通困难,因为这样的沟通效率太低。

风险管理

项目可研阶段对技术可行性分析研究不够,导致了后期在对彩信进行分类处理的时候遇到了技术上的难题。当然前期的可研阶段做充分的技术可行性研究也是不太现实了,因为本来技术对公司而言就是未知的。最好的办法就是对自己不熟悉而且短期内不能实现盈利的项目不参与。

文档管理

由于项目管理中要求每个阶段都有输出的文档,这么繁琐的文档我相信中国找不出几家软件公司能够办到,能办到的估计都已经死掉了。此项目中仅有范围定义的思维导图、我在编写某个具体的功能代码前绘制的流程图,应该说文档及其少。但我目前不认为这有什么不对,我还是坚信某些情况下看代码比看文档要来的更快,特别是看我这种android菜鸟写的代码。更何况此项目的需求在不断随着领导的想法而变化,文档都没法写,写文档的成本太高。

我的一些反思:

在项目中我也存在不少问题。

  1. 项目开始阶段应该向领导表达清楚自己的想法,阐明自己对项目的看法。
  2. 对项目的进度没有很好的把握。
  3. 对技术较为熟悉之后可以适当的学习后期开发功能需要技术,比如一直没有研究彩信的技术实现,导致后期在开发彩信功能时遇到技术问题。如果能够提前学习相关技术就能够提前预支项目的风险。