Documentation for a newer release is available. View Latest
Esta página no está disponible actualmente en Español. Si lo necesita, póngase en contacto con el servicio de asistencia de Icon (correo electrónico)

Flow Versioning Guide

It’s natural that over time due to new requirements, regulatory reasons or better understanding of the domain, IPF flows may have to be updated. This is not an issue when flows and the solution are still being developed. However it becomes critical to understand how to apply the change especially when the flows are live and actively process payments.

Typically, key requirements from clients are:

  • The service must carry on processing payments with minimum/no disruption

  • There is no duplicate processing / double submission of payments

  • Inflight transactions must carry on processing with minimum/no disruption

This page summarises the main ways in which IPF flows may evolve over time and provides high-level guidelines for how to implement the described changes.

Types of Changes

Changes to flows can have different forms, depending on the change in business requirements.

Domain Event Changes

These are typically changes to the definition of domain events within an existing flow. As a result, you may have to write specific migration code that allows seamless transition to the new/updated definitions. Note that it all depends on the type of change and whether the change is breaking or not. Below are some examples of these changes:

  • Adding a data field to an event

  • Changing the fully-qualified class name (FQCN) of an event

  • Changing the name of a data element in an event

  • Changing the data type of an element in an event

  • Splitting an event into multiple, smaller events

  • Removing an event

In order to understand how to handle these changes, refer to IPF devdocs on schema evolution.

Breaking Flow Changes

These are typically the changes to an existing flow definition that changes the structure.

Some examples are :

  • Changing the sequence of steps and events in a flow definition

  • Adding a new step to an existing flow definition

  • Removing a step from an existing flow definition

  • Adding a new decision to an existing flow definition

  • Removing a decision from a flow definition

  • Adding/removing a subflow call in an existing flow definition

  • Applying the same changes above applied to a subflow

These type of changes can’t be handled by simply updating the flow. A new flow will have to be defined with a new versioning.

Depending on the requirements, older flow versions will need to remain available in the application for a period of time, specifically until all in-flight transactions using the older versions have completed. Meanwhile, new payment transactions can be routed to a new flow version. To support this concurrency, it’s essential to implement flow versioning from the outset. For a practical example and discussion of flow versioning, please see Flow Versioning.

Non-Breaking Flow Changes

These are minor changes to the flow definition that don’t change the overall structure of the flow.

An example of this is, changing the description of the flow elements (description of events, business data)

In this case, there will be no need to create a new version of the flow. Applying the changes in the existing flow definition would suffice.