作者十年码农经历,大大小小也参与了三四十个软件项目,然而大多数项目在实施之后都不了了之。今天我想来说说,为什么我们做了这么多低价值的软件。
软件开发还得从源头——需求开始说起。在今天互联网时代,需求有了另一个更流行的说法“痛点”。
互联网人特别爱说“痛点”这个词,到底是什么意思呢?我理解为类似一个伤者身体上的某些部位,用手一戳或者动一下就能触发疼痛,但是还必须经常用到这个部位。说白了,就是在某个领域或场景下的主要问题和矛盾。例如留学中介机构的存在,就是因为大部分有留学需求的人们对国外学校申请,国家情况,签证等信息不了解,难以完整的获取自己想要的信息。那么这里的痛点总结就是:
1). 关于国外留学的信息难以获取,信息量有限
2). 不知道如何准备和规划
我们通常所说的问题,大部分都是由痛点所引起的,并不是本质。所以当我们说“我需要一款软件/系统,可以帮我解决XX问题。”,一定要思考清楚,我们所说的“问题”是不是真正的“痛点”。这些年我们做软件外包服务,接触了许多企业客户,也发现这样一个现象:客户的需求往往是要解决紧急且重复的问题,而不是重要的问题。
我们的项目经理是这样打趣的说:
客户:我有这样的需求——我有一个仓库,里面放了新鲜的海鲜,还有冰块用来保鲜,但是冰块会融化,海鲜也容易变质。我想要每天都能吃到新鲜的食物。你能不能帮我解决?
那么在客户提出的这个需求里,什么是问题?什么是痛点?
问题——冰块会融化,海鲜容易变质。
通常我们就会开始给客户提出解决方案:冰块必须实时补充,建立实时监控系统,如果发现冰块不够了,就通知相关人或部门去补冰块。使用一套库存管理系统,对海鲜食物的入库和消耗进行管理。
痛点——客户想要随时能吃到新鲜的食物。
这里已经很明显可以看出“问题”和“痛点”的区别,对于解决客户的“痛点”,客户并不需要什么复杂的监控和管理系统,客户需要的是一个提供海鲜送货上门服务的应用和一台好冰箱。现在再看解决痛点的成本,对比解决问题的成本,高下立判,而且前者还引出了O2O服务方,冰箱供应商,将更多的角色关联起来,还可能顺带创造新的商业场景。
当我们在思考是否真的需要软件/I.T系统来解决问题的时候,可以先列出所有的问题,将这些问题一一进行分析,找最终使用的人了解其需求和问题,找到真正的痛点。或者有充足预算的,那么强烈建议拿出一些预算,请专业人士进行咨询和需求整理,专业的事情最好还是交给专业的人去做。
分析出痛点,捋清楚需求,想要一个什么样的软件/I.T系统,就十分的清晰了。但是我们仍然不需要着急的去找供应商,目前市场上有非常多各行各业都可以用的软件或应用,我们可以先花一些时间去找一找有没有功能上和自己需求比较贴切的软件。例如企业员工日常管理的,可以试试钉钉;网上卖货的,可以试试有赞;客服支持的,可以试试UDesk;甚至你想做区块链的,可以去玩玩以太坊。
很多客户会说,这些应用只能满足我的一部分需求。是的,对于很多企业客户来说,他们的对软件的需求,是为了要解决特定行业或特定领域的问题,要找一个软件能够100%覆盖需求几乎是很困难的,就算有,那么也可能非常昂贵。
但是我仍然建议我的客户去试试市场上现成的软件,主要目的是:
1). 大致了解这方面软件的发展情况,是否有新兴的或者牛逼的技术
2). 很快的就可以用现成的工具验证自己的需求是否真的切中要害,获取有价值的使用反馈,再完善自己的需求
3). 整理自己的使用体验,如果真的需要软件开发服务,在和供应商沟通的时候,可以更直观和准确的传达需求。通常对供应商来说,有对标的可参考的对象更容易理解客户的需求
如今的软件应用服务,已经高度模块化,网络化,借助各个云服务平台提供的各类基础服务,我们可以快速的构建各式软件应用和系统。云服务打破了许多技术壁垒,原先需要资深软件工程师才能实现的功能,现在初级的程序员大部分也能应用起来,通过组合各个云服务就能实现功能。甚至是视频直播也能够直接接入云服务接口来实现,而且还无需关心带宽、负载、性能、延时等问题,只要给云服务充钱就好了。
那是不是意味着我只要招一个程序员,就可以开发出我想要的软件系统?—— 答案几乎是否定的:
1). 云服务接口提供的是支离破碎的功能,而且不涉及业务数据和业务逻辑,等于说最核心的部分还是要从0开始做。
2). 市场上大多数的云服务接口都有安全权鉴设计,并按照良好的程序设计规范实现。这其实对整合接口的工程师来说,要求并不低,需要熟悉网络安全知识,具有良好的安全设计意识。举个例子,很多云服务接口,如支付宝的支付接口,微信登录接口等,大部分使用RSA和MD5密钥方式进行接口访问。我曾经碰到过几个客户之前遗留系统,竟然把私钥信息放到客户端项目里,一旦客户端被破解很可能出大问题。
3). 经验浅的程序员模仿云服务方提供的例子后,没有仔细阅读文档,认为功能已经实现了,就把代码整合到项目里,这是很常见的情景,包括我在几年前也犯过这样的错误。阅读技术文档并能理解和运用也是一种很重要的能力,工程师要能够充分了解第三方接口的缺点,性能,适用场景和不适用的场景。简单粗暴的堆砌模块和接口做出来的只能算是原型,经不起实际的运作。
云服务技术其实并没有降低软件工程师的技能要求,反而刺激的是工程师综合能力的提升。开发团队可以用更少的工程师,但是仍然需要高水平的资深工程师。对于非I.T企业或者本身就没有I.T研发能力的企业来说,期望能够在不投入大量资金的情况下,用一两名程序员就把系统做出来,但是企业本身缺乏技术研发氛围,很难吸引高水平的软件工程师,只能找到初级的工程师,甚至是应届毕业生,结果非常容易导致项目烂尾:项目根本做不来,或者做了个大概模样,程序员跑了。
对企业来说,软件不应只是效率工具,也不是简单的扫码和支付,在当下互联网和AI时代,软件应赋能我们用科技的力量从根源上推进业务/流程变革,要实现这样的愿景我们需要从最源头的需求出发,找出痛点,再用专业的流程和技术实施落地。之后我们会针对中小型软件系统实施和中小规模研发团队管理进行深入讨论。