def METHOD_NAME(pickle_url, mock_parameter="mock"):
    print("pipeline args:", pickle_url, mock_parameter)
    # Use the pipeline argument to start the pipeline and pass it ot the first step
    print("launch step one")
    data_frame = step_one(pickle_url)
    # Use the returned data from the first step (`step_one`), and pass it to the next step (`step_two`)
    # Notice! unless we actually access the `data_frame` object,
    # the pipeline logic does not actually load the artifact itself.
    # When actually passing the `data_frame` object into a new step,
    # It waits for the creating step/function (`step_one`) to complete the execution
    print("launch step two")
    X_train, X_test, y_train, y_test = step_two(data_frame)
    print("launch step three")
    model = step_three(X_train, y_train)
    # Notice since we are "printing" the `model` object,
    # we actually deserialize the object from the third step, and thus wait for the third step to complete.
    print("returned model: {}".format(model))
    print("launch step four")
    accuracy = 100 * step_four(model, X_data=X_test, Y_data=y_test)
    # Notice since we are "printing" the `accuracy` object,
    # we actually deserialize the object from the fourth step, and thus wait for the fourth step to complete.
    print(f"Accuracy={accuracy}%")