There are some businesses that allow their customers to create custom orders, which are tailored to their unique preferences and are possibly one of a kind. In terms of experience, customers have the possibility to select from a combination of options and add personalization elements, such as their initials or a custom image, that make their order truly unique.
Customers are essentially involved in the product creation process. They design new products that are not part of the brand's catalog. By combining ingredients, they create a new recipe that materializes as a new physical or digital good. Upon placing an order, this recipe is sent to the production department, which picks the ingredients, assembles it into a new product, and adds the personalization elements requested by the customer.
The process is called made-to-order, and it differs from the traditional workflow in which a merchant publishes a catalog of products that the customer can select from. Prices for custom orders aren't on price lists, but are calculated when you assemble the custom order. Product availability depends on the availability of the different parts. Delivery lead time is also affected by the combination of options you select and the processing delay added by other customization options.
In addition to offering a different customer experience, the made-to-order model hides multiple logics that aren't generally supported by traditional ecommerce platforms. Therefore, developers and business users have struggled to find workarounds to make this model work. Creating all possible combinations in advance is one of the most common hacks I have seen. The idea is to create individual SKUs for each combination and assign a price and availability to each. This results in a huge catalog of fake SKUs that give the customer the impression of a product configuration, when in fact they are simply picking from thousands (if not millions) of different combinations.
As you can imagine, this solution is not ideal for a number of reasons. To begin with, creating and maintaining thousands or millions of fake SKUs is time consuming and resource intensive. It introduces a level of complexity that is difficult to maintain, resulting in a high amount of technical debt. Consider what happens when you want to offer a new option or change the price for a particular combination. As well as the complexity of updating stock when a specific component goes out of stock in all the combinations that include it. The biggest problem with solving computer science problems with hacks that "just work" is that they always become your biggest problems.
Instead, model made-to-orders as what they are: a bundle of SKUs and personalization options created by the customer "at runtime". Each SKU is a component that represents the actual availability in your warehouses, adding up to the bundle price. It is possible to model the additional options as extra personalizations that do not have any availability constraints, but still may incur a cost and add time to the order delivery. Finally, a bundle model can have a price that is partially independent of the sum of its prices, such as when used as a promotional instrument.
When the customer places the order, the bundle SKUs represent the merchant's picking list, and the additional options complete the recipe for the production department. If the bundle has some complex validation logic, you might want to add an asynchronous validation step to avoid slowing down the checkout process.
It's the beauty of API-first design. By exposing your data and logic via APIs, you can not only build a headless ecommerce site, but also let the frontend experience, such as a product configurator, write all the resources your customers need during their shopping experience, making it easier to implement sophisticated business models such as made-to-order.