There is no doubt that there is a lot of hype around Magento, especially with the release of Magento 2.
Among many business people and product owners, there is the perception that it "just works" and that you can just install any plugin your heart desires and away you go.
Magento seems to have the same aura surrounding it as IBM did back in the day; "No one ever gets fired for buying IBM".
Fast forward to today: "No one ever gets fired for choosing Magento".
Let's unpack Magento a bit and why, in almost no scenario, would I consider it a good choice (for South African, enterprise grade e-commerce systems that require integration with existing ERP systems / third party providers).
First and foremost, the database of Magento is a mess. No sys dev, DB admin will tell you otherwise. The chief problem is that it uses the EAV model, which has also been called "a bastardisation of the relational database model". This is also one of the big reasons that Magento is so slow. To be fair, generic systems like Magento need to cater for a multitude of requirements and the EAV model is a simple way of giving flexibility. However for developers, looking to integrate or extend Magento, it's a nightmare. There are alternatives that Magento could have adopted. Craft Commerce (modelled on Expression Engine) goes and creates fields on the fly. Quite unusual, but it results in an easier to understand DB that is significantly more performant, especially as one can index columns as needed.
A further drawback of Magento having to cater for everyone and everything is that it has a huge amount of tables. Developers that have to integrate/extend Magento invariably struggle to make sense of this.
So who cares? Why is it a problem if the DB is convoluted?
A clean, simple, well thought out relational database (which Magento does not posess):
- Will make it easier to ensure referential integrity and enforce business rules
- Is easier to scale
- Easier to write good quality code for
As a business owner, you might still say "who cares"? You will care because:
- It is VERY difficult to develop and extend Magento. Do you want to pay top dollar for very expensive developers?
- Afore mentioned expensive developers are HIGHLY in demand. Why would they work on Magento? They wouldn't. I've heard first hand that there would be mass resignations should we force our devs to work on Magento.
- Doing seemingly simple things (simple extensions, even skinning) would take a long time and cost a lot of money
- Magento doesn't scale well. It's in fact very slow. Do you want it falling over when you send your weekly newsletters? Do you want to pay top dollar on hosting? Sure Varnish (the cache Magento recommends) helps, but Varnish is a plaster masking the underlying issue.
It's surprising that Magento decided to use such a mix of outdated technologies for the front end stack.
From a backend perspective, it's even worse. Instead of using a 3rd party, well established, rock solid development framework (Symphony, Cake 3 or Yii would be good choices), they have gone and created their own framework. Limited documentation, poor support and - compared to the aforementioned choices - done quite badly. (Here is their defence of their choices on Github).
All of this results in a codebase that is a nightmare to work with. At the time of writing, Magento 2 still has over 1,000 open issues.
Why should the business owner care?
- At the end of the day, the people that need to implement Magento should be important to you. Chances are they will HATE it. Why would competent senior developers, that can pick and choose where they work and what they work they work on, choose to work on Magento when they could be working with a custom designed, relational DB, Vue.JS singe file components, a proper build process, Foundation, Cake 3 etc.
- Any custom development that you require on Magento will cost you an arm and a leg, will take forever and will very likely be buggy.
- Skinning Magento (so that your site doesn't look like a Magento site) is hard. Chances are, your store will look like every other Magento store
Magento 2 is incredibly slow unless cache is turned on. What if the requirements are to have updated pricing, quickfire sales etc? You clear cache and all hell will break loose in production. Developers report that Magento 2 is unusable on their local machines. It just doesn't run (unless they have a LOT of RAM and/or enable cache; but developing with cache enabled is a non starter, since one only sees changes when cache is cleared).
The licensing is such that it wouldn't be acceptable to any serious ecommerce store. A flat yearly fee + a percentage of revenue? No thanks.
That was a whole lot of Magento bashing. In a future article, I'll look at some alternatives and will keep the bashing to a minimum. The bottom line is that from a technical perspective, Magento is not great. As business / product owners, this should not be ignored. The people working on the project will be demotivated and there is a good chance that if you're looking to do any sort of custom integration you will find the project overrunning on time and cost, with severe frustration along the way.
It's just not worth it. Choose something else. For the sake of the team responsible for implementing.