Magento is cool! it’s getting a lot of traction and popularity. It is getting better with every release, and it’s definitely empowering thousands of on-line stores world-wide. No question about that!
However, I believe there is something intrinsically wrong with Magento! Magento, from my experience, is most of the time is below customers and technologist expectations.
Why? I believe because it doesn’t balance Warranty and Utility, which are the two components for delivering value.
Quoting from ITIL: Utility is the fit of purpose, while Warranty is the fit for use.
Magento is providing great utility, it provides almost all the features required in any e-Commerce website. Compared to any other e-commerce platform, Magento is definitely the winner, when it comes to features, catalog flexibility. Magento, with its fall back, mechanism, provides flexibility in development as well.
Awesome? Not really. For the customer to feel the real value and to be satisfied, Warranty and Utility needs to be well-balanced. If they are not, customer expectations’ are always on the higher level, this makes the other part fall short, and hence, user is getting less than what he is expecting.
However, when it comes to warranty, I believe Magento fails big time. Magento has so many issues in terms of performance and scalability. Magneto is definitely slower than any other platform, it’s resources hungry and a lot of processing is taking place to render any page, one cannot run a decent e-commerce Magento website without applying multiple layers of caching: To name some of these issues:
- Fall back mechanism, provides flexibility in development, however it makes Magento resource hungry. As it searches for the code on 3 levels.
- EAV model has the same issue, it provides flexible in catalog, customer, categories….etc. However this comes at the cost of performance. There multiple issues with EAV model and it’s implementation in Magneto:
- EAV model results in joining multiple tables to get a single entity attributes. This is definitely bad for performance, to overcome this Magento has the Flat Table, and Flat Table indexer to aggregate the attributes from different tables into 1 table. I wonder, why it was not done the other way around? I mean we have the flat table by default, any extra attribute goes to the EAV tables. This way we achieve 2 things: first we won’t need to have Flat Table indexer. Second in listing pages we will only need to get products from the flat table, then we get the rest of the attributes inside the product page.
- Why an attribute table for each data type? int, float, varchar, char……etc. This makes queries even complex and more expensive. I believe going with the EAV model, data types should be managed on the application level, and not on the DB level.
- Images rendering: This is really something I cannot find any justification to! To make sure an image is always rendered, Magento checks the availability of the image on the HD! seriously! this is two birds in 1 rock! it affects both performance and scalability. IO for each image is very costly, the more images you’ve the worse the load time. Thinking of scalability, once you’ve multiple servers, you end up using a centralized storage to host images! Now you’ve to check images availability over a network!
- Multi stores, multi views, all are awesome features! Theoretically yes, However once you start having thousands of products, it definitely falls short. The whole site and the back-end performance becomes unacceptable.
- Indexers are used to aggregate the catalog details e,g price, inventory, URL…..etc. However they are still very lousy and inappropriate unless you’ve a small set of products. But will you really need indexers at that stage! I’m no sure. When you start exceeding 50+K products or even before, you’ll start finding out how lousy they are. They start taking tens of minutes, they are not incremental and they causes transactions on front end to fail.
To be fair with Magento, I believe e-commerce is very complex, there are many variations in products, promotions….etc that Magento is trying to handle. However the point I would like to make here, is that if you cannot give a feature that is balanced both in terms utility and Warranty, it’s better not to have it. Providing multiple stores that will make the website and the back-end very slow if you start having ten of thousands of products is not cool! I believe, in next releases Magento should heavily look into the performance and scalability issues of the system. Maybe the community should seek help from system administrator and performance experts.
Finally, I believe there is really a very big opportunity for new e-commerce platform that balances warranty and utility. a Platform that is well-studied from both features and performance perspectives.