From what I've seen, most Customer Order Management applications create a draft product instance
My experience is different, most of the times, product instances were never drafted, they are created when the order status is completed. and for "Asset-based-Ordering", there is sometimes no product instances to draft, if you suspend of terminate an product from inventory, you would not draft it. You wait until the order is completed then you change the status of the product instance in the product inventory.
Either way, I doubt there could be a "best" practice.
I would not draft a product until after the related order item has reached its "point of no return" to avoid unnecessary product inventory update (if order item is cancelled, annulled etc). It seems wasteful.
PS: 20 years ago, I did use a CRM that would create a ProductInstanceId for each order item as soon as the order item is created with a product offer that is marked as "track in inventory" in the product catalogue. But no product instance was created in the inventory.
Upon order completion, that order.orderItem.ProductInstanceId is re-used as the product Id in the product inventory.
------------------------------
Kind regards,
Matthieu Hattab
Digital Sales Domain Architect
Lyse Tele AS
------------------------------