文/明道云创始人任向晖
甲方的企业采购行为大多数应该是理性和趋利的,但我们企业软件行业中却总是存在一些匪夷所思的甲方要求。他们因为某种莫须有的理由,强行要把这些要求施加给供应商,看起来是达成了自己的某个目的,实则搬起石头砸了自己的脚,和供应商一起双输,真是伤“敌”一千,自损八百。
不允许分包和外购
不允许分包和转包是工程招标中的一项实践。它的目的是为了防范不受控制的交付验收和防止逃避资质规定。在强制安全管控行业,这是正常的采购规程。
但即便是建筑工程,不允许分包并不意味着不允许外购。几乎所有的混凝土预制件都是专业厂商提供的,工程设备也可能是租赁公司提供的,工程公司管理和交付的只是施工本身。
然而我们软件行业的禁止分包规则却被无限引申,认为软件项目必须由承接方一行一行代码自己写完,不能采用第三方企业的技术和产品。制定采购招标法的机构完全没有这个意思来禁止利用社会化分工带来的效率,但是甲方客户却容易作茧自缚。明明简单的整合就能够完成的项目,却变成了高投入、低质量的定制开发项目。
在构建一个应用软件的过程中,开发者应该利用所有可用的技术栈,包括开源的和商业的。数据库、中间件、开发工具、应用平台、数据集成工具等等都是现代企业应用必须依赖的组件。项目经理或者架构师可以根据技术适应性和成本进行综合考量。但是,无论选择谁,都意味着外购。
禁止分包和外购,对于软件项目业主来说,除了提高成本,降低质量,没有其他额外的好处。
必须驻场开发
外包人员必须驻场是软件项目业主常见的要求。所以,很多大企业都设立了外包开发办公室。我曾经在一家大型股份制企业参观过外包开发中心,一座大楼乌泱乌泱坐满了几千名来自各个软件企业的程序员。中国排名靠前的几家软件企业也都是以人员外包为主要的商业模式。
软件开发是否是值得外包的业务流程,这个是另外一个话题。但不管怎样设计运营战略,外包必须带来更高的效率和更高的质量,因为供应商可能拥有了专有设施、工具和训练方法。比如呼叫中心的外包就是一个合情合理的事情。软件开发外包则绝少能够提供这样的效率与质量红利。大多数软件外包人员拿着比外包人月价格更低的工资,做着千篇一律流水线般的工作,是很难为甲方业主提供额外的附加值的。我很难想象驻场在客户从事外包开发的程序员能够有自由度去探索、实践和学习。真正高水平的人员是不可能长期从事外包开发工作的。顺便说一下,这也是我们的零代码应用平台产品深受客户欢迎的原因,因为再多的外包程序员,做的都是千篇一律的数据增删改查应用。
所以,甲方强制要求驻场开发必然限制了软件服务企业提供更加有创造力的智力活动。他们能够得到的至多就是一个四平八稳的交付。在软件工程中的性能优化、交互体验设计、集成架构设计等问题都不会有任何动力来解决。按时间和人力付费,也造就了软件开发服务行业低水平的价格竞争。
更有甚者,甲方还会要求驻场开发的程序员不能联网,不能带入自己的电脑,不能带入U盘。这听起来当然是出于安全保密的考虑。但是,你让一个程序员进行完全的离线开发,手敲每一行代码,简直就是在亵渎软件行业。水平再高的程序员也要随时能够查阅文档,这些文档很多是通过互联网提供的。不能联网,对于程序员来说,就像工匠被绑住手脚一样。计算机和网络的安全从来都是靠分权设计和管理制度来解决的,而绝对不是依靠物理的隔离。如果所有的安全问题都要诉诸于物理隔离手段,那么这个世界上就不会有计算机网络了。
指定技术栈
甲方有时候也会提出指定技术栈要求,这通常是为了和业主自用技术栈保持一致,使得出现问题的时候,甲方有机会能够接手。这个要求的缘由可以理解,但是在实践中却也十分不合理。
首先,今天技术栈的丰富程度已经和十几年前的单体应用时代不可同日而语。不仅有多种高级语言的主体选择,还有各种开发框架的组合,甚至为了完成一个应用需要结合使用多种模态的数据库、中间件。云原生时代,技术栈的选择显得更加不重要。微服务架构保证了不同技术栈开发的软件服务可以协调运行。
另外,专业开发服务公司所使用的技术栈一般都要比厂商既有的管控技术栈要先进。如果长时间固定技术栈规则,则隔绝了技术进步为企业带来价值。随着时间的推移,这个规则就是确定的让自己退步。是实在不可取的守旧政策。
指定技术栈还约束了服务商提供人才的自由度和灵活性。这必然会提升服务成本,而成本最终也会转嫁到客户身上。
必须提供源代码
在技术栈要求一致的前提下,甲方就会经常要求乙方提供源代码。对于软件产品公司而言,这肯定是难以做到的。商业软件随意公开源代码是对商业模式的不负责任。而且,软件产品本身就是连续迭代的,提供一个固定拷贝的源代码给客户,并没有什么实用意义。
即使是定制开发的软件应用,源代码能够给客户带来的价值也很有限。如果真的为了扩展开发,开发者也需要架构设计开放接口,提供REST API文档,通过接口编程来避免过度耦合,而不是把裸代码提供给客户就了事。在任何情况下,直接修改源代码的段落都是可靠性极差的做法。
如果是为了申请软件著作权,国内的申请流程只要求提供代码片段即可,完全不需要完整的源代码库。
我从业这么多年,还从来没有看到什么企业拿着供应商提供的源代码继续进行二次开发的。所以,这个要求对于服务商来说,就算没什么伤害,对甲方也没有半点价值。
软件必须买断
在SaaS兴起之前,大多数软件产品都是一次性定价销售使用许可的。在这个商业模式下,企业级软件产品尤其昂贵,而且,当客户要购买升级版本的时候至少还要支付升级授权费用。SaaS流行以后,按照使用时间订阅付费的模式开始普及。不仅云端SaaS可以用订阅制,哪怕是On Premise的私有部署产品也可以。买断和租用,SaaS和私有部署是两个维度的问题。
使用订阅制的企业软件产品一般会有长期的产品迭代。频繁的甚至每个月都有版本更新,根据客户需求和市场的变化不断提供新的能力。持续的订阅收入给软件产品公司带来持续创新的动力。订阅制也让客户可以选择资本效率更高的财务模型,把资本开销转换为费用开销。
但是大多数国内企业依然十分不习惯这种购买方式。他们坚持许可证必须买断。这种购买习惯其实助长了服务商的短视,因为他们只要将产品卖掉以后,大部分的收益就完成了。下一个版本可以十年以后再说。
到底是租用划算,还是买断划算,其实这个经济账并不难算。采用一个合理的生命周期和贴现率,我们可以比较两种计价模式的净现值。如果厂商提供租用模式,客户可以用这个方法来比较一下,选择净现值更低的定价模式。如果算下来租用更划算,那企业无论如何是没有必要坚持许可证买断的。
全面国产化
本来我们这些民族软件企业的诞生就是为了发展国家信息产业创新的能力,但是因为这一点,要求所有的软件组件都要全面国产化就是非常狭隘的理解了。我们好几个潜在客户因为明道云产品没有全面兼容国产数据库而被放弃,我觉得是很遗憾的事情。
软件行业的进步可能比任何行业都依赖前人的成果,也是最国际化的行业之一。不拥抱全球开源软件生态,那是绝对不可能做出优秀的软件产品来的。基于Apache开源协议的软件产品因为它明确的自由使用规则,是全球开发者不可能,也不应该放弃的资源。可以这么说,没有这个开源协议,就不会有云计算,不会有大数据,不会有人工智能,也不会有这么多丰富多彩的应用产品。国产化的前提就是合理运用开源软件生态,国内很多科技企业都是Apache协议相关产品的主要受益者,也是领先的贡献者。
错误地理解信创产业,狭隘地定义国产化是很多国有企业、政府机构项目的不合理要求,这相当于将最好、最便宜的软件技术拒之门外。至于有人担心开源软件暗藏安全后门,或者突然卡脖子,那是因为他们对开源软件世界缺乏了解。相反,开源软件的自由开放性正是保证了它的最高安全可能。我们隔三岔五就能够得到开源软件的安全补丁,这是因为有全球开发者的参与。
软件行业有高度的专业性,它也有内在的发展规律。大型业主希望使用自己的议价能力得到好的交易条款是无可厚非的事情。甲方的要求可以是理性的,也可以是逐利的,但不应该是僵化的,教条的。因为后者的行为很可能不符合软件产业的内在规律。满足客户的要求并不意味着给客户带来好处,它们只会让开发服务者和客户企业双输。
最近文章