在日常工作中,如果软件需求没有控制好,就会出现一些奇怪的方案。比如:一个50人用的软件,要求全平台(PC客户端、移动APP、小程序等等)铺开,而且要能承受1万个并发的访问。对于这种方案,我认为有几个问题:一、虽然功能一步到位,但是客户不一定有钱支撑。很多软件项目,开发一年半载后突然取消,往往都是客户发现钱不够用了,自己取消了。二、就算客户有钱,也会造成非常多的资源浪费。这就像你为了上下班代步,然后去买了台奔驰迈巴赫。这是完全没有必要的。
因此,这里就开始我们的讨论,如何做一个以需求为核心的软件设计。
首先,我们要评估软件功能数量、功能的重要性、开发的难易程度。很多时候,我们做方案,首要考虑的是工作量。因为,工作量直接决定了开发和运维的人力成本。所以,对功能数量、难度、重要性等等的评估可以得出一个合理的价格。起码,这个价格是经过计算的,让人信服的。另外,用户也可以根据评估的结果,对方案的内容进行裁减,得出一个更合理的价格。
举个简单的例子:如果我们初始有10个功能要做。但是在评估时发现,某个功能很复杂,开发周期很长,而且它不是核心业务功能。这样,我们可以跟用户协调,把它纳入下一个开发周期,另外签订合同。这样的好处是,用户可以按期上线系统,保证业务运行;同时,非核心的复杂功能,后续可以开发,也可以不开发;这个看客户需求。现在,很多大型系统的功能,都是分批签合同,分批上线的。它们的开发商,甚至是多个公司,不一定非要一个公司。
然后,我们要评估用户规模、使用习惯。在软件设计上,用户规模和使用习惯,决定了系统的开发难度和维护成本。比如:在开发和运维上,我们要考虑数据库压力。不管你用什么数据库,这个数据量会随着用户和功能的增加而增加。像访问记录、操作记录这些可以定期删除。但是,业务数据是不允许有缺漏的。按照经验上来说,一个系统的数据增长是按未来3年来计算的。因为,3年左右会有比较大的功能变更;所以,这时重新评估是比较好的。
在使用习惯上,我们更倾向于不全平台开发;而是根据用户的需要,先开发1-2个平台。原因是:不同平台,程序无法通用,需要重新开发。这会导致开发工作量和人力成本大幅上升。像网页端和电脑客户端,就无法通用。虽然,目前有很多跨平台的开发框架,但是能做到全平台推进的尚未出现。目前如果要全平台(网页、移动APP、电脑客户端、小程序等等)开发,你需要至少2个跨平台的开发框架。以我的经验来说,办公软件开发网页版就可以了。因为,电脑和手机都有浏览器(虽然,界面兼容有问题)。
最后,我们要评估系统安全性。在安全性上,并非全部客户都会考虑。有些内网用的系统,在服务器上设置防火墙就可以了,无需额外购置。如果,客户对于安全有要求,可以单独开发防护模块。到这里,这些成本不会太高。但是,如果客户对于安全有很高要求,你可能需要购置硬件防火墙。比如:WAF。这些硬件防火墙,是像服务器一样的一台设备。它内部写入了一些管理软件,可以在控制台设置过滤策略。但是,这投入少则几十万,多则数百万,需要客户自己选择。
以上就是我的一种设计思想,它主要是以实际需求为核心,渐进式推进软件项目。