这两天读了 Twillo 创始人 Jeff Lawson 的新书《开发者思维》(Ask Your Developer),对他的书中前半部分的主要观点,“企业应该自己构建软件”,颇有同感。
Jeff 认为,所有的企业都会成为软件企业,像软件一样,不断地从市场获取反馈、迭代升级,并把这些知识内化到企业流程中。因此,所有企业,都应该为自己的核心业务自建软件。
自建软件,意味着,不购买标准化软件或者不使用 SaaS,也不把软件开发工作外包出去。
“构建还是购买”(to build or to buy),这是个问题。
Jeff 认为,在数字时代,客户要跟企业的软件直接打交道,企业使用什么软件会影响客户体验,因此,软件就成为企业竞争力的一部分。标准化的软件无法提供额外的竞争力。
使用现成的软件,就意味着要改变企业原有的工作流程去适应它。这不仅可能降低企业的效率,更糟糕的是,当企业的核心业务依赖于标准化软件时,它就失去了持续优化业务模式的敏捷性。
为核心业务构建软件,是企业对自身进行建模的过程。在这个过程中,企业可以提炼出业务规则、业务中的公理,也可以审视和修正原来低效率和不协调的步骤,用软件的思维、数字的方式重塑它们。软件的迭代,反过来也能推动企业的迭代。
最直接的理由,就是慢。因为每一次迭代,都要准备好一大撂详细的功能需求,才能立项,报价,签约,然后才正式开始开发。周期过长。
但如果问 Jeff ,他的主要理由却不是这个。
Jeff 在这本书阐述了一个核心理念,那就是要把客户和业务上的问题分享给开发者,让开发者参与到分析过程中,才能设计出更高效、更合理的解决方案。
如果你的核心软件全由外包团队开发,你自己的团队不知道系统的内部逻辑和运作方式,不了解技术的可能性,那么,当需要开发功能来应对新业务、解决新问题时,你的团队就可能难以提出合理的技术需求,难以选择恰当的解决方案。而外包团队往往会偏向于采用更复杂的实现方案,因为他们通常是按工作量收费的。
一直以来,自建业务软件,对于大部分企业(特别是中小微企业)来说,都不是个选项。因为要克服的障碍是全方位的。
首先,企业不一定有合适的人才,来设计和开发高质量的软件。
其次,当企业在决定为某类软件投入资金时,通常已经到了急需解决问题、痛点明显的时候了。自己从零开始规划和开发软件,在时间上来不及。
另外,自建软件的费用也的确是远高于购买标准化软件或者使用 SaaS 。
Jeff 在书中回顾软件行业的发展历程,把它分成三个阶段。
第一个阶段是软件套装销售的时代。像 SAP,Oracle 这样的公司,把 ERP 装在光盘里,以永久授权的方式出售给客户。
第二个阶段就是以 Salesforce 的崛起为标志的 SaaS 时代。云计算成为基础设施,软件通过多租户模式服务于不同企业,企业通过订阅付费的方式来使用软件。
第三个阶段,则是数字供应链时代。许多企业专注于解决特定领域的技术难题,并将解决方案包装成 API,以服务的形式提供给外部。企业可以购买和使用这些 API,把它们组装起来,构建出自己独特的核心业务软件。这些形形色色的 API,就构成了企业的数字供应链。
Jeff 从 API 的购买和使用者的视角,提出了数字供应链的概念。而从 API 提供者的视角看,这就是我们熟知的 API 经济。
在数字供应链时代,编写软件变得越来越容易,变成了组合各种积木块的过程。如何组织和整合这些积木块,如何开发面向客户的软件,就是企业在迭代自身业务时,需要持续回答的问题,也可能是企业创造附加值的关键所在。
Jeff 认为,在数字供应链时代,企业不用再纠结于“构建还是购买”(build vs. buy)软件的问题。
企业需要“构建和购买”(build and buy)软件。于是,问题变成了,哪些部分应该自己构建,哪些部分可以从外部购买。
他的经验法则是:任何东西能让企业实现差异化、获得竞争优势的东西,都应该自己构建;直接面向客户的部分也应该自己构建。
这有点像领域驱动设计中对不同子域的划分和思考。在领域驱动设计中,我们通常会区分核心子域、支撑子域和通用子域。核心子域是构成我们竞争优势的业务逻辑,需要自主开发;支撑子域是非核心但必要的业务功能,没有现成的解决方案,可以自行开发或者外包;通用子域是行业内普遍存在的业务需求,已经有成熟的解决方案,可以直接购买使用。
在数字供应链时代,通用子域的范围越来越广,解决方案也越来越丰富。
另外还有两个正在让软件开发变得更容易的趋势,是 Jeff 没有提到的。
一个是低代码运动。各种各样的低代码和无代码产品,让软件开发变得更加简单和高效。一方面,它让本来并不从事软件开发的专业人士,可以通过图形化的方式,编排和整合现有的软件组件,定制出适合自己工作场景的解决方案,完成实质上的编程活动;另一方面,它也让专业的软件开发人员,可以更多地关注业务领域的逻辑和模型,专注于如何组合那些积木块,更快地构建出高质量的业务软件。
另一个则 是 ChatGPT 这种生成式 AI。目前它虽然不能替代开发人员,但却能给他们提供很大的便利。它可以帮助开发人员生成代码、文档、测试用例等等。而且,这类 AI 的发展速度惊人,如果能和专业的低代码平台有效地结合起来,就会大幅降低软件开发的门槛,让我们真正迎来数字化时代。
PS:如果你访问不了 ChatGPT ,也还没有用上 New Bing。不妨关注我们的服务号,体验一下我们基于 OpenAI api 开发的对话机器人,它使用的是 OpenAI 在 3 月 1 日发布的 gpt-3.5-turbo(chatgpt)模型。