低代码实施复杂应用的实践方法

内容来自演讲:韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理
摘要
本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险,包括项目规划不周、人员变动、企业基础管理不足等,并对比了低代码和传统套装软件的优劣势。低代码开发具有透明度高和快速调整的优势,但可能不适合大型企业核心业务。
为了确保应用成功实施,文章提出了几个关键要素:明确目标范围、管理业务流程、确定角色和资源、设计执行流程和技术支持。并讨论了角色职责、技术能力、数据质量和项目管理的重要性。数据质量是应用存在的基础,项目管理是风险管理的关键。无论是传统开发还是低代码开发,都需要有能全面管控业务领域的负责人。
一、引言
大家可能已经对这张2021年由Gartner发布的图表有所了解,它表达的思想是,在全民开发时代,针对不同复杂程度的应用,我们需要采取不同的安全管控框架。

在这个图表中,绿色区域代表的是较为简单的应用,主要涉及数据增删查改和工作流等基本功能,这类应用通常面向个人或小团队使用。在这种情况下,普通的业务人员完全可以自行进行开发,无须专业开发人员介入。第二种情况是针对流程复杂度较高的应用,这类应用已经实现了自动化管理,并且通常面向部门级别,例如人力资源管理系统。在这样的情况下,可能需要IT人员进行协助。
红色区域则代表更复杂的场景,此时的应用已经需要与其他业务系统建立接口,而且跨部门使用,这已经是一个企业级的应用,这种情况下,必须由专业人员参与并实施管控。
最后是黑色区域,代表的是极为复杂的场景。这种复杂程度已经超出了小型团队所能处理的范围,需要一个专门的团队进行协作解决。因此,必须将应用开发的权力完全交给专业的人员。这些专业人员包括熟悉业务的业务专家以及在IT领域掌握应用架构和代码编写能力的专业技术人员。
今天,我们的主题是探讨低代码实施复杂应用的实践方法。我们的主要目标是解决如何让非专业人员也能有效地掌控复杂应用的管理,并实现最低的上线风险。
二、复杂系统实施失败的风险
首先,我们要理解复杂系统上线实施过程中可能遇到的风险。其次,我们要对比低代码实施和传统套装软件二次开发的优劣势。此外,要了解确保应用实施成功需要掌握关键要素,并根据这些要素进行深入分析和分享。

无论是传统的开发方式还是低代码开发,一个复杂的应用系统实施成功都绝非易事。我们可能遇到的几个主要问题:
- 项目规划不周。在项目开始阶段,如果没有做好整体规划和明确范围目标,可能会导致项目混乱和目标不清晰。
- 人员变动与适应性问题。在项目实施过程中,可能会出现关键角色的离职情况。这不仅会影响到项目的进展,还可能导致在使用新系统后,部分员工觉得操作复杂,从而产生抵触情绪。在我们以往实施的项目中,就出现过某些岗位人员频繁更换,对项目稳定性造成影响。
- 企业基础管理不足:即使项目规划和资源调配没有问题,但如果企业的基础管理不到位,如数据标准化程度不高,管理理念未能达到系统实施的要求等,也可能阻碍项目成功。
三、低代码实施复杂应用的优劣势
对比传统开发和低代码开发,我们可以看到传统的套装软件通常具备一套完整的、内置的业务流程,流程相对成熟。然而,对于低代码开发而言,我们需要从零开始构建,就像建造一栋房子需要一砖一瓦地搭建起来一样,搭建的过程中,我们需要考虑建筑设计图纸、搭建方法以及结构问题等各个方面。这要求我们拥有专业的人员进行掌控,确保流程的成熟度。

在低代码开发过程中,可能会出现一些bug。当然,低代码的一个优势在于其快速调整的能力,能够迅速解决这些问题。
此外,由于应用的整个结构由开发团队自行掌控,他们对内部细节和可能存在的缺点都有深入的理解。在这种情况下,如果开发团队对某个缺点特别在意,他们可能会选择不使用像明道云这样的平台来处理。
低代码开发的一个显著优势是透明度高,开发团队对系统有深入的了解,没有供应商在初期承诺过多而在实施时出现各种限制的情况。
然而,对于大型企业的核心业务来说,低代码开发可能不太适合,因为这些业务通常需要更高的稳定性和定制化程度。对他们来说,系统的稳固性至关重要,甚至超越其他所有因素,就像我们平时购物时,如果有足够的预算,自然会选择质量稳定、不易出问题的产品。当然,对于一些非核心或边缘的应用,低代码方案可能是可行的。
对于中小型企业而言,他们可能更需要快速适应市场变化,根据自身的业务管理需求灵活调整业务流程。在这种情况下,低代码开发就显得尤为适合。它的优势在于能够根据实际需求,在稳定性与快速适应市场之间找到平衡。
四、项目实施成功的几个关键要素
在质量管理方法中,有一套理论称为过程方法。如果将整个管理事项视为一个过程,那它就会包括这几个维度:
- 明确事项的本质。我们需要理解这个事项的具体内容是什么,以及完成它能带来哪些收益。
- 确定输入和输出。分析该过程需要哪些输入,并明确其预期的输出结果。
- 识别涉及的角色和资源。确定在执行过程中需要哪些人员参与,需要具备哪些能力和资料。
- 设计执行流程和技术支持。规划具体执行的流程,并确保有适当的数据、技术来支持整个过程。

1.目标范围:避免需求无底洞
我们先扩展讲一下项目的目标和范围。在实施企业项目时,我们的业务顾问会进行深入的业务调研。在这个过程中,企业的各个部门通常展现出高度的配合。经过两天的协同工作,各部门提供了各种关键信息,并提出了许多关于数字化应用的设想,这些设想可能包括:销售、项目管理、技术开发、生产、采购、库存管理、物料控制以及财务管理等领域。

但是,后续我们对项目进行评估时,发现项目规模过大,难以控制。经过与企业的详细讨论,我们决定削减约三分之一的内容,重点关注那些我们有过实际案例并且能够相对掌控的元素。即使是这样,我们的实施顾问发现实际情况并不像最初设想的那么简单。尽管只实施了三分之二的功能需求,但在过程中还是遇到了各种意想不到的问题需要解决。最终,虽然缩小了项目范围,实际花费的时间成本仍然超过了最初的预期。
因此,在项目初期约定时,我们就需要明确界定需求的范围。对于超出初始需求的部分,我们可以将其列入后续讨论,并考虑在二期进行实施。首要任务是确保第一期的需求能够得到妥善处理,因为一旦项目上线,各部门可能会同时寻求支持,可能导致资源紧张,甚至可能出现因无法兼顾而导致系统停用的情况。
2.业务流程:管理思想达成共识
在业务流程方面,我们在2010年之前常常提到一个词——业务流程再造。这个概念强调的是,企业进行数字化实施的项目实际上就是在进行业务变革,因为当我们将原有的业务流程迁移到系统中时,这些流程很可能会发生变化。
对于一些套装软件,如SAP,它们已经有成熟的流程和管理理念。在实施这类软件时,会进行企业组织结构和具体业务模式的调研,然后进行相应的配置,形成适应企业业务流程的版本,并按照这个流程进行实施,这是比较常见的一种实施方式。

然而,我们在众多ERP项目实施的经验中发现,真正取得成功的概率可能只有约30%,甚至更低。其中有多种原因。一方面,可能是在项目上线过程中,企业的管理能力无法达到软件流程的要求,导致需要花费大量时间进行前期管理提升,而这往往是企业难以承受的。另一方面,也有可能在实施过程中发现某些业务模式并不适合企业,导致部分功能上线后又不得不进行调整甚至放弃。
我们的主要建议是在进入企业进行项目实施时,应避免过于激进,而是要根据企业的实际情况来制定计划,适度地向前推进半步或一步即可,不必过分追求完美。例如,虽然SAP中的业务流程被认为是正确的,但它适用于管理水平高的企业,如果当前企业还未能达到这一水平,我们可以选择采取更为实际和适中的方案。
对于低代码开发,可能在初期并没有成熟的业务流程可供参考。在这种情况下,我们需要依赖管理专家来梳理和制定业务流程,明确未来的业务运作方式。
3.角色职责:执行落地的关键
在角色职责方面,特别是在制造业中,例如工艺人员,他们在系统实施过程中可能会面临较大压力,因为他们负责基础数据的录入和处理,而错误往往最容易在这一环节发生。因此,我们需要与这些角色进行充分的沟通,确保他们在具备相应能力之后再进行系统上线,确保项目的顺利进行。
4.技术能力:用户体验与成本平衡
在系统功能方面,有时我们也需时进行平衡。比较常见的情况是,客户可能会因为业务问题,如针对某个不常出现的场景,提出修改系统的需求。即使这些场景可能一年只会出现一两次,他们仍希望我们能调整系统以解决这些问题。
有时候,用户甚至会因为自身的操作错误要求我们增强系统的防错功能。面对这些情况,我们必须妥善管控需求,明确哪些需求是我们能做的,哪些是不能做的。我们需要找到一个平衡点,既要满足客户的实际需要,也要确保系统的稳定性和效率。
5.数据质量:应用存在的意义
在制造业中有句话“质量就是生命”。对于我们的应用系统而言,数据质量则是应用存在的意义。试想一下,如果每天我们都在使用这个系统录入和处理数据,但最终却发现数据输出不准确,那么这个系统就失去了其应有的意义。它无法为我们提供有效的生产指导,也无法支持我们的决策制定。这样的系统只会浪费我们的时间和资源,最终很可能被弃用,这就是数据质量的重要性。

在我们实施过的一家物流工厂的项目中,我们也曾遇到过漏单、错单等问题。为了解决这些问题,我们采取了一些防错措施。例如,对于漏单的情况,我们会根据系统的实际情况进行数据比对,并在系统内部进行核验。一旦发现错误,我们会及时提醒用户进行数据调整,确保数据的准确性。
另外,针对漏录单或防止重复录单的问题,我们也会采取一些业务管理措施。例如,当某个单据处理完毕后,我们会在系统中进行标记,以确保项目的正常运行。
6.项目管理:管控风险的利器
无论是传统的开发方式还是我们的低代码开发,都要求有一个能够全面管控业务领域的负责人。这个人不一定必须是一把手,但至少应该是能够确保所有业务环节得到有效管理和控制的关键人物。

例如在人力资源系统中,应当由人力资源总监或人力部门的负责人来管控这个系统。同时,对于系统的使用和管理,应当保持应有的重视和仪式感,确保所有相关人员都清楚其重要性和操作流程。
当我们的技术人员在系统实施过程中付出大量努力和贡献时,我们必须给予充分的认可。在项目实施期间,我们常常与技术人员沟通,强调他们是项目中贡献最大的力量,并时常提及他们的付出。这样做不仅能让他们感到心理上的满足和舒适,还能激发他们的工作积极性,从而更有效地执行具体工作任务,推动项目的顺利进行。
五、总结
最后让我们回顾一下关键要点。对于不同复杂程度的应用,我们需要采取不同的管理策略。在确保项目成功的关键要素中,我们要着重管控目标和范围,严谨控制角色分配、流程执行以及数据管理。目标范围的设定应合理,避免设定过于宽泛或难以达成的目标。
我们提倡分阶段实施项目,业务流程的规划和优化应由管理专家主导,确保流程的一致性和有效性。在角色分配上,我们要确保用户操作者具备完成任务所需的素质和能力。
在系统功能方面,我们需要找到平衡点,既要满足用户需求,也要考虑系统的稳定性和效率。数字质量是至关重要的,我们必须保证数据的准确性,一旦出现错误,要及时发现并解决问题。
最后,我们要按照标准的项目管理方法进行项目管理,以确保项目的顺利进行和最终的成功。
相关文章:
低代码实施复杂应用的实践方法
内容来自演讲:韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理 摘要 本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险,包括项目规划不周、人员变动、企业基础管理不足等,并对比了低…...
算法学习系列(十一):KMP算法
目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢,就是不管算法竞赛还是找工作笔试面试,都是非常爱问爱考的,其实也是因为这个算法比较难懂,其实就是很难,所以非常个…...
****Linux下Mysql的安装和配置
1、安装mysql 1.1、安装mysql sudo aptitude search mysql sudo apt-get install mysql-server mysql-client1.2、启动停止mysql: service mysql stop service mysql restart mysql -u debian-sys-maint -p mysql命令详细解释如下: 一、 启动方式 1、使用 service 启动…...
第十六节TypeScript 类
1、简介 TypeScript是面向对象的JavaScript。 类描述了所创建的对象共同的属性与方法。 2、类的定义 class class_name { // 类作用域 } 定义类的关键字是class,后面紧跟类名,类可以包含以下几个模块: 字段 – 字段是类里面声明的变量。字…...
RocketMQ的Docker镜像部署(以及Dashboard的部署、ACL配置)
RocketMQ的Docker镜像部署(以及Dashboard、ACL) 准备 包含RocketMQ部署(NameServer、Broker)、Dashboard、ACL拉取镜像 RocketMQ$ docker pull apache/rocketmq:5.1.4Dashboard$ docker pull apacherocketmq/rocketmq-dashboard…...
数据仓库【2】:架构
数据仓库【2】:架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取(Extraction)2.1.2、数据转换(Transformation)2.1.3、数据加载( Loading ) 2.2、ETL工具2.2.1、结构…...
JavaScript函数表达式
JavaScript函数表达式是一种将函数赋值给变量的方式。函数表达式可以以匿名形式或具名形式存在。 匿名函数表达式: var func function() {// 函数的逻辑 }在上面的例子中,将一个匿名函数赋值给变量func。 具名函数表达式: var func fun…...
LabVIEW在齿轮箱故障诊断中的应用
LabVIEW在齿轮箱故障诊断中的应用 在现代机械工业中,齿轮箱作为重要的传动设备,其性能稳定性对整体机械系统的运行至关重要。故障的及时诊断和处理不仅保障了设备的稳定运行,还减少了维护成本。利用LabVIEW强大数据处理和仿真能力࿰…...
图片转excel:“保留数字格式”在什么场景下该勾
保留数字格式是什么意思呢?顾名思义,就是将转出来的数字保留为数字格式,而不是文本格式。我们知道,OCR程序将图片上的文字识别为电脑可编辑的文字后,如果导入到excel不加处理,则单个数字过长的文字就会被ex…...
SpringMVC:整合 SSM 下篇
文章目录 SpringMVC - 05整合 SSM 下篇一、设计页面1. 首页:index.jsp2. 展示书页面:showBooks.jsp3. 增加书页面:addBook.jsp4. 修改书页面:updateBook.jsp5. 总结 二、控制层1. 查询全部书2. 增加书3. 修改书4. 删除书5. 搜索书…...
[2023-年度总结]凡是过往,皆为序章
原创/朱季谦 2023年12月初,傍晚,在深圳的小南山看了一场落日。 那晚我们坐在山顶的草地上,拍下了这张照片——仿佛在秋天的枝头上,结出一颗红透的夕阳。 这一天很快就会随着夜幕的降临,化作记忆的碎片,然…...
OpenCV之像素操作
我们首先了解一下什么是像素,计算机中是如何存储图像,以及opencv是如何表示图像的。 像素: 像素是指由图像的小方格即所谓的像素(pixel)组成的,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色…...
Transfer Learning(迁移学习)
1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都…...
NPM 的使用技巧:简化 JavaScript 开发和依赖管理
前言 NPM(Node Package Manager)是 JavaScript 生态系统中最流行的包管理工具之一。本文将介绍一些有用的 NPM 使用技巧,帮助开发者更好地利用 NPM 管理项目依赖、执行脚本、发布自己的包以及解决常见问题。 1. 初始化项目 使用 NPM 初始化…...
统计和绘图软件GraphPad Prism mac功能特点
GraphPad Prism mac是一款专业的统计和绘图软件,主要用于生物医学研究、实验设计和数据分析。 GraphPad Prism mac功能和特点 数据导入和整理:GraphPad Prism 可以导入各种数据格式,并提供直观的界面用于整理、编辑和管理数据。用户可以轻松…...
WWW 指南-万维网联盟(World Wide Web)
WWW - 万维网联盟 WWW通常称为网络。 web是一个世界各地的计算机网络。 电脑在Web上使用标准语言沟通。 万维网联盟(W3C)制定了Web标准 什么是WWW? WWW 代表 World Wide Web(万维网)万维网常常被称为 网络网络是世界各地的计算机网络网络中…...
Linux网络编程之TCP/IP实现高并发网络服务器设计指南
目录 引言: 多进程服务器 例程分享: 多线程服务器 例程分享: I/O多路复用服务器 select 例程分享: poll 例程分享: epoll 例程分享: 总结建议 引言: 随着互联网的迅猛发展ÿ…...
【SpringBoot实战】基于阿里云实现文件上传
【SpringBoot实战】基于阿里云实现文件上传 在实际项目开发中,不可避免地会使用到阿里云OSS进行文件存储。尽管阿里云有详细的开发文档,但本篇博客的目的是让我们能够用简明的代码快速实现这个功能。 引入依赖 <dependencies><!-- 阿里云oss…...
大数据技术学习笔记(十一)—— Flume
目录 1 Flume 概述1.1 Flume 定义1.2 Flume 基础架构 2 Flume 安装3 Flume 入门案例3.1 监控端口数据3.2 实时监控单个追加文件3.3 实时监控目录下多个新文件3.4 实时监控目录下的多个追加文件 4 Flume 进阶4.1 Flume 事务4.2 Flume Agent 内部原理4.3 Flume 拓扑结构4.3.1 简单…...
电路设计时,继电器线圈、风扇电机绕组等感性负载必须有续流二极管。
续流二极管(也常被称为“自由轮流二极管”或“反向并联二极管”)在感性负载电路中的应用非常重要,尤其是在继电器线圈、风扇电机绕组等设备中。感性负载是指那些在其线圈中会产生感应电动势的负载,例如电动机、变压器和继电器等。当这些设备的电源被切断时,它们的线圈会因…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
