如何让技术架构师具有预知未来业务发展的能力
大家好,今天我们来分享业务架构,但是我们并不是以产品经理角度讲述一个业务架构是什么以及如何做?而是以一个技术架构师的角度,讲述如何承接业务架构或在没有业务架构的时候,如何判断业务变化趋势而对系统架构提前做出反应。
一、发生背景
研发人有技术架构,产品经理有业务架构(通常是一个人),当一个技术架构师不懂业务架构的时候,就会出现如下对话。
技术工程师小王:“产品经理又改需求,昨天和我说订单按照库存状态拆分,我刚刚上线今天又和我说按照促销类型类型拆分”
架构师小孙:“业务本来就发展迅速的,那天他还和我说想根据商品体积拆分的,被我挡了回去”。
技术工程师小王:“厉害,还是你有话语权”。
我相信大家经常遇到类似的问题,然而如果技术架构师懂业务架构,就会变成下面的对话场景。
技术工程师小王:“产品经理又改需求,昨天和我说订单按照库存状态拆分,我刚刚上线今天又和我说按照促销类型类型拆分,还好,你上次和我说这块规则是多变的,让我把不同订单拆分逻辑,拆分为原子化,我改下配置就搞定,不愧是架构师,你怎么知道这块多变?难道会占卜?”
架构师小孙:“哈哈,预知未来本来就是架构师的职责”。
技术工程师小王:“快教教我吧”。
下面我们就来学习下如何,如何让技术架构师具有预知未来业务发展的能力。
二、解决方案
技术架构师需要了解业务架构的知识,但是又不用像产品经理知道那么多,例如价值链等等概念。他需要知道的如何识别业务发展变化趋势,并把对应部分的技术架构做好结构化、扩展性。我今天就来介绍一个简单的方法- MIT知识模型。简单来说是 1:映射(Mapping) 2 识别(identify) 3 询问(ask about)
映射(Mapping):所有的需求可以映射到如下系统化、结构化的语言,计算机程序是在什么样的场景(事件)下开始行动,程序需要读取哪些数据(实体),依据什么样的顺序(活动)、规则(任务)由谁(组织/角色)执行,执行后会产生哪些数据(实体)。但是针对一个特定的场景来说,顺序(活动)、规则(任务)由谁(组织/角色)是更容易多变的。
识别(identify)&询问(ask about**):所以我们在和产品经理沟通需求的时候,最主要的是识别顺序、规则**(组织/角色通常在权限系统RBAC模型可以配置,可以不用多考虑)。如何快速识别顺序和规则呢?
1、 顺序:一个场景经过的多个业务活动,这个通常产品经理的业务流程图会展示,例如商品引入功能,需要经过“洞察”、“选品”、“招商”、“法务”等多个业务流程节点。找到这个顺序后,主要问产品2个问题就可以判断是否多变,“这个顺序,是否在不同客户/渠道/品类等不同端或渠道不同”,“这个顺序,是否因为短期上线压力,妥协只是做了简化”。
通常产品经理在调研的时候会获得这个信息。如果产品经理不确定,可以让产品经理在调研下,有个这个信息,在系统架构处理的时候,就可以有多种方式处理扩展性,可以做出多个微服务,或者利用流程引擎工具实现扩展性。
2、规则:通常是( IF A then B)模式,他通常在在每个顺序节点下面,例如在商品引入的“洞察”的业务活动时候,如果发现有如下话术“如果商品是大家电,需要考虑竞对价格因子”,“如果商品是滞销类型,可以不用参与洞察”等等。
如果发现这类术语,基本可以判断是规则;当然还有些规则比较隐蔽,需要我们来挖掘,例如案例中**“订单按照库存状态拆分,我刚刚上线今天又和我说按照促销类型类型拆分”,**这里其实并没有那么明显的( IF A then B)模式,但是通常有形容词的动词,都有可能变化(例如 按照库存状态拆分)。
但是如果在挖掘下或仔细思考下,就可以看出出来这个两个拆分逻辑,一定是有条件或顺序的,否则同一个订单拆分会乱套的。
如果在这个时候,我们在追问下产品2个问题,
“1、这个规则,是否在特定的条件下才有效,例如客户/渠道/品类等不同端或渠道、时间段、优先级顺序”。
“2、这个规则,在不同客户/渠道/品类等不同端或渠道,还有可能其他规则“。
同样,如果产品经理不确定,可以让产品经理在调研下,有个这个信息,在系统架构处理的时候,就可以多种方式处理扩展性,最简单代码的可以做策略模式,或利用配置文件、规则引擎dools等实现扩展性。
三、案例分析
通过以上简单的模型,我们就客户还原架构师小孙,在和产品经理沟通的需求场景。
产品经理小李:“这次我们要做个业务,订单履约。这是我的PRD,今天我们一起看下。“
架构师小孙:“PRD写的挺详细的。通过我这个PRD。我们理解了订单履约大概要实现的功能,你看我这样说是否正确:订单履约功能需求,需要读取订单数据,在经过拆分、打标顺序,产生多个拆单后订单,并传输给物流系统。通常这些工作,由系统自动处理无需人员干涉。是吧?”
产品经理小李:“是的,大的逻辑是这样的。”
架构师小孙:“这里拆分、打标顺序,否在不同客户/渠道/品类等不同端或渠道不同。是否因为短期上线压力,妥协只是做了简化?“
产品经理小李:“我调研了4个客户,3个订单渠道,以及竞品都是经过这个这几个环节。目前看没有在新节点的可能性。”
架构师小孙:“好的,那我为了成本考虑。我先把流程节点设计为固定,后续你这里发现有多变的场景及时通知我,另外我看你在拆分环节,提到订单按照库存状态拆分,这里是所有订单都按照库存状态拆分吗?”
产品经理小李:“额,我我觉得是。“
架构师小孙:“我建议你在调研下,不同客户/渠道/品类等不同端或渠道下,是否有不同逻辑”,通常在有形容词的动作,都是可能变化的。”
—— 一段时间后
产品经理小李:“嗯是的,客户A说他们除了库存、还有运费、礼品卡、商品体积拆分逻辑,这些会按照顺序来依次进行“。
架构师小孙:“OK。这块我设计为可扩展性的。”
四、总结陈述
看,架构师有业务预知性或者业务敏感性其实挺简单的,就是找对位置,多问些问题,就可以为一线研发减少很多工作量。这个能力在很多地方,也可以称为业务敏感性。
所以系统扩展性设计一定离不开业务输入,但是如何通过几个简单的问题,就可以快速找到业务多变的地方,就是我本次分享的MIT模型解决的。大家也可以请根据一个业务场景,按此MIT知识模型分析下业务多变的点。
来源:京东云开发者社区
作者:京东零售 李春丽(未经授权请勿转载)
相关文章:

如何让技术架构师具有预知未来业务发展的能力
大家好,今天我们来分享业务架构,但是我们并不是以产品经理角度讲述一个业务架构是什么以及如何做?而是以一个技术架构师的角度,讲述如何承接业务架构或在没有业务架构的时候,如何判断业务变化趋势而对系统架构提前做出…...

卷麻了,新来的00后实在是太卷了...
在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...

单片机--实战练习
目录 【1】GPIO 1.定义 2.应用 I - Input - 输入采集 O - Output - 输出控制 编辑编辑 3.GPIO结构框图 4.功能描述 输入功能 输出功能 5.相关寄存器 【2】点亮一盏LED灯 1.实验步骤 2.编程实现 3.编译下载 4.复位上电 练习:实现LED灯闪烁…...

Go Etcd 分布式锁实战
1 分布式锁概述 谈到分布式锁,必然是因为单机锁无法满足要求,在现阶段微服务多实例部署的情况下,单机语言级别的锁,无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Lock、synchronized,golang的Mutex等 对…...

Windows环境下pcl点云库 安装配置教程
本文为Windows配置点云库pcl步骤,具体win10、visual studio 2019、pcl1.11.1。 【1】下载安装包 Releases PointCloudLibrary/pcl GitHub 其中,AllInOne是一个包含了PCL库所有模块的单独下载包,方便快速获取整个PCL库,而pdb则…...
岗位分析与可视化系统(三)
五、可视化 5.1薪资页面 在views,编写薪资分析的代码 def salary(request): uname = request.session[username] userInfo = User.objects.get(username=uname) edus, workexps = getSalary.getPageDt() defaultedu = 不限 defaultworkexp = 不限 if request.G…...
unity进阶学习笔记:json和xml
1早期的数据格式 在早期程序开发中一个简单且常用的数据格式为CSV。该格式单纯依靠逗号来分割数据。目前windows的office依然支持CSV解析,我们可以试着新建一个txt文件,在里面加入逗号分隔的信息: a, 1, 15, 30, true 将txt文件后缀改为csv&…...

数据结构之初识树与堆
前言:前面学习了顺序表,队列,栈,链表,我们知道他们都是一种线性表,是一种线性结构,而除此之外,仍有许多我们还没认识的结构,比如树形结构,不同于线性结构&…...
虚拟化技术 — VirtIO 虚拟设备接口标准
目录 文章目录 目录VirtIOVirtIO 虚拟设备接口标准VirtIO 的前后端分层架构标准VirtIO 的数控路径分离架构标准VirtIO 的传输层标准VirtIO 标准在 Linux 中的实现VirtIO VirtIO 由 Rusty Russell 开发,最初是为了支持自己开发的 lguest Hypervisor,其设计目标是在虚拟化环境…...

Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)
Dubbo——原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用,显然这种方式肯定是非常麻烦的,因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。 生产者服务 添加配置文件 dubbo:applicat…...

高并发系统的三把利器
目录 1.限流 2.缓存 2.1.缓存的使用场景 3.降级 3.1.什么是降级? 3.2.服务降级方式 4.其他高并发手段 4.1. 集群 4.2.拆分 4.2.1 应用拆分 4.2.2 数据库 4.3. 静态化 4.4.削峰 4.5.限流 5.总结 参考 保护高并发系统的三大利器:限流、熔…...
AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题
问题产生原因:1.期望能力选项参数丢失 例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app")) 某些app需要设置目录属性才可以启动。 问题产生原因:2.访问权限不足 例如&…...

渗透测试--6.1.aircrack-ng破解wifi密码
目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一:虚拟机连接实验需要用到的网卡 步骤二:设置网卡为监听模式 步骤三:使用wlan0mon网卡扫描附近wif…...

C++中的继承、以及赋值兼容转换。
一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…...
js浏览器实现简单的实时扫一扫功能
描述:利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档:https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

unity愤怒的小鸟学习制作(二)
终于又开始了啦啦啦,我有一个自己的相机了,真开心,诶嘿 视频链接和素材如下:视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去,就必须让这个组件失活,如下 所以我们更改脚本内容,加入&#…...

干外包3年,彻底寄了...
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...
软考高项论文范文(三)
论信息系统项目的沟通管理 【摘要】(该摘要共313个字符) 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...
浅谈谈谈OTA召回2023
近日,国家市场监督管理总局发布特斯拉召回公告,一下子掀起了互联网热议,这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车(含国产和进口共计110万辆车),在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字
一、需求 想要绘制如下所示的斜体字,45度 二、分析&思路 Graphics类有个 RotateTransform方法,可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角,所以直接单单用这个方法不能满足我们的需求。此外, G…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果,可同时显示主类&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...