WORK STORY / 01

Return uncontrolled BPM form logic to the correct layer

CONTEXT

Context

When I took over the BPM system, it had originally been built to meet internal needs quickly.

This approach worked well while requirements were simple. As form types, approval workflows, and field behaviors continued to grow, however, logic that had originally been grouped together for convenience began to constrain itself.

Ant Design Forms became nested and submit behavior grew difficult to trace. Framework-level elements such as toolbars, comments, and history also gradually took on business logic that should have belonged to individual forms.

With validation, field state, and workflow branches scattered across different components, even a seemingly local change had an impact scope that was difficult to determine.

DECISION & ACTION

My Decision & Action

I believed the real problem was not that there were too few shared components, but that:

the same concern had no clear source of responsibility.

The core of this refactor was therefore not to add more abstraction, but first to return each kind of logic to the layer that should own it.

Field state and validation returned to the form layer. The framework layer handled only layout and workflow control, exposing the necessary control points through Context. Reusable fields and query or record capabilities were organized into independent modules without allowing them to know the entire BPM business process.

OUTCOME

Outcome

After the restructuring, different BPM forms could operate under a consistent model.

Adding or modifying a form no longer required understanding special logic scattered throughout the framework, and the risk that a local requirement would affect the entire workflow was reduced.

REFLECTION

Reflection

This experience gave me a more concrete understanding of a Single Source of Truth:

SSOT does not necessarily mean centralizing everything in one place. It means every rule should have exactly one place that truly owns it.

Abstraction simplifies a system only when responsibility boundaries are clear. If the boundaries themselves are wrong, even an elegant shared layer merely wraps coupling.