架构师是业务与产品之间的桥梁,其应该具备技术与产品的商业意识并且需要有将技术转化为产品的能力。而当前软件架构师在工作过程中往往离不开开源的软件项目,因此经常面临两个问题:”什么是产品?“以及“如何将一个开源的软件项目产品化?”
一套科学技术分析方法的背后有一定有着深刻的理论基础和哲学背景。找到了这套技术分析的源头,才能从本质上把握这套技术,看清其全貌,明了其长处和短处,这样在具体应用中,才能得心应手,提高胜算,并不断的丰富和发展这套技术。基于此,本文提出了一套如何将开源软件项目产品化的方法论。
然而理论与实践是相互作用的,宏观角度知道方法论之后还需要从微观上进行实践,不然就如同知道很多道理却过不好这一生,知道很多原则却写不好代码一样一样的。
产品的定义:
产品是指做为商品提供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物品、无形的服务、组织、观念或它们的组合。
从产品的定义中我们可以看到以下几点:
因此基于以上的产品的公理化定义以及定理化推导得出产品的第一性原理定义:
产品 = 属性 + 价值 + 交易
从以上公式中可以认为产品是以属性为要素,以价值为连接,以交易为目的,属性又可分为有形属性与无形属性,二者之间有时候并不是割裂的,价值是能满足人们的某些需求,是物品与货币之间的连接关系,交易是产品生产的目的。
然而这些都是教科书式的 定义,对产品的认知到这一层次已经可以超越绝大部分人,但它也只是停留在”产品“层次,而不是“作品”,更不是“艺术品”。
在我看来 产品 还是具有灵魂的,产品是由人创造的,其自然会带有人的思想、人的创造、人的理念在里头,宗师与学徒画同样的一幅画,虽然东西都一样但是那个味道往往是不一样的。因此,要理解一款产品还需要理解其背后的人的设计理念,在此,我给产品注入人的灵魂,即“理念”,从而进一步扩展产品的第一性原理:
产品 = 属性 + 价值 + 交易 + 理念
开源软件是信息的载体,其表现形式是具有无形的信息属性,是作为计算机程序的形式而存在的,要将开源软件产品化就需要将开源软件的属性价值化、可交易化以及注入人的设计理念。
如何将一个软件产品化回答的是“How” 的问题,在此之前还应该搞明白“Why”的问题,一个软件产品或者其特性为什么需要做也有一套方法论,这里我称之为 “产品交付之双轮驱动模型”(如下图):
在这个双轮驱动思维模型里有以下几个原则:
因此,在将一个技术产品化之前,先花几分钟时间问问其价值在哪里,为什么需要做这个,这一点很重要,要能区分客户要的是能马上就能解决痛点的止痛片还是可有可无的无关紧要的维生素,从而以此进行任务排序,明晰产品交付与客户价值的双轮驱动关系,要能清楚的理解“以客户为中心”的价值理念以及让产品的获得“商业成功”的终极目标。
通常来讲开源软件的产品化可以从价值、交易以及理念这三个方面进行。价值:可服务化、无形化有形、价值竞争,交易:可度量化、个性标准化,以及融入人的设计理念:复杂简单化等。
可服务化指的是从技术实现上支持可服务化,ToB产品常常是半产品半服务的,而且一般会签约服务质量保证协议SLA,因此除了团队需要有替客户解决问题的能力外,还需要从技术与流程上支持可服务化,其中包括:
当看到以上类目,脑海里就能闪现出需要怎么去实现这些以及用什么组件可以最佳实践的快速完成交付,而不是停留在概念的阶段,那才算对可服务化有了自己的理解。
无形化有形指的是将无形的软件硬件化或者云化,单单一个软件包是难以让用户买单的,需要把它硬件化,打包到服务器里以有形产品的形态销售出去,或者云化后以服务的无形形态销售出去。
价值竞争指的是"参与到客户的购买周期中,在每个阶段为客户创造价值"[3],从单纯的销售产品到提供整套生态化的解决方案。单纯的依靠销售产品往往已经难以给客户提供差异化的价值,并且也会面临低利润的同质化竞争,那么这个时候就需要更进一步的提供生态化的解决方案,针对行业需求做端到端的全生态化的解决方案。
生态化的解决方案化能给客户提供差异化的价值关系。比如,一份药品在药店里只能卖30块,而且只是一次销售无法挖掘后续价值。但是到了医院就不一样了,其依据客户的”恐惧“为刚需的基石,提供一整套的类生态化的医疗解决方案,从挂号预约、望闻问切、到各种仪器设备过一遍、再到开出药方、再依据客户的反应效果把这个过程再来几遍,因此在药店里30块钱的药,在医院里就能卖到 300块、3000块,获取十倍、百倍、千倍利润。
PS: 做生意要走正道,有良心的医院“以客户为中心”药到病除,无良医院“以利润为中心”无尽压榨病人,祝早日倒闭。
可度量化指的是质量要可以量化,可预测的业务指标(比如AI训练里的精度、加速比、收敛时间、训练次数等)、性能、可靠性、可用性、可伸缩性、稳定性、容错性、可测试性等,这些很抽象的指标要能量化。在产品功能同质化的场景下,质量是最重要的差异化竞争力。
业务性能、可靠性、可用性、可伸缩性这几者之间页互相制约,质量与成本、时间也互相制约,同时在云化的场景下客户又有SLA要求,不满足SLA要求的服务,除了要赔钱,还严重影响商业信誉,因此质量指标之间也需要合理取舍。
个性标准化指的是将个性化的、“DIY”化的开源项目转成标准化的、可复制的、可量化的,同时依据资源的规格约束进行标准化,比如依据服务器规格、虚机规格,机架规格等进行标准化,例如AI服务器的配置就需要定义CPU、内存、磁盘、带宽以及训练卡的标准的规格,这样才能提供可预测的性能、可预测的加速比等质量指标,再比如云端场景下的服务监控,除了定义指标的名称之外,还需要定义监控指标的类型、故障码、输出的标记以及对应的处理措施等,所有的这些都要能标准化、可操作性化。
复杂简单化指的是把复杂的体验简单化, 抽象及简化API、量化的安装步骤、高内聚低耦合的设计、易用的UI等,这里又涉及到产品设计哲学、人类的心理学等,也跟人的设计理念相关。
本文以方法论的形式解读了软件开发过程当中经常会遇到的两个问题:”什么是产品以及如何将一个开源的软件项目产品化“,讲的是“无用”的知识。
日拱一卒,功不唐捐,分享是最好的学习,与其跟随不如创新,希望这个知识点对大家有用,另作者能力与认知都有限,”我讲的,可能都是错的“,欢迎大家拍砖留念。
常平,中科大硕,某AI独角兽深度学习首席软件工程师,前EMC 大数据资深首席工程师,主要工作背景在深度学习、流式大数据、云计算、分布式中间件以及Linux内核,个人技术Blog: https://www.changping.me
[1] https://a16z.com/2019/10/04/commercializing-open-source/
[2] https://baike.baidu.com/item/%E4%BA%A7%E5%93%81/105875
[3] 《价值竞争:以客户为中心的销售转型》 - 付遥
本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh
在遵循署名、非商业使用(以获利为准)以及禁止演绎的前提下可以自由阅读、分享、转发、复制、分发等。
领取专属 10元无门槛券
私享最新 技术干货