To support stock distribution across multiple stock locations, orders can sometimes be split into multiple shipments. The functionality is often associated with order management, and in fact, it usually belongs to an OMS. Nevertheless, there are many situations when you want to let the customer know how the order will be split during checkout, such as letting the customer choose different shipping options for each shipment or shipping some items to a friend.
By doing this, the order split functionality becomes closer to the commerce engine, which is responsible for supporting the customer experience and interactions with the website. So what is the boundary between what belongs to the ecommerce platform and what belongs to the OMS in terms of order splitting? There are a number of factors that affect the answer to this question, ranging from business needs to technology limitations, at times. Frequently, what makes sense on paper isn't always true in reality, where architectural choices need to take into account time-to-market compromises.
This article presents three options I frequently see among clients. One of the easiest options is to adopt a more monolithic approach—yes, I said it!—and pick a commerce engine that offers sufficient order management functionality for your business. A second option is to let your commerce engine handle the checkout (without splitting) and let your order management system handle the split. There is also a hybrid option, where the commerce engine manages some splits during checkout and the OMS manages others during fulfillment. Spolier alter: this is my favourite option and likely the only one that can handle all scenarios.
Option 1: Your commerce engine is also your OMS
You can use the same ecommerce platform as your order management system if it provides sophisticated order management capabilities. While this is a more monolithic solution, it does not mean you have to adopt an all-in-one platform, but just one single component that handles everything from cart to order fulfillment.
Having the OMS as part of your ecommerce platform can work well if you don't have physical stores, but it prevents you from achieving an omnichannel strategy unless you use the commerce engine to power all orders, regardless of whether they are placed online, in store, or via any other channel. Instead, if you want to run an omnichannel business and your ecommerce platform's order management capabilities are inadequate, you should look into a specialist OMS and begin your journey toward composability.
Option 2: Orders are split by an external OMS
By introducing an OMS into your stack, you can delegate order split to it. Using this scenario, your checkout handles only orders sent to the OMS, which are split based on stock availability.
Although this architecture works well, it doesn't cover all possible splitting logic that doesn't depend on stock availability. For instance, it is only an ecommerce platform that can handle cases where it is the customer who requests that part of the order be shipped to a friend or another address. The majority of ecommerce websites don't offer this option, requiring the customer to place separate orders. Often, the reason is technical, not business-related. It's likely that the ecommerce engine doesn't provide that functionality at checkout, causing a constraint that can’t be overcome by the business.
Ideally, customers would be able to ship to multiple addresses at the same time. This and other similar scenarios can only be supported by an architecture that leverages the best of the first two options, which would be an ecommerce engine capable of splitting orders and a best-in-class omnichannel order management system.
Option 3: Orders are split at checkout and then further during fulfillment
In order to achieve maximum flexibility, your architecture must allow you to process some splits during checkout and others during fulfillment.
This architecture can be beneficial for other business requirements than shipping to multiple addresses. As an example, let's say you want to offer preorders. If that is the case, the split cannot be done by stock, as you don't have stock of the products you want to offer as preorders.
On the commerce engine, you could model a virtual "preorder" stock model and let the platform split an order that contains some items on hand and other items as preorders. Based on actual stock availability, the OMS may eventually split the on hand shipment even further.
Essentially, order splits based on stock levels are handled at the OMS level, whereas splits based on customer interaction and other conditions that don't depend on stock levels are handled at the ecommerce level.