几分钟让外行了解软件开发

软件开发,是一个重度依赖脑力的行业。

客户特点, 上来就三句话:

  • 能不能做
  • 多少钱
  • 多长时间

这三个问题都很难以得到准确的回答.因为几乎所有的销售(外包公司) 和 项目负责人(非外包公司)都会说: 能做! 哪怕他之前根本没接触过这类技术.

多少钱也很难获得准确的数字. 因为需要先估算工作量.

多长时间做完也难说, 因为需求不明确.

所以, 先清晰,简单扼要的表达出你的需求, 对方才能给出靠谱的答案.

客户的第二个特点: 一句话需求

  • 我要做个跟淘宝差不多的商城.
  • 我要做个能聊天的app,跟微信那样
  • 我要做个能发帖子的app, 跟微博那样.

如果你的需求还停留在这个阶段, 赶紧细化一下! 具体见: 所见即所得设计法

这个行业的项目成功率是不高的.

目前还没有一个准确的数据, 估计将来也很难有. 因为很少有人会自曝家丑. 更不愿意承认自己的项目是失败的而惹上麻烦.

很难量化工作量

例如,在传统行业(如家装)中,一个贴砖工人的工作量,我们可以按照平米来计算。 铺砖到地面,王师傅一天铺100平米, 李师傅一天铺120平米,我们可以知道李师傅铺的好。

因为这个活儿大家都能做,所以市场上的价格也比较透明。一平米40块是标价。

但是软件开发中,几乎每个功能都是自定义的。例如:

软件开发是重度自定义的。

曾经有前辈(Rational rose) 提到过模块理论。在1980年代左右提出,意思是20年后的 软件开发将会特别简单。大家只要使用 模块化的思想,把软件中的一个个“螺丝”生产出来, 那么软件中的可重用的模块将会越来越多,一段时间之后的软件开发工程师都不需要写新 代码了,直接把现有的组件组装起来就好了。

甚至 Rational rose 的做法,就是让架构师设计好架构,一点按钮,整个实现代码就自动 生成了。

当时这个思想风靡了软件行业。

但是这个想法经过现实的检验,是根本无法可行的。 因为在当今的互联网浪潮中,每个用户都对软件的需求不同。

难于对软件系统做分解。

你是把你的功能分成: 论坛,博客,CMS?这样的大模块?

还是把它们继续细化,比如,把论坛分成:

  • 注册
  • 登陆
  • 发帖子
  • 回帖子

两条路都难走。 开源项目有很多, 随便google一个 CMS, 会出现上千个开源CMS项目。 但是只要你试用一下,就会发现,适合你的太少。要么页面风格不对,要么功能跟你想的 不一样。要是改的话,嘿嘿。你又掉到坑里了。

参考: 开源项目之坑

所以,我认为软件项目最多细化到 “螺丝钉”的层面,例如:

  1. 开发框架, 例如: rails
  2. 最常见的组件,例如:上传功能,第三方登陆,支付(例如支付宝)

99%的内容都无法重用。 就算是同样的一个财务软件,在不同的公司用起来都完全不同的。

万能的办公司自动化系统? 难以重用!

曾经有朋友咨询过这样的需求,希望做这样的事:

发出一套万能的办公自动化系统(Office Automation,简称OA),然后卖个各个企业. 这个想法特别符合国家的政策。

想一想就是不可能的。比如,同样的一套财务软件,在两个公司内用起来就完全不同。 有的公司是实报实销, 有的公司是先借款。

而很多专门开发财务软件的公司,都会专门为用户组织培训,让他们使用自己定义好的流程。

所以千万不要幻想开发出一套万能的办公司自动化系统, 这个事情永远不存在。