private void Initiate(IActivityFactory activityFactory, IBaseMessage message, string processName)
        {
            var previousTrackingContext = message.GetTrackingContext();

            // an outbound message without an ongoing process --i.e. that has no process affiliation-- denotes a
            // publish/subscribe, or messaging-only process and the whole process needs to be tracked; that means the
            // initiating messaging step, whose MessagingStepActivityId is still conveyed by the ambient
            // previousTrackingContext, as well as the currently ongoing messaging step, which completes the process.
            var isMessagingProcess = message.Direction().IsOutbound() &&
                                     !previousTrackingContext.HasProcessAffiliation() &&
                                     !previousTrackingContext.MessagingStepActivityId.IsNullOrEmpty();

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug($"Initiating tracking of a messaging {(isMessagingProcess ? "process" : "step")}.");
            }

            _process = isMessagingProcess
                                ? activityFactory.CreateProcess(message, processName)
                                : previousTrackingContext.HasProcessAffiliation()
                                        ? activityFactory.FindProcess(previousTrackingContext)
                                        : null;

            _previousMessagingStep = isMessagingProcess
                                ? activityFactory.FindMessagingStep(previousTrackingContext)
                                : null;

            _messagingStep = activityFactory.CreateMessagingStep(message);
        }