软件工程之美9讲——为什么软件工程项目普遍不重视可行性分析?
软件工程之美9讲——为什么软件工程项目普遍不重视可行性分析?
为什么软件项目很少做可行性研究?
-
“因为我们是软件项目,所以我们很特殊。”“我们很特殊”,这句话听着有没有很熟悉?软件项目确实有和其他工程项目不一样的地方。比如说软件项目很抽象,以至于在立项之前对于问题的描述(需求)和解决方案(技术方案)通常都是模糊不清的,只有随着项目的推进,才能逐步搞清楚需求。而可行性研究是基于问题和解决方案来分析的,因此这有点像“先有鸡还是先有蛋”的问题:你得先立项才能慢慢搞明白需求是什么,然后才能有解决方案;而你只有搞明白需求是什么,以及解决方案是什么,才能去做可行性研究。但“我们很特殊”,不能成为不做可行性分析的借口,可能项目需求最开始是模糊不清的,还不具备可行性研究的条件,那么等到项目有了一定的进展,需求逐步明确后,要继续对可行性做研究。如果发现方案不具备可行性,也应及时调整方案或停止项目以止损。
-
“老板拍板的项目,明知道不可行也得硬着头皮干呀!”这个问题要分类讨论,有两种情况。第一种情况,多半是由于老板或者项目负责人控制决策权,且对于不同意见容忍度较低。底下人不敢提不同意见,明知道不对也只能执行。如果你是项目执行人员,不能参与决策,但觉得项目明显不可行,我仍然建议你尽可能站在专业的角度给出科学的分析,通过合理的方式反馈意见。毕竟,项目如果失败了,你也一样可能遭受损失。如果你就是老板或者项目负责人,则应该建立可行性研究的意识,并理性听取不同意见,科学客观地进行可行性分析,以便有效降低项目失败概率。第二种情况,老板或者项目负责人能接触到的信息更多、更全面,同时还有战略上的一些考虑,所以下面执行的人觉得不靠谱,并不代表真的不靠谱。举个例子,2009 年阿里巴巴决定做阿里云的时候,公司反对者占绝大多数,只有马云和王坚等少数人觉得这个项目可行,而且必须做。最后,事实证明他们是对的。所以有时候,也不要着急下结论,可以换个角度思考下,也许是你因为条件限制还没想清楚。
-
“软件项目是鼓励创新、鼓励试错的,可行性研究会阻碍创新!”这也是一种很典型的错误观点,认为创新就可以不做可行性研究,否则会阻碍创新。实际上可行性研究和创新从来就不是矛盾的,它反而可以帮助你提前过滤掉那些不靠谱的创新想法,提前发现可能的风险。想一想文章开头关于 React Native 开源协议冲突的案例,虽然是一个创新性的项目,却未绕过开源协议引起的法律纠纷。如果当初有法律方面的可行性研究,完全可以改用开源协议更友好的同类开源技术,避免项目的失败。
如何做好可行性研究?
前面,我们讲了可行性研究在软件工程中的重要性,也帮你厘清了几个常见的困惑,接下来我们来看看“如何做”的问题。其实,当你决定要做可行性研究,你就已经成功一半了,怎么做反而是相对简单的部分!软件工程的教材里面,通常会讲如何写可行性研究报告,很繁琐,要撰写诸如引言、背景、定义等内容。在这里,我们关注的重点是,软件工程中是如何去做可行性研究的。
如文章开头所说的,通常从三个方面着手做:
- 经济可行性。从成本和收益角度分析,看投入产出比。不仅要分析短期利益,还要分析长期利益,看是不是值得做。
- 技术可行性。软件项目最终是需要人通过技术来实现的,所以要分析技术上是不是可行,如果有技术上解决不了的问题又能否规避。
- 社会可行性。社会可行性涉及法律、道德、社会影响等社会因素。比如,触犯国家法律的事情肯定不能做;产品如若不符合道德标准,可能带来较大的社会负面影响,那么也要慎重考虑。