If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!
When I first heard about Magento eCommerce I got excited. Very excited.
For years I had been using a modified Zen Cart codebase which worked well, was easily hackable but constantly frustrated me with bad system design, poor templating, low standards compliance and a bickering development community. It was stuck in the past but I made it work with my own modifications over time.
Magento appeared on the scene at about the time everyone was quibbling over what Web 2.0 means. It was a time of shiny new applications, short & brandable urls, gradients and buttons. At first it seemed too good to be true; an MVC approach (using Zend framework), latest technology, well thought out features, upgrading platform, company backed and developers not afraid to use the latest versions of PHP and MySQL.
I installed an early Beta, played with it a little, loved the features but I didn’t give the codebase much thought. It was strange. A lot of files, a lot of directories, a completely OOP approach (while I find OOP useful, I had never seen it used so strictly and extensively) and an unusual use for XML. I accepted this as a learning curve and decided to use it on a commercial project when the opportunity arose.
I must stop here and make clear that I don’t intend to cruelly pull apart any particular methodology, application design or any other development decisions. My beliefs are that these kinds of decisions depend on a variety of factors including:
Therefore I am saying it is not a case of “which methodology/programming language/framework etc. is best” but more a case of “what is this project and what technology will suit it best”. As I will explore below I believe Magento made decisions based on what would be cutting edge, fresh and idealist instead of looking at what would suit a new open source eCommerce system.
So back to my story and I had found an opportunity to use this new system. A project requiring product filtering, high numbers of orders, one page checkout (which Magento does beautifully) and many addons that would require a lot of hacking in Zen Cart. I took the plunge and went with Magento.
Not long after getting started on the project I realised that the application design didn’t “fit” with me. I have worked with a lot of custom & open source web applications, database systems, retail software, warehouse management software and I always managed to find an understanding with them. No matter if the code resembled long, thin, cylindrical pasta of Italian origin or if it was written in a foreign language I managed to get my head around it and work with it comfortably.
With Magento this just did not happen. I could not understand what decision process resulted in thousands of directories and tens of thousands of files (a lot of which contain empty class declarations). I couldn’t figure out the pattern of where code went and what the abstract folders called “Convert”, “Entity”, “Layer”, “Resource” etc. are for. The naming convention for folder names, model names etc. didn’t sink in – sometimes you needed lower case, sometimes camel case and sometimes one capital letter.
Ultimately, I look at the results. It took me 5 times longer to perform any task in the code (template changes, adding features, debugging etc.) and even magento specific consultants agree with this. Documentation was sketchy at the time but I don’t believe this matters. Apart from quick references I have never read a manual, watched a video or anything else when trying to figure out a new system. I follow the code, look at the file structure and experiment.
Due to the Zend/OOP/MVC influence on Magento it is impossible to follow the code. Classes are referenced dynamically, various aspects are contained in XML files and there is no clear flow that you can just debug through. The sheer volume of files and folders makes finding something unbelievably tedious.
Even the database is a minefield. In every other system I have used finding data is easy. In Magento, the use of EAV means that data is split amongst hundreds of abstract tables. Again, it doesn’t flow and it doesn’t make sense without a great deal of time developing a solid understanding of what they have done.
All of this and more ate away at me until I began to resent working on the project. I concede that this might be isolated to a minority like me, but I do know I am not the only one to have problems. Different freelancers I employed to do custom work didn’t follow conventions and hacked into the core (causing upgrade problems, which will be discussed later). I regularly see forum threads discussing the same issues and blog posts expressing their concerns.
The common argument I see are along the lines of “the web is evolving, applications are getting more complex” and “for more features we need more structure and this was necessary with Magento”. I even saw one elitist claim that a system like Magento is “proper PHP development” whereas systems like Wordpress are for “PHP Hackers”.
Essentially I disagree.
Yes, Magento is an advanced system and I am sure once the rules are learned and understood these application design decisions make sense. Unfortunately I do not believe the time needed to understand (and continue to understand) is worth the potential advantages.
As I touched on before, application design depends on the facts. Here is my take on the facts applying to Magento and the community that will use the system (or any modern open source eCommerce system):
On looking at the factors involved, I believe these are good aims for the project as a whole:
From my experience most of these points are affected in some way by the need to use this complicated approach to code. When the rules are too abstract hacking occurs. When the code is hacked upgrades are a big job. When upgrades are difficult, upgrades do not happen and new features/security fixes aren’t implemented.
Hosting is also a notorious problem for Magento; fussy configuration means many users complain of speed issues. The only hosts running Magento well are the ones with good knowledge of the system – this is an unusual scenario for a hosting company.
From my experience, working with Magento requires a lot of learning and re-learning. This just isn’t practical for your average web developer simply because of time & budget constraints. It has nothing to do with skill level, ability to learn or unwillingness to try new methods. It is about pragmatism over perfectionism.
By being pragmatic I mean finding an optimal solution to the problem without doing the unnecessary. I have been down the perfectionist path and it did not work for me. I now work to goals instead, to much more success. Ultimately what is better; achieving your goals within budget or using the best technology with the latest programming techniques and methodologies?
What would have been a good approach to Magento? In my opinion, the development hours put in to a solution like Magento could have been better spent finding a good structure that is easily understood by the majority of developers. The structure might not be perfect, it might not follow academic methodologies and it will probably draw criticisms from purists.
But ultimately if it achieves your goals, it is a success.
A great example of this is Wordpress. I have often thought the code base is dodgy by professional standards, but it works. I have grown to love it because I know if there is a problem I can find the section of code easily. The structure makes sense to me and I never feel the need to hack the core. The amount of plugins avaialable is a testament to the success of the system, as is the number of websites using Wordpress and the successful commercial arm.
Wordpress is achieving its goals.
A final Cynical Note… Many people claim that the complexity of Magento is somewhat intentional. The profitability of Magento relys on consulting, technical support and installations. Making the codebase complex could mean that many developers will start out, get stuck and pay for help. If this is the intention of Varien then perhaps they have been very goal focused, although I doubt this plan would have long term appeal. Personally I believe that Magento is simply the result of focusing too much on cutting edge methodologies and not enough on what they actually want to achieve with the system.
Comments, thoughts, opinions or complaints? Leave a comment below…
20 Responses to Magento eCommerce – Bloated or Brilliant?
Tomislav Bilic
June 19th, 2009 at 7:26 am
Wow man… Great article. Thanks for sharing it.
Branko Ajzele
June 21st, 2009 at 7:51 am
Great article…
Tomakun
June 22nd, 2009 at 12:45 am
Great article. I agree to a lot of points but still, I have the feeling that this has been written after getting frustrated on Magento. What I’d like to know is, did you finally manage to understand the system and build a store with Magento that’s actually live?
I’m a young web developer/designer, I have a extremely little knowledge on php, however I managed to build my first store with Magento in two months. Custom design & layout, ALONE, with only the Magento forum and the very sketchy documentation as references.
It wasn’t easy and it took me twice more time to understand the system than to build the actual site. The learning curve is super steep but once you understand the mechanism, Magento is just super easy to customize and great to work with. Actually for most of the projects, you don’t even have to know php to build and customize a store.
However, I couldn’t agree more with your facts/goals list. To me Magento was a nightmare to learn but is now a dream to work with as I am starting my second store. I can also see that you’re somehow comparing it to Wordpress. Not sure it can be compared though, as it serves completely different purposes and features. But I get your point.
Paul Gregory
June 22nd, 2009 at 7:02 am
Agree. The structure of Magento is fantastic in theory, and it is no doubt impressive to programmers of an academic bent. For people just wanting to get a shop working “their way”, it’s obtuse and obstructive.
Magento errs on the side of “correct coding practice”; WordPress errs on the side of “making it easy”. However, WordPress also has sensible defaults and you can get up and running in minutes. A Magento store needs a lot of attention before it can be released to the world.
What annoys me though is that many of the decisions made by Magento are so difficult to undo. Really it should allow users to toggle things that not everyone wants like delivery addresses, but instead a coder is required. One of the side effects of a class-based approach is that instead of writing an add-on that is fired at the appropriate point (a la Wordpress), some things can only really be changed by *replacing* the routine. Essentially rewriting it (or hacking a copy). Which quickly makes Magento less of an ecommerce solution and more a framework with an example ecommerce store bundled in. The more you want to step away from the (often bonkers) default store, the more you have to rewrite. It just saps time.
I totally agree with your last paragraph however; a support industry is far more profitable than giving away free software that is configurable enough to cover everyone’s needs out-of-the-box.
Carey
June 23rd, 2009 at 2:14 am
@Tomakun – I am impressed that you say as a young and new developer you have picked up Magento well enough to understand and get a site live. The code and structure is complex and many people give up so you can be proud of that!
I did build the store and it is live. The site is high profile and receives a lot of visitors (which highlighted the speed issues, but that is another story). Still now I work on the site maintaining and improving.
The project I did was quite complex and required many things outside of Magentos feature set. e.g. three custom payment provider integrations (financing, credit card etc.), price comparison product feeds, javascript delivery calendar with complex rules and loads more.
I think the amount of custom development I had to do highlighted the issues I raise in the article. Starting a store with little or no customisation would actually be quite straightforward, although I believe that a successful website will need changes at some point.
It sounds like you have had the time to really get into and understand Magento, which is something I couldn’t do while juggling other projects. I felt ultimately that it didn’t have to be that time consuming and could be much easier to work with.
The comparison with Wordpress is simply about the approach to code and structure, not features. It is true an eCommerce site is entirely different but I believe the code structure and methodology is a main reason why it became so popular ahead of all the millions of other blog/cms platforms.
Nightfly
June 28th, 2009 at 4:37 pm
Magento is a complex beast, but I’m fine with the situation for the following reasons:
- Magento development pays well.
- Like Tomakun said, it’s not complex without a reason. It’s more of a shopping cart framework than a shopping cart. Once things fall into place, extending and modifying it is a breeze.
Granted, I had a good position to get into Magento development full-speed. I was frustrated from Typo3 (which I’ll never understand, and I tried really hard), and got a well paid offer to built a customized Magento shop in two weeks. Well I don’t know how, but I managed to get it working (sometimes working 48h through).
My luck was having some experience with Zend Framework ideoms (such as the autoloader, Zend_Db and the MVC framework). I can’t imagine understanding Magento without this pre-experience, and I pity those who have to build Magento shops “on the side”.
So what do we have? A great, extensible system, good job opportunities and intelligent community.
Epic win.
kenny
July 10th, 2009 at 8:20 am
so magento is complex. joomla and virtuemart, or wordpress and ecommerce by instinct donr’t cut it. i really like magento’s checkout approach for people who are buying for the first time.
oscommerce / zencart – i have heard php and html overlap a lot and makes for difficult visual customization.
so what is a good, low cost or open source solution then?
Darren
July 14th, 2009 at 11:20 am
Prestashop
http://www.prestashop.com/
kenny
July 14th, 2009 at 7:55 pm
prestashop – i tried the demo and the page after you hit add to cart does not load with images
i wonder if the demo does not work then how will a site hosted on prestashop?
anyhow, will do more research. thanks for the suggestion.
any links comparing this with other candidates that you might want to share?
thanks again.
Johnny
July 22nd, 2009 at 2:30 am
Hi all,
I have done quite a lot of research on various shopping carts and to my mind someone *always * has something to complain about. No one will ever be happy!
The other unfortunate thing from my perspective is that all of the debates focus on the detail and the engineering of the product without any considered thought on the practical commercial and business decsisions one needs to decide before “going” for Magento over another product.
I would love a frank review on the merits of the top tier shopping cart sites out there.
I am so disappointed to read the negativity on Magento, as I really like the user experience, the look and feel, the appartent ease of use at the back-end but obviously all of this comes at a price. Would it be fair to say that it is the best of a less than perfect lot?
Thanks
Carey
July 22nd, 2009 at 4:20 am
Hey Johnny – Yes there is always something to complain about, nothing is ever perfect! I think the reason I wrote this article is out of frustration at the approach to the project structure and architecture. The actual finished product is like you say – great user experience, look and feel, ease of use and full featured backend.
There are plenty of SEO concerns but overall if you have the time to spend working on it and figuring it out you will be happy with the final product. However for a typical freelancer with a limited budget project I would think twice.
Overall I think that Magento could have been designed so much easier for developers and that has the knock on affects as described in my article.
@Nightfly – Glad you have found it workable and enjoy using it. I do wonder if you think a more pragmatic architecture would save you time with your development?
@kenny – Have you thought about a hosted solution like http://www.shopify.com/ ? I haven’t used it but have heard good things. To take away all the hassle of learning a new system like Magento, Zen Cart, OSCommerce or whatever it could be worth a look. But do consider that there are a lot of limitations and lack of control with a solution like this.
Jon Pokress
July 31st, 2009 at 4:10 pm
I’m also looking at Magento, but have been working for a while with Intespire Shopping Cart (http://www.interspire.com/shoppingcart). It’s code is super clean and logical, it’s easy to customize, and offers a rich feature set, a visual design environment, and range of out-of-the-box templates. The multi-domain store aspect and support for virtual (non-downloadable) products are the two huge things this has for our mid-level enterprise that are making me salivate, but we’re going to need to customize things along the way so you commentary on what this might take was very helpful …
RTConcept » Magento Notes – Part 2: Development tools
September 9th, 2009 at 11:45 pm
[...] a not a secret that Magento is complex and has a quite steep learning curve. Part of that problem stems from the fact that there [...]
James
September 12th, 2009 at 10:31 am
It sounds like you know what your talking about…
I understood exactly what you meant when there was no “clear flow”
Call me old skool, but I like editing one piece of video next to other to build a clean storyline… I don’t care if the technology is non-linear… the story still has to be followed in a straight line…
Seperate your data and you logic… sure… but why abstract your logic from the game plan?
Kind of joking… but not really… I will think twice about starting a new life long career as a magento “employee”…
Sebastian Schneider
October 20th, 2009 at 12:20 am
Hi Carey,
Thanks for your point of view on Magento. I’d like to hear your opinion on something:
You stated Magento is bad in reaching its goals as it does not allow the community and developers to easily get used to it. On the other side, you seemed to make the impression on me that you still think that the complexity of Magento allows for a lot of flexibility once you know how it all works together. Or did I misunderstand?
Now at first, the complexity and steep learning curve seems to be a disadvantage for any business since the development costs for the launch increase. However, what if you as a developer get used to the code and are then able to quickly implement changes? Would you be able to implement these changes in a more timely fashion than if you had to work on any other open-source ecommerce solution?
If you were, this would most likely be a greater business advantage and could make up for the initial development costs. I ‘d like to hear your take on that. Thanks.
Carey
October 20th, 2009 at 3:36 am
Hi Sebastian
I believe that Magento does offer a lot of very good features but not necessarily flexibility. I have often found it very difficult to make “quick changes” in Magento including very simple things such as layout and text changes.
Once a developer has got used to the system they will no doubt be quicker than when they had first looked at the system. However I do see that there is a limit to how quick things can be with Magento – when adding features there are often many things to consider including xml files, using correct case for models/controllers etc. and even creating redundant files to adhere to the system architecture.
There are also issues with debugging and fixing – quite often a developer will delve into the database or just output a few variables to see what is going on. Because of the deeply nested class and inheritance structure it is often extremely difficult to “step through” the code to figure out where the problem code is.
The database is equally as complex which has taken away the ability to explore it to find/fix problems.
No matter how much experience you have with Magento I believe that is still quicker and more cost effective to work with other open-source eCommerce solutions.
I do not recommend Magento for use in a business for the following reasons:
* The majority of developers will need to start from scratch to understand the system
* If a developer leaves, it is a big job finding someone else and training them up
* Skills with Magento are generally non-transferable meaning developers are not gaining as much experience as they could do with other systems. This also means a smaller pool of talent for you to choose from.
* Developing with Magento will always be slower than developing with other less bloated systems
I hope that helps and if you need any more advice let me know.
mrknister
October 22nd, 2009 at 7:44 am
The main problem is:
OO to perfection means NO reuse at all.
* Try to not emply one of the checkout stages -> impossible
* Try to use the datagrids in a different project -> impossible
* Try to disable the banners left and right, as well as product compare and wishlist -> 6 hours down the toilet.
* Try to make a new checkoutmodule for a specific payment provider? -> impossible (it took my payment provider 8 month to come up with a plugin after they started development)
* Change 4 small things in a template -> you will change directories at least 80 times!
* Try to have a bikini with 10 options that all have stocktracking -> impossible to maintain.
-> Impossible means not undoable but not at all practical.
Yes I do have a lot of experience zend certified and have implemented 10 custom stores with at least 200 products each.
There is some russian in this cartsystem.
Redstage
January 12th, 2010 at 1:08 pm
Not going to get technical here but we have grown to really enjoy working with Magento and our clients are happy with the end result. We have figured out how to customize and work with Magento to meet customers’ expectations at every level. Agreed, it’s very complicated but it’s also extremely powerful.
Joachim
January 24th, 2010 at 9:32 am
Magento is a developer’s tool for big bussiness. Big leeague, big bucks. Open source is just testing phase.
U can judge it only by that criterion : large scale (enterprise) enviroment.
So, its a specific product that soon will stop being open source.
For other usage its – waste of time and money.
Kat
February 3rd, 2010 at 1:53 am
My thoughts exactly!!
Fantastic article!!