Magento : The good, the bad, the ugly
Magento is an e-Commerce platform intended to facilitate the construction and maintenance of an online store. Its underlying philosophy is that most e-Commerce functionality is more or less standardized, so its pieces should be reusable. The enterprise edition includes tools to help with payment processing, customer management, internationalization, SEO, etc. It also includes a beefy admin tool to manage inventory, track sales, and lots more.
I think Magento is a great idea. In practice though, I’ve got a growing number of complaints.
I’ve been working with Magento for a little over a month now, so I’m far from a seasoned developer. However it’s been long enough for me to form some opinions on its strengths and weaknesses:
Two things come to mind: community and extensibility.
Magento is arguably the largest platform of its kind. There are competing services, such as the Canadian based Shopify, but the services aren’t really comparable. Shopify is magnitudes simpler, because they take care of hosting and you only interact with your store through their online tools. Magento users need to get their hands messy with the code and manage their our hosting. But I digress, we’re talking good. Since Magento is popular, there’s a large network of resources to help newbies gain their footing. There are even free online courses which I’ve found to be thorough, but slow paced.
Next, Magento has a huge collection of free and paid extensions. So if you choose to build an e-shop on Magento, there’s a ton of useful functionality you can slap on in just a few minutes. My team and I have experimented with third party plugins for improving search and facilitating the use of CDNs for photos, both with good success.
Magento has a high learning curve. The issue is that there’s typically at least three ways of doing something in Magento, and odds are you’ll need to make some mistakes before you start to get things right.
For example, suppose you want to introduce a bit of code in the checkout process, say… to fire a message to an inventory management system. Lets consider three options:
- Dig through the Magento core code and find a good place to introduce the needed logic. NO!! Thou shalt notmodify magento core code!
- Register an override to the method your interested in changing, and add the new method to a new or existing custom module.
- Find or add an event that triggers at the right time and register a new observer module to hook onto it (essentially the classic observer design pattern).
Whew!! I do hope that made some sense, because that’s as simple as I can make it! The problem is essentially this: if you presented these three options to a new, confused Magento developer, which one do you think they’d opt for?
XML. Just crazy amounts of XML.
Small changes in Magento require an unfortunate amount of overhead. The corollary to that is that any changes, big or small, require you to modify very esoteric, error prone XML configs. Even worse is that Magento aggregates all its XML configs into a global config space. So while your change may seem harmless, be wary, you’re playing Jenga.
Simply put, Magento is a bit like Firefox: kind of bulky, but solid with reasonably good performance and great extensibility. I’d recommend it for anyone that isn’t afraid to get their hands dirty learning the nuances of a new platform. I wish there were an e-commerce platform analogous to Chrome - that is, fast, smooth, clean, and equally extensible. But I don’t know of one. For now anyway…