Several years have passed since the time when I tried to understand Magento development. At that time, Magento was something unreal and very difficult for me. I tried over and over again; I did a lot of mistakes. One day I woke up and bingo!!! It was really amazing to understand how it works. Well, in this article I would like to talk about the caveats that were, most likely, encountered in development by a lot of my fellow PHP developers. So, first of all, I would like to tell a few words about the Magento system itself. Magento is "imbued" by Zend to the last line of its source code. In fact, Magento is extending Zend Framework. It uses Zend as a main source of its library components (Zend_Db, Zend_Cache, Zend_Locale, etc.). Moreover, file naming (classes) and code conventions are borrowed verbatim from Zend (coding style). Magento is a well documented system. There is a lot of helpful information on the official website. For example, you may find the following articles very useful: Knowledge base and Screencasts. Apart from that, Magento has a community of developers that always share their troubles and resolved issues (the official forum). What are the common mistakes for Magento newbies? I have picked out three most common mistakes.
Before trying to start coding Magento, you first have to read the Knowledge Base.
You should not think like "...it must be simple, I will do it using my existing development experience". I am not sure it is a good idea. No doubt, Magento is a complex system, but it is also a very convenient platform for development. It means that you have to spend more time on learning in the beginning, but this time will pay off later. So, before starting to code, first read the Knowledge Base on the Magento official site.
Do not reinvent the wheel
Magento is a framework with a very good components library. These are resolving almost all of the tasks for e-commerce. You should not reinvent the wheel, just make sure that the component you are working on is not a part of core system and that it doesn’t exist on Magento Connect.
Do not change core
Magento is a growing platform. There are a lot of custom solutions based on the core components. You can use an existing component like a part of your own module for Magento, but you should never change this component (if it is core or community part). Instead of this you can just extend or override it. It's very simple and the core system stays unchanged. I hope this article can help all new Magento developers.