当前位置: 首页 > news >正文

产品经理的需求善变,利用规则引擎减少80%的需求变更成本

经常有技术团队的小伙伴抱怨最烦的就是产品经理发起需求变更,才做了三周,改了八回需求......

其实这个故事,每天都在开发团队中上演,作为 IT的 leader 来透视这个问题,要辩证的看待,其实80% 的可能性都是如下2个方面之一,那么搞定下面两个方面就搞定80%的需求变更,这个都是妥妥的开发成本或者项目利润。

1、人的问题:需求人员说不清楚、产品经理无法抽象,简单成为二传手,到技术人员手中的需求肯定会持续更改,那么这总结为人的问题,如果是需求方的人说不清楚,那么就需要升级,找到能够说清楚,能够排版的人,否则无法解决;如果是产品经理的问题,每天摸鱼划水,那么做“传声筒”,没有对需求进行理性的分析抽象,那么赶紧裁掉 ,及时止损才是正道。

2、业务本身的问题:比如风控规则,所谓道高一尺魔高一丈,每天都在较劲寻找对方的突破点;又例如员工考核 ,每个岗位可能都是不一样的考核方式,而且很可能领导一句话就增加一种考核模式,那么这种常常变化的业务,就需要采用规则引擎去做抽象判断。

那么对于上述的第一条我就不过多做赘述,针对第二条,我们自己实现的方式给大家讲讲,算是抛砖引玉。

我们应该把经常变化的场景转化为产品技术考虑的业务因子、判断条件、决策模型, 举例说明下, 例如在做“行政机构合规性执法的判断”的场景中,会把执法人员执法结果纳入到决策判断模型中, 这个过程是不断持续扩展的,如下图所示:

那么这种判断,就不适合写 if... else... then.... 多层的判断嵌套 ,因为业务需求可能会经常发生变化,那么就应该把业务和判断解耦。

那么这里如何解耦这个过程,我们以软开企服的 jvs-rules的规则引擎举例说明,大致分为四个大的步骤:

一、判断的数据来源

在我们的业务场景中,判断数据的来源大致有几个方面: a.入参(通过业务系统调用的时候传入进去);b.本地的数据库(内网自有数据);c.三方API数据(外部系统数据)

  • 入参可以通过jvs-rules 的入参设置去解决,一旦配置入参,在自动生成API时,会自动添加这项需要传入的数据;

设置入参后,系统会自动更新API调用的 接口要求:

  • 本地数据库数据接入,在业务执行中,除了出参以外,还常常用到了 本地的数据的数据,那么就可以在数据源中配置对应数据库的接入,解决调用本地数据来源的问题;

动态直连访问业务数据库:

这里数据库的接入提供多种数据库的方式:

  • 三方外部系统的接入,可以通过API 、甚至离线文件等方式接入

API接入界面配置化:

二、判断因子的挖掘加工

在解决了数据接入的问题,就需要考虑数据与真实的业务判断有差异的情况下,如何搞定数据挖掘的问题,例如上文提到的行政执法的结果是一个文本,需要解析出来里边的执法金额,用于决策判断,那么如何实现呢?

系统提供了函数式 加工数据的方式(类excel 数据加工),可以提供系统自带的很多函数 对各种数据进行加工(入参、本地数据库、三方api 获取),得到我们想要的业务结果,例如上图,就是通过入参执法的结果,其中包括了大写的执法金额,需要把这些数据解析出来,转换成小写,得到最后可以判断的 “处罚金额”的变量。

这种数据加工包括“函数式”加工取数、“SQL脚本”取数据、“任务式”加工取数,如下图所示:

三、业务规则的拼装与仿真(详见后续章节)

四、规则的部署与业务调用(详见后续章节)

总结

JVS-Rules,是对用户比较友好的规则引擎解决方案,可以有效降低配置门槛和开发工作量,JVS提供基础性开源方案,支持商用与源码开放。

​​https://gitee.com/software-minister​​

​​https://gitee.com/software-minister/jvs-rules​​

相关文章:

  • Python3 列表
  • 2023年简单易用的透明加密软件--安秉网盾企业数据防泄密方案
  • 选择正确的单位:百分比、视窗单位和像素单位在网页设计中的应用
  • [原创][Delphi多线程]TThreadedQueue的经典使用案例.
  • 双指针解题
  • uniapp uni-popup内容被隐藏问题
  • Python编程学习第一篇——Python零基础快速入门(五)—变量
  • k8s怎么监听资源的变更
  • Linux前端与Windows前端区别:深入剖析两大系统的前端差异
  • python 深浅拷贝
  • 网络编程介绍(二)(端口、通信协议)
  • Javaweb基础之工程路径
  • 初始操作系统
  • 10分钟了解ERP软件系统
  • 【竞技宝】欧洲杯:德国被乌克兰逼平,27脚射门仍难得分!
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ComponentOne 2017 V2版本正式发布
  • css系列之关于字体的事
  • gf框架之分页模块(五) - 自定义分页
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java第三方包学习之lombok
  • JS函数式编程 数组部分风格 ES6版
  • node和express搭建代理服务器(源码)
  • vue-router 实现分析
  • Zsh 开发指南(第十四篇 文件读写)
  • 构建二叉树进行数值数组的去重及优化
  • 关于List、List?、ListObject的区别
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 实现简单的正则表达式引擎
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 自制字幕遮挡器
  • Java性能优化之JVM GC(垃圾回收机制)
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • (1)(1.13) SiK无线电高级配置(六)
  • (13)DroneCAN 适配器节点(一)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Java)【深基9.例1】选举学生会
  • (安卓)跳转应用市场APP详情页的方式
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (小白学Java)Java简介和基本配置
  • (一)appium-desktop定位元素原理
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) 深度模型优化性能 调参
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)http协议
  • (转)VC++中ondraw在什么时候调用的
  • (转)四层和七层负载均衡的区别
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework杂记
  • .Net IE10 _doPostBack 未定义
  • .net Stream篇(六)