如何让技术架构师具有预知未来业务发展的能力

大家好,今天我们来分享业务架构,但是我们并不是以产品经理角度讲述一个业务架构是什么以及如何做?而是以一个技术架构师的角度,讲述如何承接业务架构或在没有业务架构的时候,如何判断业务变化趋势而对系统架构提前做出反应。
一、发生背景
研发人有技术架构,产品经理有业务架构(通常是一个人),当一个技术架构师不懂业务架构的时候,就会出现如下对话。
技术工程师小王:“产品经理又改需求,昨天和我说订单按照库存状态拆分,我刚刚上线今天又和我说按照促销类型类型拆分”
架构师小孙:“业务本来就发展迅速的,那天他还和我说想根据商品体积拆分的,被我挡了回去”。
技术工程师小王:“厉害,还是你有话语权”。
我相信大家经常遇到类似的问题,然而如果技术架构师懂业务架构,就会变成下面的对话场景。
技术工程师小王:“产品经理又改需求,昨天和我说订单按照库存状态拆分,我刚刚上线今天又和我说按照促销类型类型拆分,还好,你上次和我说这块规则是多变的,让我把不同订单拆分逻辑,拆分为原子化,我改下配置就搞定,不愧是架构师,你怎么知道这块多变?难道会占卜?”
架构师小孙:“哈哈,预知未来本来就是架构师的职责”。
技术工程师小王:“快教教我吧”。
下面我们就来学习下如何,如何让技术架构师具有预知未来业务发展的能力。
二、解决方案
技术架构师需要了解业务架构的知识,但是又不用像产品经理知道那么多,例如价值链等等概念。他需要知道的如何识别业务发展变化趋势,并把对应部分的技术架构做好结构化、扩展性。我今天就来介绍一个简单的方法- 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…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
