Magento 2.1 released
magento.comFrom the release notes [1]:
> Upgrading the Magento system software no longer results in the loss of data.
Well, that's good. You're still working with Magento, though, so... (I've built plugins for it. Don't. No money is worth that.)
[1] devdocs.magento.com/guides/v2.1/release-notes/ReleaseNotes2.1.0CE.html
As have I. Magento somehow combines the worst aspects of both PHP and Java, while using EAV everywhere to ensure it also combines the worst parts of SQL and NoSQL.
You forgot the crazy xml config files that controls everything and never gives you an error if something is wrong - It just does nothing. Maddening to debug.
Also this: http://inchoo.net/wp-content/uploads/2010/09/MAGENTO_v1.3.2....
Too big to make sense of when you can only see a screen's worth at once, so you really need a physical copy. But it's way too big to fit on anything you can get out of a regular office printer and still have it readable. So you really need to go to a print shop and shell out the better part of a C-note to have it done at 36x24 or larger. Ask me how I know.
(Before I paid, I asked our architect client if she wouldn't mind me doing it on their large-format drawing printer. She was not amused. You thought consumer-grade first-party inkjet cartridges were spendy? You have no idea.)
I've once implemented it for M2 to give you full nice errors while you mess around with the XML ... but that PR was never accepted and it took to long for them to post any response ... so I abandoned it, that feature and M2.
Were you on your own, trying to support these extensions? That might have been too much to handle, especially in the heyday of Connect - which is why we completely replaced it with a new app store called Marketplace. The big differences are (1) that all code is hosted by us, allowing us to review for quality & plagiarism, and (2) that we are curating the extension list (i.e., there won't be 50 Facebook login extensions).
While you had a bad experience, remember that there are literally thousands of people all over the world who have good income from this business.
I have to agree: the magento ecosystem produced some of the worst code I've seen. we're currently supporting a few mid-sized online shops (40-80k products) - around 50% of our development time is spent patching things.
magento 2 has made things a lot better, at least on the tech side. but the 2.0 code is far from stable. even the now available 2.1 is hardly ready for production - unless you patch things up yourself or have a rather simple shop.
full ACK
What's a better solution than Magento?
I'm a huge fan of BigCommerce. https://www.bigcommerce.com/
They just rolled out Stencil, which is a local development environment for building the themes for storefronts. It's using Handlebars for syntax, ES6 with Babel and WebPack, and is incredibly easy to setup. There's no local database as it pulls the product catalog from a running store, and it's installed with one npm install command.
Subsistence farming.
Shopify offers a competitive platform for larger business called Shopify Plus https://www.shopify.ca/plus/
Depends on the use case, small medium shops I think the shopify business plan covers everything, and once you've grown to want more, go with one of the big dogs. Hybris or Demandware.
What makes Hybris or Demandware a better fit for big companies than shopify?
It used to be that people would talk about magento being "once you've outgrown shopify". They don't seem to be saying that anymore.
I've personally worked with a business doing 100m+/year in revenue on shopify.
Depends on what you're looking for. Theres a lot more customizability in Hybris and Demandware. More advanced features and extensibility.
The same can be said for Magento, Magentos issues always come down to performance.
WooCommerce. I've used it for a (small) webshop for two years now, many customization, no real problems at all so far.
But isn't Magento versus WooCommerce like comparing a mosquito to an elephant? We've been wormig with Drupal Kickstart Commerce for a couple of commerce websites and it's been a terrible experience. It's without a doubt the worst CMS I've ever come accross. Drupal in itself is something of a beast, but with KC it just maken you want to cry.
SAAS solutions seem the most elegant, but we don't want to become a reseller and want to retain fill control for oud customers.
Prestashop looks interesting and not as bloated as Magento.
I agree woocomerce is a much cleaner solution even though it's based on WordPress.
> even though it's based on WordPress
I consider this to be an advantage actually. At least if you do not only want a standalone shop, but an integrative website with a news/blog area, static pages like faq to draw in customers.
Check out odoo.[1] You can self host a version of it if you want for free or you can pay to have the hosting taken care of for you. I believe they will even host the ecommerce portion for free.
Shopware. (https://en.shopware.com)
I use Commerce V3. Very happy and pleased with them. They're still open source like Magento (which I have used and hated), but with a super user friendly interface. Plus, they're suitable for small business or can scale as big as you need.
I would say prestashop. Successfully using it on a couple webshops.
A developer-friendly solution: http://sylius.org/
We're actually looking to move away from sylius and just eyeing Magento. Sylius' test suite quality and modularity is one the best I've ever seen; considering features and API stability, however, it leaves a lot to be desired. (It's coming along nicely, so best wishes to all the folks at Lakion.)
CommerceV3 (CV3) www.commercev3.com
CV3_Can_Help@commercev3.com and I will be happy to give you a tour of the platform and discuss how we can help!
Miva. www.miva.com
I spent two years trying to innovate on Magento, because it was the platform before I got there and rebasing seemed like overkill, and it almost broke me as an engineer.
My experience (and I'm not even going to complain about the XML!):
The code base is horrifying; we would often trace bugs through the stack, realize they were in magento core files, then face really difficult decisions about furthering our fork.
The code is deeply integrated from UI to DB. If you change it, upgrades won't apply cleanly. But you need to change it (or the data structures/applications therein) to implement any non-core features.
Speaking of upgrades, they are mostly done by opaque and undocumented upgrade scripts, and tend to break plugins or addons...
Which are generally poorly written and untested, even highly rated ones in their web store, but their quality isn't even the biggest problem. The absence of a sane extensibility model means they virtually can't coexist consistently, and when they do they break on (or need rigorous requesting due to) upgrades...
The EAV table layout wouldn't be totally horrible if it weren't so badly implementated. They put everything, even system data, in EAV tables; not only did this make it hard to extend, but it put a huge load on the (outdated) ORM.
Performance was an exercise in caching like no system I've seen before, entirely due to this design choice. The downside of that is that server restarts under load could cause a full system panic as new web hosts put an unbearable load on the DB, which could throw off other web hosts when their ORMs blew up by timing out all their pooled DB threads, which started a cascade through the rest of the system.
It was possible to deploy a single cache shared by all your Magento servers, but even stock Magento would pepper that cache with dozens of serialized queries to serve a single page, making the network overhead barely worth it. Plus, this meant you couldn't clear the cache under load or you'd be down for an hour, and clearing the cache was a daily necessity because their tagging system to rebuild the cache incrementally was horribly broken. (Only barely worked using Redis, which was both recommended by Magento and provided by a 3rd party unmaintained driver and officially unsupported.)
We ended up reimplementing all our e-commerce properties on a custom node platform by assembling high-quality atomic tools for the important bits. The technical debt of the transition was paid off in 3-6 months on our feature schedule and has paid dividends since, and we easily handle double the load on ~10% the infrastructure spend.
Worth noting that Magento 2 is rewrite that actually uses some proper engineering practices.
No idea how good it is but version 1 was horrifying.
The fact their github has 1274 open issues and 179 open pull request at the time of writing suggest maybe nothing has changed: https://github.com/magento/magento2
But none of that matters because Magento 2 still can't serve a dynamic request in less than a second in even the most optimal conditions.
https://blog.amasty.com/magento-1-vs-magento-2-performance-c...
The Magento framework builds static sites with a (slow) dynamic CMS system. It's garbage.
We got it down to an average ~400ms under load with aggressive full page caching (including our own hand-rolled component caching) and edge caching of all static assets (freeing up the servers to be optimized for dynamic content).
This should not be considered an endorsement; getting sub-second pages was a downright herculean engineering effort requiring system-level optimizations beyond what should ever be required of a pre-packaged system.
I've spent enough time in highly customized Magento in my day to both be impressed, and deeply concerned for your well-being after such a task.
True that we left before 2.0.
I was excited to hear that 2.0 wasn't backwards-compatible, but apparently (from the community feeds I'm still connected with) things haven't improved much.
The problem seems to be that they just didn't have a deep engineering bench at Magento, and as the red-headed stepchild of eBay a few years after their acquisition they had no way to hire. (I was actually pitched a "CTO of Magento" job at eBay Enterprise a few years ago, but the comp package wouldn't have matched my lead engineers' at the time and most of the dev team was overseas and chosen based on price. It looked like a nightmare.)
edit: Apparently they've since been sold to a private equity firm to be managed for cashflow, which is a common outcome for stagnant enterprise companies with vendor lock-in and rich fees. So much for buying their way out of their code hole.
> from the community feeds I'm still connected with
Can you please elaborate on what these channels are?
Indeed, I'd like to know for our benefit.
The tricky thing about looking at number of issues is that we have a high volume of interaction on the repo as well as a lot of cruft from even before the beta (I'm looking into winnowing these down). I'm spending 50% of my time on the road interacting with developers, and most of what I'm hearing is that M2 is much better to work with for professional PHP developers, but that there are improvements still needed. We're damn lucky to have an engaged community which will help us to constantly improve, assuming we continue to listen to them (which is a big part of my job). We also have our most senior PM overseeing developer experience.
Regarding PRs, this wasn't something we even _did_ before 2015. I wish we could have a quicker acceptance of PRs, but many are not in a proper state to accept - for example, several PRs have CI failures which are the responsibility of the submitter to fix.
I'm migrating to Magento 2 from a custom built solution in Laravel. It is very complex, but there are some improvements from Magento 1, and it's been good for the most part.
There are other alternatives we looked at, such as Spree (ruby) and other php based carts, but Magento 2 has so many extensions available from third party and the developers are actively listening to the community. The Chief Architect, Alan Kent is available to communicate with and has pushed changes that the community really wanted (i.e. moving to SASS from LESS).
It's been a steep learning curve, but there is also a lot of flexibility in modifying the code to suite your needs (without needing to edit the core).
Magento was one of the biggest pains of my career.
I am obviously exaggerating but Magento might have an xml file to configure another xml file.
It does! (Or it used to.) The global configs defined the cache-specific configs.
edit: Which defined the page-specific caching configs. It's XML all the way down.
I said it as a joke but.. turns out its true. I am still not surprised, Magento cannot surprise me anymore.
Config in M1 was a bit schizophrenic. M2 introduced separated configs by function and (finally) XSD. Tooling is underway so that developers have to spend less time in XML.
The only other large-scale PHP based system I've seen that has worse architecture/coding standards than Magento is Moodle.
Are you referring to Magento 1 or Magento 2?
Why are all the popular ecommerce frameworks written in PHP? Magento, prestashop, woocommerce etc
Of websites using a discernable server-side programming language, over 80% of them use PHP -- https://w3techs.com/technologies/overview/programming_langua... -- The four biggest content-management systems on the web are all PHP -- https://w3techs.com/technologies/overview/content_management...
Accessibility of language, number of developers, and hosting resources. Quality is a different story.
Ease of setup, I think. Almost every web server in existence can run PHP.
Ease of deployment. LAMP stack was PAAS before PAAS was a thing.
a lot of these systems were built back when PHP was hipper. Despite its drawbacks PHP is the energizer bunny of web tools...
tl;dr: I was compelled to write this because I saw a lot of complaints which seem to come from the end of the Magento 1 era. Many of these complaints are reduced when considering the context, and they are all handled quite nicely in the Magento 2 era.
(Full disclosure: I'm Magento's chief evangelist, but I was an agency developer for a Magento shop from 2008-2014, so I'm not totally a shill. Also, I care that we are listening & getting things right.)
I spend a lot of time interacting with PHP developers around the world. Some have been / are Magento developers, some are not. By wearing Magento gear at conferences and usergroups I would hear quite a lot of opinions about Magento, both negative and positive. Here's the negative.
* No documentation * Can't test it * XML sucks * EAV is the Devil's creation * The view layer is impossible to understand * Inconsistent implementation in core code * Not true open source * It's too complicated * It's too slow * etc.
Fact is, there's always more to the story. Take documentation: yes, it's tragic that there never was official developer documentation for M1, but it was an outcome of Magento's explosive origins leading to the company being totally constrained. (We did eventually produce some fantastic user docs though.) Magento 2 solves this by having several tech writers on staff, as well as a doc site to which the community can contribute via pull request.
In the case of testability, well, Magento 1 was born in 2007. Ideally, yes, it would have been built with test coverage, but that wasn't standard practice for PHP back then. (How many of you were writing tests for your PHP apps in 2007? Not too many aside from Sebastian Bergmann!) Eventually though some great tools came around, and there are many examples of fully covered installations as well as CI/CD implementations. Magento 2 solves this by covering much of the core with unit, integration, and functional tests.
Regarding XML, Magento 1 (and 2) largely favor configuration over convention, and the decision was made to use the most structurally descriptive markup possible. Of course, the implementation of it in M1 was full of Magentoism - building a DOM by combining DB data, merging multiple XPATHs, and filling out a bizarre hierarchy for scope. It's not intuitive without either experience or schema definitions. Magento 2 solves this by splitting up configuration into functionally-scoped files AND by providing XSD. The XSD help when editing files by hand in an IDE, and we are seeing the creation of tools to help developers avoid writing it altogether.
When questions about EAV come up, believe me, I understand. That's a tough storage pattern to get used to, but the ORM helps quite a lot. The implementation in M1 is imperfect though, as you do end up with domain objects which leak their storage pattern. EAV is invaluable for solving the complicated requirements of facilitating arbitrary entity attributes and scoping/translation of those values. We looked at removing it for M2, but could not find a better solution. And if you say "noSQL," sorry, you're wrong.
The view layer is the thing which trips most people up - even developers who grok Magento right away. Theme fallback and layout XML are the complicating factors here. Theme fallback/inheritance is not so hard to get, and it is fantastic at keeping custom themes DRY - especially when multiple sites are running off of one instance. If only one thing could have been documented from the beginning, it should have been layout XML. Layout XML - along with the view model approach which we took with M1, allowed for simplified, DRY controller actions and ultimately allowed frontend developers to build interfaces without having to need backend developers. In M2 we have refined layout XML as well as abstracted the entire rendering framework, allowing developers to adjust or replace framework details as they see fit.
For inconsistent implementation in core code (which is especially evident in adminhtml), this was the outcome of a small team producing a lot of code independently. It's unfortunate, and very confusing for developers new to the platform. I struggled with this when I was starting out. We've worked to eliminate this in M2, but there is work remaining to be done. Thankfully we have Issues and pull requests on GitHub, and at the very least we can evolve our test suite to help us (and others) to implement functionality in The One True Way®.
On the subject of GitHub, we are much more of an open source company than we were in the Magento 1 days. We did allow contributions, but the process for becoming a contributor was cumbersome, and development effort was only revealed through updates to an SVN endpoint with no discussion. That is very different from our approach with Magento 2. Starting with the beta in December of 2014, we allowed pull requests to the M2 codebase, eventually building in our contributor agreement into the CI process. Many of our core engineering team are regularly on GitHub interacting with a bevy of "how do I" requests along with legitimate issues and pull requests. We have improvements to make here which will help us to keep up with the volume of discussion, and you should see these soon.
When I hear that Magento is "too complicated," I have to ask, then why doesn't something similar take its place? Ultimately the problem of complexity rests with the domain of commerce, which is always custom and always complex. Consider just one area of a commerce application - say, price calculation - and look at the complexity: cost, retail price, adjustments at the catalog level, adjustments at the customer level, and then add in the multiple taxation schemes which exist in the world (tax on full price before discount vs after, tax on shipping, etc.). Complexity is everywhere, and if you want to make an app which works for most, there will be overhead. Ideally the app helps the user manage that complexity as best as possible.
When I hear that Magento is too slow, that is always a worthless discussion without details about traffic, order volume, amount of entity data, update frequency, etc. M2 is a much better application for performance than M1, largely because it was developed with a mind to commodity computing and reverse proxy (which were nascent in 2007). That allows us to build core architecture for performance as well as enterprise architecture for scalability. That said, performance for M2 is not a finished story; I imagine that we will continue to improve on it as time goes on.
Okay, if you made it this far, I owe you some coffee or beer or whatever when we happen to meet. I was compelled to write this because I saw a lot of complaints which seem to come from the end of the Magento 1 era. Many of these complaints are reduced when considering the context, and they are all handled quite nicely in the Magento 2 era. I'm always happy to see or hear feedback.
I can be reached at ben@magento.com.
When I hear that Magento is "too complicated," I have to ask, then why doesn't something similar take its place?
That makes an assumption that the complexity involved is necessary. The alternative to Magento isn't a product that does everything Magento can do but with a simpler codebase, but instead is a more specialised product that doesn't include the features of Magento that you don't need.
The complexity of Magento stems from the fact it does everything you could possibly want but ignores the fact that most (like, 99%) stores don't want or need everything. A simple ecommerce site that sells 10 virtual products has to have the same feature set as a fully-featured online store with 1000s of real products, templates that change based on dates, multiple variations of items, weight-based shipping calculation and so on. That's what bugs me about it. I want to be able to make a custom build that only includes the things I actually need.
Also, consider this - the internet is full of articles, blog posts, and Stackoverflow questions that are about "Magento". Authors are rarely explicit about the version number. A lot of the difficulty in learning how to use Magento well is that as a developer I have to look at the date something was posted and approximate whether or not the advice is applicable to what I'm working with. Perhaps this is something you can address as Chief Evangelist - ask authors to take care to say what version their posts are about, and to revisit old articles to update them when Magento changes, or to deprecate posts about versions that are out-of-date.
(Note: This is based on M1. I've tinkered with M2 but haven't yet deployed anything on it yet. Hopefully my concerns have been addressed.)
Being there form the beginning, I have to say we all should be happy with a project like Magento. Back than software like Virtuemart or OScommerce where not as flexible as Magento started.
Like I would say, stop complaining, but start creating a better world and share your ideas, code and knowledge to improve.
Keen to hear about any discussions you had re postgres and document column store instead of eav?
Postgres is interesting and, well, super cool, but it wasn't a tenable option for us. Not sure if it came up, I just know that we couldn't make a business case for it. But man, Postgres has maybe the best vendor option for document store IMO!
Fair point. Would be a very difficult case to make; not only is the upgrade path from v1 to v2 difficult already, but you would also have to change your datastore!....that would be a tough sell. It's a shame really, because the flexibility you would gain from utilizing a document store for product schema, while retaining transactional support for all your vital commerce related data (payments, inventory etc), is exactly what you need. I guess these are the trade-offs we are often faced with as engineers.
You owe me a beer.
Thanks Ben!
Well said.