Has the Magento MSI failed to help the multi-store merchants?
Before Magento MSI - multi-store merchants are not able to manage the inventory on the store level
Before the MSI release, many merchants were complaining about a missing feature in Magento - the ability to set the stock values on a website and the store levels. Many people asked questions about it (for example here and here), but the answer was always the same - "Magento doesn't provide an out-of-the-box solution for that - you need to use a custom extension."
The Magento MSI
Many Magento merchants were waiting for the MSI feature. With its introduction in Magento 2.3.0, the merchants were finally able to manage the inventory in multiple warehouses (MSI calls these "sources").
But did the MSI solve the challenge of the multi-store merchants?
The Magento MSI is not built for multi-store
It seems that the answer is “No”.
The most significant Magento MSI limitation is that you can’t assign different sources on the different store views of the same product.
To double check that, we created the following inventory structure -
(Please ignore the "Default Stock" - it is not in use. It is there only because it can't be deleted.)
So we created separate stocks for separate websites, such that each stock has its own source. That is - the German website uses the German stock that uses the German source, and the French website uses the French stock that uses the French source.
Now let’s assign the stocks to a product.
The MSI doesn’t allow different sources per product store view
If we try to assign the French source to the product in the French store view, and the German source to the product in the German store view, we realize that it is impossible.
It happens because the MSI doesn’t support having different sources assigned in different product store views.
For single-store Magento installations - it is not a problem. However, it becomes a significant problem for the multi-store and multi-website Magento installations.
A real-life example
Let's look at a real-life example of a multi-website Magento installation and a stock setup challenge that the MSI fails to solve.
One of our clients had a multi-website Magento (2.3.1) installation. He had a DE website and an FR website. He also had two physical warehouses (we will refer to them as sources) - one in DE (Germany) and one in FR (France).
For most of the products, the customer wanted to ship them from the source of the current website. That is - in the DE website he wanted to ship from the DE source, and in the FR website he wanted to ship from the FR source.
However, few of the products in the FR website weren’t available in the FR source. The client didn’t know how to set up the MSI to solve his problem. We tried to help, but it turned out that such set up is impossible.
The chart of the client’s problem
Here is a chart of the customer's problem and the possible solutions. We can see that pants are available both in FR and DE sources. On the other hand, the t-shirt is available only in the DE source.
Therefore, for the DE website, we want the pants and t-shirts to be shipped from the DE source. On the other hand, for the FR website we want the pants to be shipped from the FR source, but the t-shirts to be shipped from the DE source.
Possible solution #1
In a trial to help our client, we came up with a possible solution #1 (it is presented in the point #4 in the image above): We created a DE stock for the DE website, and a DE source for the DE stock. Similarly, we created an FR stock for the FR website and an FR source for the FR stock.
Afterward, we assigned the DE source with quantity 200 and the FR source with quantity 200 in the pants. In the t-shirt, we assigned the DE source with quantity 100 and the FR source with quantity 0.
The problem of solution #1
The solution worked great for pants - a customer who buys pants from the DE website gets the pants shipped from the DE source, and a customer who buys pants from the FR website gets the pants shipped from the FR source.
However, for the t-shirt on the FR website we’ve got a problem - Magento tells that it is out of stock, even though it is available in the DE source. The reason for that is that the DE source is not assigned to the FR website.
Possible solution #2
The natural conclusion was to assign the DE source also to the FR stock. So we did it and now the FR website has two sources DE and FR, and the DE website has only one source - the DE source.
The problem of solution #2
This time the solution works well for the t-shirts, but it doesn’t work correctly for the pants. Customer who buys the pants in the FR website might get it shipped from the DE source - which is not what we want.
After hours of trying to figure the solution for the problem above, we didn’t find a proper solution for it. Unfortunately, we had to use a workaround.
Our workaround was to create another source called “the DE for FR”. We assigned it to the FR stock. Then in the t-shirt, we assigned the two sources - DE source and the “DE for FR” source.
Here is how it looks:
It worked well, the only problem is that it is not a proper solution - it is a workaround.
We call it a workaround because the DE source and the “DE for FR source” in reality are the same one warehouse. We had to create two sources for one physical warehouse because of the limitations of the MSI.
This solution can cause confusion and possible future errors in the orders supply process. But unfortunately, this is the current reality with the MSI.
(Update from 28.5.19) Suggested solution by Igor Miniailo (still a workaround)
Igor Miniailo is a lead architect in Magento. He read our article and responded -
3/4 Regarding your issue. I would do it another way. Based on the fact that Source is another abstraction, I would create the next Sources:— Igor Miniailo (@iminyaylo) May 28, 2019
- DE Source (S1)
- FR Source (S2)
- Shirts only to share DE (S3)
And assigning them to
DE Stock (S1 and S3)
FR Stock (S2 and S3).
That is, he suggested a better workaround to the problem. Unlike our workaround, his workaround doesn’t cause a stock duplication - you can see that in our workaround both the DE source and the DE for FR source contain t-shirts. It is quite bad because the merchant will need to keep both stocks in sync.
Here is the workaround that Igor suggested:
You can see that in this workaround, we need to create three sources DE source, FR source and “Shirts only to share DE” source. The DE source and the FR source will only contain pants, while the “Shirts only to share DE” source will contain the t-shirts and will be assigned to both DE website and the FR website.
This way, the customer who comes to buy a t-shirt (on DE or FR website) will be always getting his t-shirt from the “Shirts only to share DE” source. While the customer who comes to buy a pair of pants will get the pants from the DE source if he is on the DE website, or he will get them from the FR source if he is on the FR website.
(Update from 8.6.19) Why Igor’s solution is it still a workaround
In his tweet from June 4th Igor reacted to our article “Disabling the Magento MSI”, where we wrote that Igor didn’t come up with a solution for the issue -
"We asked Igor if there is anything that could be done in that specific case, and he answered that for this particular client case - a custom MSI sales channel implementation is needed" - that's not exactly what I said: https://t.co/IH5Nn9Svnv— Igor Miniailo (@iminyaylo) June 4, 2019
However, we insist that his suggested solution is still a workaround. In our tweet, we explained why:
Imagine a product that is currently available in DE and FR. One day it goes out of stock in FR, so the merchant needs to change its sources manually from S1 and S1, to S3.— Mexbs (@mexbs) June 4, 2019
(There is a typo in our tweet - we meant to say “from S1 and S2, to S3” instead “from S1 and S1, to S3”.)
That is, every time that the merchant has the situation where the product is changing from the “t-shirt situation” to the “pants situation” and back - the merchant needs to re-assign the sources of the product from “S3” to “S1 and S2” and back. That is, Igor’s solution still requires manual maintenance.
The MSI is genuinely an excellent feature for sophisticated inventory management. However, the Magento multi-website site owners still have to use workarounds to be able to manage their inventory on a website level.
(Update from 8.6.19) If you encounter the issue that was described in this article, we suggest that you use Igors Miniailo workaround that we described above. It is much better than the workaround that we suggested because it avoids stock duplication.
Note: in this article, I often mix the terms "multi-store" and multi-website" - these are separate terms that have different meanings. However, for the story presented in the article - both terms work. That is - the problem that is presented in the article exists both for multi-store and multi-website Magento installations.