草庐IT

做SaaS的程序员们,是时候关注企业架构了

汤师爷说 2023-03-28 原文

SaaS赛道是一个超大赛道,足够容纳上万家服务商,不太可能有哪个服务商能满足所有场景,大部分SaaS服务商在某个垂直领域,提供差异化的产品和服务。SaaS产品大部分都是面向B端客户,少部分面向C端客户,本文主要讲的B端SaaS产品。

B端SaaS产品的挑战

B端SaaS产品为企业提供协同办公的工具,帮助企业解决某类经营管理问题,核心价值在于增加收入、降本提效、管控风险。一般会按业务垂直或行业垂直来细分,业务垂直型的SaaS产品有CRM、人力资源、ERP、推广营销、财税、OA等细分市场;行业垂直型的产品有零售、餐饮、旅游、教育、医疗、物流等细分市场。

B端SaaS产品有以下特点:

  • 客户是一个群体:B端SaaS产品为某个企业组织服务,一项业务目标通常需要由多名角色完成,例如,订单履约流程,需要消费者、运营人员、仓储人员、配送人员共同完成,产品帮助他们高效完成分工协作。

  • 功能繁杂:由于B端SaaS产品涉及企业经营的方方面面,关联的用户角色多、业务流程长,反应到产品上,菜单、界面、配置项特别多,复杂度远高于C端产品。为了实现一项功能需求,往往会影响其他许多功能,需要进行全面的梳理,考虑各种极端情况,才能保证整体功能正常。

  • 定制化功能:B端SaaS产品必然会有很多定制化需求,如果一味抗拒,很容易丢掉一些优质客户,但如果大包大揽地接受,系统复杂度会指数级上升,高昂的研发维护成本将很难承受,所以如何处理好定制化需求,是一项非常艰巨的任务。

  • 见效慢、难量化:由于B端SaaS产品的客户是一个群体,产品上线新功能,通常是管理层先评估,能否在企业中适用,如果合适,才会组织一线人员,进行操作培训。这样一来一回,可能要2个月后才有客户正式使用新功能。其次,业务见效的影响因素非常多,很多时候并非因为产品设计问题。

这些特点都会导致SaaS产品的软件架构错综复杂,很容易严重腐化,演变成难以维护的“大泥球”,最终导致产品丧失竞争力,被市场淘汰。

SaaS产品的生产系统简易模型

通过一个SaaS产品的生产系统的简易模型,来描述SaaS产品的各个发展阶段的状态。

生产系统刚开始的状态

业务越来越复杂,架构腐化严重,生产系统的状态

期望的生产系统状态

企业架构是什么?

企业架构既包括对企业的愿景、战略、业务、组织的分析,又包括基于业务架构进行的应用系统分析与设计,是非常全面的架构设计框架。但很少有程序员了解过企业架构,更别提在软件研发过程中应用企业架构。然而,当下消费互联网的流量见顶,产业互联网必将成为未来趋势,企业架构也会越来越普及,谁先上船,谁就有了先发优势。

企业架构的历史

 

 

1996年,克林格.科恩法案颁布,美国联邦政府立法,强制要求政府机构使用企业架构理论构建自己的IT系统,最重要的机构是国防部、财政部,这一举措,直接让政府机构的数字化水平,像坐上火箭般高速发展。

同一时间,大名鼎鼎的TOGAF也在猥琐发育,它大量参考了政府机构的企业架构理论,沉淀出一套更加通用的企业架构方法论。

目前80%的福布斯排行榜前50名的企业,以及60%的美国500强企业,都在使用TOGAF理论改善自身的IT架构。

但是,目前中国各行各业对企业架构理论的理解和应用还处于非常初期的阶段。

企业架构期望解决的痛点问题

信息孤岛:业务与IT技术存在信息鸿沟,各业务域间存在信息鸿沟,协作效率低下。

标准不一:业务概念非标准化,系统边界划分复杂混乱,技术标准不兼容。

灵活性差:新业务无法基于已有的解决方案和能力快速组装上线,业务无法快速迭代创新。

企业架构的价值

认知框架的价值

有些人可能会问,认知框架能有什么价值?常见的价值不是新签客户数、客单价、销售收入这些吗?说的没错,这些都是最直观的业务价值,但架构想创造的是更深层次的价值,并不是很直观。

要说清楚认知框架的价值,首先要了解什么是认知负荷。认知负荷是专业的心理学理论,简单来说就是,人脑的短时记忆和处理的信息数是极其有限,一般人就2-3条信息,牛掰点的4-5条。但是,长时记忆的容量几乎是无限的,长时记忆就是我们积累的知识。知识以框架的形式存储于长时记忆中,框架就是根据信息元素的使用方式来组织信息,它提供知识组织和存储的机制,可以减少短时记忆负荷。

说人话就是,人脑的短时记忆和长时记忆,可类比为内存和硬盘,人脑的内存容量就芝麻点大,只能存储2-3条信息,但硬盘空间是无限的。为了提高人脑处理效率,就必须将信息进行抽象,原来有30条信息,抽象后就变3条了,这样就能处理过来了,而抽象的框架就是我们要说的架构。

其实整个研发周期,真正在生产(敲代码)的时间非常少,可能连20%都不到,产研团队大部分时间都花在澄清信息和认知信息上,有了认知框架,能够显著降低整个团队的认知负荷,进而极大地提升生产效率。

质量提升的价值

这个比较好理解,通过架构规划和治理活动,可以有效提升整个软件系统的质量属性。

产品层面的质量属性:

功能性:指软件产品能够提供正确的、符合预期的结果,能够安全地保存信息和数据,用户权限与访问权限匹配等。

易用性:指产品对用户来说易理解、易学习、易操作。

技术层面的质量属性:

稳定性:不容易出故障,出了故障也能快速恢复。

性能:软件的响应时间符合预期,在极端场景下(例如高并发、大批量数据处理等),也能维持一定的性能水平。

可维护性:软件容易修改,不会牵一发而动全身;容易调试和修复bug;容易落地自动化测试。

还有其他质量属性,不一一列举。

自我约束的价值

系统不做什么和能做什么同样重要,就像成功的经验需要固化下来,并规模化复制。成熟的认知框架也需要固化下来,并约束团队,让团队在正确的路上行进,错误的路就别再尝试了。例如,团队A做了商品管理,其他团队拿去用就行了,别再重复造轮子,最终导致一座座数据孤岛。

可能有人会说,这会约束团队创新吧?但创新和荒诞常常就一步之遥,这一步可能就是遵守最基本的约束规则。

企业架构的概念模型

本文主要参考TOGAF企业架构理论,但TOGAF的内容非常非常多,也常常被批评太“笨重”,不太可能应用到所有知识,这里介绍的已经是裁剪后的企业架构概念模型,保留最精华的内容,方便大家理解和实践。

 

 

  • 目标:指的是企业的宏观业务目标或战略,一般会依赖多个业务能力来实现。

  • 业务项目:指的是长期的、持续性的业务项目,一般需要制定明确的经营计划和财务预算。

  • 业务能力:业务能力描述了企业目前能做什么或需要做什么。业务能力建模的关键点在于它定义了企业做什么,而不是如何做(由业务流程描述)。业务能力独立于组织架构、业务流程、资源,准确地说,这些业务要素是支撑企业的业务能力而存在的。以“招聘人才”为例,“招聘人才”包括人力部门(人力资源团队)、业务流程(例如吸引、筛选、面试、雇用)和IT系统(例如招聘系统、人事系统)。准确定义的业务能力是非常稳定的,在过去的几十年中,招聘的流程、技术、模式发生了翻天覆地的变化,但“招聘人才”这项业务能力始终恒定存在,业务能力遵循高内聚、低耦合的特性,正是因为业务能力的这些特性,业务能力对构建IT架构提供了至关重要的帮助,围绕业务能力构建的IT系统会具备更加稳定的结构,并易于扩展。

  • 组织架构:想要深入理解企业的组织架构,是非常困难的一件事。因为大部分人都没有实际经营过一家企业,更没有参与设计过企业的组织架构。但组织架构属于 B 端 SaaS 产品非常底层的架构,非常考验架构能力,几乎所有的业务场景都需要应用组织数据,背后反应的是企业决策层的经营战略和财务战略,因此需要掌握一定的企业管理知识和财务知识,如果能够掌握组织架构的概念和要点,对设计好 B 端 SaaS 产品帮助巨大。

  • 业务流程:是指为达成特定业务目标,由不同的角色分工完成的一系列活动。活动之间不仅有严格的先后顺序限定,并且活动的内容、方式、责任等也都必须有明确的安排和界定,让不同活动在不同岗位角色之间进行流转与交接。业务流程对于B端产品的意义不仅在于对B端客户业务的一种描述,更在于SaaS产研团队对B端业务运营的理解和剖析,这种理解是对企业资源的优化、对企业组织机构的优化以及对管理制度的一系列深入探究。只有真正理解业务流程,才能帮助B端客户达成期望的目标:降低企业运营成本,提高市场需求的响应速度,争取企业利润的最大化。

  • 应用系统:即应用系统的架构设计,它起到统一规划、承上启下的作用,向上承接了企业战略目标和业务发展,向下规划和指导各个IT组件的定位和功能定义。通常包括系统、容器、组件、代码等元素的划分规范,以及它们的定义、边界和交互协议。

  • 服务:应用系统间的交互协议,具备一定的服务功能,并且提供给外部使用。

  • IT组件:具体的IT技术组件,例如,mysql、kafka、虚拟机、es等。

  • 提供方:提供和维护IT组件的人,一般是运维团队。

  • 技术类别:通过抽象IT组件的共性特征,对组件进行分类的方法,用于管理IT组件。

企业架构在SaaS中的应用场景

赋能企业数字化转型是SaaS产品非常重要的发展方向,而数字化转型最重要的一步,就是将企业的业务模式和商业模式从真实世界搬到数字世界,这需要对业务进行全量全要素的建模和采集。

企业架构在国外已经发展了二三十年,为什么又被重新提及。因为企业架构是一套非常优秀且在国外有大量成功案例的架构方法论,能够显著提高数字化的效率和质量。这样说可能比较虚,我们以零售行业为例,列举一些数字化水平低的经营痛点。

会员数字化水平低

  • 门店与会员互动的渠道主要是个人微信号,个微限制较多导致大量会员流失。

  • 门店会员缺乏触达渠道,进店率低,由于疫情原因,会员招募逐年下滑。

  • 会员被掌握在导购个人手上,随着人才流失而流失。

  • 会员数据没有合理采集和使用,只能基于销售数据或财务数据决策,单客价值挖掘效率低下。

渠道数字化水平低

  • 线上线下交易履约流程没有标准化,线上运营主要依赖外部人员,业务数据散落在各处。

  • 渠道全链路数据无法收集,没有数字化手段洞察消费者需求,不同渠道的商品布局规划只能依赖经验做决策。

  • 渠道商对数字化认知低,前端用户数据收集难,系统打通难。

烟囱式的系统架构

  • 企业内部系统烟囱式发展,系统之间数据没有打通,数字资产无法共享,无法相互连接。形成一座座数据孤岛,完全没有发挥出数据的价值。

  • 建设IT系统非常烧钱,企业花了大把的投入,但缺乏企业自上而下的全局设计,对业务收益甚微。

总结

既然企业数字化转型已是必然趋势,掌握数字化这项武器是大部分企业的必经之路。企业数字化转型不仅推动和加速SaaS发展,也是SaaS的巨大红利。

当然企业数字化转型肯定不是一件简单的事情,道阻且长,既要循序渐进,也要掌握好的方法论,企业架构可能是需要重点关注的解题方法。

有关做SaaS的程序员们,是时候关注企业架构了的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  9. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  10. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

随机推荐