-
The structure of the flow and tasks as defined in the function wrapped by the
@workflowdecorator at the time of execution. Implicitly, this automatically captures the exact code definition for the flow at the time of execution, without the need to make a manual commit. - The Domino Job config that is defined as part of each task and includes a precise code commit, environment version, hardware tier, dataset snapshots, and all other properties that were defined as part of a job.
- The input and output parameters that can be configured or modified for each execution.
Best practices
While the automatic versioning of entities in flow helps to maximize reproducibility, there are additional practices that are recommended in order to guarantee it. More specifically:- When the
use_latestparameter is set when defining tasks, Domino will use project defaults or the latest versions of Domino entities for parameters that have not been explicitly defined at the time of registration. While this is useful for quick prototyping, it is recommended to explicitly define all parameters before putting a flow into production. This ensures that if you make changes to your flow definition in the future, you will not accidentally pick up changed project default settings when registering your new flow version.
use_latest in this example is useful for development and iteration:
use_latest in favor of explicitly defining all parameters:
- When loading data from external data sources, it is recommended to have an initial task for making a snapshot of the data (i.e., a task that loads the data into Domino and copies it directly as an output). This ensures that changes in external data sources won’t affect the ability to reproduce a result.
- Always write results as explicit outputs for the task, rather than to an external data location.