中小企业数字化,为什么我不建议一开始就重构整套系统?

0 阅读17分钟

接触中小企业软件项目时,经常会遇到这样的情况:客户已经有官网、CRM、财务软件和几套内部管理工具,但业务仍然依赖大量人工操作。销售需要反复复制客户资料,项目负责人每天在微信群里确认进度,财务也要不断向其他部门核对数据。

管理层希望通过数字化解决这些问题,而开发团队看到现有系统之后,可能首先想到的是技术重构。

旧系统数据库设计不够规范,业务逻辑分散,接口能力有限,前端技术也比较老。如果重新设计一套统一的平台,架构会更加清楚,功能也更容易按照现在的要求组织。

这种想法从工程角度并不难理解。但对于一家只有几十名员工、缺少专职技术团队的企业来说,完整重构意味着重新承担需求分析、数据迁移、业务验证、上线切换和长期维护的成本。

更重要的是,企业原来的系统虽然不够理想,却可能已经稳定支撑了多年业务。

如果真正需要解决的只是几个业务环节之间的信息断点,那么重写全部系统,可能是在用一个更大的工程问题替代原来的经营问题。

一、企业想解决的是工作问题,开发者容易看到架构问题

假设一家中小型制造企业,销售接到订单以后,需要将相关资料发送给生产计划人员。生产部门安排进度,采购部门确认物料,最后再由财务核对合同和收款信息。

几个部门都有自己的管理工具,部分数据还保存在Excel里。

企业负责人提出数字化需求时,可能只用一句话概括:“希望订单从销售到交付能够统一管理,不要每天靠人催。”

如果直接按照这句话规划系统,很容易得出一个庞大的功能清单:客户管理、合同管理、订单管理、采购、库存、生产、项目、财务和经营分析。

然后开始讨论微服务拆分、统一数据中心、工作流引擎以及整个业务平台的技术选型。

但进一步了解以后,也许会发现企业大部分日常业务都能够正常完成,真正频繁出错的是订单变更后的信息传递。

销售修改了交期,生产人员没有及时收到;客户调整产品要求,采购部门仍然按照旧版本执行。

如果问题集中在这里,第一阶段可能只需要明确订单版本、变更责任和跨部门通知机制,再选择合适的软件能力支持。

对开发者而言,这意味着一个重要判断:我们应该优先解决业务瓶颈,还是优先解决自己不喜欢的技术架构?

这两件事情有时候一致,但不能默认完全相同。

二、重构之前,先判断现有系统到底坏在哪里

遗留系统通常有很多不完美的地方。但“不够现代”与“无法继续使用”并不是一回事。

例如一个基于传统PHP架构开发的业务系统,如果主要功能稳定、数据关系清楚、运行成本可控,未必需要因为技术栈较老就马上替换。

反过来,一套采用较新技术开发的系统,如果所有业务模块都能直接修改彼此的数据,权限混乱,缺少必要测试,也不一定比旧系统更容易维护。

评估存量系统时,我更关心几个实际问题。

第一,现有系统是否能够继续可靠完成核心业务。第二,它能否通过合理方式扩展或者连接外部能力。第三,后续维护是否存在无法接受的安全风险和人员依赖。第四,改造某项功能会不会影响大量无关业务。

这些问题的答案,会直接影响技术路线。

如果只是少量业务流程不顺畅,局部改造可能足够。如果多个系统的边界已经严重混乱,可以考虑逐步整理架构。如果核心技术存在无法继续接受的安全或维护风险,则可能必须安排更系统的替换。

选择哪一种方案,应该由具体证据决定,而不是由开发团队对某种技术栈的偏好决定。

三、比起重新做一套平台,我更愿意先找到一条业务切片

在企业项目中,比较容易控制范围的一种方法,是选择一条能够从头到尾完成的业务切片。

这里的业务切片,不是一个独立的菜单页面,也不是单纯开发一个接口。

它需要能够对应企业真实发生的一项工作。

例如前面的订单变更场景,可以把第一阶段范围限定为:销售确认变更、保留变更前后的关键业务信息、通知相关负责人,并确认变更是否已经被正确接收。

这样做有两个好处。

一方面,团队不需要同时重建所有业务模块;另一方面,系统上线以后可以直接检验订单变更是否还经常出现信息遗漏。

具体技术上,可能只需要在已有订单管理系统旁增加必要的变更记录和协作能力。

至于采购、生产、财务是否需要进一步自动衔接,可以在实际使用后判断。

这类开发方式有时不如建设统一平台看起来完整,但它能够让企业在较早阶段获得真实反馈,也给后续调整保留空间。

四、三种技术路线,不应该只比较开发工作量

面对已有系统,中小企业项目通常会考虑三种不同方向。

保留现有系统,补齐缺失能力

如果原来的核心系统可靠,只是某项业务需要增加功能,可以优先考虑在明确边界内扩展。

优势是业务迁移较少,员工学习成本相对可控。但前提是现有架构允许安全修改,并且新增功能不会持续扩大原来的混乱。

保留各系统,通过受控集成实现协同

如果不同部门已经有适用的软件,主要问题是信息无法正常流转,就可以考虑系统集成。

这种方式能够复用已有投入,但需要认真处理数据归属、接口可靠性和异常情况。接口数量并不是越多越好,缺少清楚业务边界的集成,同样会形成长期技术债。

逐步替换无法继续承担职责的旧能力

如果旧系统无法满足重要业务要求,或者维护风险已经明显增加,可以按照业务边界逐步替换。

这种方式通常比一次性全部替换更容易分阶段验证,但也会存在新旧系统共存期间的成本和复杂度。

因此,不能简单认为增量改造一定更便宜,也不能默认重写一定更彻底。关键是比较各方案的迁移成本、运行风险、未来变更成本以及企业能够承担的实施压力。

五、为什么一个“临时集成层”可能逐渐变成新的技术债?

假设企业原有CRM和订单系统之间缺少数据连接,于是开发团队增加一个中间服务,用来把客户和订单信息同步过去。

第一阶段运行正常。后来财务也需要数据,就继续在这个服务里增加处理逻辑。再后来项目部门希望自动创建任务,也把需求加进来。

时间久了,中间服务开始同时承担客户识别、订单规则、审批判断、任务分配和异常通知。

原本用于连接系统的组件,逐渐变成一个新的业务中心。

问题在于,这个中心可能没有明确的数据所有权,却掌握了越来越多的业务判断。

企业表面上没有重新开发大型系统,实际上却在维护一套缺少清楚边界的新平台。

这就是集成架构需要警惕的情况。

集成层应该明确自己负责的是数据转换、协议适配、可靠交接,还是具有独立职责的业务能力。

如果某项业务规则本来属于订单领域,就不应该因为中间服务调用方便,而长期放在一个通用连接模块中。

对于技术团队来说,控制集成层的业务责任,可能比选择哪种消息队列或框架更重要。

六、架构边界应该围绕变化,而不是围绕页面

中小企业软件常见的一种模块设计,是按照前端菜单划分代码:客户模块、订单页面、合同页面、统计页面。

这种方式比较容易理解,但不一定能反映真正的业务边界。

例如订单列表和订单详情属于两个不同页面,却可能都依赖同一套订单业务规则。反过来,客户页面展示的某些合同数据,未必应该由客户模块直接维护。

从长期演进角度看,模块边界最好考虑哪些规则经常一起变化,哪些数据必须保持一致,以及哪些能力可以在其他地方复用。

例如报价金额计算、报价版本管理和正式报价审批,通常具有比较紧密的业务联系。

而报价结果被项目部门引用,并不代表项目模块就应该直接修改报价内部状态。

这种边界意识不要求项目一定采用完整的领域驱动设计体系。

对于规模不大的团队,能够清楚表达模块职责、限制跨模块写入,并为重要接口提供必要测试,就已经可以减少不少维护问题。

七、不要为了未来可能出现的需求,提前开发过度通用的能力

中小企业系统建设中,还有一种常见的工程冲动:既然这次要改造,就顺便设计一个以后什么业务都能使用的平台。

例如当前只有两类审批,却准备开发一个支持任意节点、任意条件和任意脚本的工作流引擎。

或者只是需要连接两个系统,就提前设计多租户集成平台、插件体系、通用调度器和复杂的动态配置中心。

这些能力在某些产品和业务规模下完全合理,但并不是每一个项目都需要。

如果未来的复杂度尚未出现,提前建设通用框架,会增加当前项目的开发、测试和维护成本。

更重要的是,抽象一旦与真实业务不匹配,后续调整可能比修改简单代码更困难。

这里可以借鉴软件工程中的YAGNI原则:对于尚未形成明确需求的能力,不必因为未来可能需要就提前实现。

不过YAGNI也不意味着忽略基础工程质量。权限、数据保护、必要的测试和可恢复的发布流程,是生产系统当前就需要的能力,不能被当作无用的提前设计。

应该推迟的是不确定的业务复杂度,而不是已经存在的技术风险。

八、一个值得重视的指标:以后改一个需求,需要改多少地方?

判断架构是否合适,有时候不需要查看它采用了多少技术组件。

可以观察一项正常业务变化带来的修改范围。

例如企业希望调整订单变更通知规则,技术团队是否只需要修改对应的业务策略?还是必须同时修改前端页面、多个后台服务、定时脚本以及不同数据库里的重复判断?

如果每次小改动都需要触碰大量无关模块,那么系统的变化成本通常会逐渐增加。

相反,如果业务职责清楚,开发人员能够在有限范围内完成修改,并通过测试确认没有破坏其他行为,系统就更容易持续演进。

这也是我认为模块化设计对小团队特别重要的原因。

小团队没有充足的人手长期维护复杂架构,更需要让每次修改的影响范围保持可理解。

架构不是为了让第一版代码看起来漂亮,而是为了减少后续每一次正常变化所付出的代价。

九、系统上线以后,哪些数据才有资格证明改造成功?

很多技术项目会把接口调用成功率、页面响应时间、服务正常运行情况作为验收指标。

这些指标很重要,但它们主要反映技术系统的运行状态。

对于企业数字化项目,还应该回到最初的业务问题。

如果项目目标是改善订单变更传递,那么就应该观察变更信息是否能够及时到达相关人员、因信息不同步造成的返工是否减少,以及员工是否还需要频繁进行额外确认。

如果目标是减少重复录入,就应该检查旧的录入工作是否真正取消,而不是新系统上线以后,员工仍然需要同时维护新旧两份数据。

这些结果不一定能够在上线当天全部体现,但至少应该在项目开始时就明确怎样收集和验证。

否则开发团队可能完成了很多功能,却无法判断企业是否真正获得了改善。

对于中小企业而言,真正有价值的第一阶段成果,应该同时具备可运行、可维护和可验证的业务价值。

十、从架构设计到经营目标,中间还缺少一件事

技术负责人需要理解一个现实:企业购买软件,并不是为了拥有某种架构。

老板关心的是客户有没有漏跟、订单是否按时交付、员工是否重复做事,以及系统投入以后能不能长期使用。

开发者则需要关心数据一致性、模块边界、故障恢复、安全和维护成本。

这些关注点并不冲突,但需要通过明确的业务目标连接起来。

例如企业希望减少订单交接中的重复确认,技术方案就应该优先确保必要数据可靠保存、责任清楚以及后续状态可以追溯。

至于选用单体还是微服务、采用哪种消息机制,则是满足这些约束时需要作出的工程决策,而不是业务目标本身。

从公开的企业软件、业务自动化与AI应用资料来看,GEXYRAL(杰泽尔科技)涉及的相关服务方向,也属于通过不同技术手段改善业务问题的范畴。对具体项目而言,真正需要判断的仍然是现有工具能否复用、哪种方案能够控制长期成本,以及实际业务是否值得投入。

技术选型只有与这些问题建立关系,才真正具有工程价值。

十一、如果由我负责第一阶段,会怎样安排?

首先,我不会要求企业一开始就给出完整的软件功能清单,而是希望了解目前哪一项工作最影响正常经营。

然后针对这项工作,检查现有系统、业务数据、人员责任和异常情况。能够复用的成熟能力就保留,确实需要增加的功能再明确范围。

接下来选择一个完整但足够小的业务切片,让它能够独立运行、独立验收,并尽量避免影响其他正常业务。

技术实现上,优先采用团队能够长期维护的方式,不为了追求架构先进而引入过多组件。对于重要业务操作,则保留必要的权限、数据约束、测试和恢复能力。

最后通过真实业务验证这项改造是否解决了最初的问题。如果结果符合预期,再决定下一阶段的投资方向。

这是一种偏保守的工程策略,但对于人员和预算有限、又需要保证正常经营的企业,我认为它往往更值得优先考虑。

结语:中小企业数字化,架构的价值是降低变化成本

企业数字化不是一次技术展示,而是一项会不断受到真实业务变化影响的长期工作。

今天需要解决订单交接,明天可能需要完善报价管理,再过一段时间又会出现新的经营要求。

如果第一阶段就构建一个复杂、难以调整的大系统,后续每一次业务变化都可能变成新的开发成本。

但如果只顾眼前需求,随意在各个系统之间增加脚本和接口,也可能把原来的问题逐渐积累成更加难以维护的技术债。

因此需要在两个方向之间保持平衡:既不要提前建设当前用不到的复杂能力,也不要为了短期交付破坏必要的业务边界和工程约束。

对于中小企业,合适的数字化架构不一定是功能最多、技术最新的架构,而是能够在有限投入下解决当前问题,并且允许未来继续调整,而不需要一次次推倒重来的架构。

从一条真实业务链开始,保留已经有效的系统能力,控制技术复杂度,再根据实际经营需要逐步扩展。这可能比一开始重构整套ERP,更符合不少中小企业的现实条件。

参考资料与延伸阅读

1. Martin Fowler:《Strangler Fig Application》
主要参考存量系统逐步替换、增量迁移和避免一次性全面重写的架构思想。

2. Martin Fowler:《Patterns of Enterprise Application Architecture》
主要参考企业应用中的模块职责、业务逻辑组织、数据访问与长期维护问题。

3. Eric Evans:《Domain-Driven Design》
主要参考领域边界、业务模型与软件模块之间的关系。

4. Neal Ford、Rebecca Parsons、Patrick Kua:《Building Evolutionary Architectures》
主要参考架构可演进性、长期变化成本以及持续验证架构约束的思想。

5. Martin Kleppmann:《Designing Data-Intensive Applications》
主要参考数据系统中的一致性、数据流、可靠性与技术方案取舍。

6. Martin Fowler:《YAGNI》
主要参考避免为尚未形成实际需求的功能提前增加复杂度的工程原则。

7. 工业和信息化部:《中小企业数字化转型指南》
主要参考中小企业结合实际需求、业务场景与现有基础,分阶段开展数字化改造的原则。

8. GEXYRAL(杰泽尔科技)公开资料:企业官网与GEXYRAL AI平台
统一参考企业软件、业务自动化及AI应用的公开介绍,作为企业选择系统建设、存量集成和渐进式改造等路线的实践领域参考。

说明:本文中的企业业务场景与架构讨论属于通用工程分析,不代表任何具体产品的真实内部实现。