Magento 2 – Is it (really) worth the pain?

4 years ago  •  By  •  0 Comments

Why Magento?

Quite a few e-commerce platforms have been made available on the market, in the past few years, some of which offered as a service and some intended for dedicated, proprietary installations. Shopify, BigCommerce, Volusion, BigCartel and 3DCart are now offered as a service, with Shopify being the clear winner when it comes to popularity. Most of these platforms are intended for simple, small online shops, which are easy to build and to manage, but are not quite scalable, present not enough flexibility in terms of features and feasibility of customisation (besides the look&feel), or simply are not engineered well enough to support business growth appropriately.

Notoriously, Magento has never been the easiest platform to work with, mainly because it requires certain skills and effort from developers: getting comfortable with its concepts and terminology, understanding its mechanisms and paradigms, and learning how to develop it properly is not the easiest of the tasks, especially considering that – so far – there has been an astonishing and regretful lack of documentation from Magento itself.

Skillful developers are obviously more expensive, and the visibility of the quality of the developed code was not really within the reach of business and project managers, which (of course) translated to higher risks and higher budgets to account for – not exactly for everybody’s pockets. However, since its launch as an open-source project, the popularity of Magento has grown significantly, and attracted big investors such as eBay and Hillhouse Capital Group.

Compared to the other popular SaaS eCommerce platforms, which may offer an easier start-up and friendlier user interface to inexperienced users (not to mention continuous upgrades and new features), Magento does not limit businesses freedom to choose and fine tune hosting, or control the specifics of their eCommerce installation. In addition, the merchant is not bound to rely on (not always very proactive) support or limited by the extensibility of the platform. Software as a Service (SaaS) platforms such as Shopify may seem easy and inexpensive at first, but – as your business grows and demand for customisation increases, they quickly become expensive and unscalable options.

The key to Magento’s popularity is in its modular structure, robust architecture and underlying technologies. This includes the PHP language it is written in (quite popular among developers and easy to learn, though purists despise it to the point of not even considering it a proper programming language), and MySQL (also popular among developers and hated by purists): Both not exactly the best technologies available (even for free), but definitely the most popular by a long shot. A likely contributing factor to Magento’s popularity as a whole. As to architecture, Magento – since version 1 – has been flexible (though generic in many respects). In an attempt to make itself appealing to any type of merchants: whether they had a large catalogue, or just a few items to sell, whether the slice of market they targeted was mainly local, or had to cover sales globally, Magento provided a strong base in terms of framework and infrastructure most generic needs. Its modular nature favoured extensibility, and soon the web was full of 3rd-party extensions for Magento, covering any needs that Magento did not cover out of the box.

Whether this made the platform more stable or introduced more havoc for developers is another story. Most of the available extensions were not developed with a good understanding of the underlying platform. Extensions often clashed with each other, or acting in a way that broke the most fundamental optimisations that Magento offered out of the box. Big projects with lots of custom features commonly had poor peformance and were a nightmare to work with.

Why Magento 2?

To begin with, why not Magento 1…

  • Lack of documentation:
    developers had to either attend to very expensive training courses, find solutions posted by fellow developers in blogs, or learn the hard way, debugging and reverse-engineering Magento itself, just to gain a better understanding as to what is the “proper” way of developing for this platform;
  • Poor performance:
    Magento has done a lot of work on this, in the past few years, refactoring entire subsystems to achieve better performance, however only the most recent releases featured optimisations like asynchronous indexing, and Full Page Cache support was only available in the pricy Enterprise Edition. Despite all these efforts, most of the 3rd-party extensions were not supporting these new features, or even breaking their mechanisms all at once;
  • Poor Scalability:
    main bottlenecks were in the database, and lack of support for cloud-based solutions. The application itself was extremely heavy database-wise, and certain popular 3rd-party extensions certainly did not help. There was no native shared caching support until the most recent versions of Magento1, and no easy or native ways of splitting the database across multiple instances, making scalability a very difficult objective to achieve;
  • Outdated technology:
    HTML4 and CSS, no LESS or SASS support, no composer, no automated testing support, no Javascript model/view support, and not even jQuery or responsiveness (until the most recent releases featuring RWD themes, and still part of the platform was relying on PrototypeJS), not to mention support for mobile devices, SEO and data/business logic separation from the presentation layer, and many other features commonly adopted by web development community;
  • Bad User Experience:
    customers’ interaction with the website was unnecessarily complex and full of usability-related problems: just as an example, the standard Checkout process did not really help conversion rates, and was also quite a tricky area of the framework to work with, from a developer’s point of view. Admin interface reminded of some web-based application from the 80’s, and key functionality such as import/export, image uploads and attribute editing was way to slow or required way too many resources, not to mention pretty much every click led to a full page reload;
  • Lack of common development patterns and enforcement of best development practices.

Magento2 has been significantly re-engineered, implementing support for more advanced and newer technologies, reworking programming patterns, improving usability and optimising the platform.

A whole lot of improvements has been made, while keeping the modular nature of the platform and its extensibility intact, for instance:

  • Improved documentation
    Much more extensive developer documentation for Magento 2 has now been published on their website, targeted to all Front-end Developers, Back-end Developers, Solution Specialists, and Magento Admin Users.
    Several blog articles and guidelines are also available on Magento website, and the entire codebase is now versioned and published in GitHub, not to mention issue and bug tracking systems being adopted, and free online on-demand courses offered by Magento as part of introduction to Magento2 development program.
  • Better performance, better scalability
    Full Page Caching (so far probably the biggest game-changer in terms of performance, a feature so far only available to Enterprise customers in Magento1) has now been completely reworked and is provided out of the box also in Magento2 Community Edition.
    Database support – even though still in MySQL realm (possible future integration with other DBMSs has been announced) – has also been reworked, to allow splitting data belonging to distinct areas of the application (catalog, sales/checkout, etc) in different servers, reducing bottlenecks and improving performance and scalability.
    Native support for Varnish Cache services has been added to boost the speed of the Magento2 websites, and business logic and data have been further separated from the presentation layer, allowing more efficient and less painful caching.
    Most of the static content can now be compiled before-hand, ready to be served as-is to the browsers, reducing the load on the infrastructure and allowing even more efficient caching.
    Magento2 natively supports PHP7 and HHVM (both featuring significantly better performance over PHP code parsing and execution), and provides out-of-the-box Redis cache backend support.
  • Better support for modern Web technologies, new development tools and introduction of programming patterns
    Magento2 has added support for (and sometimes even forced the use of) some of the most recent web technologies, as asynchronous resource load with dependency management (RequireJS), mobile and responsive browser support, HTML5, CSS3 and JavaScript-based dynamic interactions with integrated, declarative templating system and Model-View-View-Controller programming patterns (KnockOutJS). Support for Compass, Grunt, LESS and media queries has also been introduced, as well as application modes (namely default, developer and production).
    PHP namespaces, API definitions, Service Contracts and Object Factory programming patterns have been implemented all over the Core code, Interceptors and Dependency Injection allow for static code compilation, better and safer extensibility and customisation.
    Support for Automated Testing has also been added, covering most of the core functionalities but also giving extension developers a useful tool, to ensure better quality of their code.
  • Better user experience
    Important parts of the application, as for instance checkout, have been completely reworked and necessitate now of less interaction at visitor’s side, the checkout process itself is much more linear and simplified, focussing on driving users to the purchase completion. Caching has also been significantly improved in these areas, as compared to Magento1, where page caching was practically disabled all along the checkout process.

Magento 2 is undergoing continuous development, with many enhancements on the way, which – combined with an already expiring support (announced to be offered by Magento only for three years after version 2.0 has been released) around the end of 2018 – makes switching to Magento 2 for Magento 1 users a no-brainer.

Unfortunately, Magento 1 developers (and agencies hiring them) are those who paid the price of many of these enhancements, both because of the difficulty in understanding new concepts and paradigms, differences from a platform they have already (slowly and painfully) became used to, and because of the many cool new features advertised by Magento (who really jumped the gun by announcing the presumably “stable” release of their new-generation platform to the public, distributing propaganda to the merchants as to why they should switch from Magento 1 to Magento 2, even though the “stable” release was nowhere nearly ready for production), that just didn’t quite work at first. Supposedly, Magento relied upon their Community, for support, bug discovery and fixes, and suggestions as to how to make the platform something truly usable in production environment.

Matter Of Form has been no exception to this painful adoption process, largely underestimating the size of the projects, relying on the (obviously wrong) assumption that Magento 2 wouldn’t be so much different (or buggy) after all, and then having to absorbing delays and bug-fixes for functionality that was already well-tested and adopted in Magento 1, and supposedly working in its new version.

Despite this long and painful learning process, it is not without pride that our team have overcome several difficult challenges and situations, as well as developing highly-customised eCommerce designs (Parka and Tangle Teezer) websites with our own solutions to integrate Magento 2 with external platforms such as ERPs, logistics, reporting and customer feedback solutions (like Spark Response, Sage and Feefo to name a few).

Magento 2 or not to 2? From where we stand now, it’s a no brainer.

Submit a Comment